MiniMax H3 Video Edit
MiniMax H3 Video Edit
- reference_images
- client
- video
- reference_audio
- video_url
H3 launched with a reported #1 in Video Editing (With Audio) on the Artificial Analysis arena and V2V motion transfer that drew "like Kling" comparisons. This is that node: feed it a clip you already shot or generated, and it rewrites the lighting, weather, style, environment or specific elements while the source keeps driving identity, composition and motion.
The thing it is not is a renderer. It doesn't build a clip from scratch - you need footage. What it's good for is the pass you'd otherwise fake: the shot is fine but the light is wrong, the scene is fine but the weather isn't, the plate is fine but it needs to look like dusk. With a local vid2vid chain that means ControlNet, masks and a lot of luck. Here it's a prompt line.
How it works
You supply the source in one of two ways, and the video input (a normal ComfyUI VIDEO) wins if connected: the pack uploads the file's own bytes without re-encoding, so an MP4 stays an MP4 on the way out. Otherwise video_url takes a URL - and this is where the pack earns its keep, because every video node in this collection emits a STRING video_url, so you can chain Text-to-Video → Video Edit without a single file on disk.
For audio, the reference_audio slot is encoded to MP3 at 192k, uploaded, and prepended to whatever's in reference_audios_url. Then the node POSTs to /api/v3/wavespeed-ai/minimax-h3/video-edit, polls every 10 seconds, and waits up to 30 minutes - the pack's longest timeout, alongside the Seedance 2.5 family. Cancel mid-poll and it exits cleanly rather than erroring out.
Reference images (up to 9, cited as <Picture N>) and reference audios (up to 3, <Audio N>) steer the edit; a wired batch wins over the matching URL field.
The inputs that matter
prompt is required and is where the edit lives. duration is the trap worth reading twice: default 0, range 0–15, and the tooltip says 3–15 is a real length while below 3 means "follow the input clip" - so the default is "same length as what I gave you", not "zero seconds". resolution (480p/540p/768p/1080p), aspect_ratio (default auto, adapting to the input), and generate_audio complete the set. That last one defaults to true, and it means exactly what it says - a new soundtrack. If the original audio matters, turn it off to keep the input's track.
One output: video_url, a STRING. Pipe it to the pack's Preview Anything node (it renders a video URL and offers a Download button), or feed it onward as another video node's source.
What it costs, because this one bites
Billing counts input seconds plus output seconds, each capped at 15: roughly $0.05 per counted second at 480p, $0.075 at 540p, $0.125 at 768p, and $0.25 at 1080p. A 5-second source rewritten to 5 seconds at 480p is 10 counted seconds, so about $0.50. The same job at 1080p is around $2.50. Queue eight variations and you've spent a GPU's worth of money on one shot - look-dev at 480p, ship at the tier you actually want.
Installing
Manager → Install Custom Nodes → search erpk → ERPK Custom Nodes → restart, or:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/eRepublik-Labs/comfyui-nodes-erpk.git erpk
cd erpk && pip install -r requirements.txt
You're installing the whole monorepo - WaveSpeed plus the Claude, Gemini, OpenAI and Grok wrappers - though the WaveSpeed video nodes only truly need requests, pydantic and Pillow. Add your key via right-click canvas → ERPK Settings (per-user, not stored in the workflow), then look under ERPK → WaveSpeedAI.
One note if you're in the US, EU, UK or South Korea: H3's community licence excludes those territories for the local weights - you're not licensed to run H3 on your own hardware there. The hosted endpoint this node calls is a separate, globally available service. Depending on where you live, the API isn't the lazy option, it's the only licensed one.
Where people get stuck
No source clip, no call. Without video_url or video connected you get A source video is required, as either a VIDEO input or a URL.
A 30-minute queue looks like a hang. It isn't - watch the node, not the progress bar.
Exceeding the caps quietly. Ten reference images becomes nine, four reference audios becomes three. Nothing warns you.
generate_audio doing its job. Replacing the soundtrack is the default; people notice this after the render, when the dialogue is gone. Turn it off before you queue, not after.
Paying for references. Each one adds roughly $0.02, on top of a rate that already quadruples between 480p and 1080p.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | What to change: lighting, weather, style, environment or specific elements. Cite references as <Picture N> and <Audio N>. | |
| video_urlopt | STRING | Source video URL. Connect the video_url output of any video node in this package. Input seconds are billed alongside output seconds, each capped at 15. | |
| reference_images_urlopt | STRING | Reference image URL(s), cited as <Picture N>. Up to 9, about $0.02 each. Ignored when `reference_images` is connected. | |
| reference_audios_urlopt | STRING | Reference audio URL(s), cited as <Audio N>. Up to 3, about $0.02 each. | |
| reference_imagesopt | IMAGE | Reference images as a ComfyUI IMAGE batch (B,H,W,C), capped at 9. Takes precedence over `reference_images_url`. | |
| clientopt | WAVESPEED_AI_API_CLIENT | WaveSpeed API client (optional if API key is configured in Settings) | |
| resolutionopt | COMBO | 480p | Output resolution. Roughly $0.05 per counted second at 480p, $0.075 at 540p, $0.125 at 768p and $0.25 at 1080p; counted seconds are input plus output. |
| aspect_ratioopt | COMBO | auto | Output aspect ratio. auto adapts to the input video. |
| durationopt | INT | 00–15 | Output duration in seconds (3-15). Below 3 follows the input clip. |
| generate_audioopt | BOOLEAN | true | Generate a new soundtrack. Off keeps the input video's audio track. |
| seedopt | INT | -1-1–2147483647 | Generation seed, sent to the API. A fixed seed reproduces the same video and lets ComfyUI reuse the cached result; -1 generates a new one each queue. |
| videoopt | VIDEO | Source clip as a ComfyUI VIDEO. Uploaded to WaveSpeed and used instead of `video_url` when connected. | |
| reference_audioopt | AUDIO | A reference audio track, cited as <Audio 1>. Encoded to MP3, uploaded to WaveSpeed and prepended to `reference_audios_url`. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| video_url | STRING | — |