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
| Mode | Field | What you get |
|---|---|---|
| First frame | image_url | The clip opens on your picture and moves on from it, as the prompt says. |
| First and last frame | image_url + end_image_url | The clip starts on one picture and lands on the other. The same picture twice makes a loop. |
| Reference images | image_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.
# 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.
# 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.
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
| Model | Length | Resolutions | First and last frame | 720p per second with sound |
|---|---|---|---|---|
| Seedance 2.5 | 4–30 s | 480p, 720p, 1080p | Yes | $0.21 |
| Seedance 2.0 | 4–15 s | 480p, 720p, 1080p, 4K | Yes | $0.15 |
| Kling 4.0 | 3–30 s | 720p, 1080p | Yes | $0.18 |
| Kling 3.0 | 3–15 s | 720p, 1080p, 4K | Yes | $0.13 |
| Veo 3.1 | 4, 6, 8 s | 720p, 1080p, 4K | Yes | $0.40 |
| Wan 3.0 | 2–30 s | 480p, 720p, 1080p | Yes | $0.07 |
| MiniMax H3 | 4–15 s | 768p, 2K | Yes | $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.