Real outputs from the public examples of this model on Replicate, with the prompt and settings that produced them. They were not generated live on this page.
Prompt
The sun rises slowly between tall buildings. [Ground-level follow shot] Bicycle tires roll over a dew-covered street at dawn. The cyclist passes through dappled light under a bridge as the entire city gradually wakes up.
A skier glides over fresh snow, kicking up large clouds of snow as he turns. Accelerating gradually down the slope, the camera moves smoothly alongside.
ByteDance Seed is the foundation-model research arm of ByteDance, the company behind TikTok, Douyin and CapCut. Formed in 2023 and led by Wu Yonghui, Seed ships the Doubao consumer assistant, the Skylark / Doubao LLM family, the Seedream image model and the Seedance video model. Seedance launched in early 2025 with two tiers: Seedance Pro (high-fidelity) and Seedance Lite (fast). The Pro tier targets advertising, e-commerce and film-style use cases, with longer durations, higher resolution and richer cinematic controls than Lite. ByteDance also expose Seedance through the Doubao API, the CapCut Pro creator suite and selected enterprise integrations.
Diffusion Transformer (DiT) with 3D spatio-temporal VAE
Seedance Pro is a closed Diffusion Transformer operating on a 3D spatio-temporal Variational Autoencoder. The denoiser uses full 3D attention with bilingual text conditioning from ByteDance's Doubao / Skylark LLM family and optional image embeddings for first-frame, end-frame and subject-reference modes. The Pro tier is positioned for high-fidelity creative work and supports 5-10 second clips at 1080p / 24-30 fps with extension chains for longer sequences. Cinematic control vocabulary covers lens choice, camera moves and shot scale. Training uses a curated multilingual video corpus drawn in part from ByteDance's privileged access to TikTok / Douyin platform data, with synthetic dense bilingual captions and reward-model post-training tuned for aesthetic quality and prompt fidelity. Public independent benchmarks (Artificial Analysis, etc.) consistently rank Seedance Pro in the top tier of Chinese video models alongside Kling v3.
Text-to-video, image-to-video and subject-reference modes
5-10 second clips at 1080p / 24-30 fps natively
Extension chains for longer sequences
Rich cinematographic prompt vocabulary
Strong prompt adherence on complex compositions
Bilingual Chinese/English prompts
Available via Doubao API, CapCut Pro and enterprise integrations
Frequently top-ranked among Chinese video models in public leaderboards
Best for: ad creative, e-commerce, cinematic shorts, branded content.
Entraînement et licence
Closed multi-billion-clip corpus including licensed video, web video and ByteDance platform data with bilingual dense captions; exact size undisclosed.
Licence: Proprietary commercial licence via Doubao / ByteDance Seed terms; commercial use on paid plans.
curl https://railwail.com/api/v1/videos/generations \
-H "Authorization: Bearer $RAILWAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-pro",
"prompt": "A slow drone shot over a misty pine forest at sunrise"
}'
# Response: {"job_id": "...", "status": "queued", ...}
# Poll until status is completed, failed or cancelled:
curl https://railwail.com/api/v1/jobs/JOB_ID \
-H "Authorization: Bearer $RAILWAIL_API_KEY"
import os
import time
import requests
API = "https://railwail.com/api/v1"
headers = {"Authorization": f"Bearer {os.environ['RAILWAIL_API_KEY']}"}
job = requests.post(
f"{API}/videos/generations",
headers=headers,
json={
"model": "seedance-pro",
"prompt": "A slow drone shot over a misty pine forest at sunrise",
},
).json()
while True:
status = requests.get(f"{API}/jobs/{job['job_id']}", headers=headers).json()
if status["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(5)
print(status["status"], status.get("output_url"))
const API = "https://railwail.com/api/v1";
const headers = {
Authorization: `Bearer ${process.env.RAILWAIL_API_KEY}`,
"Content-Type": "application/json",
};
const job = await fetch(`${API}/videos/generations`, {
method: "POST",
headers,
body: JSON.stringify({
model: "seedance-pro",
prompt: "A slow drone shot over a misty pine forest at sunrise"
}),
}).then((r) => r.json());
let status;
do {
await new Promise((r) => setTimeout(r, 5000));
status = await fetch(`${API}/jobs/${job.job_id}`, { headers }).then((r) => r.json());
} while (!["completed", "failed", "cancelled"].includes(status.status));
console.log(status.status, status.output_url);