2.2.1 — three crashes, all of them after the expensive part
Profil d'exécution
Description de la source
2.2.1 — three crashes, all of them after the expensive part
A bug-fix release. Four defects, three reported from real renders on real machines rather than found in review. If you have been unable to finish a long chain, or a high-resolution one died partway with the whole server going down with it, this is the release for you.
Fixed: two crashes that only appear on long or high-resolution chains
Both were DefaultCPUAllocator: not enough memory — system RAM, not VRAM — and both killed the job after it had already done the sampling.
master_normalize built the entire finished timeline four times over. A 12-shot 1088x1920 chain asked for a single 31.2 GB block and died on a 24 GB machine after 81 minutes of work. One of those four copies was pure waste: the code rebuilt a tensor byte-for-byte identical to one already in memory, purely to compute two numbers for a log line, then threw it away. Every statistic it needs is one-dimensional. It now measures per shot and releases each shot as it is consumed, so peak memory is one finished timeline plus one shot instead of four timelines. Output is bit-identical — verified against the old implementation across every colour mode and median width, on the pixels and on the log strings.
Commentaire généré par l’IA
Explication générée par l’IA à partir des détails de la source et de la configuration. Les suggestions sont clairement signalées.
This MiniMax H3 workflow is for making multi-shot scenes as one continuous video with sound; it takes a story or shot prompts, an H3 checkpoint and text encoder, and optional opening photo and voice clip.
The canvas is arranged left to right: choose models, add optional anchors, enter prompts, then adjust controls.
Type an idea or load a prompt file for the writer to expand into shot prompts; for your own shots, use passthrough and separate them with `---`.
A photo can set the opening shot, and a short voice clip can lock the speaker's voice.
The graph includes `SaveVideo` and `SaveAudio` nodes for its video and sound outputs.
The setup notes call for ComfyUI and either the MiniMax-H3 Multishot node pack or this version's zip.
Model files named across the included workflow versions are `minimax_h3_audio_vae_fp32.safetensors`, `minimax_h3_video_vae_fp16.safetensors`, `MiniMax-H3-encoder-Q4_K_M.gguf`, and `MiniMax-H3-fl2va-Q5_1.gguf`.
Other included workflow versions name `MiniMax-H3-ref2va-curve-Q8_0.gguf` and `qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors`.
The full chain also lists `ComfyUI-Custom-Scripts` and `ComfyUI-Easy-Use`.
For a first run, leave all switches off and VRAM RESERVE at 0; set a manual reserve only after the console reports a spill.
Suggestion · non vérifié
The upscaler defaults to chunks of 16; `H3_UPSCALE_CHUNK` lets you trade memory for a little speed.
To open shot 1 on a still in the memory sampler, set `continuity=flf_chain` and provide `keyframe_images` (N+1 stills for N shots).
On `H3MultishotMemorySampler`, `start_image` is an identity reference, not the first video frame; use `H3MultishotSampler` for a true first frame.
Shot 1 fitting does not show that shot 2 will fit, because shot 2 carries the context pin and reference rows. If it does not fit, reduce `frames_per_shot` or resolution, or use a smaller DiT quantization.
Suggestion · non vérifié
Faut-il modifier cela ?
Connectez-vous pour envoyer une demande de modification.
Sources
1 sourceExtraits de sources
1 extraitSource context: 10753 downloads · Type Workflows · Base model MiniMax H3
The upscaler was handed every frame at once. 243 frames at 1472x2560 is an 11.0 GB float32 allocation on top of the input. It now runs in chunks into a preallocated buffer, so peak is one chunk rather than the whole batch. Bit-identical, verified at two chunk sizes. Set H3_UPSCALE_CHUNK if you want to trade memory for a little speed; default 16.
Fixed: auto-reserve could clamp itself into a hard crash
On a 12-shot 1280x736 run, shot 1 loaded completely and rendered fine. Shot 2 carries the context pin and the reference rows, so its activation-pool requirement roughly doubles — the node correctly costed it at 18.2 GB. It then clamped the pool to 9.4 GB "so the weights still load completely" , and the weights loaded partially anyway , 401 MB offloaded. Neither constraint was met and the render aborted inside a CUDA kernel, taking the whole ComfyUI process with it.
Two causes, both fixed. The keepout was 384 MB , which did not cover ComfyUI's own buffer plus the difference between what the driver reports free and what ComfyUI treats as usable — about 400 MB short. It is now 1 GB . And the "this is tight" warning compared the clamped reserve against a previous shot's measurement rather than what this shot had just asked for, so a 9.4 GB clamp looked fine against shot 1's 9.1 GB while the payload needed 18.2. It now compares against the real request and says plainly that this usually dies inside a kernel, and that raising the reserve cannot help because the memory is not there.
Worth knowing regardless of this fix: shot 1 succeeding tells you nothing about shot 2. Shot 1 has no pin and no reference rows. If shot 2 will not fit, lower frames_per_shot or the resolution, or load a smaller quantisation of the DiT.
Fixed: start_image on the memory sampler silently did nothing
Reported by a user. start_image on H3MultishotMemorySampler is an identity reference row , not a first frame — and on an fl2va checkpoint, which has no reference rows, it is built and then ignored entirely. Meanwhile the sibling node H3MultishotSampler has an input with the same name that really is an I2V first frame, which is where the perfectly reasonable expectation comes from. The combination produced no warning at all.
It now prints one, naming both ways to actually open shot 1 on a picture: use H3MultishotSampler , whose start_image is a true first frame, or set continuity=flf_chain here and feed keyframe_images (N+1 stills for N shots). Note that continuity=first_frame is not about your image either — it hands over the previous shot's last frame, and does nothing on shot 1.
Verified
Three chained shots rendered end to end on ComfyUI 0.32.0 with the new auto-reserve: every shot full load: True , which is exactly where the crashing run went partial, and the new warning fired on shot 2 with real numbers and did not stop the render. master_normalize ran on that same 685-frame chain. The chunked upscaler is proven bit-identical by test rather than by render — that graph had upscaling off, so I will not claim end-to-end coverage it did not get.
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
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...
Hardware and download-size estimates are not available yet.
Exigences
minimax_h3_audio_vae_fp32.safetensors
Fichier non vérifiéVAE · SAFETENSORS · Unknown
minimax_h3_video_vae_fp16.safetensors
Fichier non vérifiéVAE · SAFETENSORS · Unknown
MiniMax-H3-encoder-Q4_K_M.gguf
Non résoluText encoder · Unknown
MiniMax-H3-fl2va-Q5_1.gguf
Non résoluCheckpoint · Unknown