Video Generation

Seedance 2.0

Cinema-grade AI video generation by ByteDance. Text-to-video, image-to-video, video-to-video, and audio-driven lipsync. Up to 15 seconds at 1080p with native audio.

seedance-2AsyncStudio

Generate

POST/api/v1/generate

Returns a task_id immediately. Poll /api/v1/status for the result. Credits are deducted upfront and auto-refunded if the generation fails.

Parameters

model
stringrequired
Must be seedance-2
prompt
stringrequired
Text prompt describing the video. Supports @image1 @video1 @audio1 tags to reference attached media (see References below).

Include camera and lens instructions directly in the prompt for cinematic control (see Cinema Controls below).
duration
number
Video length in seconds. Range: 4-15. Default: 5
aspect_ratio
string
16:9 9:16 1:1 4:3 3:4 21:9. Default: 16:9
resolution
string
480p 720p 1080p. Default: 720p. Fast mode supports 480p and 720p (1080p is standard only).
mode
string
standard (cinema-grade, 2-10 min) or fast (good quality, 1-5 min). Default: standard
reference_images
string[]
Up to 9 public image URLs. Use @image1, @image2 in prompt. Single image = image-to-video. Multiple = reference mode. Upload via /api/v1/upload.
reference_videos
string[]
Up to 3 public video URLs. Use @video1 in prompt. Enables video-to-video: motion transfer, style reference, video editing.
reference_audio
string[]
Up to 3 public audio URLs. Use @audio1 in prompt. Enables lipsync (sync mouth to dialogue) and beat-sync (sync motion to music). Does not change the generation mode.
last_frame
string
Public image URL as the end frame. The video animates from the start image (reference_images[0]) to this end pose/scene.
reference_mode
boolean
Optional. Set true to force reference mode even with a single image: the image becomes an identity/style hint and the model composes its own opening shot instead of pinning your image as the first frame.
tag
string
Tag the output for reuse: character object style location. Tagged outputs appear in your library.

Examples

Text-to-video
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "Cinematic drone shot over a misty mountain lake at sunrise, shot on ARRI ALEXA 65",
    "duration": 8,
    "aspect_ratio": "16:9",
    "resolution": "1080p",
    "mode": "standard"
  }'
Image-to-video
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "@image1 walks through a neon-lit Tokyo street at night",
    "duration": 6,
    "reference_images": ["https://storage.lunostudio.ai/.../character.jpg"]
  }'
Multi-ref with characters
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "@image1 and @image2 shake hands in a boardroom, medium shot",
    "duration": 5,
    "reference_images": [
      "https://storage.lunostudio.ai/.../person-a.jpg",
      "https://storage.lunostudio.ai/.../person-b.jpg"
    ],
    "tag": "character"
  }'
Lipsync with dialogue audio
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "@image1 delivers the monologue from @audio1, close-up shot, warm lighting",
    "duration": 10,
    "reference_images": ["https://storage.lunostudio.ai/.../actor.jpg"],
    "reference_audio": ["https://storage.lunostudio.ai/.../dialogue.mp3"]
  }'
Video-to-video (motion transfer)
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "Recreate the camera movement from @video1 but with a mountain landscape at sunset",
    "duration": 8,
    "reference_videos": ["https://storage.lunostudio.ai/.../reference-clip.mp4"]
  }'
Start-to-end motion (last frame)
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "@image1 slowly sits down in the chair",
    "duration": 5,
    "reference_images": ["https://storage.lunostudio.ai/.../standing.jpg"],
    "last_frame": "https://storage.lunostudio.ai/.../sitting.jpg"
  }'
Response
{
  "task_id": "sd2_abc123def456",
  "credit_cost": 42,
  "status": "pending",
  "model": "bytedance/seedance-2.0",
  "type": "video"
}

References & Tags

Use @ tags in your prompt to tell the model how to use each reference. The number matches the array index (1-based). All URLs must be publicly accessible -- use /api/v1/upload to host your files.

@image1, @image2, ...via reference_images

Character consistency, style transfer, scene composition. Single image = image-to-video. Multiple = reference mode (the model maintains consistency across all referenced subjects).

Example: "@image1 and @image2 shake hands in a boardroom"

@video1, @video2, ...via reference_videos

Motion transfer, camera movement reference, video-to-video editing. The model matches movement, camera work, or editing style from the reference.

Example: "Recreate the camera movement from @video1 but with a mountain landscape"

@audio1via reference_audio

