I wanted the freedom to decide what happens before and after someone takes a photo. Laqtah began with that fairly simple expectation.

Why I started Laqtah

The photo-booth software I had explored did not give me the workflow flexibility I wanted. Its AI choices also felt restrictive. I wanted room to explore different models and providers, and some of the results I had seen changed a person's appearance too much. Those were my own experiences with the tools I tried, and they shaped the product I wanted to build.

I wanted to shape the sequence around the experience: an introduction, a language choice, consent, a countdown, a review decision. I also wanted guided configuration, so preparing those choices would not require rebuilding the application each time. AI was part of the original ambition, alongside a practical question: how would someone actually prepare and operate this?

Laqtah now has a Windows-first desktop foundation: an operator workspace, a guest kiosk, saved experience configurations, editable workflows, bilingual interfaces and local webcam capture. Generative AI remains under development. The configuration system exists, but no approved generative image provider is connected in the current build.

Giving each decision a place

I separated the product into Events, Experiences and Workflows, with a Guest Session recording each person's progress. An event holds the wider context; an experience describes a particular journey within it. This lets me change a sequence without losing its event context, or prepare another experience without treating it as an entirely separate product.

  1. Event

    The occasion, venue and organizing context.

  2. Experience

    A guest journey prepared for that event.

  3. Workflow

    The ordered steps and their configuration.

  4. Guest Session

    One participant's progress and outcome.

Events and Experiences have their own screens. Templates provide a starting structure, while each experience keeps its own configuration and readiness state. The examples shown here use fictional events, venues and schedules; they illustrate the product's organization.

Laqtah Experiences screen with three fictional draft guest journeys
Each fictional demo experience has its own template, configuration and readiness state.

Making flexibility manageable

Guided Setup begins with the actions I want a guest to take. It turns those choices into a starting workflow, which I can refine in Advanced Mode. A simple Capture & Review journey gives the operator a useful local starting point. AI and printing choices also appear in the builder, but their presence does not make those integrations operational.

Laqtah Guided Setup with guest-action choices and a visible readiness warning
Guided Setup creates a starting workflow from guest actions. AI, QR and print choices depend on available integrations; valid-step counts are separate from the visible runtime-readiness warning.

Advanced Mode exposes step order, enablement and configuration. A countdown can have its own timing; a capture or review step has different requirements. Moving or disabling a step can affect what follows it, so validation has to understand prerequisites as well as individual settings. I wanted flexibility to come with feedback the operator could act on.

The builder's “7 / 7 Ready” means seven workflow steps are valid. Overall runtime readiness is a separate check. A generic camera-readiness warning remains visible in these builder screens, even though fresh preflight can pass for the synthetic-camera demonstration. That distinction matters: a well-formed sequence still needs its resources to be available when it runs.

Laqtah Advanced Mode showing workflow steps and countdown settings
The seven-step demo runs through welcome, language, consent, countdown, capture, review and completion. “7 / 7 Ready” counts valid steps; the separate runtime warning remains visible.

Preparing the operator to go live

The operator journey I am building is straightforward: prepare an event, choose a starting experience, adjust its workflow, configure the resources it needs, review readiness and launch. Workflow, Design, Camera, AI, Audio, Output, Sharing, Print and Languages sit together in the Experience Builder so the preparation stays attached to the journey.

Go Live requires operator access and a PIN, and checks readiness again. Preview serves an earlier purpose: reviewing step order, guest copy and readiness information. It does not execute capture, generation, audio playback, sharing or printing, and it does not reproduce every design choice.

Design presets and media assignments are saved, but applying them throughout the live kiosk is still unfinished. The current guest screens use fixed branding. Keeping that boundary clear helps me prioritize the connection between saved choices and the actual guest experience.

From a configured workflow to a guest session

Once the operator launches, the guest sees the current step. The demonstrated journey begins with a welcome, offers Arabic or English, asks for consent, counts down, captures an image, offers review and reaches completion. This is where the builder's sequence becomes a set of decisions someone can follow.

Laqtah live guest welcome screen for the fictional Studio Open House event
The running guest kiosk opens with a welcome for the fictional Studio Open House event, using the current fixed Laqtah branding.

The local capture path requests the exact configured webcam and currently supports one photo per capture step. At review, accepting continues the journey; retaking starts a new session from the beginning. The image below is a clearly labeled synthetic camera card. It passed through the application's real capture, local storage and review flow before the demonstration reached completion.

Laqtah review screen displaying a synthetic camera card labeled No guest photograph
A synthetic frame reaches review through the real local session flow. It is not a guest photograph, an AI portrait or physical-camera evidence. Accept continues; Retake starts a new session.

Arabic and English belong in the product

I wanted bilingual operation to be part of how Laqtah is prepared and used. Guest messages are editable in Arabic and English, with default and fallback language settings. Guest language is configured separately from the operator interface, so the person preparing the event and the person taking part do not have to use the same language.

Laqtah guest-copy editor with Arabic and English welcome text fields
Guest copy is editable in English and Arabic, with separate default and fallback language settings. The builder's runtime-readiness warning remains visible.

Language switching also changes reading direction. The operator workspace and guest interface handle RTL and LTR layouts. For me, this is an interaction decision: navigation, instructions and choices need to make sense in the language the person is using. The Arabic Overview shows that decision in the running interface.

Laqtah Arabic operator Overview with right-to-left navigation and readiness states
The operator Overview in Arabic with RTL layout. Its zero counts come from a separate fresh demo workspace; readiness uses a synthetic camera and development license, not event-operation evidence.

The AI direction I am building toward

I want control over the transformation, its position in the workflow and the model behind it. Exploring image models from providers such as Google and OpenAI is part of that direction. Today, AI Studio stores profiles, provider and model choices, prompts, references, and transformation, identity and output settings. These are preparation tools for future integration.

The current application reports that no approved AI provider adapter is configured. There is no completed Laqtah generative portrait flow to demonstrate yet. A local Sharp provider supports basic enhancement through orientation handling, normalization and JPEG output. That limited operation does not generate portraits, and ordinary capture does not automatically imply that processing ran.

Laqtah AI Studio with a disabled fictional draft profile and pending provider integration
AI Studio stores the direction for future transformations. This fictional draft profile is disabled, and no generative provider is connected; the screen demonstrates configuration only.

The person should still recognize themselves

My concern about altered appearance became a product requirement. Laqtah has identity configuration modes called preserve, guided and transform, alongside reference and quality settings. They give me a way to express the intended treatment of identity. Their names do not establish that a model will follow those instructions.

Reliable identity preservation will need a connected provider and evaluation of real outputs: which changes are acceptable, how an unsuitable result is recognized, and what happens next. There is also local segmentation groundwork using bundled MediaPipe assets, but the live guest renderer does not call the segmentation hook yet. Live background segmentation remains unfinished.

Building the system underneath

I chose Electron, React and TypeScript for a desktop application centered on local operation. React presents the operator and guest views. A narrow preload interface passes validated requests to Electron's main process, which owns persistence, privileged actions and provider execution. The renderer runs in a sandbox without Node.js access. The interface asks for specific actions rather than general access to the computer.

A capture must belong to the correct guest session and workflow step. The main process issues the identifiers that bind that submission, and checks them before accepting the image. Workflow progress is persisted, so recovery can return to the saved step even if the operator later edits the experience. That relationship between configuration and execution became one of the central engineering challenges.

Local persistence uses SQL.js, transactional changes and atomic database-file replacement. Migration handling includes integrity checks and backups before changing a legacy file. Durable cleanup records distinguish interrupted capture work from committed media. These safeguards support recovery, while proving backup restoration on a target machine remains a separate operational task.

What building it has taught me

I started by wanting more creative control. Building the product has made me spend just as much attention on the operator's next decision, the guest's current state and the meaning of a saved image. A configurable system needs clear limits and understandable feedback. Otherwise, every new choice becomes another thing someone has to diagnose on their own.

I want the flexibility in the builder to remain understandable when someone is standing in front of the camera.

I have also learned to separate a configuration surface from a working integration. Camera, processing, printing and sharing interfaces give future implementations a defined place. Physical devices, venue networks and AI outputs still need their own qualification. Keeping those responsibilities visible is part of moving from a demonstration toward a product people can operate.

What I want to connect next

My next priorities are generative provider integration, identity evaluation and clearer guided configuration as more choices become operational. Real camera qualification and printer integration also remain ahead: the current application has no selected production DSLR driver, and its printer adapter is explicitly unavailable. A completed physical capture-to-print experience is still future work.

Local-network sharing already has a service with expiring links and QR output, but guest-phone handoff still needs validation across the venue network and firewall. Cloud, email, SMS and WhatsApp delivery are future integrations. Signed release and clean-machine qualification also remain ahead of customer release.

For me, Laqtah is part of taking Pixel Pro Lab further into product development: an event model, a builder, a guest journey and local state that the application can account for. I want to connect the creative capabilities with the same care. The person setting up the booth should be able to shape the experience, and the person in front of the camera should feel that the result is still theirs.