ꘇ Input Source
One image socket, three inputs, only one of them runs
- doodle
- webcam
- screen
- image
A switch with a trick up its sleeve
ꘇ Input Source is a three-way picker: a source combo with Doodle, Webcam and Window / Screen, an optional IMAGE input for each, and a single image output. Choose one, get that image.
Fine. Boring, even. Except for the part that makes it worth its own node: only the selected input is evaluated. The other two branches don't run.
That sounds like a micro-optimisation until you think about what those branches are. A webcam node that opens a capture device, a screen-share node that prompts for a window, a doodle source that needs a canvas - evaluating all three so you can throw two away is not just wasteful, it's actively hostile. You'd get a permission prompt for a camera you aren't using.
The mechanism is Comfy's lazy input support. The three image inputs are declared lazy, and the node implements check_lazy_status: it looks at the current selection and, if that input is still unresolved, asks the engine to evaluate exactly one thing. Everything else stays dark. This is the same engine feature that makes expensive optional branches sane elsewhere in ComfyUI, and it's the correct way to build a source selector.
Inputs and outputs
source- the combo, defaultDoodle. Author's tooltip: "Choose which connected image to send to Genereti."doodle- optional IMAGE. Tooltip: "Connect Painter here."webcam- optional IMAGE. Tooltip: "Connect Webcam Capture here."screen- optional IMAGE. Tooltip: "Connect Genereti Window / Screen Capture here."image-IMAGEout, the selected branch, plus a preview in the node.
The three names are conventions, not enforcement - the node doesn't check what's upstream. But Genereti ships its own capture nodes that fill two of those slots: ꘇ Webcam Capture (start the camera from its play control; an optional GPU resize and horizontal flip apply before sampling) and ꘇ Window / Screen Capture (share a window, tab or display). Both upload only the latest sampled frame at queue time, and the screen one explicitly uploads only when Window / Screen is the selected input - so an idle share node doesn't cost you an upload on a doodle run.
For the doodle slot the description points at ComfyUI Painter; the pack's own ꘇ drawing node's image output works just as well if you'd rather keep it in-family.
The error you'll actually see
If the selection points at a slot with nothing connected, the node raises:
Connect an IMAGE to the 'Webcam' input on Genereti Input Source.
Read it carefully - it names the input, not the source label. So when your source is Window / Screen and the message starts complaining about 'screen', you know the mapping did its job and the wire is genuinely missing. Since the inputs are optional, an unconnected one is silently accepted at graph-build time; you find out at execution.
Install
Genereti only. Manager → search Genereti (publisher liuboto) → install → restart → refresh the browser tab; the capture widgets are frontend JavaScript and won't appear in a stale page.
cd ComfyUI/custom_nodes
git clone https://github.com/languel/genereti.git genereti
cd ..
./.venv/bin/python -m pip install -r custom_nodes/genereti/requirements.txt
Use the Python that belongs to your ComfyUI - .venv on a checkout, python_embeded\python.exe on Windows Portable, the bundled env on Desktop. requirements.txt is a single line: comfyui-frontend-package>=1.53.6. No models, no inference server, no camera driver to install. The lazy-input API and the frontend features it relies on are why the floor is ComfyUI 0.38.2+ with a fairly recent frontend.
Gotchas
- Selection ordering matters for a subtle reason. Connect a webcam node but leave
sourceon Doodle and the camera stays off - that's the design working, not the node failing. - Capture is user-started, always. Nothing in this pack opens a camera or a screen share on page load. There are no auto-permissions, which is the behaviour you want and also the reason "nothing happens" when you expect the source to be live already.
- Frame freshness. Queue uses the latest sampled frame, so what you see after a queue and what the node sends should match - but only for the selected branch.
- Alpha pack. "Super alpha - early classroom testing. Back up your workflows before updating." That's the author's own README warning, and this node's docs note that Windows/Linux classrooms are less tested than macOS.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| source | COMBO | Doodle | Choose which connected image to send to Genereti. |
| doodleopt | IMAGE | Connect Painter here. | |
| webcamopt | IMAGE | Connect Webcam Capture here. | |
| screenopt | IMAGE | Connect Genereti Window / Screen Capture here. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |