LALAL.AI
LALAL.AI is an AI-powered audio separation and voice technology platform operated by OmniSale GmbH. It uses proprietary neural networks (Andromeda, Perseus, Orion, Phoenix, Lyra, Lynx) to isolate vocals, instruments, drums, bass, guitars, piano, synth, strings, and wind from mixed audio, clean voice recordings, and clone or convert voices with consent. The company ships a web app, native desktop, iOS and Android apps, a VST plug-in for DAWs, and a production REST API (v1) for embedding stem separation and voice cloning into third-party SaaS, media, and post-production pipelines.
1 APIs
20 Features
AIArtificial IntelligenceAudioAudio ProcessingStem SeparationVocal RemovalVoice CleaningVoice CloningVoice ChangerMusicMachine LearningDSP
Six proprietary neural networks: Andromeda (6th-gen, 2025), Perseus (transformer), Orion, Phoenix, Lyra (dereverb / demuser), and Lynx
Stem separation for vocals, drum, bass, piano, electric guitar, acoustic guitar, synthesizer, strings, and wind instruments
Single-task and batch (multi-file) variants for stem_separator, demuser, and voice_clean endpoints
Multistem endpoint extracts up to six stems in a single request
Demuser endpoint isolates music from non-music components
Voice Clean endpoint removes background music and ambient noise from spoken-word audio with 3-level noise cancelling
Change Voice endpoint applies legal artist Voice Packs (ALEX_KAYE, STASIA_FAYE, NICOLAAS_HAAS, NIK_ZEL, OLIA_CHEBO, YVAR_DE_GROOT, VETRANA) or user-trained custom Voice Packs from the Voice Cloner
Voice Packs list endpoint returns user-trained packs with previews, language metadata, and ready-to-use state
Dereverb option for vocals/voice stems plus accent intensity, pitch shifting, and tonality reference controls for voice conversion
Lead/back vocal splitter via the multivocal parameter on stem separation
Asynchronous job model — POST returns task_id, poll /check/ for progress (success, progress, error, cancelled) and signed download URLs for stem_track and back_track
Cancel individual tasks or all running tasks; delete uploaded source files
Limits endpoint returns remaining processing minutes and the plan tier
Output formats MP3, WAV, FLAC, AAC, OGG (defaults to source format)
Extraction levels Clear Cut and Deep Extraction on Perseus
File upload via single-PUT or multipart for large files (up to 10 GB with valid license)
24-hour retention on uploaded source files
Official OpenAPI 3.1 spec served at /api/v1/openapi.json with Swagger-style explorer at /api/v1/docs/
Official Python example client maintained at github.com/OmniSaleGmbH/lalalai
API access included on Pro and higher plans, with custom enterprise pricing available
opencollection: 1.0.0
info:
name: LALAL.AI API
version: 1.1.0
items:
- info:
name: Common
type: folder
items:
- info:
name: Upload a file to the server.
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/upload/
headers:
- name: Content-Disposition
value: attachment; filename=song.mp3
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n The uploaded file in other endpoints is called a \"source file\".\n You can use the source file ID from\
\ the response to create split tasks.\n The file will be deleted when the expiration time from the response is reached.\n\
\ Upload limit is 10GB per request.\n "
- info:
name: Check the status of a task by id
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/check/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n This endpoint allows you to check the status of a specific task by its ID.\n Checking is only possible\
\ within 24h after task creation, otherwise an error will be returned.\n The current rate limit for this endpoint\
\ is 30 requests per minute. This limit may be increased in the future.\n "
- info:
name: Cancel tasks by id
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/cancel/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: Cancel tasks by id
- info:
name: Cancel all user tasks in progress state
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/cancel/all/
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: Cancel all user tasks in progress state
- info:
name: Delete source file and resulting tracks from storage.
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/delete/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n WARNING: All running tasks related to the source file will be cancelled. Do not call delete on source files\
\ with processing tasks.\n This only deletes the media files, not the database records.\n The files are removed\
\ from storage immediately, but download links will remain valid for one hour after deletion due to CDN caching.\n \
\ The /check/ endpoint will still return a valid check result for 24 hours, but the download links will lead to a\
\ 404 error after deletion.\n "
- info:
name: Get number of processing minutes available to consume.
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/limits/minutes_left/
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: Get number of processing minutes available to consume.
- info:
name: Stem Separation
type: folder
items:
- info:
name: Split a file into stems using the stem separator presets
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/stem_separator/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Result of /check/ includes 2 tracks:\n - stem:{\"type\":\"stem\", \"label\":\"<stem_name>\", \"url\":\"\
...\"}\n - without stem:{\"type\":\"back\", \"label\":\"no_<stem_name>\", \"url\":\"...\"}\n\n LEAD_BACK VOCALS:\n\
\ For 'vocals' stem you can use parameter multivocal=\"lead_back\" and receive both lead and backing vocals as separate\
\ stems.\n Result of /check/ includes 4 tracks. Backing vocals track is optional and could be suppressed if not found\
\ in the audio:\n lead vocals:{\"type\":\"stem\", \"label\":\"vocal"
- info:
name: Clean voice from background music
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/demuser/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Typical usage case - is voice with background music.\n Demuser will separate voice (stem) and music (back).\n\
\ Result of /check/ includes 2 tracks:\n - stem:{\"type\":\"stem\", \"label\":\"music\", \"url\":\"...\"}\n \
\ - back:{\"type\":\"back\", \"label\":\"no_music\", \"url\":\"...\"}\n "
- info:
name: Clean voice from background noise
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/voice_clean/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Typical usage case - is voice with background noise.\n Voice clean will separate clean voice (stem) and\
\ noise (back).\n Result of /check/ includes 2 tracks:\n - stem:{\"type\":\"stem\", \"label\":\"voice\", \"url\"\
:\"...\"}\n - back:{\"type\":\"back\", \"label\":\"no_voice\", \"url\":\"...\"}\n "
- info:
name: Split a file into multiple stems in one request (multistem feature)
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/multistem/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n WARNING: The stems are internally extracted one by one, so the processing time is proportional to the number\
\ of stems selected.\n\n You will be charged an equal amount of minutes for each stem.\n For example, if you have\
\ an audio file with a duration of 1 minute,\n with stem_list=[\"vocals\", \"drum\"], you will be charged 2 minutes\
\ (1 minute for \"vocals\", 1 minute for \"drum\").\n At the /check/ endpoint you will receive <number_of_stems>\
\ tracks with 1 additional track which is the source"
- info:
name: Batch Stem Separation
type: folder
items:
- info:
name: Split multiple files into stems using the stem separator presets
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/batch/stem_separator/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Batch version of /split/stem_separator/. Accepts a list of split parameters and returns results for each\
\ item.\n Each item is processed independently - if one fails, others will still be processed.\n Results are returned\
\ in the same order as input items.\n\n Each result contains either:\n - success: {\"status\": \"success\", \"\
task_id\": \"...\", \"source_id\": \"...\"}\n - error: {\"status\": \"error\", \"error\": \"...\", \"code\": \"...\"\
, \"source_id\": \"...\"}\n "
- info:
name: Clean voice from background music for multiple files
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/batch/demuser/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Batch version of /split/demuser/. Accepts a list of split parameters and returns results for each item.\n\
\ Each item is processed independently - if one fails, others will still be processed.\n Results are returned\
\ in the same order as input items.\n\n Each result contains either:\n - success: {\"status\": \"success\", \"\
task_id\": \"...\", \"source_id\": \"...\"}\n - error: {\"status\": \"error\", \"error\": \"...\", \"code\": \"...\"\
, \"source_id\": \"...\"}\n "
- info:
name: Clean voice from background noise for multiple files
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/split/batch/voice_clean/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n Batch version of /split/voice_clean/. Accepts a list of split parameters and returns results for each item.\n\
\ Each item is processed independently - if one fails, others will still be processed.\n Results are returned\
\ in the same order as input items.\n\n Each result contains either:\n - success: {\"status\": \"success\", \"\
task_id\": \"...\", \"source_id\": \"...\"}\n - error: {\"status\": \"error\", \"error\": \"...\", \"code\": \"...\"\
, \"source_id\": \"...\"}\n "
- info:
name: Voice Change
type: folder
items:
- info:
name: Changes voice in the audio file using voice pack
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/change_voice/
body:
type: json
data: '{}'
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: "\n For 'voice_pack_id' parameter use 'pack_id' from /voice_packs/list/ endpoint or one of legal packs: ['ALEX_KAYE',\
\ 'STASIA_FAYE', 'NICOLAAS_HAAS', 'NIK_ZEL', 'OLIA_CHEBO', 'YVAR_DE_GROOT', 'VETRANA']\n\n Result of /check/ includes\
\ 1 track with label 'converted_mix'.\n {\"label\":\"converted_mix\", \"type\":\"back\", \"url\":\"...\"}\n "
- info:
name: Lists voice packs available to the user
type: http
http:
method: POST
url: https://www.lalal.ai/api/v1/voice_packs/list/
auth:
type: apikey
key: X-License-Key
value: '{{X-License-Key}}'
placement: header
docs: Helps to find pack_id for /change_voice/ endpoint.
bundled: true