> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Dubbing quickstart

Deze handleiding laat zien hoe je een mediabestand met de Dubbing API naar een andere taal nasynchroniseert. In dit voorbeeld maak je een nasynchronisatieproject op basis van een Engels audiobestand en genereer je een Spaanse nasynchronisatie.

Een nasynchronisatieproject bestaat uit twee delen: een **project**, dat één mediabron en het bijbehorende transcript bevat, en één of meer **doeltalen**, die elk een nagesynchroniseerde output in één taal produceren. Je maakt een project, wacht tot de bron is getranscribeerd, voegt een taal toe en downloadt vervolgens de voltooide nasynchronisatie.

> **Note**
>
> Voor het maken van een project worden vooraf kosten voor één taal in rekening gebracht — de minimumkosten voor een nasynchronisatieproject.
> Hiermee betaal je je eerste doeltaal vooraf: de eerste taal die je toevoegt gebruikt deze kosten, en voor elke
> aanvullende taal worden afzonderlijk kosten in rekening gebracht. Zie [Wat kost Dubbing?](/docs/nl/help-center/product/dubbing/how-much-does-dubbing-cost) voor meer informatie.

Talen worden opgegeven als BCP-47-tags, bijvoorbeeld `es` of `fr-CA`. Bekijk de [ondersteunde talen en dialecten](/docs/nl/overview/capabilities/dubbing#supported-languages) voor alle geaccepteerde waarden.

## De Dubbing API gebruiken

#### Een API-sleutel maken

[Maak hier een API-sleutel in het dashboard](https://elevenlabs.io/app/settings/api-keys), die je gebruikt voor veilige [toegang tot de API](/docs/nl/api-reference/authentication).

Sla de sleutel op als beheerd geheim en geef deze aan de SDK's door als omgevingsvariabele via een `.env`-bestand, of rechtstreeks in de configuratie van je app, afhankelijk van je voorkeur.

**`.env`**

```js title=".env"
ELEVENLABS_API_KEY=<your_api_key_here>
```

#### De SDK installeren

#### SDK

We gebruiken ook de `dotenv`-bibliotheek om onze API-sleutel uit een omgevingsvariabele te laden.

```python
pip install elevenlabs
pip install python-dotenv
```

```typescript
npm install @elevenlabs/elevenlabs-js
npm install dotenv
```

#### CLI

Installeer de ElevenLabs CLI. Homebrew (macOS) en Scoop (Windows) worden aanbevolen.

**`Homebrew (macOS)`**

```bash title="Homebrew (macOS)"
brew install elevenlabs/tap/elevenlabs
```

**`Scoop (Windows)`**

```powershell title="Scoop (Windows)"
scoop bucket add elevenlabs https://github.com/elevenlabs/scoop-bucket
scoop install elevenlabs
```

**`npm`**

```bash title="npm"
npm install -g @elevenlabs/cli
```

**`curl`**

```bash title="curl"
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/elevenlabs/cli/releases/latest/download/elevenlabs-cli-installer.sh | sh
```

> **Tip**
>
> Werk je met een AI-code-assistent? Voer `elevenlabs generate-skills` uit in je project om voor elke
> commandogroep een `SKILL.md` naar `skills/` te schrijven, zodat je assistent alle mogelijkheden van de CLI kent
> zonder dat je documentatie hoeft te plakken. Gebruik `--output-dir` om ze ergens anders te plaatsen. Dit leest de eigen
> ingebouwde API-definitie van de CLI, dus er is geen API-sleutel nodig en het werkt offline — en het blijft afgestemd op
> de versie van de CLI die je hebt geïnstalleerd.

Verifieer je daarna — hiermee wordt je browser geopend om de CLI te autoriseren:

```bash
elevenlabs auth login
```

> **Note**
>
> Het Python-voorbeeld gebruikt de `requests`-bibliotheek om de nagesynchroniseerde audio te downloaden. Installeer deze
> met `pip install requests`.

#### De API-aanvraag uitvoeren

#### SDK

Maak een nieuw bestand met de naam `example.py` of `example.mts`, afhankelijk van de taal van je keuze, en voeg de volgende code toe:

```python maxLines=0
# example.py
import os
import time
import requests
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs

load_dotenv()

elevenlabs = ElevenLabs(
    api_key=os.getenv("ELEVENLABS_API_KEY"),
)

# 1. Create a project from a source URL
project = elevenlabs.dubbing.project.create(
    source_url="https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
    source_language="en",
    reference="Quickstart dub",
)

# 2. Wait for the source media to be transcribed
while True:
    project = elevenlabs.dubbing.project.get(project.project_id)
    if project.status == "ready":
        break
    if project.status == "failed":
        raise RuntimeError("Project preparation failed")
    print("Preparing project...")
    time.sleep(5)

# 3. Add a Spanish language target
language = elevenlabs.dubbing.project.language.create(
    project.project_id,
    target_language="es",
)

# 4. Wait for the dub to finish generating
while True:
    language = elevenlabs.dubbing.project.language.get(
        project.project_id, language.language_id
    )
    if language.status == "completed":
        break
    if language.status == "failed":
        raise RuntimeError("Dub generation failed")
    print("Generating dub...")
    time.sleep(5)

# 5. Download the dubbed audio from the signed URL
audio = requests.get(language.outputs.lossless_audio)
with open("dubbed.wav", "wb") as f:
    f.write(audio.content)

print("Saved dubbed audio to dubbed.wav")
```

```typescript maxLines=0
// example.mts
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { writeFile } from "fs/promises";
import "dotenv/config";

const elevenlabs = new ElevenLabsClient();

// 1. Create a project from a source URL
let project = await elevenlabs.dubbing.project.create({
  sourceUrl:
    "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3",
  sourceLanguage: "en",
  reference: "Quickstart dub",
});

// 2. Wait for the source media to be transcribed
while (true) {
  project = await elevenlabs.dubbing.project.get(project.projectId);
  if (project.status === "ready") break;
  if (project.status === "failed") throw new Error("Project preparation failed");
  console.log("Preparing project...");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 3. Add a Spanish language target
let language = await elevenlabs.dubbing.project.language.create(project.projectId, {
  targetLanguage: "es",
});

// 4. Wait for the dub to finish generating
while (true) {
  language = await elevenlabs.dubbing.project.language.get(
    project.projectId,
    language.languageId
  );
  if (language.status === "completed") break;
  if (language.status === "failed") throw new Error("Dub generation failed");
  console.log("Generating dub...");
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

// 5. Download the dubbed audio from the signed URL
const response = await fetch(language.outputs!.losslessAudio!);
const buffer = Buffer.from(await response.arrayBuffer());
await writeFile("dubbed.wav", buffer);

console.log("Saved dubbed audio to dubbed.wav");
```

> **Note**
>
> De download-URL in `outputs.lossless_audio` is ondertekend en verloopt ongeveer een uur nadat deze
> is uitgegeven. Haal de taal opnieuw op om een nieuwe URL te krijgen als de URL is verlopen.

Voer het vervolgens uit:

```python
python example.py
```

```typescript
npx tsx example.mts
```

De nagesynchroniseerde audio wordt opgeslagen als `dubbed.wav` in je werkmap.

#### CLI

De CLI volgt dezelfde stappen. Elke stap geeft JSON weer — kopieer de `project_id` en
`language_id` uit de responses naar de volgende opdracht en poll de `get`-opdrachten
totdat de status definitief is.

```bash
# 1. Create a project from a source URL (note the returned project_id)
elevenlabs dubbing project create \
  --source-url https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3 \
  --source-language en \
  --reference "Quickstart dub"

# 2. Poll until the project status is "ready"
elevenlabs dubbing project get --project-id <project_id> --query status

# 3. Add a Spanish language target (note the returned language_id)
elevenlabs dubbing project language create --project-id <project_id> --target-language es

# 4. Poll until the language status is "completed"
elevenlabs dubbing project language get \
  --project-id <project_id> --language-id <language_id> --query status

# 5. Get the signed download URL, then save the dubbed audio
elevenlabs dubbing project language get \
  --project-id <project_id> --language-id <language_id> --query outputs.lossless_audio

curl -o dubbed.wav "<lossless_audio_url>"
```

De nagesynchroniseerde audio wordt opgeslagen als `dubbed.wav` in je werkmap.

## Omgaan met fouten

Als het toevoegen van een taal niet lukt, voeg je dezelfde taal opnieuw toe aan het bestaande project in plaats van een nieuw project te maken. Het project en de getranscribeerde bron kunnen opnieuw worden gebruikt, dus de taal opnieuw proberen is sneller en voorkomt dat je de [minimumkosten voor één taal](/docs/nl/help-center/product/dubbing/how-much-does-dubbing-cost) een tweede keer betaalt.

Maak alleen een nieuw project als het project zelf tijdens de voorbereiding de status `failed` krijgt. Dit betekent dat de bron niet kon worden getranscribeerd. Controleer het bronbestand of de URL en maak vervolgens een nieuw project.

> **Tip**
>
> Enterprise-workspaces kunnen het brontranscript controleren en corrigeren voordat ze een taal toevoegen, wat
> nauwkeurigere vertalingen oplevert. Zie [Een nasynchronisatie verfijnen en opnieuw genereren](/docs/nl/eleven-api/guides/how-to/dubbing/refine-and-regenerate).

## Volgende stappen

#### [Gebruik je eigen transcript](/docs/nl/eleven-api/guides/how-to/dubbing/bring-your-own-transcript)

Maak een project op basis van een bestaand transcript en gebruik je eigen vertalingen

#### [Een nasynchronisatie verfijnen en opnieuw genereren](/docs/nl/eleven-api/guides/how-to/dubbing/refine-and-regenerate)

Bewerk het brontranscript en de vertalingen en genereer de nasynchronisatie opnieuw

#### [Naar meerdere talen nasynchroniseren](/docs/nl/eleven-api/guides/how-to/dubbing/multiple-languages)

Voeg meerdere doeltalen toe aan één project

#### [API-referentie](/docs/nl/api-reference/dubbing/create-project)

Bekijk alle Dubbing API-parameters en responseformaten