Tiled Render
Grids six videos into one with ffmpeg magic
- STRING
Tiled Render is the payoff node of VK Nodes - the one that takes all the per-character clips your other nodes produced and stitches them into the finished grid video. It's the reason the pack exists. It's also the heaviest thing in here, because it doesn't do diffusion: it builds and runs big ffmpeg commands under the hood, and it will happily burn CPU for a while doing it.
What it does, mechanically
You feed it a render_config (from Tiled Setup Node) plus the folder layout your renders have been writing to. It then:
- Finds each character's video. It globs
ComfyUI/output/<output_path>/video_scaled/<tile_str>/for files named after each character. The optional inputsSophia,Melina,Ada,Taro,Bari,Barneyare per-character indices - default-1, set them to pick which of that character's clips to use when there are several. - Orders them per the tiling strategy from the config (the
[[1,3],[4,6]]grid), so cell 1 gets character 1, and so on. - Builds one giant ffmpeg filter graph. Each clip gets cropped to its cell's aspect ratio, scaled to the cell, and overlaid onto a black canvas at its grid position - so a 2×3 grid of 1920×1080 output is six crops/scales plus five overlay calls, all chained.
- Adds the dressing: overlay PNGs (read from
overlays/overlay*.png, with start/end times parsed out of the filenames), a logo pinned bottom-right (overlays/logo.png), and the mix track (audio/mix.mp3) muxed in. - If
jingleis on (it is by default), runs a second ffmpeg pass that fades the jingle video in and out, overlaysheadline.pngandbandname.pngtext art, crossfades into the tiled render, and writes the final file. Output is-preset slow -crf 18- quality-first, slow by design.
The inputs a beginner actually touches
render_config- wire it from Tiled Setup's output. Don't hand-type it; it's a JSON blob with everything the node needs.output_path- the folder underComfyUI/output/where all the assets live.duration(default 1.0) andstart_time(default 0) - trim the finished piece.start_timealso prefixes the tile string, so per-segment renders don't overwrite.jingle/jingle_duration/transition_duration- the intro bumper. If the node can't find a jingle file at../Jingle/<output_name>, it silently disables the jingle and writes the render bare - that's a feature, not a bug, but it means "where did my intro go?" is usually answered by "the file wasn't there."- The six character index inputs - the only way to say which clip of Sophia you want in cell 1.
Output
A single STRING - the output path. That's it; this is an OUTPUT_NODE that does its thing and reports where it wrote the file.
Install and the real gotchas
Install is shared across the pack: ComfyUI Manager → "VK Nodes", or
cd ComfyUI/custom_nodes
git clone https://github.com/VK/vk-nodes
then restart. Two things matter for this node specifically:
- ffmpeg is mandatory. It shells out to ffmpeg for every frame of assembly. The code tries
imageio-ffmpegfirst, then system ffmpeg, and if neither exists it logs "No valid ffmpeg found" and produces nothing. If yourffmpegcalls fail, that's the first thing to check. - The folder layout is rigid. Videos must be named and nested exactly as the globs expect -
video_scaled/<tile_str>/*<Character>*.mp4. A clip missing from its cell doesn't error; the cell just renders black, and because the node always re-runs (IS_CHANGEDreturns NaN), you'll burn a full render pass to discover it. Check the folder structure before you queue, not after.
Given the pack's single-commit history and no community presence, treat the assembly assumptions as stable-but-unmaintained: if you restructure the output folders to taste, the node won't follow you.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| render_config | STRING | {} | — |
| padding | INT | 10 | — |
| duration | FLOAT | 1.00 | — |
| start_time | FLOAT | 0.00 | — |
| output_path | STRING | — | |
| output_name | STRING | tiled_video.mp4 | — |
| jingle | BOOLEAN | true | — |
| jingle_duration | FLOAT | 3.90 | — |
| transition_duration | FLOAT | 0.50 | — |
| cut_start | FLOAT | 0.00 | — |
| cut_end | FLOAT | 0.00 | — |
| end_duration | FLOAT | 0.00 | — |
| overlays | BOOLEAN | true | — |
| Sophiaopt | INT | -1 | — |
| Melinaopt | INT | -1 | — |
| Adaopt | INT | -1 | — |
| Taroopt | INT | -1 | — |
| Bariopt | INT | -1 | — |
| Barneyopt | INT | -1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |