Protoface Wan 3.0 Prime · Image to Video
First Frame In, Fifteen Seconds Out
- video
- files
- run id
Here's the thing nobody tells you when you google "Wan 3.0": there are no Wan 3.0 weights. Wan 2.2 is the last open Wan - Alibaba went API-only at 2.5 and never came back, and the KB's Wan doc says it plainly. So if you've been animating stills on local Wan 2.2 for a year, Wan 3.0 Prime is the tier above you, reachable only through something like this node.
What Prime means here
Protoface lists two WAN 3.0 models in this pack: Wan 3.0 and Wan 3.0 Prime. Same operations, same controls, and according to the model description, Prime is simply the higher-quality variant. That's the honest framing - this is a quality tier, not a different feature set. If you're deciding, read the base Wan 3.0 article; the difference you'll actually feel is between drafting cheap and keeping one.
Image-to-video is the operation that earns its money. Text-to-video gives you whatever the model invents; animating a frame you already curated gives you control over composition, and it plugs into everything else you've built locally. Qwen or FLUX output → this node → back into your local upscale and interpolate chain. That's the whole trick.
The mechanism, briefly
The pack doesn't contain a Wan implementation. It ships a bundled catalog of model/task schemas and generates a native ComfyUI node for each pairing - alibaba/wan-3.0-prime × video.animate in this case - all running one shared HTTP adapter. Your IMAGE tensor gets encoded to PNG, uploaded (content-hash cached, so re-running the same still uploads nothing new), submitted, polled, then downloaded and decoded into a native VIDEO.
The part that matters for your wallet is the journal. Before submitting anything, the adapter writes a request identity - account, request_scope, node id, generation_id, model id, schema version, and a hash of your actual payload - into a local SQLite file. Requeue the identical graph and it resumes the recorded run instead of paying again. Change one character of the prompt and it's a new job, because it genuinely is one.
Controls that matter
prompt is the positive prompt. Describe what happens, not what's in the picture - the image already carries the subject.
image is where the still goes. It's a mode-picker field, not a plain socket: choose Image and connect a Load Image or any IMAGE output, or choose References and feed it a reference asset instead. Leaving it unconnected and picking Default is how you get an error rather than a video.
last_image is the sleeper feature. Set it and you're doing keyframe interpolation - first frame here, last frame there, model invents the middle. The two images should share framing and lighting or you'll get a smooth but weird morph.
duration is 2–30 seconds, default 5. Longer is more expensive and more likely to drift.
resolution gives you 480p, 720p, 1080p (default 720p). Watch what 1080p does to your bill on a 30-second clip.
aspect_ratio is optional. Leave it on Default and it adapts to your input image; force 16:9 on a portrait still and you're asking for a crop you didn't plan.
enable_audio defaults true - this is one of the reasons to reach for Wan 3.0 over a silent local model. Turn it off when you're scoring the clip yourself; it's faster and one less thing generating. enable_prompt_expansion defaults off (good - for animation prompts the rewrite usually hurts). seed is optional.
Outputs
video comes out as a list of native ComfyUI VIDEO objects - preview it, feed it to Video Combine, or chain it straight into FLUX.3 Video's Extend node. files holds the original MP4 for Protoface Save File. run id is the string you give Protoface Resume Run if the browser dies mid-poll.
Install
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
Or Manager → search Protoface → install protoface-nodes → restart → reload the page. It needs ComfyUI 0.41.0+ and Python 3.10+, and installs httpx, jsonschema, Pillow and av - PyAV is what decodes the returned MP4, so if video nodes error on import, check that av actually landed in ComfyUI's interpreter. Windows portable users must use python_embeded\python.exe -m pip, not a system Python.
Then click Protoface in the bottom-right corner, paste your key, done. Note that this bills your Protoface account directly - Comfy credits are a different wallet, and Comfy Cloud won't let you install this at all.
Where people get burned
Connecting a batch. A four-image Load Image batch into image throws "expects one asset; split the image/audio batch first". Split it; i2v is one frame in.
Bumping generation_id to "retry". Don't. If a job is stuck or timed out, requeue unchanged or use Resume Run with the run id. Incrementing it is how you pay twice for the same clip.
Interrupting and expecting a refund. Cancellation is best effort on the API side and doesn't promise one.
Expecting a local-feeling resolution ladder. 480p exists because drafts exist. Do your prompt experimenting there, then re-run the winner at 720p.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | The positive prompt for the generation. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | The resolution of the generated video. |
| duration | INT | 52–30 | The duration of the generated media in seconds (2-30s). |
| aspect_ratio | COMBO | The aspect ratio of the generated video. If not specified, it is adapted to the input image. | |
| enable_audio | BOOLEAN | true | Whether to include audio in the generated video. |
| enable_prompt_expansion | BOOLEAN | false | If set to true, the prompt optimizer will be enabled. |
| last_image | COMBO | A public URL, a data URI, or an asset id. | |
| seed | COMBO | The random seed to use for the generation. -1 means a random seed will be used. | |
| 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 | — |