MiniMax H3 Select Still Frame
The middle frame is the keep — grab it without hunting
- images
- image
- all_frames
- selected_index
MiniMax H3 is a video model, full stop - its smallest generation is five frames, and that's just what the model's architecture does. When you want a still image out of it, the trick the VRGameDevGirl pack uses is to treat those five frames as a burst and keep the best one. MiniMax H3 Select Still Frame is the "keep the best one" half of that trick: you hand it the five decoded frames and it hands back whichever you want, defaulting to the middle.
Why the middle? Because of how a burst works. In the first and last frames the model has less temporal context on one side, so it's the most likely to carry start/end artifacts or odd exposure settling. The center frame - number 2 of 0–4 - has context on both sides, so it tends to be the most settled, most "final image" version. It's the same instinct as burst photo mode on a phone, and it's the right default for most shots.
Where it sits in the workflow
This node is the payoff end of a two-node pipeline. Its sibling, MiniMax H3 Text / Reference to Image, builds a five-frame latent and the conditioning. You run that through the MiniMax sampler, VAE-decode the result, and the decoded output lands here as a batch of five frames. This node picks one, and you're done - a single still from a video engine.
Inputs and outputs
It's about as simple as a node gets:
images- the decoded burst (required). It needs at least one frame.selection-middle(default),first,last, orindex.frame_index- only used when selection isindex; it's clamped to the actual frame count, so asking for frame 9999 on a five-frame burst just quietly gives you the last one rather than erroring.
Outputs:
image- the selected single frame (the one you actually want to save or feed onward).all_frames- the whole burst passed through, so you can eyeball the rejects or branch off without re-decoding.selected_index- an INT telling you which frame was chosen. Wire it to a filename/seed node if you want to record it in metadata.
Install
Same pack as the whole H3 set - VRGameDevGirl:
cd ComfyUI/custom_nodes
git clone https://github.com/vrgamegirl19/comfyui-vrgamedevgirl.git
or search the pack by name in ComfyUI Manager, restart, and hard-refresh the browser. Like every node in this pack, you're installing the full requirements list (kornia, librosa, transformers, voxcpm, llama-cpp-python and the rest), so expect a heavier-than-typical pip install. Windows portable users: install Cython and scikit-build-core first per the README, and Python 3.12 is friendlier than 3.13.
Things worth knowing
middleisn't magic. On a clean static scene the differences between the five frames are subtle, andfirstcan actually look sharper if the model settled early. When one frame matters (a character's expression, an exact prop position), run once, glance atall_frames, and switch toindexif the middle isn't the winner.- The
imagesinput is a plain IMAGE batch - so this node will happily "select the middle frame" of a real 5-frame video clip too, if you ever want that. It doesn't know or care that the burst came from H3. - Pair it with the pack's still-image node rather than fighting the stock workflow. The H3 license geography caveat from that article applies here too - check the MiniMax H3 Community License before running the weights in the EU, UK, US or South Korea.
- If your burst is larger than five frames (say you decoded a longer clip),
middlestill does the sensible thing and picks the center of whatever it received.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| selection | COMBO | middle | 4 options: middle, first, last, index |
| frame_index | INT | 20–9999 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| all_frames | IMAGE | — |
| selected_index | INT | — |