name: seedance
description: Run when the user wants to generate a video with ByteDance's Seedance — either text-to-video (prompt only) or image-to-video (animate a still) — or uses the /seedance command. Supports pro and lite tiers, durations 3–12s, resolutions up to 1080p, and an optional audio track. Output saved under the active brand folder. For Kling-based motion or product-element conditioning, use /add-motion instead.
Seedance
Generate short videos with ByteDance Seedance via FAL — text-to-video or image-to-video.
This skill covers:
- Text-to-video (T2V) — generate a clip from prompt alone
- Image-to-video (I2V) — animate an existing still
- Pro tier (highest quality) and Lite tier (faster / cheaper)
- Optional ambient audio (Seedance audio-enabled endpoint)
This skill does not cover:
- Kling-driven motion with product-element conditioning — use
/add-motion - Talking-head / voiceover content — use
/ugcor/product-ugc - Long-form video (clips capped at 12s)
Output saved to ./brands/[brand-name]/seedance/[output-name]/.
Step 1 — Select brand
Scan ./brands/ for subfolders containing brand-identity/visual-guidelines.md.
- One brand: use it and confirm: "Using brand: [name]"
- Multiple: list and ask
- None: tell the user to run
/brandfirst
Step 2 — Pick mode (T2V or I2V)
Ask:
"Text-to-video or image-to-video?
- Text-to-video — prompt only, Seedance generates the whole clip from scratch
- Image-to-video — start from one of your existing images and animate it"
If I2V, ask which image. Suggest:
brands/[brand-name]/product-shoot/
brands/[brand-name]/packshots/
brands/[brand-name]/styled/
brands/[brand-name]/clothing-shoot/
brands/[brand-name]/model-product-shoot/
brands/[brand-name]/ugc/
For an external upload:
mkdir -p brands/[brand-name]/seedance/uploads
"Drop your image into
brands/[brand-name]/seedance/uploads/and tell me the filename."
Wait for confirmation.
Step 3 — Prompt
Ask: "Describe the scene and motion you want. Be specific — what's happening, camera movement, mood, pace.
Examples:
- 'Slow dolly-in on a glass of iced espresso, condensation running down the side, warm afternoon light'
- 'A weathered hand picks up the jar, rotates it gently to show the label, sets it back down on the wood counter'
- 'Wide static shot, golden-hour wheat field, slight breeze moving the stalks, distant farmhouse in soft focus'"
If the prompt is bare ("rotate the product", "wind blowing"), suggest a refined version with camera language and atmosphere before firing.
Step 4 — Duration, resolution, aspect, tier, audio
Ask in one message:
- Duration — "How long? (3–12s, default 5s)"
- Resolution — "Resolution?
1080p(default),720p, or480pfor cheaper drafts" - Aspect ratio — for I2V, infer from the source image and ask only if ambiguous. For T2V, ask:
16:9(default),9:16,1:1,4:3,3:4,21:9 - Tier — "
pro(default, highest quality) orlite(faster / cheaper)?" - Audio — "Generate ambient audio? (off by default — adds cost. This is environmental sound, not voiceover.)"
Step 5 — Name the output
Derive a slug from the source image (if I2V) or the core idea of the prompt (if T2V):
- T2V:
iced-espresso-pour,wheat-field-breeze,colette-kitchen-morning - I2V:
hey-bud-tint-rotate,jar-handpickup,meg-loaf-steam
Ask the user to confirm or rename.
Step 6 — Write seedance-spec.json
Create the output folder and write the spec:
brands/[brand-name]/seedance/[output-name]/
seedance-spec.json
Text-to-video example:
{
"output_name": "wheat-field-breeze",
"brand": "[brand-name]",
"mode": "text-to-video",
"source_image": null,
"prompt": "Wide static shot, golden-hour wheat field with slight breeze moving the stalks, distant farmhouse in soft focus.",
"duration": 5,
"resolution": "1080p",
"aspect_ratio": "16:9",
"tier": "pro",
"generate_audio": false,
"camera_fixed": true
}
Image-to-video example:
{
"output_name": "hey-bud-tint-rotate",
"brand": "[brand-name]",
"mode": "image-to-video",
"source_image": "brands/[brand-name]/product-shoot/hey-bud-tint-hand-hold/product-shot_v1.png",
"prompt": "The product rotates 90 degrees clockwise, slow and smooth, light catching the label.",
"duration": 5,
"resolution": "1080p",
"aspect_ratio": "9:16",
"tier": "pro",
"generate_audio": false,
"camera_fixed": false
}
Step 7 — Generate
Run from the project root:
python3 skills/references/generate-seedance.py brands/[brand-name]/seedance/[output-name]
The script:
- Loads
FAL_KEYfrom.env - Routes to the right Seedance endpoint based on
mode+tier+generate_audio - Uploads the source image (I2V only)
- Runs the FAL job
- Downloads the output to
[output-name]_v1.mp4,_v2.mp4, etc.
Step 8 — Present the result
Tell the user the exact path:
brands/[brand-name]/seedance/[output-name]/[output-name]_v1.mp4
Ask: "Happy with this? Or regenerate, adjust the prompt, change tier, or extend duration?"
To regenerate (same spec):
python3 skills/references/generate-seedance.py brands/[brand-name]/seedance/[output-name]
To adjust: edit seedance-spec.json and re-run.
Notes
- Seedance Pro 1.0 supports up to 12s clips at 1080p. Lite tier is faster and cheaper but with a small quality drop.
- For I2V, Seedance respects the source image's composition closely — useful when you want motion without re-rolling the scene
- For T2V, Seedance is strong at multi-shot scene continuity and natural camera language
camera_fixed: truelocks the camera to a static position — useful for product spins, slow drifts, or when you want the subject (not the camera) to drive the motion- Audio adds a separate generation pass; expect longer wait and added cost. Off by default.
- Each brand has its own
seedance/subfolder — multiple brands run side by side - For Kling-based motion (with multi-image product element conditioning, start+end frame control), use
/add-motioninstead. Seedance and Kling are complementary, not redundant.