HiAPI
Blog

Benutzerhandbuch

Kurzvideos mit seedance-2.0-mini erstellen: ein End-to-End-Workflow mit der hiapi API

Jul 7, 2026
Kurzvideos mit seedance-2.0-mini erstellen: ein End-to-End-Workflow mit der hiapi API

TL;DR

  • Was das ist: Ein End-to-End-Workflow zur Erstellung vertikaler Kurzvideos im TikTok/Reels-Stil mit seedance-2.0-mini über die hiapi API – vom ersten curl-Aufruf bis zum Skript, das eine ganze Woche an Inhalten in einem Batch rendert. Der auf dieser Seite eingebettete Demo-Clip wurde genau mit der hier gezeigten Anfrage erzeugt.
  • Warum dieses Modell für Kurzvideos: Natives 9:16, integriertes synchrones Audio (keine separate Sound-Nachbearbeitung nötig), flexible Dauer zwischen 4 und 15 Sekunden und ein 480p-Entwurf für nur $0.0272 pro Sekunde – ein 4-sekündiger vertikaler Entwurf kostet etwa $0.11 (Preise).
  • Verifizierte API-Fakten: prompt, duration (Ganzzahl von 4–15) und resolution (480p | 720p) sind Pflichtfelder; aspect_ratio akzeptiert 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive. Für Image-to-Video werden first_frame_url / last_frame_url verwendet. Das Schema ist strikt – unbekannte Felder wie seed werden mit 400 abgelehnt.
  • Workflow: Generiere in 480p, um Prompts zu iterieren, rendere die behaltenen Clips in 720p neu und reiche Aufgaben parallel im Batch ein – die asynchrone Warteschlange von /v1/tasks übernimmt das Fan-out für dich.

Warum seedance-2.0-mini zum Loop für Kurzvideos passt

Kurzvideoproduktion ist quantitativ: Du entwirfst viele Clips, behältst wenige und veröffentlichst täglich. Dieser Workflow verlangt von einer Video-API drei Dinge – günstige Iteration, vertikale Ausgabe und Ton – und seedance-2.0-mini erfüllt genau alle drei:

  • Ein Entwurf ist billig genug, um ihn wiederholt zu überarbeiten. Bei 480p rechnet das Modell mit $0.0272 pro Ausgabesekunde ab, sodass ein 4-Sekunden-Entwurf etwa $0.11 kostet und selbst ein vollständiger 15-Sekunden-Clip nur etwa $0.41. Die 720p-Stufe liegt bei $0.0586/Sekunde. (Preise wurden gegen die aktuelle Preisseite geprüft; Videos werden sekundengenau abgerechnet, daher ist duration dein Kostenhebel.)
  • Natives 9:16. Wird direkt vertikal gerendert, statt einen Querformat-Clip zuzuschneiden und dabei die Komposition zu verlieren.
  • Natives synchrones Audio. Das ausgegebene MP4 enthält eine AAC-Tonspur, die mit der Szene erzeugt wird – Umgebungsgeräusche, Foley, Raumrauschen. Für Feed-Inhalte, die automatisch mit Ton abgespielt werden, entfällt damit ein kompletter Schnittschritt.

Wenn du für Hauptinhalte ein größeres Modell derselben Familie möchtest, funktioniert derselbe Workflow mit seedance-2-0 – nur zu einer anderen Preisstufe.

Einrichtung

Du brauchst nur einen hiapi-API-Schlüssel, sonst nichts – kein SDK. Speichere den Schlüssel in einer Umgebungsvariablen:

export HIAPI_API_KEY="sk-..."

Alle Videomodelle auf hiapi laufen über einen einheitlichen asynchronen Task-Endpunkt: POST https://api.hiapi.ai/v1/tasks gibt sofort eine taskId zurück, danach pollst du GET /v1/tasks/{taskId}, bis der Task abgeschlossen ist. Details findest du in der Dokumentation.

Dein erster vertikaler Clip (T2V)

Eine minimal gültige Anfrage benötigt prompt, duration und resolution. Für Kurzvideos fügst du aspect_ratio: "9:16" hinzu:

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer $HIAPI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2.0-mini",
    "input": {
      "prompt": "Vertikales Kurzvideo. Auf einer sonnendurchfluteten Cafetheke wird ein frischer Matcha Latte langsam in ein klares Glas gegossen, grüne Wirbel entfalten sich in der Milch, weiches Fensterlicht, geringe Schärfentiefe. Natives Audio: sanfte Café-Atmosphäre, Geräusch des eingegossenen Getränks. Knackig, appetitanregend, fotorealistisch.",
      "duration": 4,
      "resolution": "480p",
      "aspect_ratio": "9:16"
    }
  }'

Die Antwort kommt sofort zurück:

{"code": 200, "data": {"taskId": "tk-hiapi-01KWTTFDPHSDWZ0FP1QAS5J79Q"}, "message": "success"}

