ꘇ Webcam Capture
Get the camera in your laptop into the node graph
- image
ꘇ Webcam Capture turns your webcam into a plain IMAGE output. That's the whole node. It exists because ComfyUI's built-in webcam node was one of the few sane ways to get a live camera in, and Genereti needed its own version to feed its browser-side input selector - with a preview and preprocessing that happens before the frame is sampled.
What it is
Genereti is a realtime creative-coding layer for ComfyUI: browser-side shaders, textures, drawing, capture and audio, wired with top.*, chop.*, dat.* and mod.* nodes. Its capture nodes live in the Genereti / Inputs category - Webcam Capture, Window / Screen Capture, and top.2dstream - and they all feed ꘇ Input Source, a switcher that picks which of the connected live images gets sent downstream. Only the selected source is evaluated.
Why you'd reach for a camera at all: real-time pose and face pipelines are a genuinely popular corner of the ecosystem - a webcam-to-OpenPose node pulled serious attention in 2026, and the face/hand/pose landmark work is where most "move something with your body" setups start. A live IMAGE socket is also handy for the boring cases: grabbing a reference frame without alt-tabbing to a file manager.
How it works
This is a browser-side capture node, not a Python one. The capture widget isn't a file picker - it's a frontend widget that owns a video element, requests getUserMedia with the selected device at an ideal 1920×1080 and 30 fps (audio explicitly off), and uploads the current frame to a temp file each time you queue. Thus the node's fingerprint_inputs returns the capture filename: every queue is a fresh frame, not a cached one.
Two things happen in the browser before the frame is sampled: a GPU resize and a horizontal flip, so the picture you queue matches what you see in the node rather than a mirrored ghost of it. The Python side then loads that temp file, converts to RGB, and hands you a normal IMAGE tensor. If nothing has been started, the node raises Select and start the Webcam source before queueing this workflow.
One design detail that looks odd in the schema and isn't: capture is optional and socketless on purpose. Comfy's preflight validator would otherwise treat an unconnected browser-capture node as a missing wire and block the queue.
The inputs and outputs that matter
There is exactly one input - capture, a string holding the placeholder GENERETI_OFF:Webcam until the frontend fills it in with a real temp filename. You don't type in it; you press the play control at the top of the node and pick a device.
One output: image, a standard IMAGE. Wire it into ꘇ Input Source's webcam socket (that's the intended consumer), or straight into any node that wants an image. Because it's a normal IMAGE, everything downstream behaves exactly like a loaded picture - no special handling, no live-stream tricks. Each queue is one frame, captured at queue time.
Install
Manager → search Genereti, or:
git clone https://github.com/languel/genereti.git custom_nodes/genereti
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Restart ComfyUI, then refresh the browser page. Dependencies stay tiny: requirements.txt is a single line (comfyui-frontend-package>=1.53.6) and the camera node uses whatever your browser provides. No model downloads. Comfy ≥ 0.38.2, Python ≥ 3.11, and a modern browser - the camera demos explicitly need an explicit permission grant and a user action before anything is captured.
Common issues
"Select and start the Webcam source before queueing this workflow." The node's own error, and it means exactly that: the play control wasn't pressed, so capture is still the GENERETI_OFF:Webcam placeholder. Press play, grant permission, then queue.
The permission prompt never appears, or the browser silently refuses. getUserMedia requires a secure context. http://localhost:8188 qualifies; a plain-HTTP reverse proxy or a LAN IP that isn't HTTPS generally doesn't, and you'll get a blocked camera with no obvious explanation. Also check OS-level camera permissions - Windows' privacy settings have their own toggle.
You queue a run that doesn't need the camera and it fails anyway. That's what the optional, socketless input is guarding against, but the guard only covers the unconnected case. If you've wired this node into ꘇ Input Source and selected Doodle or Window / Screen, the capture node is lazy and skipped; if you've wired it directly into a downstream node, it will be evaluated and will demand a started camera.
You left the tab and the picture is stale. Frames are sampled at queue time, and the capture stream depends on the page staying alive. Come back, re-check the preview, and queue again.
The standing caveat for everything in this pack: it's a solo MIT alpha by Liuboto, v0.1.4, and its README opens with "Super alpha - early classroom testing. Back up your workflows before updating."
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| captureopt | STRING | GENERETI_OFF:Webcam | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |