Protoface Seedance 2.0 Mini · Image to Video
The draft machine you'll queue fifty times
- video
- files
- run id
What it's for
Take a still, make it move. That's the whole job, and it's the job most people actually have: you generated a good image locally at 20 steps, you want six seconds of it breathing, and you don't want to spend flagship money finding out whether the camera move works.
Seedance 2.0 Mini is the bottom tier of ByteDance's closed video line - the one priced for drafts. It maxes out at 720p, which is fine, because the point of a draft is that you're going to throw most of them away. This node is the image-to-video operation on that tier: your frame goes in, a clip comes out, and no local GPU is involved at any point. ByteDance doesn't release Seedance weights; there is no local option to weigh against this one.
The mechanism, plainly
Under the pack there's a single shared implementation for all its models, with per-model controls generated from the provider's request schema. This node gathers your prompt, your resolution, duration, aspect ratio, audio flag and media, uploads any attached image to Protoface, submits a job, polls, downloads, and returns a native ComfyUI VIDEO. Your picture is re-encoded and shipped to a server. That's not a bug in the node - that's what calling a closed model means, and it's worth deciding up front whether the frame you're animating is something you're allowed to hand to a third party.
Inputs that matter
image is the anchor frame. It's a dynamic input that accepts a native ComfyUI Image, or a public URL, data URI, or existing Protoface asset id - and the list grows if you connect more than one, though for a first frame you want exactly one.
prompt describes the motion, not the picture. The frame already told the model what's in the shot; the prompt tells it what happens next: camera push, hair movement, a turn of the head. Writing a full scene description here mostly wastes tokens.
resolution is 480p or 720p - that's the Mini ceiling, and the reason it's cheap. duration runs 4–15 seconds in whole seconds. aspect_ratio is optional here, and the tooltip is honest about why: leave it empty and the output adapts to your input image. For a still you generated locally at, say, 832×1216, that's the right answer; forcing 16:9 on a portrait frame just crops or letterboxes your work.
last_image is the quiet feature. Attach a second frame and you're asking for a clip that lands there instead of open-ending. It's the difference between "animate this" and "get me from this frame to that one," and it's the closest thing this node has to shot planning.
generate_audio defaults to true. Turn it off if you're scoring the clip yourself - no reason to pay for a soundtrack you'll mute.
The two non-model fields: generation_id is the paid job's identity. Fixed = requeue and resume the same run. Incremented = a new, newly billed generation. request_scope is auto-assigned; only headless clients need to care.
Outputs are video (a list - ComfyUI maps downstream nodes across it), files (the original downloads, which is where you go when the provider returns something the native type doesn't love), and run id, which feeds Protoface Resume Run if a poll times out.
Install
Requires ComfyUI 0.41.0+ and Python 3.10+. Manager: Extensions → search Protoface → install protoface-nodes → restart, reload browser. Manual:
cd ComfyUI
git clone --branch v0.1.0 --depth 1 https://github.com/protoface-ai/protoface-comfyui.git custom_nodes/protoface
python -m pip install -r custom_nodes/protoface/requirements.txt
Use ComfyUI's interpreter (python_embeded/python.exe on Windows portable). Then click Protoface bottom-right and paste your key; headless setups use PROTOFACE_API_KEY. No models to download, no torch conflicts - the dependency list is httpx, jsonschema, Pillow and PyAV.
Where it goes wrong
You iterate on the wrong node. Mini has no 1080p. Every good draft here needs a re-run on the standard or Fast node to go higher, which is a second charge. If you suspect a shot is a keeper, do the last iteration on the tier you intend to ship.
Burning credits on 480p→720p re-rolls. Mini is around 8 credits per second at 720p (a 5-second clip lands near 40). Cheap per clip, not free per session - people queue twenty variants and then wonder why the month is expensive. Draft at 480p, then promote.
The generation_id trap. Change the prompt, the image, or the duration and you haven't reused anything - that's a new request that happens to have the same integer. Fixed ID only helps when the inputs are identical. Two people in the same week hit the opposite: they incremented the ID after a crash, and paid twice for a job that would have resumed.
My read
This is the node I'd wire first and keep. Image-to-video with an optional end frame at 480p is a genuinely useful drafting tool and the cheapest one here. Just be clear-eyed: it's a metered call, not a model, and climbing to higher resolution costs another generation.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the scene, action, camera movement, and mood for the video. | |
| image | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | The output video resolution. |
| duration | INT | 54–15 | The duration of the generated video in seconds (4-15s). |
| aspect_ratio | COMBO | The aspect ratio of the generated video. If not specified, adapts to the input image. | |
| generate_audio | BOOLEAN | true | Whether to generate native audio synchronized with the output video. Defaults to true. |
| last_image | COMBO | A public URL, a data URI, or an asset id. | |
| 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 | — |