toobusy MiniMax H3 Reference Manifest
The node that writes H3's <Picture N> manifest so you don't have to
- reference_manifest
MiniMax H3's reference prompt is a fussy thing. You write out subject_definitions and retention_analysis text that binds roles to picture numbers - "Picture 1 is the face, Picture 2 is the outfit" - and the model takes those bindings literally. Get a number wrong and it reads the wrong reference. This node writes that manifest for you, and it's careful about numbering in a way your hand-typed version won't be: it only assigns a <Picture N> binding to references that actually got delivered past the safety gate, so the text H3 reads and the images it receives never drift apart.
How it works
Notice what's missing first: this node has no image inputs at all. It's pure text assembly, which is the point. You feed it the same Gemma analysis strings the Semantic Reference node uses, and it rebuilds the manifest from those.
It starts with a hardcoded line - FACE IDENTITY DIRECTION: <Picture 1> - because in the character-sheet flow the face is always your anchor and it's always picture one. Then it walks the roles in order:
- outfit - semantic description always; a
VISUAL REFERENCE BINDING: <Picture N>line if the analysis says the visual is safe. - pose - semantic description only; pose never claims a picture number, because you're transferring geometry from a panel you don't want treated as an identity source.
- optional 4 / 5 / 6 - each only included when its
*_enabledboolean is on and an analysis is present, same visual-binding rule as outfit.
The binding lines are the smart part. They're explicit about the scope - <Picture 2> supplies only the outfit geometry, construction, colors, and materials; ignore its source person, pose, background, composition, and rendering style - which is exactly the kind of specificity H3's retention logic rewards. The picture counter only increments when a binding is actually emitted, so the numbering compresses to match the images that really exist.
The inputs and outputs
Three booleans - optional_4_enabled, optional_5_enabled, optional_6_enabled (all default false) - and five lazy analysis strings: outfit_analysis, pose_analysis, and optional_4/5/6_analysis. Everything is optional and lazy; only the analyses the node needs get computed. The single output is reference_manifest (STRING), which you wire straight into MiniMaxH3ReferenceToVideo's subject_definitions text alongside the output of the Semantic Reference nodes.
Installing it
Same pack as the rest of the H3 trio, no extra pip dependencies:
cd ComfyUI/custom_nodes
git clone https://github.com/nicekriss/toobusy.git toobusy
Restart ComfyUI and hard-refresh the browser. The real dependencies are upstream (a Gemma model in a core TextGenerate node producing the analysis) and downstream (H3 weights behind MiniMaxH3ReferenceToVideo). And the same licensing caveat as the rest of the H3 stack: the weights' community license excludes the US, EU, UK and South Korea.
Where people get burned
The most common stumble is expecting to wire images into this node. You can't - it's a text summarizer for text you already have. Second: an optional slot is invisible in the manifest unless both its enabled boolean is on and an analysis string is connected; enabling the bool without the analysis quietly produces nothing for that slot. And if the picture numbers look like they skip, that's the compression working - pose takes no number, and a rejected optional reference doesn't get one either. The manifest matches the delivered images, not your slot count.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| optional_4_enabled | BOOLEAN | false | — |
| optional_5_enabled | BOOLEAN | false | — |
| optional_6_enabled | BOOLEAN | false | — |
| outfit_analysisopt | STRING | — | |
| pose_analysisopt | STRING | — | |
| optional_4_analysisopt | STRING | — | |
| optional_5_analysisopt | STRING | — | |
| optional_6_analysisopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| reference_manifest | STRING | — |