Skip to main content
Generate videos using ByteDance’s Seedance models through the Runcrate API. Seedance supports text-to-video, image-to-video, and multi-input generation.

Available models

ModelSpeedDurationsFeatures
Seedance 1.0 ProMedium2–12sMulti-input, image-to-video, text-to-video
Seedance 2.0 FastFast2–8sFaster generation, text-to-video

Text-to-video

from runcrate import Runcrate

client = Runcrate(api_key="rc_live_YOUR_API_KEY")

job = client.models.generate_video_and_save(
    "seedance-demo.mp4",
    model="ByteDance-Seed/seedance-1.0-pro",
    prompt="A golden retriever running through a field of sunflowers in slow motion, "
           "warm afternoon light, shallow depth of field, cinematic",
    duration=6,
    on_status=lambda j: print(f"  {j.status}..."),
)

print("Saved seedance-demo.mp4")
import Runcrate from '@runcrate/sdk';

const rc = new Runcrate({ apiKey: 'rc_live_YOUR_API_KEY' });

const job = await rc.models.generateVideo({
  model: 'ByteDance-Seed/seedance-1.0-pro',
  prompt: 'A golden retriever running through a field of sunflowers in slow motion',
  duration: 6,
});

let status = job;
while (status.status !== 'completed' && status.status !== 'failed') {
  await new Promise(r => setTimeout(r, 5000));
  status = await rc.models.getVideoStatus(job.id);
}

const videoBuffer = await rc.models.downloadVideo(job.id);
await Bun.write('seedance-demo.mp4', videoBuffer);
curl https://api.runcrate.ai/v1/videos \
  -H "Authorization: Bearer rc_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ByteDance-Seed/seedance-1.0-pro",
    "prompt": "A golden retriever running through a field of sunflowers in slow motion",
    "duration": 6
  }'

Seedance 2.0 Fast — quick iterations

Use the fast model for prototyping before committing to the higher-quality Pro model:
from runcrate import Runcrate

client = Runcrate(api_key="rc_live_YOUR_API_KEY")

job = client.models.generate_video_and_save(
    "quick-test.mp4",
    model="bytedance/seedance-2.0-fast",
    prompt="A cup of coffee with steam rising, top-down view, cozy lighting",
    duration=4,
    on_status=lambda j: print(f"  {j.status}..."),
)

Batch video generation

from runcrate import Runcrate
from concurrent.futures import ThreadPoolExecutor

client = Runcrate(api_key="rc_live_YOUR_API_KEY")

scenes = [
    {"file": "intro.mp4", "prompt": "Close-up of hands unboxing a sleek tech product, white background", "duration": 4},
    {"file": "feature.mp4", "prompt": "Smartphone screen showing an app interface, finger scrolling", "duration": 6},
    {"file": "lifestyle.mp4", "prompt": "Person wearing earbuds jogging through a park at sunrise", "duration": 8},
]

def generate(scene):
    client.models.generate_video_and_save(
        scene["file"], model="ByteDance-Seed/seedance-1.0-pro",
        prompt=scene["prompt"], duration=scene["duration"],
    )
    print(f"Done: {scene['file']}")

with ThreadPoolExecutor(max_workers=3) as pool:
    pool.map(generate, scenes)

Seedance vs. other video models

FeatureSeedance 1.0 ProVeo 3.0Kling v3
Max duration12s8s15s
Multi-inputUp to 9 images + 3 videos + 3 audioText onlyReference video
Best forMulti-asset creative workflowsPhotorealistic 4KHuman motion

Tips

  • Start with 2.0 Fast for prototyping, switch to 1.0 Pro for final renders.
  • Prompt specificity matters — include camera angle, lighting, and motion descriptions.
  • Duration: shorter clips (2–4s) are tighter and more focused. Use 8–12s for establishing shots.

Next steps