Nodes/Jovimetrix/πŸ“· WebCam (jov)
ComfyUI Node

πŸ“· WebCam (jov)

Your webcam as a live ComfyUI input (and why it's not here anymore)

By AmoranoΒ·Created 3 years agoΒ·Updated 12 months agoΒ· 397
πŸ“· WebCam (jov)
    • image
    • mask
    β—„cam_idx0β–Ί
    β—„fps60β–Ί
    β—„holdfalseβ–Ί
    β—„width256β–Ί
    β—„height256β–Ί
    β—„modeNONEβ–Ί
    β—„invert0.00β–Ί
    β—„orientNORMALβ–Ί

    WebCam (jov) grabbed a frame from your webcam and handed it to ComfyUI as an image - the input half of a live, VJ-style workflow where your face or desk becomes the source for img2img, masking or compositing. It's the node people reached for when they wanted to pipe themselves into a diffusion pipeline in real time. And if you're on a recent Jovimetrix install, it's already gone - more on that below, because it matters before you go hunting for it.

    How it worked

    Under the hood it was an OpenCV video capture pointed at a camera device index. You picked cam_idx (the device number, 0–6) and an fps (1–60), and every execution it pulled a frame and pushed it out as an IMAGE plus a MASK (the frame's alpha, so you could use it as a matte). It was marked as an output node, so it displayed the live feed on the canvas, and you could chain it straight into a KSampler for a crude live-generation loop.

    The useful controls: width and height (output resolution, default 256Β² - low on purpose, since live diffusion is slow), mode (NONE/FIT/CROP/ASPECT to fit the camera frame into that canvas), invert (flip the intensity), orient (NORMAL/FLIPX/FLIPY/FLIPXY - mirroring matters for cameras, since you usually want a selfie view), and hold, which froze the last captured frame so your workflow could keep running without grabbing a new one.

    The big caveat: it moved

    In April 2025, Jovimetrix 2.0.0 split out all its streaming and capture nodes into separate packages. Webcam capture now lives in Jovi_Capture (Amorano/Jovi_Capture) as part of the STREAM READER family - and the README is blunt about it: DO NOT UPDATE Jovimetrix past version 1.7.48 if you don't want to lose a bunch of nodes. If you update, WebCam (jov) disappears from Jovimetrix and you'll need to install Jovi_Capture (or pin Jovimetrix to an old version) to get live camera input back. The connections themselves won't migrate, either - you'll rewire by hand.

    So: fresh install today? Skip Jovimetrix for this and grab Jovi_Capture. Stuck on an old workflow with this node in it? Install Jovi_Capture and swap the node.

    Install (for the record)

    If you're on an old Jovimetrix that still has it: git clone https://github.com/Amorano/Jovimetrix.git into ComfyUI/custom_nodes, then pip install -r requirements.txt (Windows portable: .\python_embed\python.exe -s -m pip install -r requirements.txt), or search "Jovimetrix" in ComfyUI Manager. Needs opencv-contrib-python, which the pack installs for you.

    Troubleshooting

    The classic failure is a black frame. The author has confirmed an intermittent capture bug on certain Macs (thread in r/comfyui, where the author himself replied to diagnose), and on Windows the usual causes are picking the wrong cam_idx (try 0, then 1 - laptop webcams often aren't 0) or another app holding the camera open; browsers, Zoom and OBS all lock it. If the feed is black everywhere, close everything else that touches the camera and restart ComfyUI. Some Windows users ultimately worked around persistent problems by capturing with plain OpenCV outside the node and feeding frames in manually. The good news is that on any modern setup, Jovi_Capture's STREAM READER is the actively maintained path and is where fixes land now.

    CategoryJOVIMETRIX πŸ”ΊπŸŸ©πŸ”΅

    Inputs (8)

    NameTypeDefaultDescription
    cam_idxINT00–6β€”
    fpsINT601–60β€”
    holdoptBOOLEANfalseβ€”
    widthoptINT25632–8192β€”
    heightoptINT25632–8192β€”
    modeoptCOMBONONE4 options: NONE, FIT, CROP, ASPECT
    invertoptFLOAT0.000–1β€”
    orientoptCOMBONORMAL4 options: NORMAL, FLIPX, FLIPY, FLIPXY

    Outputs (2)

    NameTypeDescription
    imageIMAGEβ€”
    maskMASKβ€”