FX Chain
Render every video effect in one pass instead of re-encoding forever
- video
- video
Stack ten video effects and wire them in series and ComfyUI will happily decode, process, and re-encode the video ten times. Each encode is lossy and each pass costs you. FX Chain is the fix: it's the "render all my effects at once" node. You chain the individual FX stages (glow, grain, color, glitch, whatever) along the video wire, then put FX Chain at the end, and it flattens them into a single render pass with your delivery settings applied.
That's the whole point of the node, and it's why the README's quick tour says to chain effects into an FX Chain and render in one pass. ComfyTV is jtydhr88's canvas app - ~190 stages, each its own node - and this is its compositing infrastructure.
How it works
Under the hood, ComfyTV's FX stages don't each decode your video. When you run one, it attaches a small "fx spec" (a description of the effect and its parameters) to the video wire alongside the video itself. The final stage in the chain - FX Chain - collects all those accumulated specs and runs them through a single filter_video/torch_process_video pass. That's why it errors if you wire a bare video into it with no FX upstream: there's nothing to chain.
The other half of the node is delivery. Whatever quality you've built, the chain re-encodes it to a chosen target:
- out_colorspace - bt709 (default), bt601-6-625, bt2020, smpte170m.
- out_size - a delivery short-side resolution:
source(default) or 2160/1440/1080/720/540/480. 1080 means "short side 1080." - out_fps -
sourceor 24/25/30/50/60. - out_codec - h264 (default), hevc, or prores. ProRes if you're handing off to a real editor; h264 if it's going straight to the internet.
- out_quality - draft, standard, or high.
Optional video in, video out. The internal hidden inputs (force_run_token, project_id, parent_output_id) are frontend plumbing - leave them alone.
How to use it
[upstream video] ──► [Glow] ──► [Glitch FX] ──► [Frame Blend] ──► [FX Chain] ──► output
Every FX stage between the source and the chain is accumulated; the chain is what actually renders them. Live previews happen in the individual effect nodes, so you dial each one in before committing to the chain.
Installing it
Same pack, same steps:
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
or ComfyUI Manager ("ComfyTV"), full backend restart, then ComfyTV → VideoFX. The gotcha that bites people: on ComfyUI Desktop, macOS, or multiple installs, clone into the running instance by absolute path, verify custom_nodes/ComfyTV/__init__.py (not a nested ComfyTV/ComfyTV/…), and fully restart. The pack declares no pip deps, but video stages lazily import PyAV - pip install av if a video node errors.
Common issues
- "FX Chain needs an upstream video" - nothing wired into
video. Fix the wire. - "no FX upstream" - you connected a plain video, not a chain of FX stages. At least one FX stage has to sit between the source and the chain.
- Output looks worse than the previews - check
out_sizeandout_quality.draftis for iteration;standard/highis for the final. And if you setout_sizeto something tiny, that's on you. - ProRes files are huge - yes, that's what ProRes is. Use it only for the handoff to an editor.
Inputs (9)
| 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. |
| out_colorspace | COMBO | bt709 | 4 options: bt709, bt601-6-625, bt2020, smpte170m |
| out_size | COMBO | source | delivery short-side resolution |
| out_fps | COMBO | source | 6 options: source, 24, 25, 30, 50, 60 |
| out_codec | COMBO | h264 | 3 options: h264, hevc, prores |
| out_quality | COMBO | standard | 3 options: draft, standard, high |
| videoopt | COMFYTV_VIDEO | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |