Video Concat
Glue clips together in the order you drag them
- videos
- video
Once you've trimmed a pile of clips, you need to glue them together - and that's concat, the most literal operation in the video world. Video Concat is the ComfyTV stage that takes several upstream videos and joins them into one, back to back. It's the difference between a folder of takes and a video.
It's a Compose stage in the pack's canvas: wire in two or more clips, hit Run, and the joined clip flows downstream as a snapshot.
The inputs
- videos - an autogrow input accepting up to 12 upstream video slots. Wire your clips in.
- clip_order - a JSON list of which video slot goes where, driven by the reorder strip in the node body. You reorder by dragging in the node UI, and this field just records the result; no need to hand-edit it.
The project_id / parent_output_id / force_run_token inputs are internal frontend plumbing - ignore them.
How it works
The node collects the wired clips, sorts them by the order you dragged, and hands the list to the pack's ffmpeg concat runner. Two things worth knowing. First, it needs at least two clips - the error message says so explicitly, so a single wired video won't pass through. Second, this is a hard join: no transitions, no crossfades. If you want clips to dissolve into each other, that's the Sequence or Video Transition stage's job. Concat is for "then this, then this."
Install
ComfyTV ships ~190 stages in one pack; this node comes with it.
cd ComfyUI/custom_nodes
git clone https://github.com/jtydhr88/ComfyTV
Restart ComfyUI fully and look under ComfyTV → Compose. ComfyUI Manager finds it by searching "ComfyTV". No model downloads, no extra Python deps. On ComfyUI Desktop or macOS, clone into the running instance's absolute path from the startup log rather than trusting the relative cd.
Troubleshooting
- "needs at least two upstream videos" - concat isn't a passthrough; wire two or more clips.
- The order came out wrong. Use the reorder strip on the node (the thing that writes
clip_order); dragging there is the supported way to sequence. - Re-encoding artifacts between clips. Concat of same-format clips can be lossless, but if your inputs differ in resolution or codec, the join has to transcode - normalize upstream with a resize stage if you see quality drops.
It's dumb on purpose: join in order, no fuss. Pair it with Clip for trimming and you've got the two-node backbone of any edit that's too big for a single take.
Inputs (5)
| 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. |
| clip_order | STRING | JSON list of video slot keys in concat order — driven by the reorder strip in the node body. | |
| videos | COMFY_AUTOGROW_V3 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video | COMFYTV_VIDEO | — |