H3 • Image Edit
No denoise slider, no locked source frame
- models
- image
- references
- image_job
What it's for
Instruction-based editing, the thing that ate most of the inpaint workflow's lunch between 2025 and 2026. You hand it a picture and a sentence; it hands back a newly sampled image. It's image-to-image and reference editing in one node: the source is one of the references, and additional picture sockets grow on the node as you connect them, up to nine pictures total.
The design decision worth understanding: output is never a locked source frame. Some H3 edit workflows anchor frame zero to your input, which quietly guarantees a chunk of your source survives - and quietly makes big edits impossible. This one doesn't. The source goes in as conditioning, not as a fixed keyframe, and there's no hidden preservation prompt and no denoise slider pretending to be one. Consequences, both directions: sweeping edits actually land, and the model can still just ignore you.
How it works
Your source and any extra pictures get resized, VAE-encoded, and attached to the conditioning as minimax_refs blocks - kept separate from the generated latent. An anchor conditioning would occupy the only output frame the model has and defeat editing entirely, which is why it's built this way. Your instruction is tokenised through the Qwen vision encoder with the reference images attached, so the model is reading your pictures and your words together in one context.
Since H3 is a video model asked for one still, the latent it prepares is still a single frame - same shape as the generate path. All the interesting behaviour is in how the pictures are described to it.
The inputs that matter
image - the source, addressed in your instruction as <Picture 1>. Only the first image of a connected batch is used, so don't try to feed it a queue of edits that way.
instruction - the edit. With one source, an ordinary instruction works fine: "Replace the entire background with solid black. Keep the woman, her pose and clothing unchanged." With several pictures, assign roles explicitly, because word order and naming are what bind attributes in an LLM encoder: "Keep the person and clothes from <Picture 1>. Use the pose from <Picture 2> and the room from <Picture 3>." A small convenience in the source: with exactly one reference and no mention of <Picture 1> anywhere in your text, the node prefixes it for you. The moment you go multi-reference, that's on you - and you should be explicit anyway.
aspect_ratio - defaults to source image, which keeps Picture 1's proportions at the output area you asked for. That's the sane default for an edit. The other entries (1:1 square through 21:9 ultrawide) plus custom pixels are all available if you're deliberately reframing.
megapixels - 3 by default, 0.1 to 32, snapped to a 32-pixel grid. The whole point of editing via a video model is that you're not stuck at ~1 MP, so don't be shy - 4 MP and up is where this pulls ahead of a 1 MP editing stack. width / height (advanced) take over in custom pixels mode.
references - the autogrow sockets. They appear as you need them, eight extra beyond the source. The tooltip's advice is the right advice: add only what you need. Every reference is another VAE encode and another chunk of attention budget, and reference count isn't a quality knob.
The output
image_job - editable reference conditioning plus the one-frame latent. It goes to H3 • Render Image, which is where steps, seed, sampler and the actual sampling live. Same job type the generate node emits, which is why the render half doesn't care which of the two produced it.
Install
ComfyUI Manager, search "MiniMax H3 Image Studio", or:
cd ComfyUI/custom_nodes
git clone https://github.com/astropuzzo/ComfyUI-MiniMax-H3-Image-Studio
Restart, refresh, ComfyUI 0.37.0 or newer - the dynamic picture sockets need that release. No Python dependencies (requirements.txt is explicit about it). You need the three H3 files in place: FL2VA diffusion model, Qwen3-VL encoder, H3 video VAE. Then open Templates → MiniMax H3 Image Studio → Edit, which is the generate graph plus a Load Image wired into this node.
Where people get burned
It ignored half the instruction. Expected, and the author says so up front. The node's job is that it can edit aggressively; whether the model obeys is a model problem. Re-run with a different seed before you rewrite the prompt, and be explicit about what must not change rather than assuming preservation.
Identity and fine detail drift. H3's edit reliability is still experimental, and the author says so: preservation is imperfect, with object sizes, reflections, framing and background details moving even when the requested change lands. For portraits or typography, treat the first result as a draft. And if you need unmasked pixels to be bit-identical, the honest answer is still crop, edit, stitch - an instruction model re-emits the whole frame and can't give you that guarantee.
Prompt weighting does nothing. (hair:1.3) and friends are CLIP-era syntax; on this encoder they're literal punctuation inside your sentence. Write it as a sentence or leave it out.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| models | H3_STUDIO_MODELS | Connect H3 Models or the last optional H3 LoRA. Multiple references are supported with or without LoRAs. | |
| image | IMAGE | Source image, <Picture 1>. Only the first item of a connected batch is used. | |
| instruction | STRING | Describe the change. With multiple references explicitly assign roles to <Picture 1>, <Picture 2>, etc. There is no hidden fidelity prompt or denoise slider. | |
| aspect_ratio | COMBO | source image | Choose the canvas shape. Source image keeps Picture 1's ratio; custom pixels uses the advanced width/height controls. |
| megapixels | FLOAT | 3.00.1–32 | Target image size, rounded to a 32-pixel grid. Start at 3 MP; 1 MP is a preview, 4–8 MP costs more. Ignored in custom pixels mode. |
| widthopt | INT | 204864–16384 | Exact pixel width, only when aspect_ratio is custom pixels. |
| heightopt | INT | 153664–16384 | Exact pixel height, only when aspect_ratio is custom pixels. |
| referencesopt | COMFY_AUTOGROW_V3 | Optional additional reference pictures. Add only what you need; eight extra pictures maximum. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image_job | H3_STILL_JOB | Editable reference conditioning and one-frame latent. Connect to Render Image. |