Nodes/Protoface/Protoface Wan 3.0 Prime · Image to Video
ComfyUI Node

Protoface Wan 3.0 Prime · Image to Video

First Frame In, Fifteen Seconds Out

By protoface-ai·Created 22 days ago·Updated 13 days ago· 0
Protoface Wan 3.0 Prime · Image to Video
    • video
    • files
    • run id
    ◄prompt►
    ◄image▾►
    ◄resolution720p►
    ◄duration5►
    ◄aspect_ratio▾►
    ◄enable_audiotrue►
    ◄enable_prompt_expansionfalse►
    ◄last_image▾►
    ◄seed▾►
    ◄generation_id0►
    ◄request_scope►

    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.

    CategoryProtoface/Video/alibaba

    Inputs (11)

    NameTypeDefaultDescription
    promptSTRINGThe positive prompt for the generation.
    imageCOMBOA public URL, a data URI, or an asset id.
    resolutionCOMBO720pThe resolution of the generated video.
    durationINT52–30The duration of the generated media in seconds (2-30s).
    aspect_ratioCOMBOThe aspect ratio of the generated video. If not specified, it is adapted to the input image.
    enable_audioBOOLEANtrueWhether to include audio in the generated video.
    enable_prompt_expansionBOOLEANfalseIf set to true, the prompt optimizer will be enabled.
    last_imageCOMBOA public URL, a data URI, or an asset id.
    seedCOMBOThe random seed to use for the generation. -1 means a random seed will be used.
    generation_idINT00–9007199254740991Keep fixed to reuse/resume this paid job. Increment for a fresh paid generation; independent of the model seed.
    request_scopeSTRINGAutomatically assigned per node. Headless clients must supply a stable unique workflow/node ID. This is not a secret.

    Outputs (3)

    NameTypeDescription
    videoVIDEO—
    filesPROTOFACE_FILE—
    run idSTRING—