CivArchive
    MiniMax-H3 - Reference to Video Workflow - v1.0

    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:

    Identity from reference images, video and audio instead of a start frame.

    Point it at photographs of a person, a place, a voice — up to 9 images, 3 videos, 3 soundtracks and 3 standalone audio clips — and the render carries them.

    Three things you need besides this download. Both of the support questions this pack generated on day one were setup, not bugs, so they are first:

    • The node packComfyUI-H3-Multishot. Install via Git URL, restart, then hard-refresh the browser tab; the frontend caches node definitions and you will otherwise see red nodes. Then run python apply_gguf_arch_patch.py from its folder and restart again. Without that patch, loading any H3 GGUF fails with ValueError: Unexpected architecture type in GGUF file: 'minimax_h3' — ComfyUI-GGUF keeps a hardcoded list of architectures and this one is not on it.

    • A ref2va DiTcurve form (smaller, needs ComfyUI 0.30.0+) or original form. fl2va files will not work in this mode.

    • The text encoder and VAEsQwen3-VL encoder, and take the mmproj sidecar with it. Load it with the pack's H3ClipLoaderAny at type = minimax, not with "CLIPLoader (GGUF)" — that node has no minimax type, falls back silently, and dies deep inside a tokenizer with an unrelated-looking JSON error.

    Naming your references in the prompt

    This is the part that is not guessable. Reference blocks are labelled in the prompt text, and the labels are 1-based while the input slots are 0-based — so ref_image_0 is <Picture 1>.

    <Picture 1> is the woman. <Picture 2> is the room she is standing in.
    She walks to the window in the style of <Video 1>.

    Ordering is fixed by the node regardless of how you wire it: all images, then videos, then standalone audios. Empty slots are skipped and the numbering compacts.

    The ordinal trap. A reference video with a soundtrack consumes an <Audio> ordinal before your standalone clips. One ref video with sound plus one ref_audio_0 makes your voice clip <Audio 2>, not <Audio 1>. Get it wrong and the wrong voice binds, with no error.

    References and keyframes cannot be combined

    Not a design choice here — a hard limit in ComfyUI's core. model_base.py writes cond_video_latents for keyframes, then assigns it again for references, so the keyframe latents are discarded while the keyframe layout rows survive. The packed sequence desyncs and the sampler dies on a shape mismatch. There is no "reference images plus start frame" mode, and asking for both crashes rather than degrading. Use the keyframes graph when you need a specific opening or closing frame.

    Settings, measured rather than guessed

    • Leave the eviction node ON. It frees the ~16.5 GB text encoder before the DiT loads. Images only: 3.4 min with it against 4.5 without, and the output is bit-identical — every pairing scored 0.00 mean pixel distance. With a reference video it is the difference between 6.5 min and a 46-minute run that was killed.

    • Use ref_image_size = match, not max. Same subject, same seed: max cost 24% more time and rendered a facial scar as a vague smudge on the wrong eyebrow, with less fine detail. It does not buy fidelity.

    • Prefer more references over bigger ones. Adding a third reference image cost nothing measurable — 2.82 min against 2.87.

    • Reference audio must be STEREO. The audio VAE encodes [B, 2, L] and a mono clip produces half the rows it reserved, then dies deep in the model with no useful error. The stereo-guard node handles it; keep it wired. Audio costs about 14% wall clock and trims motion ~14–27%, which is the conditioning constraining the performance rather than stalling it.

    • Reference video rules: minimum 5 frames, silently truncated to the generation length then trimmed to n % 17 == 5, and shown to the encoder at 2 fps.

    If a render crawls

    Check power draw, not utilisation. A card thrashing weights between system RAM and VRAM still reports ~98% utilisation while pulling a fraction of its rated watts. The tell in your log is:

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

    Sample the wattage for 20–30 seconds before concluding anything. The encoder/conditioning phase at the start of every render is legitimately quiet — around 100 W at ~35% utilisation — and one unlucky reading there looks exactly like thrashing. If it climbs past 400 W once sampling starts, nothing is wrong.

    What is in the download

    • H3_HardMode_R2V.json — the reference-to-video graph, every node labelled

    • workflows/ — the multishot AIO, long-form memory and keyframes graphs. These are also in the MiniMax-H3 Multishot pack you may already have; the copies here are relabelled so nothing shows a raw class name.

    • reference_images/ — three views of one synthetic subject, so the graph works the moment you load it rather than pointing at ComfyUI's example.png

    • HARD_MODE_GUIDE.html — the full guide, including the parts above

    The reference images are synthetic, generated for this release, and free to use. Weights are under MiniMax's own licence; the workflows and node pack are MIT.

    Description

    FAQ

    Comments (9)

    Psi_CloneAug 6, 2026· 2 reactions
    CivitAI

    Unfortunately, the new hard mode doesn't chain prompts similar to how your other text-to-video workflow does. I was hoping it would chain prompts and also follow the reference properly in the new chains, but nonetheless, it's really amazing to extend the input image capability.

    joeygambino
    Author
    Aug 6, 2026· 1 reaction

    It does now! v1.1 uploaded

    Psi_CloneAug 7, 2026

    @joeygambino Testing it now asap!
    Edit 1 - quick question - why does this use the frames model rather than the reference model for each new shot? Wouldn't that lose consistency, rather than taking reference just from memory and anchors?

    joeygambino
    Author
    Aug 7, 2026· 1 reaction

    @Psi_Clone Only because I saved the workflow that way while testing it, not because you should use that model. I kind of rushed through this workflow and also noticed I might have left one of the group sections way off to the side when I saved it too. :|

    isaacg72211480Aug 9, 2026· 2 reactions
    CivitAI

    Thank you for your efforts, I discovered the 'evict text encoder' hack through your workflow which is working great. Would you recommend using other boosters and post processing with this workflow? I'm thinking of First Block Cache, Spectrum Apply, Patch Sage Attention KJ, Patch Sol-Att, RTX Upscaler and LTX Refine? A lot of other workflows have at least some of these natively built in, and wondering if you left them out to preserve render quality?

    joeygambino
    Author
    Aug 9, 2026· 2 reactions

    I am actually working on another major update that will include these things. Two-pass upscale, Sol attention, chunk forwarding, spectrum, block cache, dual clock sampler, hybrid conditioning - all in a single node so you can select which to use.

    joeygambino
    Author
    Aug 11, 2026

    @isaacg72211480 New workflow up with lots of new features, including a master control with all the optimizations.

    isaacg72211480Aug 13, 2026

    @joeygambino Thanks! I've been playing with the multishot memory sampler, trying out the different continuity options. I thought that context_pin and latent_handoff would be a bit better after reading about out what they do, but I think I'm finding the sampler operates best on first_frame? Have you had a chance to dial in the best settings yet to retain character identity? I'm wondering if it is just better to do the slog of making multiple short ref2vid shots, manually feeding the last few seconds of the last shot into the video reference input each time and then stitching them together yourself, and that way you can always use character/set reference sheets for every shot? For a continuous shot with no cuts, this might not do seams as well though... haven't tried it yet.

    It's very cool that people are working on improving the process of longshot video, given how much everyone has figured out in just a week I think this stuff will all get ironed out.

    joeygambino
    Author
    Aug 13, 2026

    @isaacg72211480  Yeah, that's kind of a trap, not a mistake on your end. Two things are going on.

    start_image on the memory sampler is not a first frame. Its tooltip says so - "Optional identity reference image. NOT a first frame - this node has no keyframe" - but that's easy to miss, and the sibling node H3MultishotSampler has an input with the same name that genuinely is an I2V first frame. So the expectation is completely reasonable. On the memory sampler your image is encoded into a reference row alongside <Picture 1>-style refs; nothing ever writes it to frame 0.

    continuity = first_frame isn't about your image either. It hands over the previous shot's last frame, and the code gates it on there being a previous shot - so on shot 1 it does nothing at all. It's the chaining mechanism between shots, not a way to seed the chain.

    And the two compound: reference rows only exist on ref2va. On fl2va the reference row gets built and then ignored, so your anchor is doing nothing whatsoever. Your fl2va + first_frame pairing is otherwise correct - that is the right combination for chaining - it just can't consume an identity anchor.

    To open shot 1 on a specific picture, either:

    Use H3MultishotSampler instead of the memory sampler and wire your image to its start_image. That one really is I2V - it seeds the chain so shot 1 begins on your frame, and later shots continue from each previous last frame. One image, no other changes. This is almost certainly what you want.

    Or stay on the memory sampler with continuity = flf_chain and feed keyframe_images - that's the FFLF Plate input you currently have off. It needs N+1 stills for N shots, since each shot renders between two boundary images.

    If you want the anchor for identity rather than as a first frame, load a ref2va checkpoint and don't use first_frame - reference rows are what ref2va is trained for.

    Your combination produced no warning at all, which is the actual bug. I've added one that fires when start_image is connected on that node with an fl2va checkpoint, naming both routes above. It'll be in the next release.

    Workflows
    MiniMax H3

    Details

    Downloads
    169
    Platform
    CivitAI
    Platform Status
    Available
    Created
    8/6/2026
    Updated
    9/22/2026
    Deleted
    -

    Files

    minimaxH3ReferenceTo_v10_3083256.zip

    Mirrors

    minimaxH3ReferenceTo_v10_3083274.zip

    Mirrors