Tekst na wideo
Zacznij od polecenia tekstowego, gdy nie potrzebujesz mediów źródłowych. Wybierz seedance-2.0 lub seedance-2.5 i sprawdź ustawienia wyjścia właściwe dla modelu.
API wideo
Porównaj API wideo Seedance do generowania z tekstu i na podstawie materiałów referencyjnych. Sprawdź obsługiwane dane wejściowe, ceny, odpytywanie zadań i pobieranie gotowego wideo.
Aktualne modele Seedance są rozliczane według tokenów wyjściowych. Czas trwania wpływa na szacowane użycie; nie jest jednostką rozliczenia. Zachowaj ID zadania, aby pobrać wynik lub zgłosić błąd.
Do konkretnego zadania
Zacznij od polecenia tekstowego, gdy nie potrzebujesz mediów źródłowych. Wybierz seedance-2.0 lub seedance-2.5 i sprawdź ustawienia wyjścia właściwe dla modelu.
Animuj obraz początkowy poleceniem ruchu. Korzystaj z przewodnika obrazu do wideo dla wybranego modelu zamiast mieszać pola z innych trybów wejścia.
Podaj pierwszą klatkę i w razie potrzeby ostatnią, aby określić początek i koniec ujęcia. Sprawdź role klatek i wymagania mediów w przewodniku modelu.
Łącz referencje zgodnie z udokumentowanymi rolami obrazów, wideo i dźwięku. Wymagana jest co najmniej jedna referencja obrazu lub wideo; sam dźwięk nie wystarcza.
Jednostka rozliczeniowa
USD za milion tokenów wyjściowych. Właściwa stawka zależy od modelu, rozdzielczości wyjściowej i warunków referencji wideo.
Ograniczenia operacyjne
Przewodniki integracji
Aktualny zakres katalogu
Porównaj ID API, operacje, dostawców i ceny. Przed oszacowaniem kosztów użycia sprawdź datę katalogu i jednostkę rozliczeniową każdej operacji.
Generuj wideo za pomocą Seedance 2.0.
POST /v1/video/seedance Informacje o Wysyłanie zadań wideo GET /v1/jobs/{id} Informacje o Odpytywanie zadań 480p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
480p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
720p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
720p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
1080p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
1080p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
4k · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
4k · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 5%
Cena referencyjna nie została niezależnie zweryfikowana. Przed porównaniem kosztów sprawdź aktualny cennik wydawcy, jednostki rozliczeniowe i obowiązujące warunki.
Generuj wideo za pomocą Seedance 2.5.
POST /v1/video/seedance Informacje o Wysyłanie zadań wideo GET /v1/jobs/{id} Informacje o Odpytywanie zadań 480p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
480p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
720p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
720p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
1080p · Z referencją wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
1080p · Bez referencji wideo
Cena oficjalna
Cena API Hop Oszczędność 2%
Cena referencyjna nie została niezależnie zweryfikowana. Przed porównaniem kosztów sprawdź aktualny cennik wydawcy, jednostki rozliczeniowe i obowiązujące warunki.
Przykład żądania
Te przykłady żądań generowania wideo wysyłają jedno zadanie Seedance 2.5 tekst na wideo, zachowują jobId i odpytują GET /v1/jobs/{jobId} z limitem czasu. Pobierz outputResult dopiero po COMPLETED; obsługuj FAILED i CANCELLED osobno. To przykłady integracji, a nie prezentacje wygenerowanych filmów.
# Requires bash, curl and jq. A polling timeout does not cancel the job.
set -euo pipefail
BASE_URL="https://api.apihop.ai"
API_KEY='YOUR_API_KEY'
created=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/video/seedance" \
-H "Authorization: Bearer $API_KEY" -H 'Content-Type: application/json' \
--data '{"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}')
job_id=$(printf '%s' "$created" | jq -er '.data.jobId | select(. != null) | tostring')
deadline=$((SECONDS + 600))
while (( SECONDS < deadline )); do
job=$(curl --fail-with-body --silent --show-error --max-time 30 \
"$BASE_URL/v1/jobs/$job_id" -H "Authorization: Bearer $API_KEY")
status=$(printf '%s' "$job" | jq -er '.data.status')
case "$status" in
COMPLETED) printf '%s' "$job" | jq -e '.data.outputResult'; exit 0 ;;
FAILED|CANCELLED) printf 'Job %s: %s\n' "$job_id" "$status" >&2; exit 1 ;;
esac
sleep 5
done
printf 'Polling timed out; retain jobId for a later status check: %s\n' "$job_id" >&2
exit 1const baseUrl = "https://api.apihop.ai";
const headers = { Authorization: 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' };
async function request(path, options = {}) {
const response = await fetch(baseUrl + path, { ...options, headers, signal: AbortSignal.timeout(30000) });
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
if (result.success === false) throw new Error(JSON.stringify(result.error));
return result.data;
}
const created = await request('/v1/video/seedance', { method: 'POST', body: JSON.stringify({"model":"seedance-2.5","prompt":"A calm city street at dawn","duration":5,"resolution":"720p"}) });
if (!created?.jobId) throw new Error('Missing data.jobId');
const deadline = Date.now() + 10 * 60 * 1000;
let completed = false;
while (Date.now() < deadline) {
const job = await request('/v1/jobs/' + encodeURIComponent(created.jobId));
if (job.status === 'COMPLETED') {
if (job.outputResult == null) throw new Error('Completed job has no outputResult');
console.log(job.outputResult);
completed = true;
break;
}
if (['FAILED', 'CANCELLED'].includes(job.status)) throw new Error('Job ' + job.status);
await new Promise(resolve => setTimeout(resolve, 5000));
}
if (!completed) throw new Error('Polling timed out; retain jobId for a later status check: ' + created.jobId);import json
import time
import urllib.request
base_url = "https://api.apihop.ai"
headers = {'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json'}
def request(path, body=None):
data = json.dumps(body).encode() if body is not None else None
req = urllib.request.Request(base_url + path, data=data, headers=headers)
with urllib.request.urlopen(req, timeout=30) as response:
result = json.load(response)
if result.get('success') is False:
raise RuntimeError(result.get('error'))
return result['data']
created = request('/v1/video/seedance', json.loads("{\"model\":\"seedance-2.5\",\"prompt\":\"A calm city street at dawn\",\"duration\":5,\"resolution\":\"720p\"}"))
job_id = str(created['jobId'])
deadline = time.monotonic() + 600
while time.monotonic() < deadline:
job = request('/v1/jobs/' + job_id)
if job['status'] == 'COMPLETED':
if job.get('outputResult') is None:
raise RuntimeError('Completed job has no outputResult')
print(job['outputResult'])
break
if job['status'] in ('FAILED', 'CANCELLED'):
raise RuntimeError('Job ' + job['status'])
time.sleep(5)
else:
raise TimeoutError('Polling timed out; retain jobId for a later status check: ' + job_id) Użyj bazowego URL API z dokumentacji konta i zastąp symbole zastępcze przykładu. Przekaż klucz API w nagłówku Authorization; nigdy nie umieszczaj go w URL ani pliku zapisanym w repozytorium.