2.2.2 — the reference block was forcing glasses on everybody
Laufzeitprofil
Quellenbeschreibung
2.2.2 — the reference block was forcing glasses on everybody
One fix, reported by a user against 2.2.1. If you render with reference images, take this one.
Fixed: reference renders forced glasses onto the subject
Reported on Civitai: a reference image produced a character wearing thick black frames in every shot, and prompting to remove them changed nothing.
The pack injects a retention_analysis block alongside reference images so identity and voice stop drifting across a chain. That block was hardcoded to say the subject "retains the same face, skin, hair, glasses and wardrobe" - so every ref2va render was told to keep glasses whatever the prompt said. And it could not be argued with, because the sampler runs on a BasicGuider : cfg 1.0, no negative branch . There is nothing for a negative statement to subtract from, so "remove the glasses" only put the word into the conditioning a second time.
KI-generierter Kommentar
KI-generierte Erklärung auf Grundlage von Quellen- und Konfigurationsdetails. Vorschläge sind klar gekennzeichnet.
Use this MiniMax-H3 workflow to turn a story or shot prompts, an optional opening photo, and an optional voice clip into a multi-shot video with sound presented as one continuous take.
The ZIP contains three workflow files: `H3_Keyframes.json`, `H3_Seamless_Chain_CORE.json`, and `H3_Seamless_Chain_v2.json`.
The main workflow runs left to right: choose models, add optional anchors, enter prompts, then set controls; most edits are in lanes 2–4.
In the full chain, an optional photo can set the opening image, and a short voice clip can anchor the speaker’s voice.
You can type an idea or use a prompt file; the writer expands it into shot prompts. For your own shot JSON, use `passthrough (raw JSON, skip LLM)` and separate shots with `---`.
Use ComfyUI with this node pack or the supplied ZIP and a MiniMax-H3 checkpoint; the setup guidance recommends a GGUF checkpoint for a 24 GB card.
Model filenames listed across the workflows include `minimax_h3_audio_vae_fp32.safetensors`, `minimax_h3_video_vae_fp16.safetensors`, `qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors`, and `MiniMax-H3-encoder-Q4_K_M.gguf`.
Checkpoint filenames listed across the workflows are `MiniMax-H3-ref2va-curve-Q8_0.gguf` and `MiniMax-H3-fl2va-Q5_1.gguf`.
The full `H3_Seamless_Chain_v2.json` workflow lists `comfyui-easy-use` and `comfyui-custom-scripts` as node packs.
Start with every switch off and `VRAM RESERVE` at `0`; enable the optional controls only if a render reports a spill.
Vorschlag
With reference images, describe desired accessories in your prompt: the built-in text names face, skin, and hair but leaves glasses, hats, and jewellery to your wording.
Vorschlag
Negative prompt wording does not work in this pack; describe what you want in positive terms.
Vorschlag
A successful first shot does not show that the second will fit in memory. If it will not fit, reduce `frames_per_shot` or resolution, or use a smaller DiT quantisation.
Vorschlag
Muss das bearbeitet werden?
Melden Sie sich an, um eine Änderungsanfrage zu senden.
Quellen
1 QuelleQuellenauszüge
1 AuszugSource context: 10753 downloads · Type Workflows · Base model MiniMax H3
The block now says "the same face, skin and hair" and names no accessories. Eyewear, hats and jewellery belong to your prompt.
The rule this exposes, and it applies to every prompt you write for this graph: anything hardcoded into unconditional conditioning is permanent from your side. At cfg 1.0 you can add but never subtract, so phrase everything positively - "clear unobstructed eyes", never "no glasses". Negations do not work anywhere in this pack.
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.
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...
Hardware and download-size estimates are not available yet.
Anforderungen
minimax_h3_audio_vae_fp32.safetensors
Datei ungeprüftVAE · SAFETENSORS · Unknown
minimax_h3_video_vae_fp16.safetensors
Datei ungeprüftVAE · SAFETENSORS · Unknown
MiniMax-H3-encoder-Q4_K_M.gguf
Nicht aufgelöstText encoder · Unknown
MiniMax-H3-fl2va-Q5_1.gguf
Nicht aufgelöstCheckpoint · Unknown