MiniMax H3 Max · Image to Video
First frame, last frame, done
- image_url
- last_image_url
- video
- task id
Two image sockets and a sentence. That's the shape of this node, and the second socket is the interesting one: give it an opening frame and a closing frame and it will animate the distance between them. It's the cheapest way to get a controlled camera move or a specific 8-second beat out of a still, without a ControlNet skeleton or a keyframed timeline anywhere in the graph.
What it is
PopNow_minimax_h3_max_image_to_video is the image-to-video node for MiniMax H3 Max, one of the H3 variants PopNow hosts. Pricing starts around 7.5 credits ($0.075) per second, it renders 5 to 15 seconds of video with sound generated in the same pass as the picture, and it runs entirely on PopNow's servers - no checkpoint on your disk, no VRAM math, no queue behind your own GPU.
Max is the fast, punchy variant rather than the top-resolution one. It caps at 768p where plain H3 goes to 2K, and it costs more per second than the base model. What you're buying is speed and a busier default sound mix - ambience, effects, music cues - which makes it good for social cuts and bad for anything that needs to intercut with 2K footage.
How it works
Your image is encoded to PNG (or a high-quality JPEG if it would exceed the 10 MiB upload limit), uploaded, and referenced by a popnow:// URI that only your key can use. The node then asks PopNow for a clip that opens on that frame, quoting the cost first and holding at most the quoted amount. When it finishes, the file is downloaded and delivered as a regular ComfyUI VIDEO.
Two details that matter in practice. Uploads are cached by content hash for 12 hours, so re-runs with a tweaked prompt don't re-send the image. And there's no seed widget anywhere on this node - you're not going to reproduce a take exactly, so download the ones you like.
The inputs
image_url- the opening frame. It fixes composition and subject; write the prompt around what's already there rather than against it.prompt- what happens after that frame: action, camera, mood.duration_seconds- 5 to 15, default 8. Note the default is 8 here, not 5 like most of the pack. If you queue without checking you're buying an 8-second clip.resolution-480por768p, default 768p.enable_prompt_expansion- off by default, and when you turn it on the request picks up a flat prompt-expansion fee on top of the per-second charge. It rewrites your prompt into something fuller, which helps short lazy prompts and hurts precise ones.last_image_url(optional) - the closing frame the clip should resolve to. The tooltip is explicit that it can only be sent together with an opening frame, which is why it's optional here and not on the text-to-video sibling.
Wire video to Save Video; task id is there for the API console and support tickets.
Getting a clean in-between
The trick people miss is that the two frames don't have to be related by generation. Crop a wide landscape, punch in on a detail of the same image, and use the pair to get a push-in. Or take a character portrait and a full-body shot of the same character from your image editor and let H3 invent the move between them. Keep the two frames the same aspect ratio - mismatched shapes force the model to invent a reframe and it usually invents a bad one.
If the second frame is very different from the first, expect the clip to rush the transition in the middle and linger at both ends. Shorter durations (5–6s) hide that better than 15.
Install
Manager → search PopNow → Install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/popnow-ai/popnow-comfyui
Restart ComfyUI, paste a key from popnow.ai/api/console/keys into Settings > PopNow, restart once more so the node list comes from your account. The pack installs nothing else - pyproject.toml declares no dependencies, and it uses the comfy_api node API that already ships with ComfyUI.
Troubleshooting
No PopNow API key is set means the key never made it into user/popnow/config.json - check that you restarted after saving. PopNow 40201 is an empty wallet; drop to 480p or shorten the clip. PopNow 40004 is a combination the model won't serve, and the message names the field to change. If a run dies mid-way, check the API console with the task id before re-queuing: a cancelled node keeps rendering on PopNow and is charged if it succeeds.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| image_url | IMAGE | Opening frame. It fixes the composition and the subject the clip starts from. | |
| prompt | STRING | Describe what happens after the opening frame: the action, the camera, and the mood. | |
| duration_seconds | INT | 85–15 | Requested output length in seconds, from 5 to 15. |
| resolution | COMBO | 768p | Output resolution. |
| enable_prompt_expansion | BOOLEAN | false | Expand the prompt into a fuller description before generating. Requests with it on add a flat per-request prompt-expansion fee. |
| last_image_urlopt | IMAGE | Optional closing frame the clip should resolve to. It may only be sent together with an opening frame. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| task id | STRING | The PopNow task id, for the API console logs or support. |