CivArchive
    MiniMax-H3 Multishot — chained shots, one master, with audio - v1.1

    Support

    Everything here is free and stays free — the format spec, the nodes, the workflows, the cartridges, the LoRAs. If it saved you a night of debugging (it contains several hundred of mine), tips keep the 5090 warm:

    Chain MiniMax-H3 shots into one continuous video with audio — in one node. Write one prompt per shot, put --- between them, pick a shot count, queue. Each shot generates forward from the last frame of the previous one; the duplicated seam frame and its 1/24s of audio are trimmed automatically, so the master comes out clean with continuous sound.

    The demo video on this page was made by the workflow it demonstrates: 30 seconds, three chained shots from one script, same presenter and same voice across both seams, rendered on the 25.9 GB Q5_1 GGUF on a single consumer GPU.

    A word on expectations. MiniMax-H3 is a 33B joint audio+video model and this pack shipped days after the weights did. It works — the demo is proof — but day-0 territory means your first clean render may take tuning to YOUR machine. If you get stuck, comment here or open a GitHub issue — I answer.

    Quick fixes — read this first

    • Red / missing nodes when the workflow loads
      Why: The pack isn't installed, or ComfyUI wasn't restarted after installing.
      Fix: Install ComfyUI-H3-Multishot (Manager > Install via Git URL works), restart, then hard-refresh the browser tab — the frontend caches node definitions.

    • GGUF model errors with “unknown model architecture”
      Why: ComfyUI-GGUF doesn't know MiniMax-H3 out of the box.
      Fix: Run python apply_gguf_arch_patch.py from the pack folder (one line, idempotent), restart. Needs ComfyUI-GGUF installed.

    • The queue stops with a JSON error about the script
      Why: Your script starts with { but isn't valid JSON — usually a doubled brace or a missing comma. The node stops on purpose instead of rendering the raw text for ten minutes.
      Fix: Fix the JSON, or skip JSON entirely: plain prompts separated by --- lines.

    • Length change errors out
      Why: H3 hard constraint — frame counts live on a 17k+5 grid.
      Fix: Use 226, 243, 260… frames_per_shot steps by 17 so the widget keeps you legal. 243 is ~10s; 362 (~15s) is the trained max per shot.

    • Speech turns to gibberish late in a long shot
      Why: Past ~15s per shot you are outside the trained range; picture generalizes further than speech does.
      Fix: Keep scripted dialogue inside each shot's first ~15s, or use more, shorter shots — that is what the chaining is for.

    • An object morphs into something else at a seam
      Why: The chain hands each shot the previous final frame. If shot 1 ends showing the cameraman holding his camcorder and shot 2 is filmed FROM that camcorder, the model must explain a device in a hand that shouldn't be in frame — and it will invent something.
      Fix: End every shot on what the NEXT shot expects to see. Match the bridge frame to the next shot's framing and the seams disappear.

    • Out of VRAM, or renders crawl
      Why: 33B of weights.
      Fix: Use the GGUFs — Q5_1 for 24-32 GB cards, Q4_0 for 16 GB. The file does not need to fit in VRAM; ComfyUI streams the overflow. Expect ~10 min per 10s shot on a 5090-class card.

    What you get

    SCRIPT (one prompt per shot, --- between)
       -> SHOT 1 -> [last frame] -> SHOT 2 -> [last frame] -> SHOT 3 ...
       -> seam-trimmed MASTER (video + continuous audio)
    • H3 Multishot Sampler — the whole pipeline in one node. shot_count is real: 0 = one shot per prompt, N = exactly N shots render, nothing wasted.

    • H3 Model Loader — one dropdown for .safetensors and .gguf, routed automatically.

    • H3_Multishot_AIO.json — easy mode: loaders > script > sampler > save. Eight nodes.

    • H3_Multishot_3chain_expert.json — the same pipeline exploded into three visible chains for per-stage tinkering.

    What you need

    Two settings worth knowing

    • shot_count is the real thing here: extra script prompts drop (loudly, in the console), missing ones continue the last prompt as a hold.

    • frames_per_shot rides H3's 17k+5 grid. 243 ≈ 10s. 362 ≈ 15s is the trained ceiling — beyond renders, but speech frays first.

    Everything else I've published

    Description

    v1.1

    Image-to-video, a long-form memory sampler, and a VRAM fix that cuts render time roughly 4x on 32 GB cards.

    Image-to-video

    The sampler now takes an optional start_image. The AIO workflow ships with LoadImage → H3 Optional Image → start_image, so one graph does both: flip the toggle on to begin from your frame, off for pure text-to-video. Shot 1 keeps its first frame, so the image you supply is the image you get.

    Why a custom toggle? A normal switch node cannot express “no image” — both of its branches are required — so turning I2V off that way ends up feeding a black placeholder frame. That is not text-to-video, it is video that starts from black. H3 Optional Image emits nothing when disabled.

    ~4x faster on 32 GB cards

    The text encoder is now evicted before sampling. The Qwen3-VL encoder (~16.5 GB even at Q4) and the H3 DiT (~25 GB) do not co-fit on a 32 GB card, so the DiT was loading partially and streaming ~19 GB from system RAM on every step. If you ever saw this in your log, that was it:

    loaded partially; 6423 MB usable, 5847 MB loaded, 19363 MB offloaded

    Conditioning is already computed before sampling starts, so the encoder is safe to evict there. Measured on an RTX 5090: ~60 min → ~15 min for the same render. The node prints [H3Multishot] TE evicted; NN.N GB free for the DiT each shot so you can confirm it.

    New: long-form memory sampler

    For 2–5 minute videos (12–30 shots), where plain chaining drifts. Stock chaining shows each shot one image — the previous shot’s last frame — so every hop can only see one hop back and identity error compounds.

    H3 Multishot Sampler + Memory splits the two jobs stock chaining conflates:

    • Keyframe — what the video physically continues from. Still the most recent frame, so seams stay smooth.

    • Memory — what the encoder actually looks at: a persistent anchor from the start of the piece plus the last N shot-end frames. The anchor never changes, so drift cannot compound.

    Knobs: anchor_frames (1 = on, the long-chain fix) and memory_frames (recent frames the encoder also sees; 0 = stock behaviour). H3’s encoder takes multiple images natively, so this uses the model’s own mechanism, just deeper.

    Script parser self-repairs

    Long JSON scripts that lose their closing brace or bracket, end on a trailing comma, or leave a string unterminated are now auto-closed with a console warning instead of failing the render. A 4,500-character script missing one } is not a typo the author can see. Genuinely malformed scripts still fail loudly.

    Tip from testing

    Render at H3’s native resolution and upscale afterwards. Rendering natively at 1920x1088 scored worse than 960x544 in blind review — softer detail, and a reviewer called it “looks upscaled” — while costing about 4x the time.

    Models

    Support

    Everything here is free and stays free. If it saved you a night of debugging (it contains several hundred of mine), tips keep the 5090 warm: Ko-fi · GitHub Sponsors · Liberapay.nsors · Liberapay.

    FAQ

    Workflows
    MiniMax H3

    Details

    Downloads
    13
    Platform
    CivitAI
    Platform Status
    Available
    Created
    8/4/2026
    Updated
    8/4/2026
    Deleted
    -

    Files

    minimaxH3MultishotChained_v11.zip

    Mirrors

    minimaxH3MultishotChained_v11.zip

    Mirrors