Installation
pip install audiopod
Quick Start
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
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
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.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.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.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. Useproduce() for the whole pipeline in one call, or drive each step. See the Audiobook API reference for the full surface.
# 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"])
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.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.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.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
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
export AUDIOPOD_API_KEY="ap_your_api_key"
# Client reads from env automatically
from audiopod import AudioPod
client = AudioPod()
Resources
PyPI Package
View on PyPI
GitHub
Source code
Get API Key
Generate your API key
API Reference
Raw API documentation
