Install
openclaw skills install @fwwdn/seedance-2-video-generatorGenerate Werydance 2.0 videos through WeryAI for text-to-video, image-to-video, multi-image video, and first-frame/last-frame transitions. Use when you need a Werydance 2.0 video generator, want to animate a reference image (prefer a public https URL), create a storyboard-to-video clip, migrate image + last_image workflows, or generate controlled start/end frame video with your WeryAI API key.
openclaw skills install @fwwdn/seedance-2-video-generatorGenerate Werydance 2.0 videos on WeryAI with one skill for text-to-video, image-to-video, first-frame/last-frame transition video, multi-image storyboard video, and almighty mixed-reference video generation. Animate and transform scenes from single images, storyboard frames, or mixed references while keeping subject and motion continuity.
Dependencies: scripts/video_gen.js at the skill package root (alongside SKILL.md) + WERYAI_API_KEY + Node.js 18+. No other Cursor skills are required.
images + videos + audios + prompt)Runtime secret: only WERYAI_API_KEY.
This skill now supports four input modalities for richer control:
Smart routing policy:
videos or audios, route to POST /v1/generation/almighty-reference-to-video.text-to-video, image-to-video, multi-image-to-video).WERYAI_API_KEY must be set.https URLs for media.POST /v1/generation/upload-file.export WERYAI_API_KEY="your_api_key_here"
node scripts/video_gen.js models --mode text_to_video
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"A glowing koi swims through ink clouds","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}' --dry-run
| Mode | Trigger | API route | Key fields |
|---|---|---|---|
| Text | no media refs | /v1/generation/text-to-video | prompt, duration, optional aspect_ratio, resolution, generate_audio |
| Single image | image only | /v1/generation/image-to-video | image, prompt, plus common fields |
| Multi image | images only | /v1/generation/multi-image-to-video | images, prompt, plus common fields |
| Almighty | has videos or audios | /v1/generation/almighty-reference-to-video | images, videos, audios, prompt, video_number, plus common fields |
Compatibility aliases still supported:
first_frame + last_frame -> normalized to ordered imagesimage + last_image -> normalized to ordered imagesAlmighty validations in this skill:
prompt max 500 charsimages <= 9videos <= 3audios <= 3images + videos + audios) <= 12images or videosduration must be 5-15 secondsvideo_number must be 1-4Notes:
Supported local files before generation submit:
jpg/jpeg/png/webp/gif, max 10MBmp4/mov, max 50MBmp3/wav, max 50MBUpload endpoint used by this skill:
duration.9:16 vertical when using the default aspect ratio.Audio: block (ambience, layered SFX, subtle foley—generic, non-copyrighted) even if the user never mentioned sound. JSON generate_audio defaults to true for models that support audio; use false and omit Audio: only when the user explicitly wants silent output.Dry-run behavior:
--dry-run never uploads local filesuploadPreview to show which local paths would be uploadedBefore paid submit, expand brief into production prompt:
Always show full prompt and all params before submit, then wait for explicit confirmation.
Use explicit role mapping in prompt drafts:
@图片1 / @图1参考@视频1运镜参考@视频2动作节奏@音频1用于配乐Good:
@图1为首帧,参考@视频1的跑步动作,镜头从正面切到侧面,@音频1做节奏底。Bad:
用这些素材生成一个视频。将@视频1延长 5s,新增段落为...,保持人物与场景连续。duration to the added segment length.text, image, multi-image, or first-frame/last-frame.duration, optional aspect_ratio, optional resolution, generate_audio (default true unless the user wants silent), and reference image URLs if the mode uses assets (prefer public https).## Prompt expansion (mandatory). If the request needs tighter control, read references/seedance-prompt-optimization.md and explicitly decide mode, asset mapping, timeline beats, and negative constraints before writing the final prompt.node scripts/video_gen.js models --mode multi_image_to_video before a paid request.node scripts/video_gen.js wait --json '...'.errorCode and errorMessage and suggest the likely parameter fix.# Check live model metadata
node scripts/video_gen.js models
node scripts/video_gen.js models --mode text_to_video
node scripts/video_gen.js models --mode image_to_video
node scripts/video_gen.js models --mode multi_image_to_video
# Text-to-video (non-empty model required; default audio on)
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"A paper crane unfolds into a real bird, cinematic lighting, 9:16 vertical. Audio: soft paper rustle, gentle whoosh, quiet room tone.","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
# Single image to video
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"Animate this portrait with subtle hair and cloth movement. Audio: faint fabric rustle, subtle room ambience.","image":"https://example.com/frame.png","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
# Multi-image to video
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"Turn these storyboard frames into one coherent reveal shot. Audio: light transition whooshes, soft underscore.","images":["https://example.com/1.png","https://example.com/2.png","https://example.com/3.png"],"duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
# First-frame / last-frame guided video
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"Start on the first frame and transition naturally to the last frame with the same subject and environment. Audio: smooth morph tone, airy ambience.","first_frame":"https://example.com/start.png","last_frame":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
# WaveSpeed-style compatibility alias
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"Transition smoothly from the start image to the end image. Audio: soft blend whoosh, quiet room.","image":"https://example.com/start.png","last_image":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
# Preview without spending credits
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"A glowing koi swims through ink clouds. Audio: water shimmer, subtle chime.","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}' --dry-run
# Poll an existing task
node scripts/video_gen.js status --task-id <task-id>
task_class=short: default 5 minutes (300000ms), intended for text-to-video.task_class=long: default 20 minutes (1200000ms), intended for image/multi-image/almighty.task_class=auto (default): infer from effective mode.WERYAI_POLL_TIMEOUT_MS remains the highest-priority explicit override.WERYAI_API_KEY in repository files.Done when the user receives at least one playable video URL, or a clear failure with errorCode / errorMessage and a concrete next step. The submitted payload must stay within the selected model's supported field set. With default generate_audio: true, the prompt should include Audio: prose unless the user requested silent generation.
scripts/video_gen.js and explicitly consent to local read-and-upload to WeryAI; otherwise prefer public https URLs.WERYAI_API_KEY inside the repository.Frozen from the repository's current WeryAI capability snapshots. Re-run
node scripts/video_gen.js modelsafter platform upgrades.
WERYDANCE_2_0)| model_key | durations | aspect_ratios | resolutions | Audio | negative_prompt | Prompt max |
|---|---|---|---|---|---|---|
WERYDANCE_2_0 | 5, 10, 15 | 9:16, 1:1, 16:9 | 480p, 720p | Yes | No | 2000 |
WERYDANCE_2_0)| model_key | durations | aspect_ratios | resolutions | Audio | negative_prompt | upload_image_limit |
|---|---|---|---|---|---|---|
WERYDANCE_2_0 | 5, 10, 15 | 9:16, 1:1, 16:9 | 480p, 720p | Yes | No | 3 |
images array for multi-image generation.images with ordered URLs, first_frame + last_frame, or image + last_image for start/end-frame control.node scripts/video_gen.js models --mode multi_image_to_video and confirm support_multiple_images, support_first_last_frame, upload_image_limit, and allowed output fields on the live account.| Field | Value |
|---|---|
| Model | WERYDANCE_2_0 |
| Aspect ratio | 9:16 |
| Duration | 5 |
| Resolution | 720p |
| Audio | true by default; expanded prompt must include Audio: unless the user wants silent |
| Prompt style | concise cinematic English prompt with one clear motion beat and one final payoff |
Use this when the user has only an idea and wants Werydance 2.0 to generate the clip from scratch.
Need from the user:
Flow:
Expand the brief into a full English prompt.
Keep model at WERYDANCE_2_0 unless the user explicitly wants another model.
Show a confirmation table:
📋 Ready to generate - please confirm
Field This run Notes modelWERYDANCE_2_0Override only if the user explicitly requests another model aspect_ratio9:16Must stay inside the Seedance row duration5Allowed: 5 / 10 / 15 resolution720pAllowed: 480p / 720p generate_audiotrueDefault on; Audio:inpromptunless user wants silentpromptfull expanded prompt Never show only a summary
After confirmation, run:
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"...","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
Use this when the user already has one reference image and wants subtle or medium motion while preserving the subject.
Need from the user:
https)Flow:
Expand the prompt around preservation plus motion.
Add image to the JSON body.
Confirm parameters and URL, then run:
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"...","image":"https://example.com/input.png","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
Use this when the user wants several frames turned into one coherent shot or short sequence.
Need from the user:
https)Flow:
Treat the image order as meaningful story order.
If support is uncertain, check models --mode multi_image_to_video first.
Confirm the final prompt plus ordered images, then run:
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"...","images":["https://example.com/1.png","https://example.com/2.png","https://example.com/3.png"],"duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
Use this when the user wants tighter motion control from a known opening frame to a known ending frame.
Need from the user:
https)https)Flow:
Expand the prompt so it explicitly bridges the first frame to the last frame.
Use either first_frame / last_frame, image / last_image, or pass the same two URLs through images in order.
Confirm both URLs and the full prompt, then run:
node scripts/video_gen.js wait --json '{"model":"WERYDANCE_2_0","prompt":"...","first_frame":"https://example.com/start.png","last_frame":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16","resolution":"720p","generate_audio":true}'
If the live registry rejects multi-image routing, reduce expectations: the runtime will fall back to single-image behavior with the first frame.