Poll den Task, bis status success ist, und lade dann sofort output[0].url herunter – Ausgabe-URLs sind temporär und laufen ab. Hier ist genau der Clip, den diese Anfrage erzeugt hat (4 Sekunden, 480p, 9:16, mit nativem Einfüll- und Umgebungsaudio – zum Hören den Ton einschalten):

Zwei praktische Hinweise aus diesem Rendering: Die vertikale Ausgabe bei „480p“ hat gemessene 496×864 Pixel, und das Audio landet als Standard-AAC-Tonspur im MP4 – keine separate Datei zum Zusammenführen nötig.

Eingabeschema, gegen die Live-API geprüft

Das Schema ist strikt. Hier sind echte Validierungsantworten, wortgetreu wiedergegeben, damit du sie in deinen Logs erkennst:

Feld Typ Pflicht Wert
prompt string ✅ (Mindestlänge 3) deine Szenenbeschreibung
duration integer ✅ 4–15 (Sekunden)
resolution string ✅ 480p, 720p
aspect_ratio string optional 1:1, 4:3, 3:4, 16:9, 9:16, 21:9, adaptive
first_frame_url string optional Bild-URL für das Startbild bei I2V
last_frame_url string optional Bild-URL für die Kontrolle des Endbilds
image_input array optional Multimodale Bildreferenz
reference_video_urls array optional Referenzvideos für Stil/Bewegung (niedrigerer Sekundensatz)

Lässt du ein Pflichtfeld weg, wird der Task vor der Erstellung abgelehnt (keine Kosten):

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: resolution: missing required field \"resolution\"; duration: missing required field \"duration\""}

Werte außerhalb des Bereichs nennen die exakten Grenzen – duration: maximum: got 16, want 15 – und unbekannte Felder werden abgelehnt statt ignoriert:

{"code": 400, "error_code": "INVALID_REQUEST", "message": "invalid input: <root>: additional properties 'seed' not allowed"}

Besonders dieses letzte Verhalten solltest du verinnerlichen: Wenn du eine Anfragestruktur von anderen Modellen übernimmst (ein seed, ein size, ein audio-Flag), gibt seedance-2.0-mini einen 400 zurück, statt das Feld stillschweigend zu verwerfen.

Wiederverwendbare Python-Funktion

Alles, was du für die Produktion brauchst, sind rund 40 Zeilen – einreichen, pollen, herunterladen:

import os, time, requests

API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}"}

def submit(prompt: str, duration: int = 4, resolution: str = "480p",
           aspect_ratio: str = "9:16", **extra) -> str:
    r = requests.post(API, headers=HEADERS, json={
        "model": "seedance-2.0-mini",
        "input": {"prompt": prompt, "duration": duration,
                  "resolution": resolution, "aspect_ratio": aspect_ratio, **extra},
    }, timeout=60)
    data = r.json()
    task_id = (data.get("data") or {}).get("taskId")
    if not task_id:
        raise RuntimeError(f"submit failed: {data}")
    return task_id

