Guide · image to video

Seedance 2.5 image to video: API guide

Seedance 2.5 turns a still picture into a clip of 4 to 30 seconds with sound. Give it a first frame and the video starts on exactly that picture; give it a first and a last frame and it moves from one to the other. Here is the request for each, with code you can run.

Two ways to start from a picture

Seedance 2.5 image to video modes
ModeFieldWhat you get
First frameimage_urlThe clip opens on your picture and moves on from it, as the prompt says.
First and last frameimage_url + end_image_urlThe clip starts on one picture and lands on the other. The same picture twice makes a loop.
Reference imagesimage_urls (up to 30)The pictures guide the look (a face, a product, a place) without fixing the first frame. See reference to video.

Animate one picture (first frame)

Set aspect_ratio to adaptive and the video keeps your picture’s shape, so a 9:16 photo gives a 9:16 clip. Describe what moves, not what is already in the picture: the model can see the picture.

cURL
# One Idempotency-Key per job, made once: resend with the same $KEY after a timeout, a 429 or a 5xx
KEY=$(uuidgen)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $KEY" \
  -d '{
  "model": "seedance-2.5",
  "input": {
    "prompt": "The model turns her head toward the camera and smiles as the wind lifts her hair, slow push-in, city traffic in the background",
    "image_url": "https://example.com/portrait.jpg",
    "duration": 6,
    "resolution": "720p",
    "aspect_ratio": "adaptive",
    "audio": true
  },
  "max_cost_usd": 3
}'

From one picture to another (first and last frame)

Add end_image_url. Good for transformations (before and after, day to night, an empty room to a furnished one) and for seamless loops.

cURL
# One Idempotency-Key per job, made once: resend with the same $KEY after a timeout, a 429 or a 5xx
KEY=$(uuidgen)
curl https://api.revana.si/v1/generations \
  -H "Authorization: Bearer $REVANA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $KEY" \
  -d '{
  "model": "seedance-2.5",
  "input": {
    "prompt": "Time-lapse: the empty plot becomes a finished house, workers moving fast, clouds racing",
    "image_url": "https://example.com/plot.jpg",
    "end_image_url": "https://example.com/house.jpg",
    "duration": 8,
    "resolution": "720p",
    "aspect_ratio": "adaptive"
  },
  "max_cost_usd": 3
}'

From a file on your computer, in Python

References must be https links. For a local file, POST /v1/uploads gives you a link to PUT the bytes to, and a url to pass as image_url (good for 14 days). Images up to 30 MB.

Python
import os, time, uuid, requests

API = "https://api.revana.si/v1"
H = {"Authorization": f"Bearer {os.environ['REVANA_API_KEY']}"}

# 1. Upload the picture from your computer (skip this if it already has a public https link).
up = requests.post(f"{API}/uploads", headers=H, json={"content_type": "image/jpeg", "bytes": os.path.getsize("product.jpg"), "filename": "product.jpg"}).json()
with open("product.jpg", "rb") as fh:
    requests.put(up["upload_url"], data=fh, headers=up["upload_headers"]).raise_for_status()

# 2. Quote, then animate it. The clip starts on exactly this picture.
body = {"model": "seedance-2.5", "input": {
    "prompt": "The bottle slowly turns on the marble counter as morning light sweeps across the label, water droplets glisten",
    "image_url": up["url"], "duration": 5, "resolution": "720p", "aspect_ratio": "adaptive", "audio": True}}
quote = requests.post(f"{API}/generations/quote", headers=H, json=body).json()
print("price", quote["quoted_usd"])
key = str(uuid.uuid4())  # made once: resend with the same key after a timeout, a 429 or a 5xx
job = requests.post(f"{API}/generations", headers={**H, "Idempotency-Key": key},
                    json={**body, "max_cost_usd": quote["reserved_usd"]}).json()

# 3. Wait, then download.
while job["status"] in ("queued", "running"):
    time.sleep(5)
    job = requests.get(f"{API}/generations/{job['id']}", headers=H).json()
if job["status"] == "succeeded":
    open("product.mp4", "wb").write(requests.get(f"{API}/generations/{job['id']}/content", headers=H).content)

What image to video costs

The same per-second rate as text to video: 480p $0.09 · 720p $0.21 · 1080p $0.52, sound included. A first frame can add a little to the listed rate, so the quote endpoint (free) gives the exact price of each request; pass its reserved_usd as max_cost_usd. Failed generations are not charged. Price calculator.

Prompts that work for image to video

  • Say what changes. “She turns and walks out of frame” beats a description of the woman already in the photo.
  • One camera move. Slow push-in, orbit, pan left, or locked-off. Two moves at once in a short clip tend to fight.
  • Keep the light. Mention the light that is in the picture (“warm window light”) so the clip does not drift to a different look.
  • Add the sound. Seedance 2.5 makes it with the picture: “footsteps on gravel, a distant train”.
  • Use a clean, sharp picture at roughly the output shape. Text and logos in the picture can warp as it moves; add them in your editor.

More examples in the Seedance 2.5 prompt guide.

Other image to video models on the same key

Image to video models compared
ModelLengthResolutionsFirst and last frame720p per second with sound
Seedance 2.54–30 s480p, 720p, 1080pYes$0.21
Seedance 2.04–15 s480p, 720p, 1080p, 4KYes$0.15
Kling 4.03–30 s720p, 1080pYes$0.18
Kling 3.03–15 s720p, 1080p, 4KYes$0.13
Veo 3.14, 6, 8 s720p, 1080p, 4KYes$0.40
Wan 3.02–30 s480p, 720p, 1080pYes$0.07
MiniMax H34–15 s768p, 2KYes$0.03 (768p)

FAQ

Does Seedance 2.5 do image to video?

Yes. Send image_url for a first frame, or image_url and end_image_url for a first and last frame, in the same POST /v1/generations request as text to video. Clips are 4 to 30 seconds with sound.

How much does Seedance 2.5 image to video cost?

480p $0.09 · 720p $0.21 · 1080p $0.52 per second with sound on Revana. A first frame can add a little; the free quote endpoint gives the exact price.

What picture formats and sizes work?

Any public https link to a JPEG, PNG or WebP picture, or a file uploaded with POST /v1/uploads (images up to 30 MB).

Will the video keep my picture’s aspect ratio?

Yes, with aspect_ratio set to adaptive: the clip takes the shape of the first frame.

Can I make a seamless loop?

Yes: pass the same picture as image_url and end_image_url, and describe a motion that returns to the start.

Make your first Seedance 2.5 video

One API key for Seedance 2.5 and every other video and image model. Prepaid credit from $10, free signup credit, no subscription, and only delivered clips are charged.