Fizgig H3 Still Latent (single frame)
Your H3 \"Still\" Is Secretly a Five-Frame Clip. This Node Makes It One.
- LATENT
MiniMax H3 is a video model, and it's also one of the better still-image models you can run locally - the same thing that happened with Wan a year earlier. Train on footage and the model learns enough about space, light and skin that a single frame stops looking like a diffuser's best guess.
The snag: ComfyUI won't let you ask H3 for one frame. Its H3 latent starts at five frames and snaps to the 17k+5 grid, so a "still" is really the first frame of a five-frame clip. You pay five frames of compute and you never touch H3's native image convention - one latent frame, which the reference VAE and model special-case.
Fizgig H3 Still Latent builds that one-frame latent. No extra models, no dependencies, and it's the difference between an H3 still that renders in the time of a still and one that renders in the time of a bad clip.
How the one-frame latent works
It doesn't load or sample anything. It hands the sampler an empty latent with the right shape, and your prompt, seed and noise do the rest.
Two pieces go in. A video tensor of zeros in H3's latent format: 24 channels, one temporal frame, and a spatial grid of width/16 by height/16 rounded down to even numbers. The rounding matters - H3's VAE compresses 16× spatially and the DiT patchifies 2×2 on top, so an odd grid isn't something the model can consume. Alongside it comes a matching audio latent of 32 channels and two latent audio frames, which is what one video frame works out to at H3's 24fps / 40-latent-fps audio rate. Both go into a nested tensor, the same packaging ComfyUI's own H3 nodes use.
So the output is a zeros latent shaped like a single-frame H3 generation. The shape is the feature.
The inputs that matter
- width and height - pixels, multiples of 32, which is also how the widget steps. They must match the width and height on your conditioning node, or you're asking the sampler to denoise a latent that disagrees with its conditioning.
- batch_size - 1 to 64, one single-frame latent each. Handy for seed exploration; items decode serially, so it costs you wall-clock, not VRAM.
One output: LATENT, into your sampler's latent input (SamplerCustomAdvanced in the bundled examples).
Wiring it up
Start from any H3 text-to-video graph and change two nodes. Drop Fizgig H3 Still Latent into the sampler's latent input, and keep MiniMax H3 Image to Video for its conditioning only - leave its LATENT output unconnected. Then replace the stock VAE Decode with Fizgig H3 Still Decode, the second node in this pack. Skipping that swap is the most common way to end up disappointed: a lone latent frame through the stock decode comes back banded and dark.
MiniMax H3 Image to Video (conditioning) ─► BasicGuider ─┐
Fizgig H3 Still Latent ──────────────────────────────────┼─► SamplerCustomAdvanced ─► Fizgig H3 Still Decode ─► Save Image
Any multiple of 32 works, but the author's guidance is that results are noticeably weaker below 3 MP and best above it. The examples run a 2.5 MP widescreen still and, for the money shot, 8 MP (3872×2176) with no Turbo LoRA at 50 steps on er_sde. For speed, the v4 step-600 EMA Turbo LoRA at strength 0.38 with 20 steps is what they tuned for stills - a partial strength, the usual hedge when a distilled LoRA trades detail for speed.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/shootthesound/ComfyUI-Fizgig-H3-Still
Restart ComfyUI and both nodes appear under the Fizgig category. There's nothing to pip install - the pack's dependency list is empty and there's no requirements file, so it can't break your environment.
You do need the H3 model stack from Comfy-Org/MiniMax-H3: the pruned int8 diffusion model, the Qwen3-VL text encoder, and the H3 video VAE. The nodes ship no weights.
Where people get burned
The node isn't in the menu after a restart. This pack imports ComfyUI internals at module load, so on a ComfyUI older than H3 support the import fails and the whole pack silently vanishes. Update ComfyUI before filing an issue.
Mismatched width and height. Keep the numbers identical on both nodes and the conditioning node. Change one and not the other and you get garbage or an error, and neither message points at the culprit.
Using it for clips. There's no length parameter and no way to ask for six frames. For video, use the stock latent.
Chasing the dedicated single-frame VAE. There's a separate H3 image VAE (minimax_h3_t1_image_vae…). The author tested it and found it slower and softer with less skin detail - their comparison, one seed each - so don't download a third model. Also worth knowing, though unrelated to the pack: H3's weights are licensed for a territory that excludes the US, EU, UK and South Korea.
And none of that reflects on the code. Fizgig is Peter Neill's LoRA training workbench, and these nodes are the H3-still path lifted out of it - the same code that renders its previews. He posts to r/StableDiffusion under the same handle and has shipped other ComfyUI packs, so this is a maintained repo, not an anonymous two-file drop.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| width | INT | 76864–4096 | Image width in pixels (multiple of 32). |
| height | INT | 134464–4096 | Image height in pixels (multiple of 32). |
| batch_size | INT | 11–64 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |