MiniMax H3 Image • Single Image Output
Pick the best still out of H3's frame packet
- frames
- source_image
- selected_image
- candidate_batch_debug
- selected_index
- selected_score
- score_report
H3ImageFrameSelector - "MiniMax H3 Image • Single Image Output" - is the last node in the pipeline, and the one that answers the question everyone asks five seconds in: which of these 5 frames do I actually keep? H3 generates a whole temporal packet for a still, so somewhere a decision has to be made. This node makes it, either from a recommendation or by scoring the frames itself.
How selection works
The default strategy is decode_recommended, which trusts the recommendation from the Exact Frame Decode node. That's the sane starting point: wire recommended_index from H3ImageDecode into the optional recommended_index input here and let the packet's metadata decide. If nothing's connected, it falls back to frame 0.
When you want control, the strategy dropdown is where the depth is:
- Fixed picks:
first,middle,last, andmanual_index(which activates themanual_indexinteger). - Scoring picks:
sharpest(edge detail only),best_quality(sharpness + contrast + exposure),stable_quality(favors sharp, clean, temporally stable frames),balanced_editandmost_similar_to_source(both needsource_imageconnected;similarity_weight, default 0.6, balances source similarity against raw quality inbalanced_edit).
There are also knobs for the scoring range - candidate_start/candidate_end as fractions of the batch, skip_first_frames to ignore an unstable opening frame, and top_k for how many candidates candidate_batch_debug returns.
Outputs, in the order you'll use them: selected_image (the single kept still by default), candidate_batch_debug (the ranked top-k as an image batch), selected_index, selected_score, and score_report (a human-readable summary of what it picked and why).
Scoring is a diagnostic, not a fix
Here's the honest take: the scoring modes are diagnostics, not magic. If your prompt was weak or your edit instruction was vague, no frame is going to be good, and a scoring strategy can't invent one. The README says it plainly - these modes "cannot correct weak conditioning or an unclear edit prompt." Don't reach for best_quality hoping it fixes a bad generation; re-roll the seed or fix the prompt. The one genuinely useful non-default: emit_candidate_batch. Flip it ON and selected_image returns the entire decoded batch instead of one still, so a connected Preview Image or Save Image node shows or saves every frame. That's great for eyeballing candidates once, then you turn it back off - it deliberately retains more RAM/VRAM.
Install
Install is the pack: ComfyUI Manager (search MiniMax H3 Image Studio) or clone into custom_nodes, then restart. No extra dependencies beyond ComfyUI 0.30.0+, the H3 models, and the decode node upstream. If decode_recommended isn't in the strategy list, your node definitions are stale - update and do a full ComfyUI restart, not just a refresh, or the old selector will keep rejecting the recommendation input.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| frames | IMAGE | Decoded H3 IMAGE batch. With the supplied Exact Frame Decode node this contains the complete selected 1-, 5-, 9-, 13-, or 20-frame profile. | |
| strategy | COMBO | decode_recommended | decode_recommended uses Exact Frame Decode's mode-aware recommendation (connect its index). first selects frame 0. stable_quality favors sharp, clean and temporally stable frames. balanced_edit combines source similarity with stable quality. best_quality uses sharpness, contrast and exposure. most_similar_to_source requires source_image. sharpest uses edge detail only. middle, last and manual_index select a fixed frame without scoring. |
| manual_index | INT | 00–4096 | Zero-based frame index used only when strategy is manual_index. |
| skip_first_frames | INT | 00–128 | Excludes this many initial frames from metric-based scoring. Leave at 0 unless a specific generation shows an unstable opening frame. Ignored by fixed-index strategies. |
| candidate_start | FLOAT | 0.000–1 | Fractional start of the automatic scoring range. 0.0 begins at the first frame and 0.5 begins halfway through. skip_first_frames can move the effective start later. |
| candidate_end | FLOAT | 1.000–1 | Fractional end of the automatic scoring range. 1.0 includes the end of the decoded batch. |
| similarity_weight | FLOAT | 0.600–1 | Used only by balanced_edit when source_image is connected. Higher values favor source similarity; lower values favor sharpness, exposure, contrast and temporal stability. |
| top_k | INT | 41–16 | Maximum number of highest-scoring frames returned by candidate_batch_debug for automatic strategies. It does not limit selected_image when emit_candidate_batch is enabled: that main output contains every decoded frame. Fixed strategies return their chosen frame on candidate_batch_debug because they do not calculate a ranking. |
| source_imageopt | IMAGE | Optional comparison image for most_similar_to_source and balanced_edit. Only the first image in the connected batch is used as the reference. | |
| emit_candidate_batchopt | BOOLEAN | false | OFF: selected_image contains only the picked still. ON: selected_image contains the entire decoded 1-, 5-, 9-, 13-, or 20-frame batch, so an already-connected Preview Image or Save Image node shows or saves every generated image. candidate_batch_debug remains the ranked top-k subset. Enabling this intentionally retains more RAM/VRAM. |
| recommended_indexopt | INT | Connect recommended_index from Exact Frame Decode. Used by decode_recommended; if left unconnected, frame 0 is selected. |
Outputs (5)
| Name | Type | Description |
|---|---|---|
| selected_image | IMAGE | Single selected still when emit_candidate_batch is off; complete decoded batch when it is on. |
| candidate_batch_debug | IMAGE | Ranked top-k candidates for automatic strategies, or the fixed chosen frame for fixed strategies. |
| selected_index | INT | Zero-based index of the preferred still inside the original decoded batch. |
| selected_score | FLOAT | Score assigned to the preferred still; fixed strategies return 1.0. |
| score_report | STRING | Human-readable scoring and emitted-batch report. |