2.2.0 — everything since 2.1.2, in one post
Perfil de ejecución
Descripción de la fuente
2.2.0 — everything since 2.1.2, in one post
Seven point releases folded into one version, because 2.1.2 is where most people still are. Five separate defects that stopped the workflow running , a measured campaign against drift over long chains that changed the shipped defaults, and a whole ComfyUI version this pack could not previously run on.
the Audio Spine produced static on ComfyUI 0.32.0
naming an mmproj file broke GGUF text encoders
The value 1 for reference_image_size is not available
the full workflow needed a node from a pack that is not in the zip
H3_Seamless_Chain_CORE could not be queued at all — the no-third-party-dependencies workflow, un-runnable since 2.1.3
Comentario generado por IA
Explicación generada por IA basada en los detalles de la fuente y la configuración. Las sugerencias están claramente identificadas.
Use this MiniMax-H3 workflow to turn a written story or prompt into a multi-shot video with audio. You can add an optional photo to anchor shot 1 and a short voice clip to lock the speaker’s voice; the scenes are designed to render as one continuous take.
The download includes H3_Keyframes.json, H3_Seamless_Chain_CORE.json, and H3_Seamless_Chain_v2.json.
The default `master_normalize=luma+contrast` matches frame brightness and contrast spread to a target anchored on shot 1, addressing buildup across a chain.
Choose a MiniMax-H3 checkpoint and text encoder. The VAE slots are preset, and LoRA slots start empty.
Run it in ComfyUI with the MiniMax-H3 node pack, available through Manager as “MiniMax-H3 Multishot” or in the zip.
ComfyUI 0.30.0 and 0.32.0 are supported.
All three included workflows list `minimax_h3_audio_vae_fp32.safetensors` and `minimax_h3_video_vae_fp16.safetensors`.
`H3_Keyframes` lists `MiniMax-H3-encoder-Q4_K_M.gguf` and `MiniMax-H3-fl2va-Q5_1.gguf`. `H3_Seamless_Chain_CORE` and `H3_Seamless_Chain_v2` list `MiniMax-H3-ref2va-curve-Q8_0.gguf` and `qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors`.
The full chain lists `ComfyUI-Easy-Use` and `ComfyUI-Custom-Scripts`; install the latter only if you want the bypassed `SCRIPT PREVIEW` node.
`memory_frames` defaults to 0. If a busy scene loses continuity between shots, try raising it to 1.
Sugerencia
Start with all optional switches off and `VRAM RESERVE` at 0; try the optional controls only if a render spills.
Sugerencia
In `context_pin` mode, `join_anchor_noise` and `handoff_release` default to 0 because they have no effect in that mode.
The optional `attention patch` and `chunk FFN` use `ComfyUI-sol-attn`; `block cache` uses `comfyui-minimax-h3-blockcache-T8`. To activate one, install its pack, restart ComfyUI, un-bypass the node with Ctrl+B, then turn on its switch.
`sol_attn` has a stated quality risk; `block_cache` can soften subtle motion, so keep it off for final masters.
Sugerencia · sin verificar
¿Es necesario editarlo?
Inicia sesión para solicitar una edición.
Fuentes
1 fuenteExtractos de fuentes
1 extractoSource context: 10753 downloads · Type Workflows · Base model MiniMax H3
New controls: pin_frames , pin_noise , pin_renorm , and master_normalize 's luma+contrast mode. Changed defaults that change your output: memory_frames 2 → 0 , and join_anchor_noise / handoff_release to 0 because they are inert under context_pin . New runtime: ComfyUI 0.32.0 ; 0.30.0 is unchanged and still supported.
Everything below is the original note for each version, newest first.
2.1.9 — CORE could not be queued, and bypassed nodes now say what they need
If you use H3_Seamless_Chain_CORE , it has been un-runnable since 2.1.3. Queueing it failed with:
value_smaller_than_min: Value 0.0 smaller than min of 1.0 - output_scale
Its sampler still carried the widget array it was saved with before 2.1.3 removed the four two_pass_upscale dials . Nineteen saved values against the class's fourteen live widgets, so the frontend put false into output_scale (minimum 1.0) and 1.5 into save_every_shot , and the server rejected the whole prompt. The workflow advertised as the one with no third-party dependencies — the safest thing for a new user to open — was the one that could not run.
It survived because CORE had never been rendered end to end . Our own release checklist said "one CORE render before posting" and that line rode along, unticked, through six releases.
The array is now generated from a name→value map resolved against the server's own schema, with the map stored on the node so it can be re-applied by name. CORE has now rendered: three chained shots at 960x544, 370 frames, picture and audio, holding framing, wardrobe and lighting across both joins. All three bundled workflows are submit-tested against a running server now, not read.
Bypassed nodes now say what they need
Four nodes ship bypassed because their packs are not in this zip, and a node whose class is missing fails the entire prompt. That is the right default — but a bypassed node sitting on the canvas invites you to un-bypass it, and doing that without the pack installed breaks the workflow with no explanation.
It now says so in four places: the group title , each node's own title (which names its pack), a note above the cluster , and the VRAM / SPEED note , which carries the full table with repository URLs.
attention patch , chunk FFN — ComfyUI-sol-attn
block cache — comfyui-minimax-h3-blockcache-T8
SCRIPT PREVIEW — ComfyUI-Custom-Scripts. A leaf: leaving it bypassed costs you the on-canvas preview and nothing else.
The part people lose is that it takes two steps, in order: install the pack, Ctrl+B the node to un-bypass it, then turn its switch on. Un-bypassing alone does nothing; flipping the switch while the node is still bypassed does nothing either.
Why not bundle those packs? The prompt-writer pack is bundled because it is modified and pinned to this workflow. These three are not — shipping a second copy of Custom-Scripts, sol-attn or blockcache-T8 inside the zip would shadow whatever you already have installed and freeze it at whatever version we happened to vendor. Naming them and linking them is the honest version.
2.1.8 — the last node that came from outside the zip
SCRIPT PREVIEW is ShowText from ComfyUI-Custom-Scripts , and it shipped active . A node whose class is missing serialises as class_type: null and the server rejects the whole prompt — so without that pack installed the workflow could not be queued, for the sake of an on-canvas text box. The install notes said to delete the node, which only helps someone who reads them before pressing Queue.
It now ships bypassed , the same remedy the three accelerator nodes got in 2.1.4. Install Custom-Scripts and Ctrl+B the node if you want the preview; the writer feeds the sampler either way.
Found by mapping every node type in all three bundled workflows to its owning Python module against a running server — now part of the release routine rather than something I do after someone tells me. The other two workflows were already clean, and everything else in the full one is core ComfyUI, this pack, the writer pack that is in the zip , or one of the three bypassed accelerators.
Verified end to end on ComfyUI 0.32.0
Not by reading the graph — by loading the shipped file in a browser on a 0.32.0 install and pressing Queue. Twice: once through the prompt-writer lane exactly as shipped, once with a hand-written script.
loads with no missing node types, and every sampler widget lands on its own name — the shift behind The value 1 for reference_image_size is not available cannot reproduce
no null class_type : the bypassed preview and the three bypassed accelerators all drop cleanly
three chained shots at 960x544, 124 frames each, decoding to 328 frames — exactly 372 minus the two 22-frame context_pin head trims
a reviewer given the clip cold, with no idea how it was made, read it as one continuous static take , found no cut or jump anywhere, transcribed every line, called the lip-sync matching, and found no shift in framing, colour, brightness or wardrobe and no hiss, dropout or click in the audio
0.30.0 remains the version everything else here was measured on. Both are tested before release now.
2.1.7 — three things that stopped it running
If you installed from Civitai, you have a package with three separate blockers in it. All three are fixed here. Two of them only ever appear on ComfyUI 0.32.0 , which is why they survived several releases — my test rig was 0.30.0 and could not reproduce them. Everything below is now verified on 0.32.0 as well.
Fixed: the Audio Spine produced static on ComfyUI 0.32.0
guide_audio came out as hiss, while the same file through voice_ref or the native node was perfect. Reported against 2.1.2 and still present through 2.1.6.
0.32.0 introduced ModelSamplingAV , which carries the audio half of the packed audio+video latent scaled onto the video schedule — multiplied by shift / audio_shift going in (12/3 = 4 for H3) and divided back coming out. Everything this pack injects into the sampler's latent is in the stream's native domain, so on 0.32 it landed four times too small and decoded as broadband noise. On 0.30.0 there is no such scaling, so the identical code was correct there.
Three injection sites had it, not one: the encoded spine, the previous shot's audio tail (which audio_lock and the latent handoff use), and the encoded room tone for the onset guard. All three now scale at the point of use, reading the factor off the live model object so a changed sigma shift stays correct, and leaving 0.30.0 byte-identical.
Verified by render on 0.32.0 with a real 44.1 kHz stereo voice track: loudness-envelope correlation against the guide +0.965 , speech-band energy 34.2% against the guide's 39.3%, and a blind listener transcribing the guide's own words as "clean, no background hiss" . The same render was hiss before the fix.
Fixed: naming an mmproj file broke GGUF text encoders
mat1 and mat2 shapes cannot be multiplied (3680x1152 and 3456x1152)
— thrown at the handoff into shot 2, on GGUF encoders only, and unaffected by resolution or by switching every image input off.
Setting mmproj_name explicitly took a different code path than (auto) and skipped the vision key-renaming step, so the vision tower loaded under raw llama.cpp names that nothing downstream reads. Same file, two loaders, 19 key names in common out of 351 . The bitter part is that mmproj_name is documented as the reliable escape hatch for when filename pairing fails — and it was the broken path.
It now runs the same post-processing as (auto) , using ComfyUI-GGUF's own key map rather than a copy, so it follows their changes. Verified: an explicitly named file now produces a state dict identical to (auto) . A new guard also fails by name if a chosen mmproj yields no vision tensors, rather than dying in a matmul twenty minutes into a render.
Fixed: The value 1 for reference_image_size is not available
The shipped workflow's saved widget values were written for a layout that did not present sampler_override and scheduler_override as widgets. The current schema does, so everything from index 27 read two slots early and output_scale 's 1.0 landed in reference_image_size . This affected 2.1.3, 2.1.4 and 2.1.5. The array is now generated from a name→value map resolved against the server's own schema, with that map stored in the node so it can be re-applied by name if anything shifts again.
Also: memory_frames now defaults to 0
The memory bank's recent slots hand each shot's accreted output forward as reference images, on top of the latent pin, so invented detail compounds. Ten shots at 960x544, moving 2 → 0:
memory_frames 2 memory_frames 0 texture per hop 1.055 1.022 chroma per hop 1.086 1.039 framing correlation at shot 10 0.976 0.995 drift acceleration 4.2 -> 6.7%/hop 2.3 -> 2.0%/hop
The last row matters most. At 2 the drift accelerates , which is what a runaway feedback loop looks like; at 0 it holds flat.
The obvious worry was motion continuity, since carrying it is what the recency slots are for. Tested on a scene with continuous large-amplitude movement: anchor-only retained motion slightly better (−5.9% against −6.5% over four shots) with better framing (0.983 against 0.971). The cost does not exist. If a busy scene ever does lose continuity between shots, raise it to 1.
join_anchor_noise and handoff_release now ship at 0. Both are inert under context_pin — one noises keyframes the mode never creates, the other belongs to latent_handoff — and non-zero values read as tuned settings while doing nothing at all.
2.1.6 — chained shots stop getting brighter-edged
master_normalize matched every frame's mean to one global target, which is why a chain shows no brightness step. It was also masking a second drift it never touched.
Measured on a three-shot chain at 960x544: the mean held flat, 27.31 → 27.43, while the distribution stretched — p25 fell 6 → 2 and p95 rose 85 → 96. Contrast climbing every hop, re-centred each time, and handed to the next shot as a higher-contrast start.
New: master_normalize=luma+contrast , now the default, matches the spread as well as the mean. Rescaling amplitude about each frame's own mean is an affine remap — it moves no edges, so it is not the blur this pack has always ruled out for texture drift.
Texture growth per hop, from a log fit across all shots. 1.000 is no accretion at all:
where luma luma+contrast contrast spread 960x544, in-render, 124f x4 1.126 1.047 11.2% -> 0.3% 960x544, 243f x3 1.199 1.064 12.2% -> 0.4% 640x352, 243f x3 1.130 1.055 7.0% -> 0.2%
The baseline ratchet scales with canvas (1.130 at 640x352, 1.199 at 960x544); after normalising it stops caring (1.055 against 1.064). There is nothing in it to tune per resolution — it works on decoded frames with per-frame statistics against one global target.
The target anchors to shot 1 , not the timeline median. Contrast only ratchets upward, so shot 1 is the one frame-set with nothing accreted onto it. A median target pulls shot 1 up to meet the drift (+11.7% texture, for no benefit); anchoring to shot 1 leaves it untouched (+0.1%) and only ever pulls later shots down.
1:1 crops of the last shot show no loss of real detail — lamp vent slots, hinge rivets, hair strands and knit weave all survive. What leaves is the invented crispness.
What is left,...
Hardware and download-size estimates are not available yet.
Requisitos
minimax_h3_audio_vae_fp32.safetensors
Archivo sin verificarVAE · SAFETENSORS · Unknown
minimax_h3_video_vae_fp16.safetensors
Archivo sin verificarVAE · SAFETENSORS · Unknown
MiniMax-H3-encoder-Q4_K_M.gguf
No resueltoText encoder · Unknown
MiniMax-H3-fl2va-Q5_1.gguf
No resueltoCheckpoint · Unknown