Batch-Verarbeitung
Mehrere lipsync-Generierungen effizient verarbeiten
Die Sync Labs Batch-API verarbeitet bis zu 500 lip sync-Generierungen in einer einzigen Anfrage, gesendet als JSONL-Datei oder als JSON-Array von Zeilen. Sie ist für große Mengen kurzer Clips gedacht, zum Beispiel personalisierte Videokampagnen oder Content-Lokalisierung, bei denen die Ergebnisse über mehrere Stunden eintreffen können.
Wer kann die Batch-API nutzen?
Die Batch-API erfordert einen Scale-Plan oder höher und eine Freigabe für deine Organisation. Der Zugriff ist standardmäßig deaktiviert, auch bei neuen Scale-Abonnements. Kontaktiere den Support, um Zugriff anzufordern. Bestehende Nutzer benötigen ebenfalls eine Freigabe nach einer Prüfung von Nutzung und Abrechnung.
Ohne Freigabe erhält die Organisation 403 mit errorCode: batch_access_not_enabled, auch bei dry_run. Nach der Freigabe erhalten andere Pläne und kostenlose Konten 402 mit errorCode: plan_feature_unavailable. requiredPlan ist scale, bei Credit-Plänen enterprise.
Wird der Zugriff zum Erstellen entzogen, laufen bereits angenommene Batches weiter. Du kannst ihren Status abfragen und verfügbare Ergebnisse herunterladen.
- Ein Batch enthält standardmäßig 20 bis 500 Einträge oder das eigene Limit deines Kontos.
- Jeder aktive Batch belegt einen Platz deines Batch-Limits, das dem Concurrency-Limit deines Plans entspricht. Seine Einträge zählen nicht zur Concurrency von
/v2/generate. - Die geschätzte Ausgabe jedes Eintrags darf höchstens 30 Sekunden lang sein. Ein längerer Eintrag schlägt in der Ergebnisdatei mit
Input files exceed 30s duration, which is not supported in batch modefehl, der Rest des Batches läuft weiter. - Jeder Eintrag wird wie die Generierung abgerechnet, die er ausführt.
Bei einer Multipart-Anfrage sende genau eine JSONL-Datei im Feld input (file funktioniert ebenfalls). Andere Dateifelder oder mehrere Dateien führen zu 400. Bei 503 upload_capacity_unavailable wird kein Batch erstellt. Wiederhole dieselbe Anfrage nach der in Retry-After angegebenen Wartezeit oder sende einen JSON-Body mit rows.
Wann Batch sinnvoll ist und wann nicht
Ein Batch ist eine Pipeline mit Warteschlange. Alle Einträge werden heruntergeladen und geprüft, bevor einer von ihnen startet, und Ergebnisse können Stunden dauern, mit einer angestrebten Bearbeitungszeit von bis zu 24 Stunden. Nutze ihn für große Mengen kurzer Clips, die nicht sofort fertig sein müssen.
Für ein paar Generierungen gleichzeitig ist er nicht gedacht. Dafür:
- Sende normale
POST /v2/generate-Anfragen parallel, innerhalb deines Concurrency-Limits. Jede startet, sobald sie angenommen wird. - Oder lass einen Agenten das Tool
jobs_create-manydes sync. labs MCP-Servers verwenden, das mehrere Jobs auf einmal über die normale API startet.
Batch-Concurrency-Limits
Wenn du bereits so viele Batches ausführst, wie das Concurrency-Limit deines Plans erlaubt, gibt die API 429 Too Many Requests mit errorCode: concurrency_limit_reached zurück:
Die Antwort enthält einen Header Retry-After (in Sekunden) und einen Header X-Sync-Concurrency-Limit. Statt sofort erneut zu versuchen, warte retryAfterSeconds oder bis einer deiner aktiven Batches fertig ist.
Wie erstelle ich einen Batch-Job?
Eingabedatei vorbereiten
Erstelle eine JSON Lines-Datei (.jsonl) mit deinen Generierungsanfragen. Jede Zeile sollte eine eindeutige request_id, den endpoint (muss "/v2/generate" sein) und ein payload im Standardformat der Generierungsanfrage enthalten (wie bei der Generierungs-API). Die Datei muss im JSON Lines-Format (.jsonl) vorliegen, höchstens 5 MB groß sein und standardmäßig 20 bis 500 Einträge enthalten.
Einen Batch erstellen
Statt eine Datei hochzuladen, kannst du application/json mit den Einträgen in rows senden. Jedes Element von rows ist dasselbe Objekt wie eine Zeile der JSONL-Datei, und beide Formen werden gleich validiert: die oben genannten Eintragslimits, höchstens 5 MB im JSONL-Format und eindeutige request_id-Werte. Wenn ein Eintrag abgelehnt wird, nennt der Fehler dessen Zeile. Ablehnungen bei Dialogbearbeitungen geben sie im Feld lineNumber zurück; andere Fehler zu einem Eintrag, etwa ungültiges JSON oder eine fehlende request_id, nennen sie nur in message (zum Beispiel Record at line 4: payload is required). Gezählt werden nicht leere Einträge, nicht physische Zeilen, Leerzeilen in einer JSONL-Datei werden also übersprungen; bei einem JSON-Body entspricht Zeile N rows[N-1]. Die Beispiele oben zeigen der Kürze halber zwei Einträge; ein Batch braucht mindestens 20.
Optionale Parameter:
webhook_url: Benachrichtigungen erhalten, wenn der Batch abgeschlossen istdry_run: Auftruesetzen, um deine Eingabe ohne Verarbeitung zu validieren. Eine gültige Eingabe gibt{"status": "VALIDATED"}zurück und erstellt keinen Batch.
Die Batch-Erstellung ist nicht durch idempotente Anfragen abgedeckt. Wenn bei einer Erstellungsanfrage ein Timeout auftritt, liste deine Batches mit GET /v2/batch auf, bevor du erneut einreichst, damit du dieselben Zeilen nicht zweimal ausführst.
Batch-Status prüfen
Überwache den Fortschritt deines Batches, indem du den Status pollst:
Ein Batch kann einen der folgenden Status haben:
PENDING: Batch erstellt, wartet auf den VerarbeitungsstartPROCESSING: Generierungen werden verarbeitetCOMPLETED: Alle Generierungen sind abgeschlossen (erfolgreich oder mit Fehlern)FAILED: Batch-Verarbeitung ist vollständig fehlgeschlagen
Batch-Ergebnisse prüfen
Wenn ein Batch abgeschlossen ist, stehen die Ergebnisse als JSON Lines-Datei unter der outputUrl der Antwort von get batch bereit. Ein GET auf diese URL gibt eine Weiterleitung 302 auf eine signierte Ergebnisdatei zurück. Clients, die Weiterleitungen automatisch folgen, können die JSONL-Antwort direkt lesen. Jede Zeile enthält:
Das Feld response enthält dieselben Daten wie einzelne Antworten der Generierungs-API. Feldnamen in der Ergebnisdatei sind in snake_case, das Video einer abgeschlossenen Zeile liegt also unter response.output_url und ihre Generierungs-ID unter response.id. Ordne jede Zeile anhand der request_id deiner Eingabe zu.
Ein vollständiges, funktionierendes Beispiel findest du im Batch-Verarbeitungsbeispiel in unserem Beispiel-Repository.
Webhook-Benachrichtigungen
Wenn du eine webhook_url angibst, erhältst du eine POST-Benachrichtigung, wenn dein Batch abgeschlossen ist oder fehlschlägt. Sie ist wie Generierungs-webhooks mit einem Sync-Signature-Header signiert und folgt denselben Wiederholungsregeln: bis zu 6 Versuche über etwa 2 Stunden, mit demselben Sync-Delivery-Id-Header bei jedem Versuch.
Anders als die Antwort von Get Batch verwendet der webhook-Payload Feldnamen in camelCase:
Der webhook für den Batch-Abschluss kann für denselben Batch mehr als einmal zugestellt werden. Verwende den Header Sync-Delivery-Id oder die id des Batches, um Benachrichtigungen zu ignorieren, die du bereits verarbeitet hast.
Dialogbearbeitungs-Zeilen (früher Zugriff)
Eine Batch-Zeile kann eine abgeschlossene Vorschau einer Dialogbearbeitung rendern, statt ein Video mit neuem Audio zu kombinieren. So machst du aus einem aufgenommenen Video viele Varianten, zum Beispiel eine pro Empfängername. Personalisierte Videobotschaften enthält ein vollständiges Skript.
Dialogbearbeitungs-Zeilen befinden sich im frühen Zugriff und werden pro Organisation aktiviert. Kontaktiere uns, um sie freischalten zu lassen. Bis dahin werden Zeilen mit dialogueEdit beim Einreichen abgelehnt.
Das payload jeder Zeile enthält:
model, zum Beispielsync-3.inputmit genau einem Video: demselben Quellvideo, aus dem die Vorschau erstellt wurde.dialogueEdit: {"id": "..."}: die ID einer abgeschlossenen Vorschau ausPOST /v2/dialogue-editsin deiner Organisation.
Füge keine Audio- oder Texteingaben, segments oder dubParams hinzu; die Vorschau liefert das Audio.
Dieselben Zeilenobjekte funktionieren auch als Zeilen in einer hochgeladenen JSONL-Datei.
Beim Einreichen wird jede Dialogbearbeitungs-Zeile genau zu der Anfrage erweitert, die POST /v2/generate für diese Vorschau erstellt, und sie wird genauso abgerechnet wie diese Generierung. Das payload in der Ergebnisdatei zeigt die erweiterte Anfrage (das Video, das Vorschau-Audio und die bearbeiteten Segmente), nicht die Zeile, die du gesendet hast. Sende den Batch zuerst mit dry_run: true: Damit laufen alle unten aufgeführten Prüfungen, einschließlich der Erweiterung, ohne dass etwas gerendert wird.
- Alle Dialogbearbeitungs-Zeilen in einem Batch müssen Vorschauen verwenden, die aus demselben Quellvideo erstellt wurden. Für mehrere Videos reichst du einen Batch pro Video ein.
- Es gelten die üblichen Batch-Limits: standardmäßig 20 bis 500 Einträge und 5 MB. Bei der Erweiterung werden jeder Zeile das Vorschau-Audio und die bearbeiteten Segmente hinzugefügt. Das Limit von 5 MB gilt auch für den erweiterten Batch. Ein gesendeter Batch unter 5 MB kann deshalb mit einem Dateigrößenfehler und Status
400abgelehnt werden. Auch ein Testlauf meldet diesen Fehler. Teile die Zeilen dann in kleinere Batches auf. - Die meisten Vorschauen werden als bearbeitete Segmente des Videos gerendert. Eine Vorschau, die sich nur als lip sync über das gesamte Video rendern lässt, wird in einem Batch nur akzeptiert, wenn dieses Rendering 30 Sekunden oder kürzer ist; längere renderst du mit
POST /v2/generate.
Ablehnungen bei Dialogbearbeitungen
Wenn eine Dialogbearbeitungs-Zeile nicht gerendert werden kann, wird die gesamte Anfrage abgelehnt und kein Batch erstellt. Die Antwort enthält den errorCode, den POST /v2/generate für diese Vorschau zurückgeben würde, sowie die lineNumber der ersten fehlerhaften Zeile:
Es wird nur die erste fehlerhafte Zeile gemeldet. Korrigiere sie und wiederhole den Testlauf, bis er {"status": "VALIDATED"} zurückgibt.
Verwandte Ressourcen
- Rate Limits — API rate limit verstehen, um deine Batch-Größen wirksam zu planen
- Webhooks Guide — webhook-Benachrichtigungen für Batch-Abschlussereignisse einrichten
- Fehlerbehandlung — Referenz für Batch-spezifische Fehlercodes und Fehlerbehebung

