Nodes/ComfyUI-DaSiWa-Nodes/MiniMaxH3 • Join Clips
ComfyUI Node

MiniMaxH3 • Join Clips

Join Clips Is the One DaSiWa Node That Loads No Model At All

By darksidewalker·Created 7 months ago·Updated a day ago· 225
MiniMaxH3 • Join Clips
    • filename
    ◄assembly_data{"version":1,"rows":[],"repair_transitions":false,"audio_policy":"preserve"}►
    ◄filename_prefixH3_Joined►

    You just spent forty minutes sampling four takes of a MiniMax H3 clip so you could have a minute of video, and now you need them to be one file. MiniMaxH3 • Join Clips is the node that does it, and the first thing worth knowing is how little it does: no diffusion model, no CLIP, no VAE, no sampler, no upscaler. The queue job it spawns contains exactly one node. It's a very carefully built MP4 concatenator, and that's the whole point.

    H3 generates 4–15 second clips with welded-on stereo audio. Anything longer is either a chain of continuations or a pile of separate takes. Once you're in the DaSiWa continuity world, you either export one growing timeline (expensive - every continuation re-decodes the whole thing) or you export segments and stitch later. This node is the "stitch later" half, which is why it's the last thing you touch and the first thing you'll be glad exists.

    What it actually does

    assembly_data is a JSON string with version: 1, an ordered rows list, repair_transitions (which must stay false) and audio_policy (only "preserve" is accepted). A row is either {"kind":"media","filename":"take.mp4","trim_start":0,"trim_end":null} - resolved relative to ComfyUI's input folder - or {"kind":"checkpoint","session":"...","clip_id":"..."} pointing at a stored H3 continuity checkpoint. You cannot mix the two kinds in one assembly. The JSON is capped at 64 KiB, 100 clips, one hour of total runtime, and absolute paths, URLs and path escapes are refused outright.

    Then it reads headers for a preflight, and re-encodes video to H.264 and audio to stereo AAC at 48 kHz, 24 fps out. Fresh filename every run; existing files are never replaced. There's also a copy_video flag in the JSON (off by default) that packet-copies the video when every clip shares a codec and every cut lands on a keyframe - untrimmed takes from one workflow usually do, custom trims usually don't - and re-encodes only the audio so the seams don't click. If the copy fails mid-join it falls back to re-encoding and tells you why.

    The two widgets you touch

    assembly_data is not something you type. Open Join clips… in the Director's Continuity row, tick your takes, and the dialog writes it for you. Hand-writing it is for API mode.

    filename_prefix is the one field a human sets: 1–80 characters of letters, digits, underscores or hyphens, default H3_Joined. The single output is filename - a STRING for the new MP4 in ComfyUI's output folder. Because this node is an output node, it writes the file itself and sets up its own preview; the filename socket is there if you want to route the path somewhere else.

    Installing it

    ComfyUI Manager, search DaSiWa-Nodes. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/darksidewalker/ComfyUI-DaSiWa-Nodes
    cd ComfyUI-DaSiWa-Nodes
    pip install -r requirements.txt
    

    For this node specifically, the dependency that matters is av>=18 (PyAV, which muxes everything without launching ffmpeg) - plus the usual torch. The nvidia-vfx, llama-cpp-python and transformers entries in that requirements file belong to the RTX and LLM nodes, not to joining clips. That's the recurring annoyance with this pack: it's a kitchen-sink install, and the DaSiWa handle is better known on Civitai for Wan 2.2 workflows than for this, so the pack's weight surprises people. Nothing about Join Clips needs an RTX card.

    Where people get burned

    Mismatched sources get rejected, not fixed. The joiner takes matching canvas, square pixels, 24-fps constant frame rate and 8-bit yuv420p SDR. HDR, variable frame rate, rotated or oddly-cropped material is refused rather than silently converted - normalize those separately. Same clip family from one workflow is normally fine.

    It will not generate a transition. Set repair_transitions to true and it errors on purpose, pointing you at the Transition Guide and Transition Render nodes. Those render bridges with the model; this node only joins.

    Checkpoint rows need their whole family. Delta checkpoints point at their parents, so if you moved or deleted a parent take during cleanup, the row breaks. Keep the chain.

    Temp files matter. Continuity segment previews can live in ComfyUI's temp folder until assembly finishes. Clear temp mid-join and preflight finds a missing file. Also: closing the Director dialog stops monitoring, not a submitted job - cancel through the ComfyUI queue.

    The node re-runs on every queue by design (its change check always reports dirty) because the files it reads are external state. That means an unchanged join will execute again. Harmless, just don't expect caching to skip it.

    CategoryDaSiWa/MiniMax H3/Continuity

    Inputs (2)

    NameTypeDefaultDescription
    assembly_dataSTRING{"version":1,"rows":[],"repair_transitions":false,"audio_policy":"preserve"}Ordered uploaded media or checkpoint chain JSON. No AI repair. Matching 24-fps SDR canvases only; video/audio are re-encoded.
    filename_prefixSTRINGH3_JoinedNew unique MP4 in ComfyUI output; 1–80 letters, numbers, underscores or hyphens. Existing files are never replaced.

    Outputs (1)

    NameTypeDescription
    filenameSTRING—