Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generate cinematic short-form video with ByteDance Seedance 2.0 Pro on RunComfy. Documents Seedance 2.0 Pro's strengths (multi-modal references — up to 9 images, 3 videos, 3 audio — synchronized in-pass audio with natural lip-sync, cinematic motion refinement), the 4–15s duration schema, and when to route to HappyHorse 1.0 / Wan 2.7 / Kling instead. Calls `runcomfy run bytedance/seedance-v2/pro` through the local RunComfy CLI. Triggers on "seedance", "seedance 2", "seedance v2", "seedance pro",
.claude/skills/aiskillstore-seedance-v2/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 164% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 184% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 157% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 53% | 0% |
runcomfy.com · Seedance 2.0 Pro · GitHub
ByteDance Seedance 2.0 Pro — multimodal cinematic video generator with native lip-synced audio — hosted on the RunComfy Model API.
bashnpx skills add agentspace-so/runcomfy-skills --skill seedance-v2 -g
Seedance 2.0 Pro's distinct strength is multi-modal cinematic short-form: combine character images + scene videos + reference audio into one coherent shot. Pick it when fidelity to a reference identity / scene matters and you want native lip-sync.
| You want | Use | |---|---| | Lip-synced spokesperson / dialogue ad | Seedance 2.0 Pro | | Multi-modal references (image + video + audio) | Seedance 2.0 Pro | | Brand-consistent multi-language narrative | Seedance 2.0 Pro | | Currently-#1 blind-vote video quality | HappyHorse 1.0 | | Audio-driven lip-sync from your own track | Wan 2.7 (audio_url) | | Motion editing on existing footage | Kling Video O1 | | Ultra-fast iteration | LTX 2 |
If the user said "Seedance" / "Seedance 2" / "ByteDance video" explicitly, route here regardless.
npm i -g @runcomfy/cliruncomfy login opens a browser device-code flow.RUNCOMFY_TOKEN=<token> instead of runcomfy login.bytedance/seedance-v2/pro| Field | Type | Required | Default | Notes | |---|---|---|---|---| | prompt | string | yes | — | CN ≤ 500 chars OR EN ≤ 1000 words. | | image_url | array | no | [] | 0–9 references (JPEG/PNG/WebP/BMP/TIFF/GIF). | | video_url | array | no | [] | 0–3 clips (MP4/MOV), 2–15s each. | | audio_url | array | no | [] | 0–3 audio refs (WAV/MP3), 2–15s, < 15MB each. | | aspect_ratio | enum | no | adaptive | adaptive, 16:9, 9:16, 4:3, 3:4, 1:1, 21:9. | | duration | int | no | 5 | 4–15 (whole seconds). | | resolution | enum | no | 720p | 480p or 720p. | | generate_audio | bool | no | true | In-pass synchronized speech / SFX / music. | | seed | int | no | — | Reproducibility. |
Default (text only, 5s, 720p with audio):
bashruncomfy run bytedance/seedance-v2/pro \ --input '{"prompt": "<user prompt>"}' \ --output-dir <absolute/path>
Lip-synced ad with character reference (image-stable, text-evolves):
bashruncomfy run bytedance/seedance-v2/pro \ --input '{ "prompt": "Medium close-up. The woman explains today'\''s special in a warm friendly tone, slow push-in, soft window light, gentle cafe ambience.", "image_url": ["https://.../barista-headshot.jpg"], "duration": 8, "aspect_ratio": "9:16" }' \ --output-dir <absolute/path>
Multi-modal (image + video + audio refs):
bashruncomfy run bytedance/seedance-v2/pro \ --input '{ "prompt": "Subject from image 1 walks through the café from video 1, voice tone matches audio 1.", "image_url": ["https://.../subject.jpg"], "video_url": ["https://.../cafe-locked-shot.mp4"], "audio_url": ["https://.../voice-ref.mp3"] }' \ --output-dir <absolute/path>
The CLI submits, polls, fetches the result, downloads *.runcomfy.net/*.runcomfy.com URLs into --output-dir.
Image vs text division. This is the single most important rule. Stable identity (face, costume, brand mark, logo) → put in image_url. Evolving narrative (action, mood, lighting, camera) → put in prompt. Trying to verbally describe a face in detail wastes tokens and produces drift.
Camera + motion in plain language. "Medium close-up", "slow push-in", "handheld follow", "locked-off wide" all work as directives. Combine: "Medium close-up. Slow push-in over 3 seconds. Handheld, slight breathing motion."
Audio direction with generate_audio: true — say the tone: "warm friendly conversational", "calm instructional", "crisp newsroom delivery". For ambient: "gentle cafe chatter, distant traffic, no foreground music".
Reference media specs — videos must be 2–15s; audio must be ≤15MB and 2–15s. Out-of-range files reject. Match aspect ratio of refs to your output to avoid crops.
Anti-patterns:
image_url instead.| Use case | Why Seedance 2.0 Pro | |---|---| | Spokesperson / dialogue ads | Native in-pass lip-sync, no separate TTS step | | Brand-consistent multi-language narratives | Image refs hold identity; text drives translation | | Cinematic short-form film previs | Camera-shot grammar + multi-modal refs | | Ad creatives with reference music / VO tone | Audio refs guide voice / mood without locking lip-sync | | Reproducible variant testing | Seed control + fixed schema |
Default playground example:
Golden hour on a quiet cafe terrace: a barista wipes the counter, then
looks up and explains today's special in a friendly tone, natural
lip-sync. Medium close-up, slow push-in; warm side light, soft bokeh
through glass, gentle cafe ambience and subtle film grain.Multi-modal lip-sync (text + image):
Same person as image 1 in a softly-lit recording booth, leaning into
the mic, says: "We just shipped the biggest update of the year."
Calm conversational tone. Medium close-up, locked tripod, shallow DOF,
warm key light from camera-left.@-syntax for character binding — relies on image refs + prompt alignment.| code | meaning | |---|---| | 0 | success | | 64 | bad CLI args | | 65 | bad input JSON / schema mismatch | | 69 | upstream 5xx | | 75 | retryable: timeout / 429 | | 77 | not signed in or token rejected |
Full reference: docs.runcomfy.com/cli/troubleshooting.
The skill invokes runcomfy run bytedance/seedance-v2/pro with a JSON body matching the schema. The CLI POSTs to https://model-api.runcomfy.net/v1/models/bytedance/seedance-v2/pro, polls the request, fetches the result, and downloads any .runcomfy.net/.runcomfy.com URL into --output-dir. Ctrl-C cancels the remote request before exit.
runcomfy login writes the API token to ~/.config/runcomfy/token.json with mode 0600 (owner-only read/write). Set RUNCOMFY_TOKEN env var to bypass the file entirely in CI / containers.--input. The CLI does NOT shell-expand the prompt; it transmits the JSON body directly to the Model API over HTTPS. No shell injection surface from prompt content.model-api.runcomfy.net (request submission) and *.runcomfy.net / *.runcomfy.com (download whitelist for generated outputs). No telemetry, no callbacks.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 6,921 | 5,819 | -16% | 1 | 1 | 0% | 1,403 | 3,706 | +164% | 0 | 0 | — |
case-01 | fail→pass | 5,678 | 5,025 | -12% | 1 | 1 | 0% | 1,218 | 3,454 | +184% | 0 | 0 | — |
case-02 | fail→pass | 6,766 | 5,726 | -15% | 1 | 1 | 0% | 1,375 | 3,539 | +157% | 0 | 0 | — |
case-04 | fail→pass | 9,095 | 3,472 | -62% | 1 | 1 | 0% | 1,543 | 3,132 | +103% | 0 | 0 | — |
case-05 | fail→pass | 15,627 | 3,058 | -80% | 1 | 1 | 0% | 1,952 | 2,995 | +53% | 0 | 0 | — |
case-06 | fail→pass | 11,525 | 4,253 | -63% | 1 | 1 | 0% | 1,882 | 3,181 | +69% | 0 | 0 | — |
case-07 | fail→pass | 9,642 | 2,465 | -74% | 1 | 1 | 0% | 1,542 | 2,898 | +88% | 0 | 0 | — |
case-08 | fail→pass | 9,159 | 3,825 | -58% | 1 | 1 | 0% | 1,575 | 3,111 | +98% | 0 | 0 | — |
case-09 | fail→pass | 10,465 | 1,888 | -82% | 1 | 1 | 0% | 1,597 | 2,838 | +78% | 0 | 0 | — |
case-10 | fail→pass | 13,697 | 3,972 | -71% | 1 | 1 | 0% | 2,480 | 3,199 | +29% | 0 | 0 | — |
case-11 | fail→pass | 3,644 | 1,485 | -59% | 1 | 1 | 0% | 696 | 2,703 | +288% | 0 | 0 | — |
case-12 | pass→pass | 6,145 | 2,015 | -67% | 1 | 1 | 0% | 1,083 | 2,808 | +159% | 0 | 0 | — |
case-13 | pass→pass | 7,397 | 3,158 | -57% | 1 | 1 | 0% | 1,307 | 3,004 | +130% | 0 | 0 | — |
case-14 | pass→pass | 11,869 | 4,159 | -65% | 1 | 1 | 0% | 1,933 | 3,164 | +64% | 0 | 0 | — |
case-15 | pass→pass | 8,238 | 1,848 | -78% | 1 | 1 | 0% | 1,572 | 2,740 | +74% | 0 | 0 | — |
case-16 | fail→pass | 3,786 | 2,962 | -22% | 1 | 1 | 0% | 785 | 3,106 | +296% | 0 | 0 | — |
case-17 | fail→pass | 3,817 | 1,545 | -60% | 1 | 1 | 0% | 712 | 2,773 | +289% | 0 | 0 | — |
case-18 | fail→pass | 15,097 | 6,837 | -55% | 1 | 1 | 0% | 2,312 | 3,725 | +61% | 0 | 0 | — |
case-19 | fail→pass | 10,607 | 2,013 | -81% | 1 | 1 | 0% | 1,696 | 2,861 | +69% | 0 | 0 | — |
case-20 | fail→pass | 7,383 | 4,818 | -35% | 1 | 1 | 0% | 1,310 | 2,753 | +110% | 0 | 0 | — |
case-21 | fail→pass | 5,271 | 2,985 | -43% | 1 | 1 | 0% | 1,102 | 3,042 | +176% | 0 | 0 | — |
case-22 | pass→pass | 6,318 | 1,888 | -70% | 1 | 1 | 0% | 1,050 | 2,819 | +168% | 0 | 0 | — |
case-23 | fail→pass | 9,430 | 1,368 | -85% | 1 | 1 | 0% | 1,680 | 2,714 | +62% | 0 | 0 | — |
case-24 | fail→pass | 7,541 | 1,848 | -75% | 1 | 1 | 0% | 1,315 | 2,745 | +109% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +79 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.