> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apipod.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Seedance 2.5 Lite Reference to Video

> Seedance 2.5 Lite Reference to Video is the special-price full-capability route that uses reference images, video, or audio to guide subjects, motion, visual style, and sound. It accepts up to 30 reference images, 10 reference videos, and 10 reference audios, supports durations up to 30 seconds, and outputs 720p only. This is a full-capability variant: media URLs are submitted to the asset review service before the task is submitted by default (real_person=true); set real_person=false only when the materials are confirmed face-free to pass media URLs through as-is, so plain public URLs always work in requests.

<Warning title="Conditional validation">Provide at least one reference asset. The per-media limits are defined by the API schema.</Warning>

## Asset and Scene Limits

Seedance 2.5 Lite reference-material mode is a special-price full-capability route with a built-in asset library, no facial distortion, a 100% pass rate for real-person content, and long-term stability. It bills at special-offer rates and only successful tasks are charged — see the pricing page for live rates.

* **Text prompt**: For Chinese, keep it under 500 characters; for English, under 1,000 words.
* **Image input**: Supports jpeg, png, webp, bmp, tiff, gif, heic, and heif formats; each image under 30 MB; aspect ratio range (0.4, 2.5); width and height range (300px, 6000px).
* **Image count**: No more than 30 images.
* **Video input**: Each video 2–30 seconds; up to 10 reference videos; total video duration must not exceed 30 seconds.
* **Audio input**: Each clip 2–30 seconds; up to 10 reference audio clips; total audio duration must not exceed 30 seconds.
* **Audio input restriction**: Audio cannot be provided on its own; at least one reference image or reference video is required.
* **Resolution**: 720p only — 480p, 1080p, 2K and 4K are not supported on this route.
* **Duration**: 4–30 seconds per clip (default 4s).

<Note>
  Note: When video input is enabled, the unit price is lower because the billing formula differs: without video = unit price × output duration; with video = unit price × (input duration + output duration).
</Note>

## Real-person review (real\_person)

When a request carries reference materials, the boolean `real_person` field controls whether materials are submitted to face review first:

* `real_person: true` (default): materials are submitted to the asset review service first, and the task is created with `assetId://{assetId}` references; the task waits during review and fails if review rejects the materials.
* `real_person: false`: review is skipped and material URLs are passed through to task creation as-is.

Set it to `false` only when the materials are confirmed face-free to save the review round trip; keep the default `true` for materials containing real people.

## Asset library references

Besides publicly accessible URLs, the `image_url` / `image_urls`, `video_urls`, and `audio_url` / `audio_urls` fields also accept asset library references in the form `assetId://{assetId}`. Asset IDs are shared across the platform: any account may reference a known `assetId`, regardless of who submitted it — the same sharing semantics as a public URL. Only `ACTIVE` assets pass validation. Submit and track assets via [asset upload](/seedance/asset-upload) and [asset detail](/seedance/asset-detail).


## OpenAPI

````yaml api-reference/openapi/seedance--2-5-lite-reference-to-video.yaml POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Seedance 2.5 Lite Reference to Video API
  version: 1.0.0
  description: >-
    Seedance 2.5 Lite Reference to Video is the special-offer full-capability
    route that uses reference images, video, or audio to guide subjects, motion,
    visual style, and sound. The Seedance family emphasizes prompt following,
    coherent motion, multi-shot storytelling, and synchronized audio. In APIPod,
    the public model ID is seedance-2.5-lite-r2v. It accepts up to 30 reference
    images, 10 reference videos, and 10 reference audios, with durations up to
    30 seconds, outputs 720p video, and returns results through asynchronous
    video tasks. This is a full-capability variant where media URLs are
    submitted to the asset review service before the task is created by default
    (real_person=true); set real_person=false only when the materials are
    confirmed face-free to pass media URLs through without review, and plain
    public URLs always work in requests.
servers:
  - url: https://api.apipod.ai
    description: Production
security: []
paths:
  /v1/videos/generations:
    post:
      tags:
        - Seedance 2.5 Lite Reference to Video
      summary: Create Generation Task
      description: >-
        Seedance 2.5 Lite Reference to Video is the special-offer
        full-capability route that uses reference images, video, or audio to
        guide subjects, motion, visual style, and sound. The Seedance family
        emphasizes prompt following, coherent motion, multi-shot storytelling,
        and synchronized audio. In APIPod, the public model ID is
        seedance-2.5-lite-r2v. It accepts up to 30 reference images, 10
        reference videos, and 10 reference audios, with durations up to 30
        seconds, outputs 720p video, and returns results through asynchronous
        video tasks. This is a full-capability variant where media URLs are
        submitted to the asset review service before the task is created by
        default (real_person=true); set real_person=false only when the
        materials are confirmed face-free to pass media URLs through without
        review, and plain public URLs always work in requests.
      operationId: create-seedance-2-5-lite-reference-to-video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              title: Seedance 2.5 Lite Reference to Video
              properties:
                model:
                  type: string
                  title: Model ID
                  description: Public APIPod model ID.
                  const: seedance-2.5-lite-r2v
                prompt:
                  type: string
                  title: Prompt
                  description: >-
                    Generation or editing instructions, up to 30000 characters.
                    It is recommended to keep the prompt to no more than 500
                    Chinese characters or 1,000 English words. Lengthy text will
                    lead to scattered information, and the model may ignore
                    details and only focus on key points, resulting in missing
                    elements in the generated video.
                  maxLength: 30000
                image_urls:
                  type: array
                  title: Image Urls
                  description: >-
                    Reference image URLs. Up to 30 images are supported; each
                    image must be smaller than 30 MB.
                  maxItems: 30
                  items:
                    type: string
                video_urls:
                  type: array
                  title: Video Urls
                  description: >-
                    Reference video URLs. Up to 10 videos are supported; each
                    video lasts 2-30 seconds and the total duration of all
                    videos must not exceed 30 seconds.
                  maxItems: 10
                  items:
                    type: string
                audio_urls:
                  type: array
                  title: Audio Urls
                  description: >-
                    Reference audio URLs. Up to 10 audios are supported; each
                    audio lasts 2-30 seconds and the total duration of all
                    audios must not exceed 30 seconds. Please note that audio
                    files cannot be uploaded alone; at least one reference video
                    or image must be included.
                  maxItems: 10
                  items:
                    type: string
                duration:
                  type: integer
                  title: Duration
                  description: Video duration in seconds, from 4 to 30.
                  enum:
                    - 4
                    - 5
                    - 6
                    - 7
                    - 8
                    - 9
                    - 10
                    - 11
                    - 12
                    - 13
                    - 14
                    - 15
                    - 16
                    - 17
                    - 18
                    - 19
                    - 20
                    - 21
                    - 22
                    - 23
                    - 24
                    - 25
                    - 26
                    - 27
                    - 28
                    - 29
                    - 30
                  default: 4
                  minimum: 4
                  maximum: 30
                resolution:
                  type: string
                  title: Resolution
                  description: Generate video resolution.
                  enum:
                    - 720p
                  default: 720p
                aspect_ratio:
                  type: string
                  title: Aspect Ratio
                  description: >-
                    Aspect ratio of the generated video,When the ratio is
                    configured as adaptive, the model will automatically adapt
                    the aspect ratio according to the generation scenario.
                  enum:
                    - adaptive
                    - '16:9'
                    - '4:3'
                    - '1:1'
                    - '3:4'
                    - '9:16'
                    - '21:9'
                  default: adaptive
                generate_audio:
                  type: boolean
                  title: Generate Audio
                  description: >-
                    Controls whether the generated video contains audio
                    synchronized with the visuals.
                  default: true
                real_person:
                  type: boolean
                  title: Real Person
                  description: >-
                    Whether the reference materials contain real people (human
                    faces). Defaults to true: materials are submitted to the
                    asset review service and replaced with assetId:// references
                    before task creation. Set to false only when the materials
                    are confirmed face-free to skip review and pass material
                    URLs through as-is.
                  default: true
              required:
                - model
                - prompt
            example:
              model: seedance-2.5-lite-r2v
              prompt: >-
                Keep the character and voice, cinematic product shot with
                natural lighting.
              image_urls:
                - https://example.com/reference.png
              video_urls:
                - https://example.com/reference.mp4
              audio_urls:
                - https://example.com/voice.mp3
              duration: 4
              resolution: 720p
              aspect_ratio: adaptive
              generate_audio: true
      responses:
        '200':
          description: Task accepted
          content:
            application/json:
              schema:
                type: object
                title: Task Submit Response
                description: Standard response for task submission
                properties:
                  code:
                    type: integer
                  data:
                    type: object
                    title: Task Submit Data
                    description: Data content for task submission
                    properties:
                      task_id:
                        type: string
                        description: generatation task id
                  message:
                    type: string
                required:
                  - code
                  - message
                  - data
              example:
                code: 200
                message: success
                data:
                  task_id: vid_task_01JEXAMPLE
      security:
        - bearerAuth: []
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |-
            curl https://api.apipod.ai/v1/videos/generations \
              -H "Authorization: Bearer $APIPOD_API_KEY" \
              -H "Content-Type: application/json" \
              -d '{
              "model": "seedance-2.5-lite-r2v",
              "prompt": "Keep the character and voice, cinematic product shot with natural lighting.",
              "image_urls": ["https://example.com/reference.png"],
              "video_urls": ["https://example.com/reference.mp4"],
              "audio_urls": ["https://example.com/voice.mp3"],
              "duration": 4,
              "resolution": "720p",
              "aspect_ratio": "adaptive",
              "generate_audio": true
            }'
        - lang: Python
          label: Python
          source: |-
            import os
            import requests

            payload = {
              "model": "seedance-2.5-lite-r2v",
              "prompt": "Keep the character and voice, cinematic product shot with natural lighting.",
              "image_urls": ["https://example.com/reference.png"],
              "video_urls": ["https://example.com/reference.mp4"],
              "audio_urls": ["https://example.com/voice.mp3"],
              "duration": 4,
              "resolution": "720p",
              "aspect_ratio": "adaptive",
              "generate_audio": True
            }

            response = requests.post(
                "https://api.apipod.ai/v1/videos/generations",
                headers={
                    "Authorization": f"Bearer {os.environ['APIPOD_API_KEY']}",
                    "Content-Type": "application/json",
                },
                json=payload,
                timeout=60,
            )
            response.raise_for_status()
            print(response.json())
        - lang: Go
          label: Go
          source: |-
            package main

            import (
                "bytes"
                "encoding/json"
                "fmt"
                "net/http"
                "os"
            )

            func main() {
                payload := map[string]any{}
                if err := json.Unmarshal([]byte(`{
              "model": "seedance-2.5-lite-r2v",
              "prompt": "Keep the character and voice, cinematic product shot with natural lighting.",
              "image_urls": ["https://example.com/reference.png"],
              "video_urls": ["https://example.com/reference.mp4"],
              "audio_urls": ["https://example.com/voice.mp3"],
              "duration": 4,
              "resolution": "720p",
              "aspect_ratio": "adaptive",
              "generate_audio": true
            }`), &payload); err != nil {
                    panic(err)
                }
                body, err := json.Marshal(payload)
                if err != nil {
                    panic(err)
                }

                req, err := http.NewRequest(http.MethodPost, "https://api.apipod.ai/v1/videos/generations", bytes.NewReader(body))
                if err != nil {
                    panic(err)
                }
                req.Header.Set("Authorization", "Bearer "+os.Getenv("APIPOD_API_KEY"))
                req.Header.Set("Content-Type", "application/json")

                resp, err := http.DefaultClient.Do(req)
                if err != nil {
                    panic(err)
                }
                defer resp.Body.Close()
                fmt.Println(resp.Status)
            }
        - lang: Rust
          label: Rust
          source: |-
            use reqwest::Client;
            use serde_json::json;
            use std::env;

            #[tokio::main]
            async fn main() -> Result<(), Box<dyn std::error::Error>> {
                let payload = json!({
              "model": "seedance-2.5-lite-r2v",
              "prompt": "Keep the character and voice, cinematic product shot with natural lighting.",
              "image_urls": ["https://example.com/reference.png"],
              "video_urls": ["https://example.com/reference.mp4"],
              "audio_urls": ["https://example.com/voice.mp3"],
              "duration": 4,
              "resolution": "720p",
              "aspect_ratio": "adaptive",
              "generate_audio": true
            });
                let response = Client::new()
                    .post("https://api.apipod.ai/v1/videos/generations")
                    .bearer_auth(env::var("APIPOD_API_KEY")?)
                    .json(&payload)
                    .send()
                    .await?
                    .error_for_status()?;

                println!("{}", response.text().await?);
                Ok(())
            }
        - lang: JavaScript
          label: JavaScript
          source: >-
            const response = await
            fetch("https://api.apipod.ai/v1/videos/generations", {
              method: "POST",
              headers: {
                Authorization: `Bearer ${process.env.APIPOD_API_KEY}`,
                "Content-Type": "application/json",
              },
              body: JSON.stringify(
                {
                  "model": "seedance-2.5-lite-r2v",
                  "prompt": "Keep the character and voice, cinematic product shot with natural lighting.",
                  "image_urls": ["https://example.com/reference.png"],
                  "video_urls": ["https://example.com/reference.mp4"],
                  "audio_urls": ["https://example.com/voice.mp3"],
                  "duration": 4,
                  "resolution": "720p",
                  "aspect_ratio": "adaptive",
                  "generate_audio": true
                }
              ),
            });


            if (!response.ok) {
              throw new Error(`APIPod request failed: ${response.status} ${await response.text()}`);
            }


            console.log(await response.json());
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: APIPod API key
      description: Use your APIPod API key as a Bearer token in the Authorization header.

````