> 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.

# Krótkie wprowadzenie do Dubbing API

Ten przewodnik pokazuje, jak utworzyć dubbing pliku multimedialnego w innym języku za pomocą Dubbing API. W tym przykładzie utworzysz projekt dubbingowy z angielskiego pliku audio i wygenerujesz dubbing po hiszpańsku.

Projekt dubbingowy ma dwie części: **projekt**, który zawiera jedno źródło mediów i jego transkrypt, oraz co najmniej jeden **język docelowy**, z których każdy tworzy dubbing w jednym języku. Tworzysz projekt, czekasz na transkrypcję źródła, dodajesz język, a potem pobierasz gotowy dubbing.

> **Note**
>
> Utworzenie projektu od razu nalicza opłatę za jeden język — minimalną opłatę za projekt dubbingowy.
> To przedpłata za pierwszy język docelowy: pierwszy dodany język ją wykorzystuje, a za każdy
> kolejny język opłata jest naliczana osobno. Szczegóły znajdziesz w artykule [Ile kosztuje Dubbing?](/docs/pl/help-center/product/dubbing/how-much-does-dubbing-cost).

Języki określa się tagami BCP-47, na przykład `es` lub `fr-CA`. Wszystkie obsługiwane wartości znajdziesz na liście [obsługiwanych języków i dialektów](/docs/pl/overview/capabilities/dubbing#supported-languages).

## Korzystanie z Dubbing API

#### Utwórz klucz API

[Utwórz klucz API w panelu tutaj](https://elevenlabs.io/app/api/api-keys), którego użyjesz, aby bezpiecznie [uzyskać dostęp do API](/docs/pl/api-reference/authentication).

Przechowuj klucz jako zarządzany sekret i przekaż go do SDK jako zmienną środowiskową w pliku `.env` lub bezpośrednio w konfiguracji aplikacji — zależnie od preferencji.

**`.env`**

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

#### Zainstaluj SDK

#### SDK

Użyjemy też biblioteki `dotenv`, aby wczytać klucz API ze zmiennej środowiskowej.

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

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

#### CLI

Zainstaluj CLI ElevenLabs. Zalecamy Homebrew (macOS) lub Scoop (Windows).

**`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**
>
> Pracujesz z asystentem AI do kodowania? Uruchom `elevenlabs generate-skills` w projekcie, aby zapisać
> `SKILL.md` dla każdej grupy poleceń w `skills/`. Dzięki temu asystent zna pełny zakres CLI
> bez wklejania dokumentacji. Użyj `--output-dir`, aby zapisać je w innym miejscu. Polecenie odczytuje
> wbudowaną definicję API CLI, więc nie potrzebuje klucza API i działa offline — oraz jest zgodne
> z zainstalowaną wersją CLI.

Następnie się uwierzytelnij — otworzy się przeglądarka, aby autoryzować CLI:

```bash
elevenlabs auth login
```

> **Note**
>
> Przykład w Pythonie używa biblioteki `requests` do pobierania dubbingowanego audio. Zainstaluj ją
> poleceniem `pip install requests`.

#### Wyślij żądanie API

#### SDK

Utwórz nowy plik o nazwie `example.py` lub `example.mts`, zależnie od wybranego języka, i dodaj poniższy kod:

```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**
>
> Adres URL pobierania w `outputs.lossless_audio` jest podpisany i wygasa około godzinę po
> wydaniu. Jeśli wygasł, ponownie pobierz język, aby uzyskać nowy adres URL.

Następnie uruchom:

```python
python example.py
```

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

Dubbingowane audio zostanie zapisane jako `dubbed.wav` w katalogu roboczym.

#### CLI

CLI odzwierciedla ten sam proces. Każdy krok wyświetla kod JSON — skopiuj `project_id` i
`language_id` z odpowiedzi do następnego polecenia, a następnie odpytyj polecenia `get`,
aż status się ustali.

```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>"
```

Dubbingowane audio zostanie zapisane jako `dubbed.wav` w katalogu roboczym.

## Obsługa błędów

Jeśli dodanie języka się nie powiedzie, dodaj ten sam język ponownie do istniejącego projektu zamiast tworzyć nowy. Projekt i jego transkrybowane źródło można wykorzystać ponownie, więc ponowienie próby dla języka jest szybsze i pozwala uniknąć ponownego naliczenia [minimalnej opłaty za jeden język](/docs/pl/help-center/product/dubbing/how-much-does-dubbing-cost).

Nowy projekt utwórz tylko wtedy, gdy sam projekt osiągnie status `failed` podczas przygotowywania — oznacza to, że nie udało się transkrybować jego źródła. Sprawdź plik lub adres URL źródła, a potem utwórz nowy projekt.

> **Tip**
>
> W obszarach roboczych Enterprise możesz sprawdzić i poprawić źródłowy transkrypt przed dodaniem języka,
> co daje dokładniejsze tłumaczenia. Zobacz [Dopracowywanie i ponowne generowanie dubbingu](/docs/pl/eleven-api/guides/how-to/dubbing/refine-and-regenerate).

## Kolejne kroki

#### [Użyj własnego transkryptu](/docs/pl/eleven-api/guides/how-to/dubbing/bring-your-own-transcript)

Utwórz projekt z istniejącego transkryptu i dodaj własne tłumaczenia

#### [Dopracuj i wygeneruj dubbing ponownie](/docs/pl/eleven-api/guides/how-to/dubbing/refine-and-regenerate)

Edytuj źródłowy transkrypt i tłumaczenia, a potem wygeneruj dubbing ponownie

#### [Dubbing w wielu językach](/docs/pl/eleven-api/guides/how-to/dubbing/multiple-languages)

Dodaj kilka języków docelowych do jednego projektu

#### [Dokumentacja API](/docs/pl/api-reference/dubbing/create-project)

Poznaj wszystkie parametry Dubbing API i formaty odpowiedzi