> For the documentation index, fetch https://sync.so/docs/llms.txt. Append .md to a page URL for Markdown. Documentation-search MCP: https://sync.so/docs/_mcp/server.

# Batch-Verarbeitung

> Batch-Verarbeitungs-API für KI-lip sync-Generierung in großen Mengen. Verarbeite bis zu 500 Videos in einem einzigen Vorgang mit webhooks und Statusverfolgung.

Die Sync Labs Batch-API verarbeitet bis zu 500 lip sync-Generierungen in einer einzigen Anfrage mit einer JSONL-Datei. Das ist ideal für Workflows zur Videoverarbeitung in großen Mengen, zum Beispiel personalisierte Videokampagnen, Content-Lokalisierung oder jedes Szenario mit hohem Generierungsvolumen.

## Was ist das Batch-Dateiformat?

Mit der Batch-Verarbeitung kannst du 20 bis 500 Generierungen einreichen, ohne Queueing oder Concurrency selbst zu verwalten, bei einer angestrebten Bearbeitungszeit von 24 Stunden. Batch-Jobs umgehen dein normales Concurrency-Limit für Generierungen, aber die Batch-API ist nur in Scale- und Enterprise-Plänen verfügbar. Aktuell werden in der Batch-Verarbeitung nur Generierungen mit Eingaben bis zu 30 Sekunden unterstützt.

> **Note**
>
> Batch-API ist nur für Scale- und Enterprise-Nutzer verfügbar

## Batch-Concurrency-Limits

Batch-Jobs umgehen dein normales Concurrency-Limit pro Generierung, aber ein separates Limit begrenzt, wie viele Batches du gleichzeitig ausführen kannst, abhängig von deinem Plan. Wenn du einen neuen Batch einreichst, während du dieses Limit bereits erreicht hast, gibt die API eine Antwort `429 Too Many Requests` zurück.

Der 429-Body ist ein JSON-Objekt, das das erreichte Limit beschreibt:

```json
{
  "statusCode": 429,
  "errorCode": "concurrency_limit_reached",
  "message": "Batch concurrency limit reached. Please wait for an existing batch to complete or upgrade your plan.",
  "activeBatches": 3,
  "concurrencyLimit": 3,
  "retryAfterSeconds": 20
}
```

Die Antwort enthält außerdem einen Header `Retry-After` (in Sekunden) und einen Header `X-Sync-Concurrency-Limit`. Statt sofort erneut zu versuchen, warte `retryAfterSeconds`, bevor du erneut einreichst, oder warte, bis einer deiner laufenden Batches abgeschlossen 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](/api-reference/api/generate-api/create)). Die Datei muss im JSON Lines-Format (.jsonl) vorliegen, mindestens 20 Einträge enthalten, eine maximale Dateigröße von 5 MB haben und bis zu 500 Anfragen pro Batch enthalten.

**`input.jsonl`**

```jsonl input.jsonl
{"request_id": "request-1", "endpoint": "/v2/generate", "payload": {"model": "lipsync-2", "input": [{"type": "video", "url": "https://assets.sync.so/docs/example-video.mp4"}, {"type": "audio", "url": "https://assets.sync.so/docs/example-audio.wav"}]}}
{"request_id": "request-2", "endpoint": "/v2/generate", "payload": {"model": "lipsync-2", "input": [{"type": "video", "url": "https://assets.sync.so/docs/example-video.mp4"}, {"type": "audio", "url": "https://assets.sync.so/docs/example-audio.wav"}]}}
```

#### Einen Batch erstellen

```python
from sync import Sync

sync = Sync()

batch = sync.batch.create(
    input=open("input.jsonl", "rb")
)

print(f"Batch created with ID: {batch.id}")
```

```typescript
import { SyncClient } from "@sync.so/sdk";

const client = new SyncClient();

const batch = await client.batch.create(fs.createReadStream("input.jsonl"));

console.log('Batch created with ID:', batch.id)
```

**`curl`**

```bash curl
curl -X POST https://api.sync.so/v2/batch \
     -H "x-api-key: <your-api-key>" \
     -H "Content-Type: multipart/form-data" \
     -F input=@<input.jsonl>
```

**Optionale Parameter:**

* `webhook_url`: Benachrichtigungen erhalten, wenn der Batch abgeschlossen ist
* `dry_run`: Auf `true` setzen, um deine Eingabedatei ohne Verarbeitung zu validieren

#### Batch-Status prüfen

Überwache den Fortschritt deines Batches, indem du den Status pollst:

**`Check batch status`**

```python Check batch status
batch = sync.batch.get(batch_id)
print(f"Status: {batch.status}")
print(f"Progress: {batch.metrics}")
```

```typescript
const batch = await client.batch.get(batch_id);
console.log('Status:', batch.status);
console.log('Progress:', batch.metrics);
```

```bash
curl https://api.sync.so/v2/batch/<batch_id> \
     -H "x-api-key: <your-api-key>"
```

Ein Batch kann einen der folgenden Status haben:

1. **`PENDING`**: Batch erstellt, wartet auf den Verarbeitungsstart
2. **`PROCESSING`**: Generierungen werden verarbeitet
3. **`COMPLETED`**: Alle Generierungen sind abgeschlossen (erfolgreich oder mit Fehlern)
4. **`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:

**`output.jsonl`**

```jsonl output.jsonl
{"request_id": "request-1", "endpoint": "/v2/generate", "payload": {...}, "status": "COMPLETED", "error": null, "response": {...}, "updated_at": "2024-01-15T10:35:00Z"}
{"request_id": "request-2", "endpoint": "/v2/generate", "payload": {...}, "status": "FAILED", "error": {"code": "INVALID_INPUT", "message": "..."}, "response": null, "updated_at": "2024-01-15T10:35:00Z"}
```

Das Feld `response` enthält dieselben Daten wie einzelne Antworten der [Generierungs-API](/api-reference/api/generate-api/create).

Ein vollständiges, funktionierendes Beispiel findest du im [Batch-Verarbeitungsbeispiel](https://github.com/synchronicity-labs/sync-examples/tree/main/batch-processing/python) in unserem Beispiel-Repository.

## Webhook-Benachrichtigungen

Wenn du eine `webhook_url` angibst, erhältst du POST-Benachrichtigungen, wenn dein Batch abgeschlossen ist:

**`webhook_payload.json`**

```json webhook_payload.json
{
  "id": "batch_abc123",
  "createdAt": "2024-01-15T10:30:00Z",
  "status": "COMPLETED",
  "webhookUrl": "https://your-webhook-url.com/batch-webhook",
  "metrics": {
    "totalGenerations": 5,
    "successCount": 4,
    "failedCount": 1,
    "pendingCount": 0
  },
  "options": {},
  "outputUrl": "https://api.sync.so/v2/batches/batch_abc123/result"
}
```