Nodes/VK Nodes/Tiled Render
ComfyUI Node

Tiled Render

Grids six videos into one with ffmpeg magic

By VK·Created about a year ago·Updated about a year ago· 0
Tiled Render
    • STRING
    render_config{}
    padding10
    duration1.00
    start_time0.00
    output_path
    output_nametiled_video.mp4
    jingletrue
    jingle_duration3.90
    transition_duration0.50
    cut_start0.00
    cut_end0.00
    end_duration0.00
    overlaystrue
    Sophia-1
    Melina-1
    Ada-1
    Taro-1
    Bari-1
    Barney-1

    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:

    1. Finds each character's video. It globs ComfyUI/output/<output_path>/video_scaled/<tile_str>/ for files named after each character. The optional inputs Sophia, Melina, Ada, Taro, Bari, Barney are per-character indices - default -1, set them to pick which of that character's clips to use when there are several.
    2. Orders them per the tiling strategy from the config (the [[1,3],[4,6]] grid), so cell 1 gets character 1, and so on.
    3. 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.
    4. 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.
    5. If jingle is on (it is by default), runs a second ffmpeg pass that fades the jingle video in and out, overlays headline.png and bandname.png text 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 under ComfyUI/output/ where all the assets live.
    • duration (default 1.0) and start_time (default 0) - trim the finished piece. start_time also 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-ffmpeg first, then system ffmpeg, and if neither exists it logs "No valid ffmpeg found" and produces nothing. If your ffmpeg calls 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_CHANGED returns 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.

    Categoryvk-nodes

    Inputs (19)

    NameTypeDefaultDescription
    render_configSTRING{}
    paddingINT10
    durationFLOAT1.00
    start_timeFLOAT0.00
    output_pathSTRING
    output_nameSTRINGtiled_video.mp4
    jingleBOOLEANtrue
    jingle_durationFLOAT3.90
    transition_durationFLOAT0.50
    cut_startFLOAT0.00
    cut_endFLOAT0.00
    end_durationFLOAT0.00
    overlaysBOOLEANtrue
    SophiaoptINT-1
    MelinaoptINT-1
    AdaoptINT-1
    TarooptINT-1
    BarioptINT-1
    BarneyoptINT-1

    Outputs (1)

    NameTypeDescription
    STRINGSTRING