Protoface Seedance 2.0 Mini · Edit Video
Restyle footage you already shot without reshooting it
- video
- files
- run id
What it does that nothing local does well
Video-to-video editing is the hardest thing in this space to do at home. You can run Wan or LTX locally and get decent motion, but "take this clip I already have and change the weather in it, keep the performance" is a different problem, and the open models that attempt it either want a ControlNet stack you'll spend a weekend tuning or they drift the subject. ByteDance sells the capability instead. Seedance 2.0 Mini Edit takes an existing clip plus an instruction and hands back a new clip.
Mini is the cheap tier of that - 480p/720p only. For a proof of concept on a client's footage, that's the right spend. For the version you hand over, it isn't.
How the round trip works
Everything in the Protoface pack is an API node: one shared implementation, per-model controls generated from the provider's public schema. The node takes your video input, uploads it, submits a job with your prompt, polls, and returns a native VIDEO list. Your source footage leaves your machine. Read that sentence twice if the footage is a client's - it's the single biggest reason to pause before wiring this into a professional pipeline.
Inputs, in the order you care about them
video is the whole point. It's a dynamic input: connect a native ComfyUI Video node (a loader, or the video output of another Protoface node) or point it at a URL, data URI, or existing asset id. Chaining Protoface jobs through the asset-reuse path means the clip doesn't get re-uploaded - there's a separate Protoface Asset Reference / Reuse Result Asset path for exactly that.
prompt here is an instruction, not a description. "Change the jacket to red leather, keep the face and motion identical." The tooltip says to describe the edit you want applied to the input video, and it means it - long cinematic scene-setting confuses this operation, while an imperative does not.
duration is 4–15 seconds and defaults to 4, but the tooltip carries the real behaviour: auto-detected from the input video if not specified. Practically that means your 12-second source is going to be handled at its own length unless you force something else. If you're deliberately cutting a shorter edit, set it; if you want the whole thing back, leave it alone.
resolution is 480p or 720p. aspect_ratio is optional and adapts to the input if left empty - the correct default for footage you didn't generate.
generate_audio is the field people misread. On the other operations it's simply "generate a soundtrack." Here, per the tooltip, setting it to false preserves the input video's original audio track on the output. If you're editing a talking-head clip, that's not a nicety, it's the difference between usable and not. Set it false and keep the original voice.
reference_images and reference_audios are optional lists - feed a still to pull the edited look toward, or an audio bed. They're additions on top of the edit, not replacements for the video input.
generation_id is your paid-job handle: leave it fixed and requeue to resume the same run after a timeout or restart; bump it for a fresh generation. request_scope is auto-assigned per node; headless clients must supply a stable unique one.
Outputs: video (list), files (the originals - including non-media artifacts, which matters when a provider's container isn't what you expected), and run id for Resume Run.
Install
ComfyUI 0.41.0+ and Python 3.10+. In Manager, search Protoface, install protoface-nodes, restart, reload. Or:
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
ComfyUI's own interpreter, please - python_embeded/python.exe on Windows portable. Then paste an API key via the Protoface button in the lower-right, or set PROTOFACE_API_KEY for headless. Dependencies are httpx, jsonschema, Pillow and PyAV; no model downloads.
Where it goes wrong
You pay for input seconds too. Editing meters the source video as well as the output, in both 480p and 720p, and the added cost is capped at a 15-second input. A 40-second clip doesn't get edited in one go - it gets truncated or rejected, and either way you've been billed for the portion it took. Chop long footage with local nodes first.
Mini's resolution ceiling bites on delivered work. 720p restyled footage next to your 1080p originals looks like a mistake. Do concept passes here, final passes on Seedance 2.0 Edit or 2.5 Edit.
Editing audio blindly. Default generate_audio is true, which means the model invents a soundtrack over footage that already had one. For anything with speech, flip it off.
Timeouts aren't charges twice. If the poll times out, requeue unchanged or use Resume Run with the run id - the pack journals the request identity before submitting so a restart resumes instead of re-buying.
My read
This is the node I'd reach for when someone hands me footage and a note saying "make it night." Not a precision tool - a taste-and-iterate one, and at 480p a pass costs pennies. Keep the original audio, keep the input short, and don't expect Mini to be your delivery format.
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 | — |