Nodes/Pulse Studio/Pulse Still · MiniMax H3
ComfyUI Node

Pulse Still · MiniMax H3

Make your MiniMax H3 reference images in the same window you use them

By Addis-Pulse-Studio·Created about a month ago·Updated 16 days ago· 2
Pulse Still · MiniMax H3
  • model
  • clip
  • vae
  • audio_vae
  • source_image
  • ref_images
  • image
  • plan
schema_version3.0.0
prompt
aspect_ratio16:9 landscape
width1344
height768
frame_pick0
canvas_from_referencetrue
seed0
steps20
sampler_nameres_multistep
schedulersimple
cfg1.0
shift_video12.00
shift_audio3.00

A reference image that was made by the same model that will use it

The most reliable way to keep a character consistent across a MiniMax H3 film is to feed it reference images. And the most reliable reference images are the ones generated through the same reference set and the same pipeline that will drive the video - not a photo you scraped, not an SDXL render from a different architecture. Pulse Still is exactly that: a still is a 5-frame H3 render where you keep one frame. Same conditioning, same compiler, same reference marshalling as the video path, just five frames and a pick.

It does two jobs, and the difference is the branch the render takes:

  • Generate - leave source_image unconnected, wire references into ref_images, and it runs the ref2va branch (MiniMaxH3ReferenceToVideo) to produce a brand-new still in the style of your references. This is how you build the character sheet before you build the film.
  • Edit in place - connect source_image and it pins that image at frame 0, which is the fl2va branch (MiniMaxH3ImageToVideo). It takes no references, because H3's anchors and references can't coexist in one render - a hard model constraint, not a node choice. ref_images is ignored while source_image is connected.

The inputs that matter

Most of the required set - model, clip, vae, audio_vae, prompt, sampler, scheduler, shift_video/shift_audio - is the shared H3 plumbing. The two you'll actually touch:

  • frame_pick (0–4) - which of the 5 rendered frames to keep. Your source (in edit mode) is pinned at frame 0, so 0 hugs the original and 4 drifts furthest. This is the edit-strength dial, exposed rather than hidden: low for a conservative touch-up, high for a real remix. In generate mode it's the same idea, just without the pinned source.
  • canvas_from_reference (default on) - lets the source image set the canvas instead of cropping it to the chosen aspect. It fits the source's aspect into H3's 1,032,192 px budget on the /32 grid, long edge rounding down and the short edge taking the nearest step that stays inside budget. That's the same fitting the aspect_ratio presets use, so a 1920×1080 reference and the "16:9 landscape" preset can never resolve to different canvases. Turn it off and the aspect_ratio/width/height widgets take over.

One quirk worth knowing: audio_vae is required even though a still discards the audio, because H3 always builds a joint audio+video latent. Yes, it's a video model's audio encoder on an image node. Plug one in anyway.

Outputs are image (the single kept frame, an IMAGE batch of one) and plan (a text readout of the canvas fitting and branch). Wire the image straight into a PulseShot's start_image - because those are real tensors, your shot can open on a still that was generated in the same graph, no file export in between.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Addis-Pulse-Studio/comfyui-pulse-studio

Restart ComfyUI. No pip install, no dependencies of its own - just what a working ComfyUI already has. Host must be ComfyUI 0.30.0+ with H3 support. Weights from Comfy-Org/MiniMax-H3 into the minimax/ subfolders: ref2va DiT (~20 GB), text encoder (~15 GB), and both VAEs; add the fl2va DiT if you edit stills in place. The weights carry the geofenced MiniMax H3 Community License (no US, EU, UK, Korea), and on Linux/macOS example-graph loaders show red until you re-pick each file.

Deliberately not a second product

It's tempting to want layers, masks, inpainting - the whole image-editing kitchen sink. The README is blunt: this is a mode, not a separate application, and "the moment it grows a brush it has become a different application." If you need surgical edits, generate here for consistency and do the surgery downstream. For making the reference sheet that holds a character across a timeline, that's exactly the job, in the same window as the film that will use it.

CategoryAddisPulse/H3

Inputs (20)

NameTypeDefaultDescription
modelMODEL
clipCLIP
vaeVAE
audio_vaeVAEH3 always builds a joint audio+video latent, so this is required even though a still discards the audio.
schema_versionSTRING3.0.0Which widget layout this node was saved with. Written by the node, read at load time to restore values by name. Do not edit.
promptSTRING
aspect_ratioCOMBO16:9 landscape7 options: custom, 16:9 landscape, 9:16 portrait, 1:1 square, 4:3 landscape, 3:4 portrait, +1
widthINT134432–4096
heightINT76832–4096
frame_pickINT00–4Which of the 5 rendered frames to keep. The source is pinned at frame 0, so 0 hugs the original and 4 drifts furthest. This is the edit-strength dial.
canvas_from_referenceBOOLEANtrueLet the source image set the canvas instead of cropping it to the chosen aspect. Its aspect is fitted into H3's pixel budget, rounded down to multiples of 32.
seedINT00–18446744073709550000
stepsINT201–100
sampler_nameCOMBOres_multistep6 options: res_multistep, euler, euler_ancestral, dpmpp_2m, dpmpp_2m_sde, ddim
schedulerCOMBOsimple6 options: simple, normal, beta, sgm_uniform, karras, exponential
cfgFLOAT1.01–20
shift_videoFLOAT12.000.01–100
shift_audioFLOAT3.000.01–100
source_imageoptIMAGEEditing a still pins this at frame 0, which is the fl2va branch -- it takes no references. Leave unconnected to generate instead.
ref_imagesoptIMAGEReference images for generation (ref2va). Ignored when source_image is connected, since anchors and references cannot coexist in one render.

Outputs (2)

NameTypeDescription
imageIMAGE
planSTRING