Inferway H3 Generate (legacy)
MiniMax H3 Video Without Owning the GPU
- first_frame
- last_frame
- ref_image_1
- ref_image_2
- ref_image_3
- video
- interaction_id
- status
MiniMax H3 is the 33B omni-modal video model that finally gave open weights an answer to Veo's welded-in audio - synced stereo sound, up to 15 seconds, 2K. It came with two catches. The weights are ~42 GB, and the H3 Community License excludes the US, the EU, the UK and South Korea from its "Applicable Territory," so plenty of people reading this aren't licensed to run the file at all.
Inferway H3 Generate walks around both. No weights, no local model. You give it a prompt, it calls inferway/minimax-h3-768p on Inferway's service, and hands you a native ComfyUI VIDEO object your SaveVideo node already knows how to write.
Where this fits
If you're in a licensed territory with a card that can hold H3, run it locally and skip this. For everyone else this is the door: geofenced out, short on VRAM, or wanting a look before committing hardware. Standard API-wrapper bargain, standard fine print - every call is metered and your prompt leaves your machine.
How it actually works
It's a queue-and-poll client, and more careful than most. On Queue, the node serializes any connected image to PNG, then preflights against the service's live model catalog and validates your request against what that model currently advertises - so you can't spend money on a mode the service won't accept. Images upload against per-upload tickets with a SHA-256 check on the receipt. The create call carries a deterministic Idempotency-Key derived from your workflow, node position and profile.
Then it polls that interaction ID with backoff - 2 seconds growing to 10 while queued or running, transient network errors extending to 30 - downloads the result with a byte-count and SHA-256 check, and wraps it as a VIDEO.
Two consequences. That idempotency key means re-running the same node with the same content inside a prompt reuses the existing task instead of quietly creating a second billable one, and changing the prompt mid-flight throws changed_intent_same_slot rather than silently charging you twice. And wait_timeout_seconds is a local deadline: expire it and you get a wait_timeout_<id> error while the remote job keeps running. That's what the Resume node and Cancel node are for.
The inputs you'll actually touch
prompt is a multiline string, nothing surprising. duration_seconds runs 5 to 10, default 5 - the service's own range, not an arbitrary widget limit.
resolution is a combo: default, 1344x768, 768x1344. Pick the orientation you want; default lets the service choose. model is fetched remotely rather than hardcoded, so it can gain entries without you updating the pack.
seed is a string, not an int widget - paste a decimal unsigned 64-bit value (0 to 18446744073709551615) or leave it blank for random. Blank is the normal case.
first_frame, last_frame and ref_image_1..3 are IMAGE inputs, and yes, they sit on a model that currently does text-to-video. Deliberate: the sockets exist, but the pack only permits image modes when the live catalog advertises them, and as of the pack's 2026-09-21 acceptance the observed capability was text-to-video only. Don't build a first/last-frame workflow around this today and act surprised.
You also can't mix modes. Frames plus reference images is rejected locally, last_frame without first_frame is rejected, and references must be filled in order without gaps. profile has one option, default; leave it.
Outputs are video (straight into SaveVideo), interaction_id (your receipt - keep it, it's the only handle on a task that outlives the run) and status.
Installing it
ComfyUI Manager: search Inferway H3 (registry package ID inferway-comfy) and install. Or manually:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/inferway/comfyui-inferway inferway-comfy
# use the SAME python that runs ComfyUI - not your system python
/path/to/ComfyUI/.venv/bin/python -m pip install -r inferway-comfy/requirements.txt
Restart the server. The dependency list is one line - httpx>=0.24.0. No torch wheels, no model download. It does need ComfyUI 0.35.0+ and Python 3.10+, because it's written against the newer comfy_api.latest node API.
The key goes in the environment of the server process, not the node:
export INFERWAY_API_KEY="your_key_here"
Create one at inferway.ai/console/keys, export it before launching ComfyUI, restart. There's deliberately no key field in the UI - shared workflow JSON can't leak your credential, and you can't fix a missing key from the canvas.
Where people get burned
The model dropdown is empty. That combo is filled by a local route that calls the service with your server-side key, and it returns an empty list on any failure. Almost always it means "ComfyUI started before you exported INFERWAY_API_KEY." Restart, don't reinstall.
You hit Stop and assumed the work stopped. It didn't. Stop, closing the tab, and wait_timeout_seconds expiring all interrupt only the local polling. The remote job is still queued or running, and can still finish and bill.
A 10-second clip blew past the 600-second default timeout. Long generations and busy queues both eat wall clock. Raise wait_timeout_seconds (max 3600) instead of reflexively hitting Stop - you paid either way, and stopping just loses your handle on the result.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | inferway/minimax-h3-768p | Model identifier |
| prompt | STRING | Generation prompt text | |
| duration_seconds | INT | 55–10 | Video length, 5-10 seconds. Billed per second; prices: https://inferway.ai/pricing |
| resolution | COMBO | default | default is landscape 1344x768; or pick 1344x768 (landscape) or 768x1344 (portrait) |
| profile | COMBO | default | API key profile. Add or switch keys: Settings → Inferway, or the Inferway menu. |
| wait_timeout_seconds | INT | 00–7200 | Local wait limit in seconds. 0 waits automatically (up to 7200s); 60-7200 sets an explicit limit. Reaching it never cancels the remote task. |
| seedopt | STRING | Optional decimal unsigned 64-bit integer seed | |
| first_frameopt | IMAGE | First frame image | |
| last_frameopt | IMAGE | Last frame image | |
| ref_image_1opt | IMAGE | Reference image 1 | |
| ref_image_2opt | IMAGE | Reference image 2 | |
| ref_image_3opt | IMAGE | Reference image 3 |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | Generated video stream |
| interaction_id | STRING | Inferway interaction ID |
| status | STRING | Safe status text |