Skip to main content
AI Music Detection determines whether music was generated by a model. Vocals and instrumentals are scored separately, because a track can pair an AI voice with a human backing track or the reverse, and a single number would hide that. This is not Music & Speech Detection, which separates music from speech. That model answers what kind of sound is present. This one answers where the music came from.

Reading the fields

Two families of field look alike and mean different things. A track can be 90% vocal and 5% AI-vocal. The first is about content, the second about origin. Vocal and instrumental are scored independently per window rather than routed to one or the other. A window with enough vocal content receives vocal_ai_probability and vocal_ai_confidence. A window that is not mostly silence receives instrumental_ai_probability and instrumental_ai_confidence. Either pair is null when the window lacks enough of that content to score, so a window can carry both pairs, one, or neither.
Guard for null on vocal_ai_probability, vocal_ai_confidence, instrumental_ai_probability, and instrumental_ai_confidence before formatting them. Any per-window renderer that assumes a number will print garbage on a silent or instrumental-only window.

AI Music Detection (batch)

Returns application/json. Every field is always present, though the four per-window AI fields can be null. Each entry in windows carries start_time_ms, end_time_ms, vocal_percentage, vocal_ai_probability, vocal_ai_confidence, instrumental_percentage, instrumental_ai_probability, instrumental_ai_confidence, and silence_percentage.

Try it

What you can configure

Audio formats

Accepted extensions: .aac, .flac, .m4a, .mp3, .mp4, .ogg, .opus, .wav. Maximum file size is 100 MB. Files above it are rejected with 413. Empty files are rejected with 400.

Accuracy

Use primary_verdict when judging a whole song or segment. Per-window results are lower accuracy by construction, each scored from four seconds of context. Heavily processed or high-production tracks are sometimes labelled AI-generated. This is a known gap targeted by future model updates.

AI Music Detection (streaming)

One window message per completed 4-second window, then a done message with the clip verdict and percentages. The done message is not a summary of the windows already sent. Its instrumental score is recomputed at end of stream from the full accumulated audio, which is more context than any single window receives, so it can differ from what the live windows suggested and is the more reliable number. Send audio as binary WebSocket frames of any size. Send an empty text frame ("") to end the stream. The server then flushes remaining audio, emits outstanding windows, runs the final instrumental analysis, sends done, and closes.

Try it

WebSocket endpoints cannot be exercised with cURL. For command-line testing use websocat.

What you can configure

Audio formats

audio_format is required on every connection, including self-describing containers. Omitting it closes the connection with code 1003.
Streaming accepts a narrower set than batch. m4a, mp4, and opus are batch-only. Container formats. wav, mp3, ogg, flac, webm, aac, aiff. The stream carries sample rate and channel count, so sample_rate and num_channels must be omitted. Raw formats. s8, s16le, s16be, s24le, s24be, s32le, s32be, u8, u16le, u16be, u24le, u24be, u32le, u32be, f32le, f32be, f64le, f64be, mulaw, alaw. These are headerless, so sample_rate and num_channels are both required. sample_rate accepts 8000, 11025, 16000, 22050, 32000, 44100, 48000, 96000. To convert a file to raw PCM:

API reference