Install
openclaw skills install seedance-2-0-video-genGenerate Seedance 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 Seedance 2.0 video generator, want to animate an HTTPS image, 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 seedance-2-0-video-genGenerate Seedance 2.0 videos through WeryAI with one focused skill: text-to-video, image-to-video, multi-image video, and first-frame/last-frame transition control. This skill is intentionally strict about secret declaration and input safety: the only runtime secret is WERYAI_API_KEY, and reference media must be public https URLs rather than ad-hoc local uploads.
Dependencies: scripts/video_gen.js in this directory + WERYAI_API_KEY + Node.js 18+. No other Cursor skills are required.
Before the first real generation run:
https://www.weryai.com/api/keys.WERYAI_API_KEY.WERYAI_API_KEY in metadata.openclaw.requires.env and primaryEnv.WERYAI_API_KEY.export WERYAI_API_KEY="your_api_key_here"
Use one safe check before the first paid run:
node {baseDir}/scripts/video_gen.js models --mode text_to_video
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"A glowing koi swims through ink clouds","duration":5}' --dry-run
models confirms that the key is configured and the models endpoint is reachable.--dry-run confirms the request shape locally without spending credits.wait or submit-* commands still require available WeryAI balance.prompt, image, images, first_frame, last_frame, last_imagetaskId, videos, task status, model capability checksWERYAI_API_KEY, no local-file upload requirement, dry-run support, explicit paid-task warningGenerate a Seedance 2.0 text-to-video clip: a silver train exits a tunnel into sunrise mist, 9:16 verticalAnimate this HTTPS portrait with Seedance 2.0 image-to-video and keep the face consistentTurn these three storyboard images into one coherent product reveal video with consistent lightingUse these first and last frames to generate a smooth transition video with the same characterMigrate this WaveSpeed Seedance flow that uses image plus last_image into the WeryAI versionWERYAI_API_KEY must be set before running video_gen.js.image, images, first_frame, last_frame, and last_image inputs must be public https URLs. Do not pass local files.wait or submit-* run creates a paid WeryAI task.WERYAI_API_KEY: Treat it as a secret. Configure it only in the runtime environment; never write the secret value into the skill files.WERYAI_BASE_URL, WERYAI_MODELS_BASE_URL): video_gen.js defaults to https://api.weryai.com and https://api-growth-agent.weryai.com. Only override them for trusted environments.scripts/video_gen.js before production use.video_gen.js does not expand prompts for you. Before every paid call, turn the user's short brief into a complete production prompt in English unless they already gave you a final long prompt and explicitly asked you not to rewrite it.
For advanced prompt design patterns, read references/seedance-prompt-optimization.md before drafting the final API prompt.
Always add:
duration.9:16 vertical when using the default aspect ratio.Mode-specific additions:
Length: Current frozen Seedance rows in this document use a prompt limit of 2000 chars where documented. If you re-check live metadata with models, trust the live value.
Confirmation: Always show the full expanded prompt and all selected parameters in a table, then wait for the user to reply confirm or request edits.
Use this sequence whenever the user asks for stronger Seedance prompt quality or tighter control:
duration.If the request is complex, structure the prompt plan internally as:
ModeAsset mappingTimeline beatsFinal promptNegative constraintsGeneration settings| Use case | Accepted fields | Notes |
|---|---|---|
| Text-to-video | prompt, duration, optional aspect_ratio, resolution, generate_audio | Default model is SEEDANCE_2_0. |
| Single-image animation | image + prompt | Keeps the reference composition and identity. |
| Multi-image video | images + prompt | Ordered list, trimmed to the model limit. |
| Start/end-frame guidance | first_frame + last_frame + prompt | Internally normalized to ordered images. |
| WaveSpeed-style migration | image + last_image + prompt | Supported as a compatibility alias for end-frame workflows. |
last_image to this skill's end-frame path. This skill accepts image + last_image as a compatibility alias and normalizes it to the ordered multi-image route.https URLs only.WERYAI_API_KEY) so installers and reviewers can see the runtime contract up front.When the user asks for "better Seedance prompts" rather than just API execution:
references/seedance-prompt-optimization.md.first_frame / last_frame or image + last_image, explicitly describe the bridge action between start and end state.images, treat them as ordered waypoints of one coherent shot, not unrelated inspirations.text, image, multi-image, or first-frame/last-frame.duration, optional aspect_ratio, optional resolution, and required HTTPS image URLs if the mode uses references.## 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 {baseDir}/scripts/video_gen.js models --mode multi_image_to_video before a paid request.node {baseDir}/scripts/video_gen.js wait --json '...'.errorCode and errorMessage and suggest the likely parameter fix.# Check live model metadata
node {baseDir}/scripts/video_gen.js models
node {baseDir}/scripts/video_gen.js models --mode text_to_video
node {baseDir}/scripts/video_gen.js models --mode image_to_video
node {baseDir}/scripts/video_gen.js models --mode multi_image_to_video
# Text-to-video
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"A paper crane unfolds into a real bird, cinematic lighting, 9:16 vertical","duration":5}'
# Single image to video
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"Animate this portrait with subtle hair and cloth movement","image":"https://example.com/frame.png","duration":5,"aspect_ratio":"9:16","resolution":"720p"}'
# Multi-image to video
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"Turn these storyboard frames into one coherent reveal shot","images":["https://example.com/1.png","https://example.com/2.png","https://example.com/3.png"],"duration":5,"aspect_ratio":"9:16"}'
# First-frame / last-frame guided video
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"Start on the first frame and transition naturally to the last frame with the same subject and environment","first_frame":"https://example.com/start.png","last_frame":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16"}'
# WaveSpeed-style compatibility alias
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"Transition smoothly from the start image to the end image","image":"https://example.com/start.png","last_image":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16"}'
# Preview without spending credits
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"A glowing koi swims through ink clouds","duration":5}' --dry-run
# Poll an existing task
node {baseDir}/scripts/video_gen.js status --task-id <task-id>
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.
https URLs are supported.WERYAI_API_KEY inside the repository.Frozen from the repository's current WeryAI capability snapshots. Re-run
node {baseDir}/scripts/video_gen.js modelsafter platform upgrades.
SEEDANCE_2_0)| model_key | durations | aspect_ratios | resolutions | Audio | negative_prompt | Prompt max |
|---|---|---|---|---|---|---|
SEEDANCE_2_0 | 5, 10, 15 | 9:16, 1:1, 16:9 | 480p, 720p | Yes | No | 2000 |
SEEDANCE_2_0)| model_key | durations | aspect_ratios | resolutions | Audio | negative_prompt | upload_image_limit |
|---|---|---|---|---|---|---|
SEEDANCE_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 {baseDir}/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 | SEEDANCE_2_0 |
| Aspect ratio | 9:16 |
| Duration | 5 |
| Resolution | 720p |
| Audio | false by default; enable only when you want generated ambience |
| 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 Seedance 2.0 to generate the clip from scratch.
Need from the user:
Flow:
Expand the brief into a full English prompt.
Keep model at SEEDANCE_2_0 unless the user explicitly wants another model.
Show a confirmation table:
📋 Ready to generate - please confirm
Field This run Notes modelSEEDANCE_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_audiofalseTurn on only if the user wants generated ambience promptfull expanded prompt Never show only a summary
After confirmation, run:
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"...","duration":5,"aspect_ratio":"9:16","resolution":"720p"}'
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 image URLFlow:
Expand the prompt around preservation plus motion.
Add image to the JSON body.
Confirm parameters and URL, then run:
node {baseDir}/scripts/video_gen.js wait --json '{"prompt":"...","image":"https://example.com/input.png","duration":5,"aspect_ratio":"9:16","resolution":"720p"}'
Use this when the user wants several frames turned into one coherent shot or short sequence.
Need from the user:
https image URLsFlow:
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 {baseDir}/scripts/video_gen.js wait --json '{"prompt":"...","images":["https://example.com/1.png","https://example.com/2.png","https://example.com/3.png"],"duration":5,"aspect_ratio":"9:16"}'
Use this when the user wants tighter motion control from a known opening frame to a known ending frame.
Need from the user:
https start framehttps end frameFlow:
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 {baseDir}/scripts/video_gen.js wait --json '{"prompt":"...","first_frame":"https://example.com/start.png","last_frame":"https://example.com/end.png","duration":5,"aspect_ratio":"9:16"}'
If the live registry rejects multi-image routing, reduce expectations: the runtime will fall back to single-image behavior with the first frame.