> ## Documentation Index
> Fetch the complete documentation index at: https://docs.audiopod.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Python SDK

> Official Python SDK for AudioPod AI - Professional Audio Processing powered by AI

[![PyPI version](https://badge.fury.io/py/audiopod.svg)](https://pypi.org/project/audiopod/)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)

## Installation

```bash theme={null}
pip install audiopod
```

## Quick Start

```python theme={null}
from audiopod import AudioPod

# Initialize client
client = AudioPod(api_key="ap_your_api_key")

# Separate audio into 6 stems
result = client.stems.separate(
    url="https://youtube.com/watch?v=VIDEO_ID",
    mode="six"
)

# Download stems
for stem, url in result["download_urls"].items():
    print(f"{stem}: {url}")
```

## Authentication

```python theme={null}
from audiopod import AudioPod
# or: from audiopod import Client

# Method 1: Pass API key directly
client = AudioPod(api_key="ap_your_api_key")

# Method 2: Use environment variable (recommended)
# Set AUDIOPOD_API_KEY environment variable, then:
client = AudioPod()
```

***

## Stem Separation

Extract individual audio components from mixed recordings.

### Available Modes

| Mode        | Stems | Output                                                          |
| ----------- | ----- | --------------------------------------------------------------- |
| `single`    | 1     | Specified stem only (vocals, drums, bass, guitar, piano, other) |
| `two`       | 2     | Vocals + Instrumental                                           |
| `four`      | 4     | Vocals, Drums, Bass, Other                                      |
| `six`       | 6     | Vocals, Drums, Bass, Guitar, Piano, Other                       |
| `producer`  | 8     | + Kick, Snare, Hihat                                            |
| `studio`    | 12    | Full production toolkit                                         |
| `mastering` | 16    | Maximum detail                                                  |

### Examples

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Six-stem separation from YouTube (waits for completion by default)
result = client.stems.separate(
    url="https://youtube.com/watch?v=VIDEO_ID",
    mode="six"
)
print(result["download_urls"])

# From local file
result = client.stems.separate(
    file="./song.mp3",
    mode="four"
)

# Extract only vocals
result = client.stems.separate(
    url="https://youtube.com/watch?v=VIDEO_ID",
    mode="single",
    stem="vocals"
)

# Async job handling (for more control)
job = client.stems.extract(
    url="https://youtube.com/watch?v=VIDEO_ID",
    mode="six"
)
print(f"Job ID: {job['id']}")

# Check status
status = client.stems.status(job["id"])
print(f"Status: {status['status']}")

# Wait for completion
result = client.stems.wait_for_completion(job["id"])

# Get available modes
modes = client.stems.modes()
for m in modes["modes"]:
    print(f"{m['mode']}: {m['description']}")
```

***

## Transcription

Convert audio to text with speaker diarization.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# From URL
job = client.transcription.create(url="https://...")
result = client.transcription.wait_for_completion(job["id"])
print(result["transcript"])

# From file
job = client.transcription.create(file="./audio.mp3")
result = client.transcription.wait_for_completion(job["id"])
```

***

## Voice Cloning and TTS

Create custom voices and generate speech.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Clone a voice from audio sample
voice = client.voice.clone(
    file="./sample.wav",
    name="My Voice"
)
print(f"Voice ID: {voice['id']}")
```

***

## Music Generation (AudioMusic V2)

Generate AI music with AudioMusic V2 — text-to-music, covers, style transfer, audio analysis, and more.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Simple mode — just describe what you want
song = client.music.simple(
    query="a soft Bengali love song for a quiet evening",
    wait_for_completion=True
)
print(f"Music URL: {song['output_url']}")

# Full control with text2music
song = client.music.generate(
    prompt="upbeat pop, female vocals, catchy melody",
    task="text2music",
    lyrics="[verse]\nSun is shining bright today\n[chorus]\nLet's dance the night away",
    duration=120,
    inference_steps=64,
    guidance_scale=7.0,
    format="flac",
    wait_for_completion=True
)

# Instrumental
instrumental = client.music.instrumental(
    prompt="chill jazz piano with saxophone",
    duration=90,
    wait_for_completion=True
)

# Cover / style transfer
cover = client.music.cover(
    src_audio_url="https://example.com/song.mp3",
    caption="jazz piano version with upright bass",
    audio_cover_strength=0.7,
    wait_for_completion=True
)

# Analyze existing audio
analysis = client.music.analyze(
    audio_url="https://example.com/song.mp3"
)
print(f"BPM: {analysis['bpm']}, Key: {analysis['keyscale']}")

# Extract stems
vocals = client.music.extract_stem(
    src_audio_url="https://example.com/song.mp3",
    track_name="vocals",
    wait_for_completion=True
)
print(f"Vocals URL: {vocals['output_url']}")

# Reference audio for style guidance
ref_song = client.music.reference(
    reference_audio_url="https://example.com/reference.mp3",
    caption="upbeat pop with similar warmth",
    lyrics="[verse]\nHello world",
    wait_for_completion=True
)
```

***

## Audiobook

Turn a manuscript into a finished, ACX-compliant audiobook. Use `produce()` for the whole pipeline in one call, or drive each step. See the [Audiobook API reference](/api-reference/audiobook) for the full surface.

```python theme={null}
# One call: manuscript in, ACX package out
result = client.audiobook.produce(
    title="The Lighthouse Keeper",
    author="A. P. Tester",
    file="book.epub",          # PDF / EPUB / DOCX / TXT  (or text="...")
    voice_id=387,
)
print(result["download_url"])   # presigned ACX package ZIP
print(result["compliance_check"]["is_compliant"])

# Or drive each step
project = client.audiobook.create_project(title="My Book", author="Me")
up = client.audiobook.upload_manuscript(project["id"], file="book.epub")
client.audiobook.parse_manuscript(project["id"], up["file_key"], "book.epub")

voices = client.audiobook.list_voices()          # available / recommended / custom
estimate = client.audiobook.cost_estimate(project["id"])

client.audiobook.narrate(project["id"], voice_id=387)   # waits for all chapters
export = client.audiobook.export(project["id"])         # waits; runs ACX compliance check
manifest = client.audiobook.download(project["id"], export["job_id"])
print(manifest["download_url"])
```

Generate an original book from a prompt instead of uploading:

```python theme={null}
project = client.audiobook.create_project(title="Bedtime Tales")
client.audiobook.generate_book(project["id"], prompt="Three calm bedtime stories about the sea",
                               chapter_count=3, words_per_chapter=500)
client.audiobook.narrate(project["id"], voice_id=387)
```

***

## Noise Reduction

Clean up audio by removing background noise.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Denoise audio file
clean = client.denoiser.denoise(file="./noisy.wav")
print(f"Clean audio: {clean['output_url']}")
```

***

## Speaker Separation

Identify and separate multiple speakers.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Diarize speakers
speakers = client.speaker.diarize(url="https://...")
print(f"Found {len(speakers['segments'])} speaker segments")
```

***

## API Wallet

Check balance and manage billing.

```python theme={null}
from audiopod import AudioPod

client = AudioPod(api_key="ap_your_api_key")

# Check balance
balance = client.wallet.balance()
print(f"Balance: {balance['balance_usd']}")

# Estimate cost before processing
estimate = client.wallet.estimate("stem_extraction", duration_seconds=180)
print(f"Estimated cost: {estimate['cost_usd']}")

# Get usage history
usage = client.wallet.usage()
for log in usage["logs"]:
    print(f"{log['service_type']}: {log['amount_usd']}")
```

***

## Error Handling

```python theme={null}
from audiopod import AudioPod, AuthenticationError, InsufficientBalanceError

try:
    client = AudioPod(api_key="ap_...")
    result = client.stems.separate(url="...", mode="six")
except AuthenticationError:
    print("Invalid API key")
except InsufficientBalanceError as e:
    print(f"Need more credits. Required: {e.required_cents} cents")
except ValueError as e:
    print(f"Invalid input: {e}")
```

***

## Environment Variables

```bash theme={null}
export AUDIOPOD_API_KEY="ap_your_api_key"
```

```python theme={null}
# Client reads from env automatically
from audiopod import AudioPod
client = AudioPod()
```

***

## Resources

<Columns cols={2}>
  <Card title="PyPI Package" icon="python" href="https://pypi.org/project/audiopod/">
    View on PyPI
  </Card>

  <Card title="GitHub" icon="github" href="https://github.com/audiopod-ai/audiopod-python">
    Source code
  </Card>

  <Card title="Get API Key" icon="key" href="https://www.audiopod.ai/dashboard/account/api-keys">
    Generate your API key
  </Card>

  <Card title="API Reference" icon="code" href="/api-reference/stem-splitter">
    Raw API documentation
  </Card>
</Columns>
