Skip to main content
npm version Node 16+

Installation

npm install audiopod
# or
yarn add audiopod

Quick Start

import AudioPod from 'audiopod';

// Initialize client
const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Separate audio into 6 stems
const result = await client.stems.separate({
  url: 'https://youtube.com/watch?v=VIDEO_ID',
  mode: 'six'
});

// Download stems
for (const [stem, url] of Object.entries(result.download_urls)) {
  console.log(`${stem}: ${url}`);
}

Authentication

import AudioPod from 'audiopod';

// Method 1: Pass API key directly
const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Method 2: Use environment variable (recommended)
// Set AUDIOPOD_API_KEY environment variable, then:
const client = new AudioPod();

Stem Separation

Extract individual audio components from mixed recordings.

Available Modes

ModeStemsOutput
single1Specified stem only (vocals, drums, bass, guitar, piano, other)
two2Vocals + Instrumental
four4Vocals, Drums, Bass, Other
six6Vocals, Drums, Bass, Guitar, Piano, Other
producer8+ Kick, Snare, Hihat
studio12Full production toolkit
mastering16Maximum detail

Examples

import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Six-stem separation from YouTube
const result = await client.stems.separate({
  url: 'https://youtube.com/watch?v=VIDEO_ID',
  mode: 'six'
});
console.log(result.download_urls);

// From local file
const result = await client.stems.separate({
  file: './song.mp3',
  mode: 'four'
});

// Extract only vocals
const result = await client.stems.separate({
  url: 'https://youtube.com/watch?v=VIDEO_ID',
  mode: 'single',
  stem: 'vocals'
});

// Async job handling (for more control)
const job = await client.stems.extract({
  url: 'https://youtube.com/watch?v=VIDEO_ID',
  mode: 'six'
});
console.log(`Job ID: ${job.id}`);

// Wait for completion
const result = await client.stems.waitForCompletion(job.id);

// Get available modes
const modes = await client.stems.modes();
modes.modes.forEach(m => {
  console.log(`${m.mode}: ${m.description}`);
});

Transcription

Convert audio to text with speaker diarization.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// From URL
const job = await client.transcription.create({ url: 'https://...' });
const result = await client.transcription.waitForCompletion(job.id);
console.log(result.transcript);

// From file
const job = await client.transcription.create({ file: './audio.mp3' });
const result = await client.transcription.waitForCompletion(job.id);

Voice Cloning & TTS

Create custom voices and generate speech.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Clone a voice from audio sample
const voice = await client.voice.clone({
  file: './sample.wav',
  name: 'My Voice'
});
console.log(`Voice ID: ${voice.id}`);

// Generate speech with cloned voice
const audio = await client.voice.generate({
  voiceId: voice.id,
  text: 'Hello, this is my cloned voice speaking!'
});

Music Generation (AudioMusic V2)

Generate AI music with AudioMusic V2 — text-to-music, covers, style transfer, audio analysis, and more.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Simple mode — just describe what you want
const job = await client.music.simple({
  query: 'a soft Bengali love song for a quiet evening',
});
const song = await client.music.waitForCompletion(job.id);
console.log(`Music URL: ${song.output_url}`);

// Full control with text2music
const advanced = await client.music.create({
  prompt: 'upbeat pop, female vocals, catchy melody',
  task: 'text2music',
  lyrics: '[verse]\nSun is shining bright\n[chorus]\nDance the night away',
  duration: 120,
  inferenceSteps: 64,
  guidanceScale: 7.0,
  format: 'flac',
});

// Instrumental
const instrumental = await client.music.instrumental(
  'chill jazz piano with saxophone', 90
);

// Cover / style transfer
const cover = await client.music.cover({
  srcAudioUrl: 'https://example.com/song.mp3',
  caption: 'jazz piano version with upright bass',
  audioCoverStrength: 0.7,
});

// Analyze existing audio
const analysis = await client.music.analyze({
  audioUrl: 'https://example.com/song.mp3',
});
console.log(`BPM: ${analysis.bpm}, Key: ${analysis.keyscale}`);

// Extract stems
const vocals = await client.music.extractStem({
  srcAudioUrl: 'https://example.com/song.mp3',
  trackName: 'vocals',
});
const completed = await client.music.waitForCompletion(vocals.id);
console.log(`Vocals URL: ${completed.output_url}`);

// Reference audio for style guidance
const ref = await client.music.reference({
  referenceAudioUrl: 'https://example.com/reference.mp3',
  caption: 'upbeat pop with similar warmth',
  lyrics: '[verse]\nHello world',
});

Noise Reduction

Clean up audio by removing background noise.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Denoise audio file
const clean = await client.denoiser.denoise({ file: './noisy.wav' });
console.log(`Clean audio: ${clean.outputUrl}`);

Speaker Separation

Identify and separate multiple speakers.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Diarize speakers
const speakers = await client.speaker.diarize({ url: 'https://...' });
console.log(`Found ${speakers.segments.length} speaker segments`);

API Wallet

Check balance and manage billing.
import AudioPod from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Check balance
const balance = await client.wallet.balance();
console.log(`Balance: ${balance.balance_usd}`);

// Estimate cost before processing
const estimate = await client.wallet.estimate('stem_extraction', 180);
console.log(`Estimated cost: ${estimate.cost_usd}`);

// Get usage history
const usage = await client.wallet.usage();
usage.logs.forEach(log => {
  console.log(`${log.service_type}: ${log.amount_usd}`);
});

Error Handling

import AudioPod, { AuthenticationError, InsufficientBalanceError } from 'audiopod';

try {
  const client = new AudioPod({ apiKey: 'ap_...' });
  const result = await client.stems.separate({ url: '...', mode: 'six' });
} catch (error) {
  if (error instanceof AuthenticationError) {
    console.log('Invalid API key');
  } else if (error instanceof InsufficientBalanceError) {
    console.log(`Need more credits. Required: ${error.requiredCents} cents`);
  } else {
    console.log(`Error: ${error.message}`);
  }
}

TypeScript Support

Full TypeScript support with exported types:
import AudioPod, { StemExtractionJob, StemMode, WalletBalance } from 'audiopod';

const client = new AudioPod({ apiKey: 'ap_your_api_key' });

// Fully typed responses
const job: StemExtractionJob = await client.stems.extract({
  url: 'https://...',
  mode: 'six' as StemMode
});

const balance: WalletBalance = await client.wallet.balance();

Environment Variables

export AUDIOPOD_API_KEY="ap_your_api_key"
// Client reads from env automatically
import AudioPod from 'audiopod';
const client = new AudioPod();

Resources

npm Package

View on npm

GitHub

Source code

Get API Key

Generate your API key

API Reference

Raw API documentation