MAI Seed Hunter (compare + winner seed)
Find the keepable seed by watching 2-6 candidates side by side
- video_1
- video_2
- video_3
- video_4
- video_5
- video_6
- winner_video
- winner_seed
- winner_index
- manifest
Seed hunting for video is miserable when it's done blind. Generate six clips, save them, open them one at a time, try to remember which was which. MAI Seed Hunter is the pack's answer: wire in 2-6 cheap candidate renders plus the seed each ran on, watch them synchronized in a browser widget (hover to hear, flicker, frame-lock), star the keeper, and let the next queue pass the winner's seed out to your finalize pass. Pick, then finalize - two executions, and the graph never waits on a human mid-run.
That split is the design and it's the right one. Video generation is expensive enough that you don't want to pay full price for every candidate, and H3 is expensive enough that you want to hunt on cheap renders. The pack's own guidance agrees: iterate prompts and seeds on turbo/preview-grade passes, then run the winner through the full pipeline. Seed Hunter is built exactly for that - cheap candidates in, one seed out.
The inputs that matter
The optional inputs are where the real interface lives: video_1 through video_6, label_1 through label_6, and - the thing that makes it a seed hunter - seed_1 through seed_6, the seed each candidate actually ran on. There's no way for the node to read those off the clips, so you type them; that's the contract. winner (default 1) is set by the widget's star and preview_crf (23) controls the h264 preview quality. Both hold_map (from H3 Time Smear's hold_map_used, draws the regenerated window as a band with enter/exit blips) and curves (a JSON {name: [per-frame floats]} drawn as lanes under the playhead) are optional, for when you're comparing de-roped windows specifically.
Outputs: winner_video, winner_seed, winner_index, and a manifest describing the comparison. Wire winner_seed into the finalize pass's noise node and winner_video onward, queue once more, done.
How it stays cheap
No VRAM. Each wired VIDEO is written once to a temp directory as a small h264 preview - CPU encode, no VAE, no tensors kept - and the browser decodes them. Six 3-second clips as previews cost you a little disk and basically nothing in GPU memory, which is the entire point when the alternative is loading six decoded frame stacks.
Alpha caveats are modest but real: the in-node playback sync between sources is approximate and can drift or stagger, and scrubbing during playback can wedge the transport - re-queue or reload recovers. For frame-exact review the pack points you at its standalone deck tooling instead; this is the quick triage surface.
It ships in ComfyUI-MAINodes (matlowai, GPL-3.0), under image/minimax/video:
cd ComfyUI/custom_nodes
git clone https://github.com/matlowai/ComfyUI-MAINodes
Restart and queue. Also worth remembering before you go: H3's open weights are licence-restricted in the US, EU, UK and Korea - seed hunting assumes you're legally running the model in the first place.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| winner | INT | 11–6 | set by the viewer's star; which source winner_video passes through |
| preview_crf | INT | 2310–40 | — |
| video_1opt | VIDEO | — | |
| video_2opt | VIDEO | — | |
| video_3opt | VIDEO | — | |
| video_4opt | VIDEO | — | |
| video_5opt | VIDEO | — | |
| video_6opt | VIDEO | — | |
| label_1opt | STRING | — | |
| label_2opt | STRING | — | |
| label_3opt | STRING | — | |
| label_4opt | STRING | — | |
| label_5opt | STRING | — | |
| label_6opt | STRING | — | |
| seed_1opt | INT | 00–9007199254740991 | the seed candidate 1 ran on |
| seed_2opt | INT | 00–9007199254740991 | the seed candidate 2 ran on |
| seed_3opt | INT | 00–9007199254740991 | the seed candidate 3 ran on |
| seed_4opt | INT | 00–9007199254740991 | the seed candidate 4 ran on |
| seed_5opt | INT | 00–9007199254740991 | the seed candidate 5 ran on |
| seed_6opt | INT | 00–9007199254740991 | the seed candidate 6 ran on |
| hold_mapopt | STRING | H3 Time Smear's hold_map_used: the viewer draws the regenerated window as a band and fires enter/exit blips on it | |
| curvesopt | STRING | JSON {name: [per-frame floats]}; drawn as lanes under the playhead |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| winner_video | VIDEO | — |
| winner_seed | INT | — |
| winner_index | INT | — |
| manifest | STRING | — |