Protoface MiniMax H3 · Generate Video
The pack's flagship, all fourteen inputs of it
- video
- files
- run id
This is the node the pack leads with
Protoface's README namechecks MiniMax H3 first in its model list, and ships a MiniMax H3 Text to Video template in Templates → the Protoface extension. That's not marketing fluff - H3 is the model that made "closed video quality, with native audio" available in ComfyUI without a local 33B omni-modal download and a geofenced licence to argue about. Here it arrives as one paid node.
The pitch, concretely: cinematic video with synchronised audio generated in the same pass, and dense reference control - you can feed it a first frame, a last frame, still references, a reference video, and even an audio reference. Locally that's the kind of multi-input rig people spend a week wiring. Here it's a handful of sockets on one node, and the argument shifts from "can I" to "should I pay for this take."
Inputs, grouped by what they do
Shape of the shot. prompt is the description. duration_seconds is an integer from 4 to 15, defaulting to 8 - count that twice before queueing, because duration is the main lever on cost. quality is a resolution tier defaulting to 480p, i.e. the cheap default; go up deliberately. aspect_ratio is a free string defaulting to auto.
Keys / frames. first_frame and last_frame take a single asset each (a public URL, data URI, or asset id). Supplying both is how you get a controlled transition instead of a free roll - the middle is invented, the ends are yours.
References. reference, reference_video and audio are list-shaped: connect one asset and the socket grows, connect several and they count toward the model's reference limit. This is where H3 earns its keep - a character still plus a motion clip plus a music bed, all conditioning one generation.
Style and toggles. style is a picker (its tooltip is empty, so try the options rather than theorising). generate_audio defaults to true; turning it off doesn't make the render silent-and-cheaper, it just drops a part of what H3 does best. enhance_prompt defaults to false and its tooltip is unusually candid for this pack: it rewrites your prompt "into this engine's native prompt grammar," best effort, and sends the prompt unchanged if the rewrite is unavailable or would alter the requested direction. Translation: it can't hurt much, and it mostly helps when your prompts are short.
Booking. generation_id (fixed = resume/reuse, incremented = new paid job, nothing to do with randomness) and request_scope (auto in the UI; you supply it headless).
Outputs
video (VIDEO, list), files (PROTOFACE_FILE, list - originals, for Protoface Save File), run id (string). Because everything is a list, one node can hand several clips downstream and ComfyUI maps over them; heterogeneous sizes are handled.
Install
No weights. That's the headline - H3's local route is a ~42GB download under a territory-restricted licence; this is a key and a network call.
cd ComfyUI/custom_nodes
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git protoface
python -m pip install -r protoface/requirements.txt
ComfyUI 0.41.0+, Python 3.10+, packages httpx, jsonschema, Pillow, av>=14. Manager users: search Protoface, install protoface-nodes, restart, reload the tab. Then Protoface → key. Headless: PROTOFACE_API_KEY_FILE.
Where people get bitten
The defaults are cheap on purpose - 480p, 8 seconds. A clip that "looks soft" is usually you never leaving 480p, not the model.
Reference limits are real and counted across batches: connect a folder of stills and the node refuses with "too many references, including items in input batches." Split the batch.
Then the paid-job rules. A dropped browser or a polling timeout leaves a live job - requeue with the same generation_id, or use Protoface Resume Run with the run id. Incrementing the ID "to retry" is a second charge. Cancellation is best effort and doesn't imply a refund. And keep ~/.cache/protoface-comfyui intact; it's the journal that makes all of that recovery work. On a shared server, remember anyone who can queue a workflow spends your key.
Inputs (14)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| first_frame | COMBO | A public URL, a data URI, or an asset id. | |
| audio | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| reference | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| reference_video | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| last_frame | COMBO | A public URL, a data URI, or an asset id. | |
| quality | COMBO | 480p | 3 options: 480p, 768p, 2k |
| duration_seconds | INT | 84–15 | — |
| aspect_ratio | STRING | auto | — |
| enhance_prompt | BOOLEAN | false | Rewrite the prompt into this engine's native prompt grammar before rendering. Best effort: the prompt is sent unchanged if the rewrite is unavailable or would alter the requested direction. |
| generate_audio | BOOLEAN | true | — |
| style | COMBO | 3 options: [object Object], [object Object], [object Object] | |
| generation_id | INT | 00–9007199254740991 | Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed. |
| request_scope | STRING | Automatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| files | PROTOFACE_FILE | — |
| run id | STRING | — |