Lipsync: sync character mouth movements to dialogue. Beat-sync: match motion timing to music. Attach MP3/WAV dialogue for talking-head videos.

Example: "@image1 delivers the monologue from @audio1, close-up"

last_frame

Start-to-end motion. Provide a start image as reference_images[0] and an end image as last_frame. The video transitions from start to end pose.

2+ images, or video refs without an image, use reference mode. A single image uses keyframe mode (image-to-video): the image is the first frame of the video. Audio and video refs do not change the mode — a single image plus reference_videos keeps the pinned first frame. See Pinned First Frame + Audio.

Pinned First Frame + Audio

A single reference_images URL is used as the first frame of the video. reference_audio can be attached at the same time for voice and lipsync, and last_frame sets the final frame. To chain clips, pass the previous clip's final frame as the next clip's first frame.

Chained clip: pinned frame + narration
curl -X POST https://www.lunostudio.ai/api/v1/generate \
  -H "Authorization: Bearer luno_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2",
    "prompt": "The narrator continues speaking, camera slowly pushes in",
    "duration": 8,
    "reference_images": ["https://storage.lunostudio.ai/.../prev-clip-final-frame.jpg"],
    "reference_audio": ["https://storage.lunostudio.ai/.../narration-part2.mp3"]
  }'

Identity references + a fixed first frame

With 2+ images the request runs in reference mode and no frame is pinned. To combine identity references with a fixed first frame, generate the opening frame as a still with a multi-reference image model such as Nano Banana Pro, then pass that image plus your audio here.

Set reference_mode: true to use the image as an identity/style reference instead of the first frame.


Modes & Resolution

ModeQualitySpeedMax Res
standardCinema-grade2-10 min1080p
fastGood for iteration1-5 min720p
1080p + fast automatically downgrades to 720p. Longer videos (10-15s) at 1080p can take 10+ minutes.

Audio

Seedance 2.0 generates native audio with every video automatically. No toggle needed. The model generates:

  • Dialogue -- synced to character lip movements
  • Ambient sound -- environment-matched backgrounds
  • Sound effects -- footsteps, doors, impacts matched to action
  • Music -- when prompted (e.g. "upbeat background music")

For lipsync to specific dialogue, attach audio via reference_audio and use @audio1 in the prompt.


Cinema Controls

Include camera, lens, focal length, and aperture instructions directly in your prompt. The model responds to these as real cinematography direction.

Camera
Color science, dynamic range, film grain
shot on ARRI ALEXA 65, shot on RED V-RAPTOR 8K, shot on Sony VENICE 2
Lens
Bokeh, flare, rendering style
Cooke S7/i lens, Panavision C-Series Anamorphic, Canon K35 vintage
Focal length
Perspective, compression, framing
14mm ultra-wide, 35mm, 85mm portrait, 200mm telephoto
Aperture
Depth of field, background blur
f/1.2 ultra wide open, f/2.8, f/8 deep focus
Camera motion
Camera movement through the scene
slow dolly forward, handheld, steadicam tracking, crane rising
Subject motion
How fast the subject moves
slow graceful movement, energetic fast motion, static pose
Cinema prompt example
{
  "model": "seedance-2",
  "prompt": "A woman walks through rain on a neon-lit street, shot on ARRI ALEXA 65, Panavision C-Series Anamorphic lens, 35mm, f/2.8, slow dolly forward",
  "duration": 8,
  "aspect_ratio": "21:9",
  "resolution": "1080p"
}

Check Status

GET/api/v1/status?task_id={task_id}

Poll every 5-10 seconds. Typical generation time is 2-10 minutes, and can exceed 10 minutes for longer or higher-resolution videos.

Request
curl "https://www.lunostudio.ai/api/v1/status?task_id=sd2_abc123def456" \
  -H "Authorization: Bearer luno_sk_your_key_here"
Generating
{ "task_id": "sd2_abc123def456", "status": "generating" }
Success
{
  "task_id": "sd2_abc123def456",
  "status": "success",
  "output": ["https://storage.lunostudio.ai/generations/user/1716234567.mp4"]
}
Failed (auto-refunded)
{
  "task_id": "sd2_abc123def456",
  "status": "failed",
  "error": "Generation failed",
  "refunded": true
}
Credits are automatically refunded when a generation fails.

Status values

pending

Queued, waiting

generating

Actively rendering

success

Done. Output in response.

failed

Failed. Credits refunded.

Need help?

Engineering team responds within 5 minutes.