PineRouterDocs
GuidesModelsAPI referenceApps

Ai Music Api · Separate Vocals

Audio model, from $0.063 per job.

Audioai-music-api/separate-vocals

Use with POST /v1/jobs.

Price

SettingsPrice
separate, vocal$0.063 per job
advanced, split$0.125 per job
multi, separation, stem, stemname, without$0.313 per job

Input fields

FieldType or optionsDefault
typeseparate_vocal split_stem split_stem_advanced"separate_vocal"
stem_nameLead Vocal Drum Kit Kick Snare Risers Bass Backing Vocals Piano Electric Guitar Percussion String Section Synth Acoustic Guitar Sound Effects Synth Pad Synth Bass Guitar Brass Section Organ Electronic Drum Kit Lead Electric Guitar Synth Keys Rhythm Electric Guitar Electric Piano Upright Bass Keyboards Distorted Electric Guitar Synth Strings Synth Lead Woodwinds Rhythm Acoustic Guitar Flute Harp Tambourine Trumpet Arpeggiator Accordion Fiddle Pedal Steel Guitar Synth Voice Violin Digital Piano Synth Brass Mandolin Choir Banjo Bells Clarinet Tenor Saxophone Trombone Shaker French Horn Glockenspiel Electric Bass Cello Timpani Harmonica Marimba Vibraphone Lap Steel Guitar Saxophone Orchestra Horns Cymbals Hand Clap Oboe Celesta Congas Drone Alto Saxophone Double Bass Ukulele Harpsichord Baritone Saxophone Xylophone Tuba Bass Guitar Whistle Lead Guitar Rhodes 808 Bongos Bassoon Cowbell Viola Sitar Steel Drums Piccolo Theremin Bagpipes Hi-Hat Music Box Melodica Tabla Koto Djembe Taiko Didgeridoo

Files are public https links. Safety filters are always on.

Example

curl https://pinerouter.ai/v1/jobs \
  -H "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"ai-music-api/separate-vocals","input":{"type":"separate_vocal"}}'

Then poll GET /v1/jobs/<id> until data.status is succeeded (links in data.outputs), or pass webhook_url to be called when it finishes; see Jobs.

import time, requests

BASE, H = "https://pinerouter.ai", {"Authorization": "Bearer YOUR_API_KEY"}
job = requests.post(f"{BASE}/v1/jobs", headers=H, json={"model":"ai-music-api/separate-vocals","input":{"type":"separate_vocal"}}).json()["data"]
while job["status"] not in ("succeeded", "failed"):
    time.sleep(5)
    job = requests.get(f"{BASE}/v1/jobs/{job['id']}", headers=H).json()["data"]
print(job["outputs"] or job.get("error"))