PhotoBooth-MKRSHIFT is a JavaScript-first photo booth stack that pairs a Node.js server with a Three.js web UI and ComfyUI workflows. Styles and prompts live in workflow JSON files, and the UI consumes them through a simple JSON API.
PhotoBooth-MKRSHIFT/
├── js_app/ # Node.js API server + ComfyUI client
├── web_ui/ # Three.js photo booth UI (served by js_app)
├── workflows/ # ComfyUI workflow JSON files (style prompts live here)
├── gallery/ # Generated image output (if enabled)
└── README.md # Project documentation
Legacy Python folders remain for historical reference, but the active stack is the JavaScript app in
js_app/.
npm install
cd js_app
npm installcd js_app
npm run start:webThe server starts on http://localhost:8080 and serves the Three.js UI from web_ui/.
Launch the Electron shell, which will auto-install js_app dependencies and check for updates from
git@github.com:criskb/PhotoBooth-MKRSHIFT.git before starting the local server:
npm run start:desktopUse the helper scripts to install Node dependencies on each platform:
./scripts/install-macos.sh.\scripts\install-windows.ps1Generate platform installers with Electron Builder (the icon files are generated automatically):
npm run build:macnpm run build:winArtifacts are written to dist/. On macOS, drag PhotoBooth.app to the Applications folder so it
appears in the Dock. Supply a 1024x1024 assets/icon.png before building to customize the app icon.
Each workflow JSON inside workflows/ contains its own prompt text and settings. To add a new style, drop a workflow JSON file into the folder. The API exposes the style list at:
GET /api/styles
Start ComfyUI with preview updates enabled so the UI can show sampling progress:
python main.py --preview-method taesdIf you want automatic selection:
python main.py --preview-method autoSome ComfyUI samplers expect a TTY. If you run in Docker, allocate a TTY (for example, docker run -it ...) so progress output does not stall.
Long-running image generations can exceed reverse-proxy defaults. Increase proxy timeout values (for example, proxy_read_timeout/proxy_send_timeout in Nginx) if you see 504s while jobs are still running.
The previous Python implementation is deprecated and retained only for reference.