Nodes/ComfyUI-MiniMaxH3-Director/MiniMax H3 Preview Override
ComfyUI Node

MiniMax H3 Preview Override

Actually watch MiniMax H3 denoise, instead of a single frozen frame

By seesee75-commits·Created 21 days ago·Updated 9 days ago· 250
MiniMax H3 Preview Override
  • model
  • vae
  • MODEL
decodelatent2rgb (fast)
preview_targetnode
max_resolution512
preview_frames24
preview_fps24
webp_quality80
every_n_steps1
max_preview_overhead25
suppress_default_previewtrue
playbacktrue speed

Here's the thing about H3 renders: they take minutes, and stock ComfyUI shows you a still image the whole time. Core's Latent2RGBPreviewer renders x0[0, :, 0] - the first latent frame only - so you watch a frozen frame while a five-second shot samples. MiniMax H3 Preview Override fixes exactly that: it sits between the Director's model output and the sampler and renders the whole shot as it denoises, on the node.

Why does H3 even need a dedicated node? Two reasons, both mechanical. H3's latent is packed - video and audio live in one flat tensor, which has to be unpacked before anything can be drawn from it, and the LTX preview nodes don't do that. And H3 compresses time about 3.35×: a 124-frame (5 s) shot is only 37 latent frames, so playing those at 24 fps runs the preview three times too fast unless the rate is corrected.

How it works

The node attaches a callback to the sampler, unpacks the flat pack with core's unpack_latents, and renders frames one of two ways. latent2rgb (fast) is a single matmul - effectively free, rough colors, ~10 ms per frame. vae (quality) runs the real video VAE - true colors, and at 1344×768 it can cost 20–25 s per preview, because the 5 GB decoder expands 37 latent frames into 124 output frames. The result is animated WebP sent to the browser. The render 9.9s line in the status is server-side decode/scale/encode time, not the sampler's.

The knobs that matter

  • decode - latent2rgb (fast) for iteration, vae (quality) when you need to judge actual detail or verify a VAE problem.
  • preview_frames - how many frames of the shot to show, thinned evenly so it caps cost without cropping the timeline. This is the main cost knob; try 4–8 with VAE.
  • preview_fps - a FLOAT, so the Director's fps output wires straight in (it's always 24 for H3).
  • playback - true speed (default) spreads the sampled frames across the shot's real duration, so the preview lasts exactly as long as the finished clip. source fps plays them flat at preview_fps, motion at normal speed but the clip ends early.
  • every_n_steps and max_preview_overhead - the throttle pair. every_n_steps never previews more often than every N steps; max_preview_overhead (default 25%) paces previews so they can't eat more than a quarter of the render time. 0 disables it.
  • max_resolution - long edge of the preview image. latent2rgb frames arrive at latent size (a 1344×768 shot is an 84×48 grid), so this upscales them smoothly - smooth, but soft.
  • preview_target - node shows it on this node (always available); sampler (VHS) puts it in the sampler's usual preview slot and needs VideoHelperSuite installed; both does both.
  • suppress_default_preview - hides ComfyUI's built-in single-frame preview while this runs.

Output is a single MODEL with the preview attached, which you pass on to the guider as if the node weren't there.

The badge that reads "4.7fps of 24" is not broken

With true speed, the rate is derived, not set. There's one image per latent frame and H3 compresses time ~3.35×, so the rate physically can't pass preview_fps / 3.35 - measured, ~7 fps at 24. Other packs show a round 24 because they play the same frames without correcting for the compression, which runs the preview 3.35× too fast. Switch to source fps if that's the trade you want.

Installing and gotchas

Same pack, same install as the Director - ComfyUI Manager search MiniMax H3 Director, or git clone, no pip deps. Nothing special to configure unless you want the VHS sampler slot, which needs ComfyUI-VideoHelperSuite.

The vae input is only needed for vae (quality) mode. And don't go hunting for a small preview VAE like LTX 2.3's: MiniMax hasn't released a TAESD-style decoder for H3 (taesd_decoder_name is None), so fast-RGB vs full-VAE is the whole menu. The one thing to actually remember: a VAE preview allocates as much memory as a real decode, so if you're near your VRAM limit, lower preview_frames before you switch to vae (quality).

CategoryMiniMax H3

Inputs (12)

NameTypeDefaultDescription
modelMODELModel to attach the preview to.
decodeCOMBOlatent2rgb (fast)latent2rgb is a single matmul — effectively free, rough colours. vae is the real decoder: true colours, but it costs real time per preview, so raise every_n_steps with it.
preview_targetCOMBOnodeWhere the preview appears: on this node, in the sampler's usual preview slot (needs VideoHelperSuite), or both.
max_resolutionINT51264–2048Long edge of the preview image. With latent2rgb the source is latent-sized (a 1344x768 shot is an 84x48 grid), so this upscales — smooth, but soft. Use decode='vae (quality)' when you need to judge detail.
preview_framesINT241–512How many frames of the shot to show. Frames are thinned evenly, so this caps the cost without cropping the timeline.
preview_fpsFLOAT241–60The shot's own frame rate — 24 for H3. FLOAT so the Director's 'fps' output can be wired straight in. Whether the preview actually plays at this rate depends on 'playback'; with 'true speed' it is a ceiling, not a promise.
vaeoptVAEminimax_h3_video_vae. Only needed for decode='vae (quality)'.
webp_qualityoptINT801–100WebP quality of the animation sent to the node.
every_n_stepsoptINT11–50Never preview more often than every N sampler steps.
max_preview_overheadoptINT250–100Cap on how much of the render time previews may use, in percent. A full VAE decode can cost tens of seconds per preview; this spaces them out automatically instead of stalling the run. 0 disables the cap.
suppress_default_previewoptBOOLEANtrueHide ComfyUI's built-in single-frame preview while this runs.
playbackoptCOMBOtrue speed'true speed' spreads the sampled frames across the shot's real duration, so the preview lasts exactly as long as the finished clip — but with latent2rgb that caps at preview_fps / 3.35, because there is one image per latent frame and H3 compresses time by that much. 'source fps' plays them at preview_fps flat, like ComfyUI's own preview: motion reads at normal speed, the clip ends early. Judge timing with the first, movement with the second.

Outputs (1)

NameTypeDescription
MODELMODELModel with the preview attached.