→ ComfyTV Image
The only way to get a normal IMAGE into a ComfyTV pipeline
- image
- image
Here's the mismatch at the heart of ComfyTV: ComfyUI passes images around as IMAGE tensors, but every ComfyTV stage passes them as COMFYTV_IMAGE - a URL string pointing at a PNG snapshot stored in the project. A tensor is memory; a URL is a file with history attached. The whole "per-node Run, downstream reads snapshots" design depends on the file side, which is why a tensor from IPAdapter, a ControlNet preprocessor, or any plugin simply cannot wire straight into an Image Picker or an edit stage. → ComfyTV Image is the gate that makes the hand-off possible.
The arrow points into ComfyTV. That matters: into-bridges are Stages, with a ▶ Run that writes the PNG and registers the snapshot. This isn't a converter that just executes when the graph queues - you have to Run it, and re-run it when upstream changes, or downstream keeps chewing on the last snapshot.
How it works
On Run, the node takes the upstream IMAGE tensor, saves it as a PNG under output/ComfyTV/bridge/, and emits a COMFYTV_IMAGE URL as the image output. The pack's own docs are blunt about one limitation: it keeps only the first batch item (image[:1]). A multi-frame batch from IPAdapter or a grid render loses everything but index zero - that's what → ComfyTV Images exists for.
Inputs: image (IMAGE, required), plus the internal trio force_run_token / project_id / parent_output_id that you leave at their defaults. Output: image (COMFYTV_IMAGE). That's it.
When you actually need it
- A mesh2motion or 3D plugin's frames need to enter a ComfyTV edit pipeline.
- An IPAdapter-styled still is headed into a ComfyTV Video Stage for image-to-video.
- A ControlNet map needs to feed a ComfyTV Inpaint stage.
- Really: any third-party
IMAGEthat has to live on the ComfyTV canvas.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart the ComfyUI backend, not just the browser tab. ComfyUI Manager finds it by searching "ComfyTV". The README's two recurring gotchas: on Desktop/macOS/multi-install setups the relative cd can drop the clone into the wrong instance - read the startup log for the actual base path and clone into that absolute path, quoted - and the first level of custom_nodes/ComfyTV/ must contain __init__.py (a nested ComfyTV/ComfyTV/… folder needs moving up).
pyproject.toml declares zero Python dependencies, so there's no dependency chase - the pack leans on ComfyUI's own runtime.
Troubleshooting
- Wired but downstream is empty. You didn't Run the bridge. Into-bridges don't snapshot on Queue - hit ▶ Run.
- Only one image showing from a batch. Expected:
→ ComfyTV Imagekeepsimage[:1]. Use→ ComfyTV Imagesfor batches, orCreate Video (fps)→→ ComfyTV Videofor frame sequences. - Upstream changed but output didn't. Snapshots are sticky by design - re-run the bridge.
- Node not showing up. Wrong instance or nested folder, then restart the backend properly.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| force_run_token | INT | 00–2147483647 | Internal — bumped on Run to invalidate ComfyUI's input cache. |
| project_id | STRING | Internal — populated by the projectStore on the frontend. | |
| parent_output_id | INT | 00–2147483647 | Internal — lineage parent set by spawn handlers on the frontend. |
| image | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | COMFYTV_IMAGE | — |