H3 Contact Sheet (five views)
Five views of one subject, packed into one H3 latent
- clip
- vae
- ref_image
- positive
- LATENT
Most H3 nodes here are about fixing fast motion. H3 Contact Sheet is the other half of the pack: a genuinely different trick that exploits H3's video model to render images - specifically, five coordinated views of one subject from a single reference, in one pass.
Think turnaround sheet: front, side, three-quarter, back, whatever the prompt asks. The subject is shared because it has to be - all five views are packed on the model's time axis and jointly denoised, so they're consistent by construction in a way that five separate generations never will be. With a reference image it rides in as <Picture 1> and the model is conditioned on it; the time axis is doing the work of keeping the subject recognizable across angles.
How to actually run it
You need three things wired in plus one download:
clipandvae- your H3 CLIP and VAE, standard.prompt- defaults to "the camera orbits the subject of <Picture 1> ninety degrees clockwise". Keep the<Picture 1>tag when a reference is attached.ref_image- optional. Leave it unconnected for a text-only sheet (and drop the<Picture 1>tag from the prompt).
And the download: a contact-sheet LoRA on the model, from matlod/minimax-h3-turnaround. The drag-in example workflow (examples/contact_sheet.json) uses stock loaders and sampler throughout - 28 steps of res_multistep at denoise 1.0, LoRA strength 0.75 - so there's nothing exotic in the graph.
size is the one real decision: 512 (the LoRA's training size, fastest), 1024 (the sweet spot), or 2048 (works, but rotation arrives in the later views). Square, snapped to the model's canvas multiple.
Outputs are positive (conditioning) and LATENT - the five-slot AV latent. That latent goes through a stock sampler and then H3 Contact Sheet Decode, which is the mandatory other half of this pair.
The traps
Big one: don't decode the packed latent as a normal video. The five slots are standalone images on the time axis; a whole-latent video decode smears them together into a strip of garbage. That's exactly why H3 Contact Sheet Decode exists - it decodes each slot independently.
Second: ref_image is optional, and its presence changes the prompt contract. Reference attached → the tag is required. No reference → drop the tag or the model looks for a picture that isn't there.
Third, the license bit: this all runs on MiniMax H3, and its community license excludes the US, EU, UK and South Korea. The LoRA and the pack are GPL-3.0 / free, but the model underneath has a geography.
Installing it
Pure-Python pack:
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
Restart, find it under model/conditioning/minimax. The example graphs also want ComfyUI-KJNodes for their attention patches, but this node family itself is stock-loaders all the way down. If you've seen it before under the old name ComfyUI-H3-ContactSheet, this is the consolidated home - that repo stays up for existing installs but this is the one that moves forward.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| vae | VAE | — | |
| prompt | STRING | the camera orbits the subject of <Picture 1> ninety degrees clockwise | — |
| size | INT | 1024512–2048 | Square size of each generated view. 512 = LoRA training size (fastest), 1024 = sweet spot, 2048 works (rotation arrives in the later views). |
| ref_imageopt | IMAGE | Optional. Unconnected = text-to-sheet: no reference rows, prompt only. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| LATENT | LATENT | — |