def wait(task_id: str, timeout_s: int = 900) -> dict:
    deadline = time.time() + timeout_s
    while time.time() < deadline:
        task = requests.get(f"{API}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
        if task["status"] == "success":
            return task
        if task["status"] == "fail":
            raise RuntimeError(f"task failed: {task.get('error')}")
        time.sleep(8)
    raise TimeoutError(task_id)

def make_clip(prompt: str, out_path: str, **kw):
    task = wait(submit(prompt, **kw))
    url = task["output"][0]["url"]          # temporäre URL – bitte sofort herunterladen
    with open(out_path, "wb") as f:
        f.write(requests.get(url, timeout=120).content)

Ein 4-sekündiger 480p-Clip ist in der Regel in wenigen Minuten fertig; rechne zu Stoßzeiten mit bis zu etwa 10 Minuten, bevor du einen Timeout feststellst.

Image-to-Video: das erste Bild fixieren

Bei produktorientierten Kurzclips ist Prompt-Drift der Feind – du willst dein Produkt im Bild, nicht die Vorstellung des Modells davon. Die Lösung ist I2V mit first_frame_url: Erzeuge (oder fotografiere) ein Standbild und animiere es dann. Ein vertikales Referenz-Standbild wie dieses, erstellt mit gpt-image-2 über denselben /v1/tasks-Endpunkt, eignet sich gut als Startbild:

Die Anfrage fügt nur ein Feld hinzu:

task_id = submit(
    "Heißes Wasser wird von oben langsam kreisend eingegossen, der Pour-over-Filter beginnt zu dampfen, "
    "Tropfen fallen in die Glas-Servierkanne darunter, Sonnenlicht fängt den Dampf ein. Langsame, sanfte Kamerafahrt nach vorn. "
    "Natives Audio: leises Wassergeräusch, ruhiges Raumrauschen am Morgen.",
    duration=4, resolution="480p", aspect_ratio="9:16",
    first_frame_url="https://your-cdn.example/pourover-ref.jpg",
)

Hier ist die tatsächliche Wirkung der Animation des ersten Bilds – ein Standbild aus unserer seedance-2.0-mini-Rezeptsammlung und der daraus erzeugte Clip, gleiches Modell und gleiche Anfragestruktur (in diesem Fall 16:9):

Komposition, Farbton und Motiv bleiben an deinem Standbild fixiert; der Prompt beschreibt nur noch die Bewegung. Wenn der Clip an einem bestimmten Endbild enden soll, gibt es außerdem last_frame_url – nützlich für Loops, die zur Produktkarte zurückschneiden.

Eine Woche Inhalte im Batch produzieren

Da /v1/tasks asynchron ist, besteht die Batch-Produktion einfach darin, alle Aufgaben einzureichen und dann zu pollen. Keine clientseitige Warteschlange nötig.

briefs = [
    ("mon-hook",  "Vertikaler Clip. Espresso wird langsam extrahiert, ..."),
    ("tue-loop",  "Nahtloser vertikaler Loop-Clip. Dampf ringelt sich aus der Tasse, ..."),
    ("wed-recipe","Vertikaler Clip. Aufsicht auf eine Pour-over-Brühsequenz, ..."),
    # ... für jeden Veröffentlichungstag eines
]

tasks = {name: submit(p, duration=6) for name, p in briefs}   # Fan-out
for name, tid in tasks.items():                                 # Einsammeln
    make = wait(tid)
    url = make["output"][0]["url"]
    open(f"{name}.mp4", "wb").write(requests.get(url, timeout=120).content)

Die Kostenrechnung bleibt vorhersagbar, weil sekundengenau nach Ausgabe abgerechnet wird:

Szenario Spezifikation Kosten
1 Entwurfsiteration 4 Sekunden · 480p ca. $0.11
1 sofort veröffentlichbarer Clip 6 Sekunden · 480p ca. $0.16
7 Clips (eine Woche, täglich einer) 7 × 6 Sekunden · 480p ca. $1.14
Neu-Rendering für Hauptinhalte 6 Sekunden · 720p ca. $0.35

Ein bewährter Workflow: Jede Idee zuerst in 480p entwerfen, die Gewinner behalten und nur diese in 720p neu rendern. Weitere Hebel (Auflösungsstufen, Längenbeschnitt, Batch-Planung) findest du in unserem Leitfaden Kosten von KI-Bild- und Video-APIs steuern.

Prompt-Tipps für den Feed

Was in unseren Testrenderings funktioniert hat und speziell auf Kurzvideos abgestimmt ist:

  • Schreibe „vertikal“ und komponiere dafür. Beginne mit „Vertikales Kurzvideo.“ plus aspect_ratio: "9:16", damit das Motiv im hohen Bild zentriert ist, statt eine Querformat-Szene zu rahmen, die beschnitten würde.
  • Setze den Hook in die erste Sekunde. Der Feed entscheidet in der ersten Sekunde – lass die anfängliche Bewegung den Lohn sein (der Guss läuft bereits, der Dampf steigt bereits auf), nicht eine langsame Einstellungsaufnahme.
  • Schreibe das Audio vor. Eine Zeile „Natives Audio: …“ mit 2–3 konkreten Geräuschen (einschließendes Getränk, Café-Atmosphäre) formt die Tonspur zuverlässig. Ohne Prompt bekommst du nur generisches Raumrauschen.
  • Minimiere für Loop-Clips die Veränderung zwischen Anfang und Ende. Treibende Partikel, pulsierendes Leuchten, geringelter Dampf – beschreibe eine stationäre Bewegung, dann liegen Start- und Endbild nah genug beieinander, um zu loopen.

Zusammenfassung

Kurzvideos mit seedance-2.0-mini zu produzieren läuft auf einen asynchronen Endpunkt, drei Pflichtfelder und eine sekundengenaue Abrechnung hinaus, die Iteration günstig macht: Vertikale Clips in 480p entwerfen kostet etwa 25 Cent pro Stück, Produktaufnahmen werden mit first_frame_url fixiert, dein Veröffentlichungskalender wird im Batch eingereicht und die Behaltenen werden in 720p neu gerendert. Hole dir einen API-Schlüssel und beginne mit der 4-Sekunden-curl-Anfrage oben – die Modellseite von seedance-2.0-mini bietet eine Parameterreferenz und Live-Preise, um von dort weiterzumachen.

Ähnliche Artikel

Alle Artikel ansehen →

Starte mit persistenten KI-Artefakten

Hol dir deinen API-Key und rufe Bild-, Video- und Audiomodelle über eine einzige task-basierte API auf.

API-Dokumentation lesen