H3 Studio • Text to Image
Text to image from a model that technically does video — here's how it works
- clip
- positive
- h3_latent
- requested_frames
- image_prompt
- run_info
Here's the odd thing about MiniMax H3: it's an omni-modal audio-video model, and you want a single still image out of it. That's not a contradiction - it's the entire trick behind H3 Studio, and H3StudioTextToImagePrepare (H3 Studio • Text to Image) is the node that does the conversion. It takes your prompt and target canvas and produces the two things H3 actually needs to paint a still: FL2VA text-to-image conditioning, and a short temporal packet - a handful of video frames sampled together - packed into an H3 audio/video latent, from which a still gets selected later.
What it actually is
The prompt-only, no-references entry point to H3's FL2VA path. You hand it a CLIP (the MiniMax H3 Qwen text/vision encoder), a prompt, a canvas size, and a quality profile, and it returns conditioning plus a latent you can feed straight to sampling. One deliberate design choice worth knowing: it does not take a VAE. The H3 video VAE only appears downstream, at decode time, so you can prepare and iterate on conditioning without loading the heavy decoder.
How it works
The quality profile is where the video-ness hides. H3 generates a burst of frames and one of them becomes your still, so the profile chooses how many: 5 frames is the recommended speed/quality balance, then 9, 13, and 20 frames of "maximum quality" - more temporal context for H3 to work from, at a much slower run. There's also an experimental 1-frame image-VAE profile for when you want to sample a single latent. With optimize_for_still on (the default), the prompt gets wrapped with a locked-camera still-image instruction - a prompt change only, not a change to frames, resolution, steps, sampler, or weights.
The inputs that matter
clip- the H3 32B text/vision encoder, wired from your CLIP loader.prompt- describe the final still: subject, composition, lighting, style. Multiline and dynamic-prompt aware.width/height- defaults 1344×768, in 32px steps up to 16384. The tooltip's advice is the real advice: connect an H3 Image Resolution node instead of typing raw numbers, because aligned H3 canvas sizes are fiddlier than they look. Also note the README's honest warning - more pixels is not more learned detail on H3 Base.quality_profile- the frame-count slider described above. Start atrecommended | 5 frames.optimize_for_still- leave on unless you're deliberately keeping a video-ish framing.
Wiring the outputs
Five outputs, and the wiring is easy to follow:
positive(CONDITIONING) → your sampler's positive input.h3_latent(LATENT) → your sampler's latent input.requested_frames(INT) → the number of framesH3StudioDecode(Exact Frame Decode) should preserve and decode - feed it there so the right frame count survives.image_prompt(STRING) → the final prompt after optional optimization; handy for inspecting what actually went in.run_info(STRING) → a report of the temporal packet, canvas, checkpoint expectations and recommended output strategy.
Install
Part of the H3 Studio pack - ComfyUI Manager (search ComfyUI-MiniMax-H3-Studio) or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/thaakeno/ComfyUI-MiniMax-H3-Studio.git
cd ComfyUI-MiniMax-H3-Studio
python -m pip install -r requirements.txt
Restart and hard-refresh. Before it can generate you need the actual H3 stack: a pruned FL2VA diffusion model in models/diffusion_models/, the MiniMax H3 32B conditioning encoder in models/text_encoders/, and the H3 video VAE in models/vae/ (the VAE only at decode). Nothing is auto-downloaded.
Where people get burned
The biggest conceptual trap: this is the FL2VA path, so it will not silently consume uploaded references - a prompt-only generation stays prompt-only, and if you want references you use the reference-edit path instead. Don't chase huge canvases expecting super-resolution behavior; H3 Base isn't a dedicated image upscaler, and 8MP canvases cost serious attention and VRAM for no proportional detail. And if your still comes out soft, the profile isn't the culprit - that's the difference between the normal video VAE and the experimental T=1 image VAE, which trades sharpness for speed. Alpha pack, classic frontend only for now.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | MiniMax H3 Qwen text/vision encoder. | |
| prompt | STRING | Describe the final still image, including subject, composition, lighting and style. | |
| width | INT | 134432–16384 | Output canvas width. Connect an H3 Image Resolution node for safer presets. |
| height | INT | 76832–16384 | Output canvas height. Connect an H3 Image Resolution node for safer presets. |
| quality_profile | COMBO | recommended | 5 frames | 5 frames is the recommended speed/quality balance. 20 frames gives H3 more temporal context and is much slower. The complete profile reaches Single Image Output, which returns one selected still unless emit_candidate_batch is enabled. |
| optimize_for_still | BOOLEAN | true | Adds a locked-camera still-image prompt wrapper. It does not change frames, resolution, steps, sampler, or model weights. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | Positive FL2VA text-to-image conditioning for the sampler's positive input. |
| h3_latent | LATENT | Packed H3 audio/video latent containing the requested temporal image packet. |
| requested_frames | INT | Number of image frames that Exact Frame Decode should preserve and decode. |
| image_prompt | STRING | Final still-image prompt after optional optimization. |
| run_info | STRING | Temporal packet, canvas, checkpoint expectations and recommended output strategy. |