Frequently asked questions
The questions that come up most, answered briefly. The documentation is the full reference.
What audio formats can I upload?
Any common audio format, compressed or not, within the size and length limits below. Video files are refused; export the audio track (M4A, WAV, MP3) first. See input requirements.
Is there a minimum length, and what happens with a silent file?
Audio must be at least 0.5 seconds long, and a file that is digital silence is rejected too. Both are caught at upload with a specific 400 rather than failing later inside the model, so you find out immediately and are not billed.
Should I send mono or stereo?
Send your file as-is: vocal separation uses the stereo image, and super-resolution and SI-SDR downmix to mono anyway, so stereo costs the same there and gains nothing. Every output track is mono.
Why did speaker separation split my single speaker into two tracks?
Because it always returns two tracks and assumes two speakers are present. It does not detect a solo recording and hand back one clean track plus an empty one, it force-splits the voice into two overlapping tracks, so only send it audio you expect to contain two people.
What does the SI-SDR number actually mean?
It scores how much of a track is its target speaker rather than leftover bleed and artifacts, in decibels, where higher is cleaner. The three bands below are how we read it; see reading SI-SDR for the rest.
How much should I trust that score?
Treat it as an estimate, not ground truth: it comes from a model with no reference recording to compare against, so it is most reliable when comparing jobs with similar processing. Denoised audio tends to score higher than its true separation quality, narrow-band sources can score higher than they sound, and repeat jobs can differ slightly.
Do I have to pick which processing steps to run?
No. There is one endpoint and one job: you upload a recording, the pipeline runs server-side, and the job reports which phase it is on as it goes. More in the separation endpoint.
How does billing work?
Credit is US dollars, and every job type costs $0.50/min of the recording you upload, prorated by the second with no minimum charge. Every response quotes the price up front as estimated_cost_usd and the final charge never exceeds it. New accounts start with $20 of credit, and top-ups run from $5 to $500 in the console; the pricing page has the rest.
How is a job with several microphones billed?
On the longest of its files, not their sum. The 2-10 recordings are microphones pointed at one conversation, so the separation runs once over the aligned timeline and you are billed for that one timeline.
What is a hold on my credit ledger?
When a job is submitted we reserve the quoted amount as a hold, so concurrent jobs cannot spend the same credit twice. On settlement the hold is released and the actual charge is written, and a job that fails or is canceled is refunded in full; see billing & credit.
Can I cancel a job that is already running?
Yes, and you are not billed either way. A queued job stops immediately, while a running job stops at the worker's next checkpoint, so its status turns over shortly after.
How do I rotate a leaked API key?
Regenerate it from the console's API keys page, or over the API. The endpoint reference has the call. The new key is shown once and the old one stops working immediately, so update anything using it first. Revoking is the other option: it kills the key without issuing a replacement.
How long do you keep my audio?
Uploaded audio and output tracks are deleted automatically about 7 days after the job last changed, and a daily cleanup can put that up to a day later. Download what you want to keep or ask us to delete sooner; the privacy policy has the detail.
What should I check when a job fails?
The error on the job says what happened, and the console's separation workbench turns it into specific advice. Failures are not billed, so re-running after a fix is safe; if the message says the problem is on our side, tell us the job id.
Is there an official SDK?
Not yet. The API is plain HTTP with JSON and multipart, and the curl and Python samples in the documentation are the supported path.
Something missing? Ask us, and recurring questions end up here.