Webcam Capture
Your camera becomes a workflow input
- image
- IMAGE
Point your webcam at the graph, and it becomes a node. Webcam Capture grabs a frame from your camera and hands it to the workflow as an image - the built-in version of a trick the community's been building custom nodes for since 2023. It's a niche node, but when you need it - img2img with your own face, pose transfers from a live camera, "what would I look like as an anime character" - nothing else in core does the job.
What it is
Three inputs and one IMAGE output. The star is the image input, which is a special WEBCAM widget - not a file picker but a live camera preview rendered right in the node, with a capture mechanism in the browser. width and height set the output resolution; leave both at 0 and you get the camera's native resolution, which is the sane default. capture_on_queue (default true) decides whether a frame is grabbed automatically when you hit Queue, versus requiring you to click the capture button on the widget manually.
Under the hood it's a subclass of Load Image: the capture happens in the browser, the frame is sent to the backend, and the result goes through the exact same loading path as any image file. That's why the output is a plain IMAGE tensor - anything that accepts an image accepts a webcam frame, so it plugs into img2img, ControlNet, IP-Adapter, or whatever else your graph does.
How it works - and its limits
The mechanism is deliberately frontend-heavy. The camera feed, the live preview, and the capture button all live in the browser UI; the backend just receives the resulting frame. That design has two consequences worth knowing:
- It needs browser permission. Your browser has to allow the page camera access - the classic "click allow" popup. This works cleanly on localhost, and generally requires a secure context (HTTPS or localhost) for the camera API to be available at all. Expose ComfyUI on a plain-HTTP remote port and the camera will quietly refuse to initialize.
- It's a UI node, not an API node. Because the capture is a browser interaction, you can't drive it from a headless API call or a batch script the way you would a file-loading node. If your workflow is "queue a hundred frames from a saved file," that's not this node - that's the dataset/from-folder loaders.
The width/height note also deserves emphasis: setting them to nonzero crops/scales the capture to that size, which can be useful for matching a pipeline's expected resolution - but 0/0 is the honest default, and fiddling with it is where people add confusion.
The bigger picture
Live-capture nodes have a small but steady following in the community - custom packs (Noodle Webcam, live-input-stream packs) built the niche, and core's version consolidates it into the standard node set. The realistic use cases are quick and fun rather than production-critical: live img2img style tests, face-based conditioning from a real person, or just demoing "the model saw me and made this." For anything more demanding, like continuous frame processing or multi-camera setups, you'll outgrow it and reach for the custom packs - but as a built-in, it's the fastest path from camera to graph with zero setup beyond a browser click.
Getting it
Ships with ComfyUI core, a newer experimental addition in comfy_extras/nodes_webcam.py - nothing to install, no model files. If the camera won't start, your first check is the browser permission, and your second is whether you're on localhost/HTTPS.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | WEBCAM | — | |
| width | INT | 00–16384 | — |
| height | INT | 00–16384 | — |
| capture_on_queue | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |