Seedance 2.0 Storyboard Creation & Video Generation
End-to-end workflow from idea to final video: Storyboard Guidance → Reference Image Generation → Video Submission → Result Retrieval.
Step 0: Determine Execution Mode (MCP or Script)
Prioritize checking MCP availability:
- Check the status of the MCP service (read
mcps/user-xskill-ai/STATUS.md
)
- If MCP is available → Use MCP tools like /
- If MCP is unavailable or errors occur → Switch to Script Mode
Prerequisites for Script Mode:
- Confirm that the environment variable is set (execute
echo $XSKILL_API_KEY | head -c 10
in Shell)
- If not set, prompt the user:
export XSKILL_API_KEY=sk-your-api-key
Get API Key: https://www.xskill.ai/#/v2/api-keys
- Confirm is installed ()
Script Path: in this Skill directory, locate it via:
bash
# Search via Glob tool
glob: .cursor/skills/seedance2-api/scripts/seedance_api.py
In subsequent steps, each API call provides both MCP Method and Script Method, choose one based on the judgment from Step 0.
Step 1: Understand User's Idea
Collect the following information (proactively ask if missing):
- Core Story: One-sentence summary of what the video is about
- Duration: 4-15 seconds
- Aspect Ratio: 16:9 / 9:16 / 1:1 / 21:9 / 4:3 / 3:4
- Visual Style: Realistic/Animated/Ink Wash/Sci-Fi/Cyberpunk, etc.
- Material Status: Whether there are existing images/videos/audio, or if AI generation is needed
- Function Mode: Whether first-last frame control () is required; otherwise, default to omni-reference mode ()
Step 2: Deep Dive (5 Dimensions)
Guide the user to supplement details for each dimension:
- Content - Who is the protagonist? What are they doing? Where is it set?
- Visuals - Lighting, color tone, texture, atmosphere
- Camera - Push/Pull/Pan/Truck/Follow/Orbit/Crane
- Action - Specific actions and rhythm of the subject
- Audio - Soundtrack style, sound effects, dialogue
Step 3: Build Storyboard Structure
Split shots by timeline using the following formula:
【Style】_____ style, _____ seconds, _____ aspect ratio, _____ atmosphere
0-X seconds: [Camera Movement] + [Frame Content] + [Action Description]
X-Y seconds: [Camera Movement] + [Frame Content] + [Action Description]
...
【Audio】_____ soundtrack + _____ sound effects + _____ dialogue
【Reference】@image_file_1 _____, @video_file_1 _____
Detailed templates and examples can be found in reference.md.
Step 4: Generate Reference Images (If Needed)
If the user has no existing materials, use Seedream 4.5 to generate character images, scene images, first/last frames, etc.
Text-to-Image
<details>
<summary><b>MCP Method</b></summary>
- model_id:
fal-ai/bytedance/seedream/v4.5/text-to-image
- parameters:
- prompt: Detailed image description (English works better)
- image_size: Select based on video aspect ratio
- num_images: Number of images needed (1-6)
</details>
<details>
<summary><b>Script Method</b></summary>
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py submit \
--model "fal-ai/bytedance/seedream/v4.5/text-to-image" \
--params '{"prompt":"An astronaut in a white spacesuit...","image_size":"landscape_16_9","num_images":1}'
</details>
Image Editing (Modify Based on Existing Images)
<details>
<summary><b>MCP Method</b></summary>
- model_id:
fal-ai/bytedance/seedream/v4.5/edit
- parameters:
- prompt: Editing instructions (refer to images using Figure 1/2/3)
- image_urls: Array of input image URLs
- image_size: Output size
</details>
<details>
<summary><b>Script Method</b></summary>
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py submit \
--model "fal-ai/bytedance/seedream/v4.5/edit" \
--params '{"prompt":"Change the background to a forest","image_urls":["https://..."],"image_size":"landscape_16_9"}'
</details>
Poll for Image Results
Images take approximately 1-2 minutes to complete.
<details>
<summary><b>MCP Method</b></summary>
Call the
tool to query status:
- First query after 30 seconds
- Then query every 30 seconds thereafter
- Extract image URLs when status is
</details>
<details>
<summary><b>Script Method</b></summary>
Single Query:
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py query \
--task-id "TASK_ID_HERE"
Auto Polling (Recommended for Images, 10s interval, 180s timeout):
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py poll \
--task-id "TASK_ID_HERE" --interval 10 --timeout 180
</details>
image_size Reference Table
| Video Aspect Ratio | Recommended image_size | Description |
|---|
| 16:9 | landscape_16_9 | Landscape |
| 9:16 | portrait_16_9 | Portrait |
| 4:3 | landscape_4_3 | Landscape |
| 3:4 | portrait_4_3 | Portrait |
| 1:1 | square_hd | Square |
| 21:9 | landscape_16_9 | Approximate ultra-wide screen |
Step 5: Generate Professional Prompts
Integrate the storyboard structure and reference images into the final prompt:
- Use , , etc. to reference images in the array
- Use , etc. to reference videos in the array
- Use , etc. to reference audio in the array
- Also compatible with the old syntax: , ,
Reference Syntax Example:
@image_file_1 as character reference, refer to the camera movement of @video_file_1, match the soundtrack of @audio_file_1
Important: The Nth URL in the
array corresponds to
.
and
are numbered independently.
Step 6: Submit Video Task
Process Material URLs:
- Images generated by Seedream: URLs already exist, use directly
- Web images provided by user: Use directly
- Local images provided by user: Upload first to get URL (see upload methods below)
Upload Local Images
<details>
<summary><b>MCP Method</b></summary>
Call the
tool: image_url or image_data
</details>
<details>
<summary><b>Script Method</b></summary>
bash
# Upload web image
python .cursor/skills/seedance2-api/scripts/seedance_api.py upload \
--image-url "https://example.com/image.png"
# Upload local image
python .cursor/skills/seedance2-api/scripts/seedance_api.py upload \
--image-path "/path/to/local/image.png"
</details>
Submit Seedance 2.0 Task (Omni-reference Mode )
<details>
<summary><b>MCP Method</b></summary>
- model_id:
- parameters:
- prompt: Complete prompt generated in Step 5
- functionMode: (default, can be omitted)
- image_files: Array of reference image URLs (max 9 images, order corresponds to @image_file_1/2/3...)
- video_files: Array of reference video URLs (max 3, total duration ≤ 15s)
- audio_files: Array of reference audio URLs (max 3)
- ratio: Aspect ratio ( / / / / / )
- duration: Integer duration (4 - 15)
- model: (default fast mode) or (standard quality)
</details>
<details>
<summary><b>Script Method</b></summary>
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py submit \
--model "st-ai/super-seed2" \
--params '{
"prompt": "Cinematic realistic sci-fi style, 15 seconds, 16:9...",
"functionMode": "omni_reference",
"image_files": ["https://img1.png", "https://img2.png"],
"ratio": "16:9",
"duration": 15,
"model": "seedance_2.0_fast"
}'
</details>
Submit Seedance 2.0 Task (First-Last Frame Mode )
<details>
<summary><b>MCP Method</b></summary>
- model_id:
- parameters:
- prompt: Video description prompt
- functionMode:
- filePaths: Array of image URLs (0 images = text-to-video, 1 image = first-frame-to-video, 2 images = first-last-frame video)
- ratio: Aspect ratio
- duration: Integer duration
- model: or
</details>
<details>
<summary><b>Script Method</b></summary>
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py submit \
--model "st-ai/super-seed2" \
--params '{
"prompt": "Camera transitions smoothly from first frame to last frame, with natural and fluid visuals",
"functionMode": "first_last_frames",
"filePaths": ["https://first-frame.png", "https://last-frame.png"],
"ratio": "16:9",
"duration": 5,
"model": "seedance_2.0_fast"
}'
</details>
Step 7: Poll for Video Results
Video generation takes approximately 10 minutes.
<details>
<summary><b>MCP Method</b></summary>
Polling Strategy:
- After submission, inform the user: "Video is being generated, expected to take 10 minutes"
- First call to query after 60 seconds
- Then query every 90 seconds thereafter
- Report the status to the user after each query
</details>
<details>
<summary><b>Script Method</b></summary>
Recommended: Use auto polling (runs in background, 30s interval, 600s timeout):
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py poll \
--task-id "TASK_ID_HERE" --interval 30 --timeout 600
The script will print polling progress to stderr, and output JSON results to stdout upon completion.
Manual Query in Batches:
bash
python .cursor/skills/seedance2-api/scripts/seedance_api.py query \
--task-id "TASK_ID_HERE"
</details>
Status Explanations:
- → "Queued..."
- → "Generating..."
- → Extract video URL and present to user
- → Inform user of failure reason, suggest adjusting prompt and retrying
Complete Workflow Example
User says: "Help me make a video of an astronaut walking on Mars"
When MCP is Available
1. Collect information → 15 seconds, 16:9, cinematic sci-fi style, no existing materials
2. Generate astronaut image + Mars scene image using Seedream 4.5
submit_task("fal-ai/bytedance/seedream/v4.5/text-to-image", {...})
→ Poll get_task → Obtain image URLs
3. Write prompt → Submit video task
submit_task("st-ai/super-seed2", {...})
4. Poll get_task, obtain video URL after ~10 minutes
When MCP is Unavailable (Script Mode)
1. Collect information → 15 seconds, 16:9, cinematic sci-fi style
2. Generate reference images:
python scripts/seedance_api.py submit \
--model "fal-ai/bytedance/seedream/v4.5/text-to-image" \
--params '{"prompt":"An astronaut in white spacesuit on Mars...","image_size":"landscape_16_9"}'
→ Get task_id
3. Poll for image results:
python scripts/seedance_api.py poll --task-id "xxx" --interval 10 --timeout 180
→ Get image URLs
4. Submit video task:
python scripts/seedance_api.py submit \
--model "st-ai/super-seed2" \
--params '{"prompt":"...storyboard prompt...","functionMode":"omni_reference","image_files":["image URL"],"ratio":"16:9","duration":15,"model":"seedance_2.0_fast"}'
→ Get task_id
5. Poll for video results:
python scripts/seedance_api.py poll --task-id "xxx" --interval 30 --timeout 600
→ Get video URL
Quick Reference for Model Parameters
Seedream 4.5 Text-to-Image
| Parameter | Type | Required | Description |
|---|
| prompt | string | Yes | Image description |
| image_size | string | No | auto_2K / auto_4K / square_hd / portrait_4_3 / portrait_16_9 / landscape_4_3 / landscape_16_9 |
| num_images | int | No | 1-6, default 1 |
Seedream 4.5 Image Editing
| Parameter | Type | Required | Description |
|---|
| prompt | string | Yes | Editing instructions, reference with Figure 1/2/3 |
| image_urls | array | Yes | List of input image URLs |
| image_size | string | No | Same as above |
| num_images | int | No | 1-6, default 1 |
Seedance 2.0 Video (Omni-reference Mode )
| Parameter | Type | Required | Description |
|---|
| prompt | string | Yes | Storyboard prompt, reference with @image_file_N/@video_file_N/@audio_file_N |
| functionMode | string | No | (default) |
| image_files | array | No | Array of reference image URLs (max 9) |
| video_files | array | No | Array of reference video URLs (max 3, total duration ≤ 15s) |
| audio_files | array | No | Array of reference audio URLs (max 3) |
| ratio | string | No | 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 |
| duration | integer | No | 4-15, default 5 |
| model | string | No | seedance_2.0_fast (default) / seedance_2.0 |
Seedance 2.0 Video (First-Last Frame Mode )
| Parameter | Type | Required | Description |
|---|
| prompt | string | Yes | Video description prompt |
| functionMode | string | Yes | |
| filePaths | array | No | Array of image URLs (0 = text-to-video, 1 = first frame, 2 = first-last frames) |
| ratio | string | No | 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 |
| duration | integer | No | 4-15, default 5 |
| model | string | No | seedance_2.0_fast (default) / seedance_2.0 |
Quick Reference for Tools
MCP Tools
| Operation | Tool | Key Parameters |
|---|
| Submit Task | submit_task | model_id, parameters |
| Query Result | get_task | task_id |
| Upload Image | upload_image | image_url or image_data |
| Query Balance | get_balance | None |
Script Commands (When MCP is Unavailable)
| Operation | Command | Description |
|---|
| Submit Task | python scripts/seedance_api.py submit --model MODEL --params '{...}'
| Returns task_id |
| Single Query | python scripts/seedance_api.py query --task-id ID
| Returns current status |
| Auto Polling | python scripts/seedance_api.py poll --task-id ID --interval N --timeout N
| Blocks until completion |
| Query Balance | python scripts/seedance_api.py balance
| Returns account balance |
| Upload Image | python scripts/seedance_api.py upload --image-url URL
or | Returns image URL |
Script Path Note: The
in the above commands is relative to the
.cursor/skills/seedance2-api/
directory. When executing, use the full path
.cursor/skills/seedance2-api/scripts/seedance_api.py
, or cd to the skill directory first.
Seedance 2.0 Limitations
- Does not support uploading realistic human face materials
- Maximum 12 files: images ≤9 + videos ≤3 + audio ≤3
- Total duration of video/audio references ≤15 seconds
- Using video references consumes more credits
Additional Resources
Detailed storyboard templates, complete examples, and camera vocabulary can be found in reference.md.