Seedance 2.0 to model wideo ByteDance, który generuje klipy od 4 do 15 sekund w 480p, 720p, 1080p lub 4K, domyślnie z wygenerowanym dźwiękiem: mową, efektami i muzyką. Tryb wybiera się sam, zależnie od tego, co wyślesz: sam tekst, 1-9 zdjęć, pierwszą i ostatnią klatkę albo do 3 klipów i 3 ścieżek audio jako referencje. Ustawienie duration: -1 pozwala modelowi dobrać długość. Nowsza generacja z klipami do 30 sekund to Seedance 2.5.
Do czego się nadaje
- Rolki i TikToki 9:16 z dźwiękiem od razu w pliku
- Reklamy produktu animowane z 1-2 zdjęć packshotu
- Przejście między dwoma kadrami: pierwsza i ostatnia klatka
- Ujęcia do teledysku w 4K, które potem montujesz w całość
Jak pisać prompty
- ByteDance zaleca prompty do około 500 znaków, choć limit wynosi 20 000.
- Opisz ruch kamery osobno od ruchu postaci: "slow dolly in", "handheld", "static shot".
- Dźwięk też opisz w prompcie: dialog w cudzysłowie, tło, rodzaj muzyki.
- 1-2 zdjęcia są animowane, więcej działa jako referencje - dobieraj liczbę świadomie.
FAQ
Ile kosztuje Seedance 2.0 za sekundę?
Stawka to od 0,907 zł za sekundę, z VAT. Klipy referencyjne w video_urls są liczone dodatkowo do wyniku, a nieudane generacje nie są płatne.
Jak długi film zrobi Seedance 2.0?
Od 4 do 15 sekund w jednym zadaniu. Przy duration: -1 model sam wybiera długość, a na czas zadania rezerwuje środki jak za 15 sekund.
Czy mogę dodać własną muzykę jako wzór?
Tak, do 3 plików WAV lub MP3 w audio_urls, każdy 2-15 s. Audio musi iść razem z obrazem lub klipem. Przykłady są w dokumentacji.
Jak wywołać Seedance 2.0 przez API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "seedance-2.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "seedance-2.0",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parametry
| Parametr | Typ | Dozwolone | Domyślnie |
|---|---|---|---|
prompt * | string | ≤ 20000 znaków | |
aspect_ratio | string | 16:9 9:16 1:1 4:3 3:4 21:9 adaptive | adaptive |
resolution | string | 480p 720p 1080p 4k | 720p |
duration | integer | 4-15 | 5 |
generate_audio | boolean | true | |
image_url | string | ||
end_image_url | string | ||
image_urls | array | maks. 9 | |
video_urls | array | maks. 3 | |
audio_urls | array | maks. 3 |
Ten sam schemat zwraca GET /v1/models/seedance-2.0.









