Protoface Seedance 2.0 · Edit Video
Prompt-driven video editing that actually holds the subject
- video
- files
- run id
The gap this fills
Local workflows can restyle a frame. Restyling motion - keeping a performance intact while changing the world around it - is where the open stack still feels like research and the closed APIs feel like products. Seedance 2.0 Edit is the full-tier version of that operation: give it a clip and an instruction, get a rewritten clip back at up to 4K.
It's the node I'd point a colourist or an editor at before I'd point them at a ControlNet graph. It's also the node where a client-footage conversation has to happen first, because your source file is going to Protoface's servers.
Under the hood
Same shared client as every node in this pack: request built from the provider's public schema, media uploaded, job submitted and polled, result downloaded and returned as a native ComfyUI VIDEO. Billing is per second of output and per second of input video, with the input side capped at 15 seconds. Nothing runs on your GPU except the encode.
The fields
video takes a native ComfyUI Video input - a loader, or the video output of an earlier Protoface node, ideally routed through the asset-reuse path so it isn't uploaded twice.
prompt is an instruction. "Replace the background with a rooftop at dusk, keep her lighting and hair motion." The tooltip is explicit that this describes the edit, not a scene.
duration is 4–15 and defaults to 4, but the tooltip's real content is that the length is auto-detected from the input video when you leave it be. That default trips people: they expect their 12-second source back in full and get it, then wonder why a shorter explicit value truncated things. Set it deliberately or not at all.
resolution: 480p, 720p, 1080p, 4K. This is the only place the tiers collapse - the standard node can go all the way up.
generate_audio defaults true, and the tooltip matters: set to false and the input video's original audio track is preserved on the output. Defaulting to true means the model invents a new soundtrack over footage that already had dialogue, which is a genuinely surprising first result.
aspect_ratio is optional and adapts to the input. reference_images and reference_audios are optional dynamic lists for steering the edit with a look or a voice - think of them as extra evidence, not replacements for the source clip.
generation_id keeps the paid job reusable: identical inputs plus a fixed ID resumes rather than re-buys. Increment it to ask for a fresh generation. request_scope is auto-assigned per node; headless clients must supply a stable unique one.
Outputs: video (list), files (every original download), run id (what Resume Run wants after a timeout).
Install
ComfyUI 0.41.0+ and Python 3.10+.
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
Manager works too: search Protoface, install protoface-nodes, restart, reload the browser. Use ComfyUI's interpreter for pip. Then click Protoface bottom-right and enter your key - PROTOFACE_API_KEY for headless. Four dependencies, no models, no torch surgery.
Where it goes wrong
Long footage. Input seconds are metered on top of output, capped at 15 seconds. Cut your source to the section you actually want edited before you wire this up; feeding a two-minute file is expensive at best.
Assuming Mini and standard are interchangeable. They share the schema but not the ceiling. Drafting at 720p on Mini and then delivering on this node means a second paid pass - plan the chain so the final pass is the only one at 1080p or 4K.
Edited audio by accident. Anything with speech needs generate_audio false, or you'll get a re-voiced clip with a new accent.
Blaming the node for a provider-side moderation refusal. The filter lives with the model, not in the node. There's nothing local to patch, and resellers don't remove ByteDance's own moderation. If a prompt is refused, it's refused.
Re-queuing after a crash with a new generation_id. That's a fresh charge for a render you may already own. Requeue unchanged, or recover with run id.
Should you reach for it?
For editing, absolutely - it's the operation with no good local analogue, and the tier structure means you can afford to try three ideas before picking one. Just budget the input seconds, kill the audio generation on talking footage, and don't try to edit anything longer than the model's input cap in a single pass.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | Describe the edit you want applied to the input video. | |
| video | COMBO | A public URL, a data URI, or an asset id. | |
| resolution | COMBO | 720p | Output video resolution. |
| duration | INT | 44–15 | Output video length in seconds (4-15). Auto-detected from the input video if not specified. |
| aspect_ratio | COMBO | Aspect ratio of the output video. Adapts to the input if not specified. | |
| generate_audio | BOOLEAN | true | Whether to generate native audio for the edited output. Defaults to true. When set to false, the input video's audio track is preserved on the output instead. |
| reference_audios | COMBO | Public URLs, data URIs, or asset ids. | |
| reference_images | COMBO | Public URLs, data URIs, or asset ids. | |
| 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 | — |