Sonilo v1.1 API

Frame-synced soundtracks generated straight from video, or music from a text prompt, with per-segment direction and stem separation.

SoniloAudio GenerationReleased Jun 18, 2026Proprietary EndpointNew

About Sonilo v1.1

Frame-synced soundtracks generated straight from video, or music from a text prompt, with per-segment direction and stem separation.

music generationtext to musicvideo to musicstemscommercial ready

Sonilo v1.1 specs

Model ID
sonilo-v1-1
Author
Sonilo
Category
Audio Generation
Released
Jun 18, 2026
Input
TextVideo
Output
Audio
Endpoints
POST/v1/audio/generations
Alternate model IDs
sonilo-v1.1sonilo/v1.1sonilo-musicsonilo/sonilo-v1-1

Sonilo v1.1 API pricing

Live pay-as-you-go rates from the EmpirioLabs catalog. You are billed only for what you use, with no monthly minimum.

Type
Spec
Rate
Text to music
per generated second
$0.0045
Video to music
per generated second
$0.018
Compare on the full pricing page

How to call the Sonilo v1.1 API

Sonilo v1.1 runs through POST /v1/audio/generations. The request returns a job_id right away; poll GET /v1/jobs/{job_id} until the job completes and read the output URLs from the result. Get an API key from the EmpirioLabs dashboard.

cURL: submit the job
curl https://api.empiriolabs.ai/v1/audio/generations \
  -H "Authorization: Bearer $EMPIRIOLABS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sonilo-v1-1",
    "prompt": "Describe what you want Sonilo v1.1 to generate."
  }'
cURL: poll for the result
curl https://api.empiriolabs.ai/v1/jobs/JOB_ID \
  -H "Authorization: Bearer $EMPIRIOLABS_API_KEY"
Python
import requests

response = requests.post(
    "https://api.empiriolabs.ai/v1/audio/generations",
    headers={"Authorization": "Bearer YOUR_EMPIRIOLABS_API_KEY"},
    json={
        "model": "sonilo-v1-1",
        "prompt": "Describe what you want Sonilo v1.1 to generate.",
    },
)
job = response.json()

# Generation runs as an async job. Poll until it completes.
import time
while True:
    status = requests.get(
        f"https://api.empiriolabs.ai/v1/jobs/{job['job_id']}",
        headers={"Authorization": "Bearer YOUR_EMPIRIOLABS_API_KEY"},
    ).json()
    if status.get("status") in ("completed", "failed"):
        print(status)
        break
    time.sleep(5)
Full Sonilo v1.1 API reference

Sonilo v1.1 API parameters

Request parameters supported by the Sonilo v1.1 API on EmpirioLabs. Defaults apply when a field is omitted.

ParameterTypeDefaultRange / valuesDescription
promptstring--Style or creative direction for the music. Required when generating from text alone. Optional when scoring a video, where the footage leads.
modeenumautoauto, text, videoauto scores an attached video and falls back to text to music when there is no video. Set text or video to pin the behaviour.
durationnumber-5 to 360Track length in seconds. Text mode only. In video mode the track follows the length of the source video. Leave empty to let the prompt decide.
output_formatenumm4am4a, wav, mp3Delivered audio format. m4a is AAC, wav is 16-bit PCM, mp3 is 320 kbps.
variants_numnumber11 to 10How many distinct musical directions to generate in one request. Each variant is billed separately at the per-second rate, and the 10 second minimum applies to each one.
stemsbooleanfalse-Also return the generated track split into drums, bass, vocals and other. Adds no charge and adds a few minutes to the wait.
duckingbooleanfalse-Also return a take with the music dipped under the speech in the source video so dialogue stays intelligible. Adds no charge.
preserve_speechbooleanfalse-Keep the speech from the source video and return the isolated voice plus a mixed track alongside the music.
prompt_influencenumber0.50 to 1How strongly the music follows the prompt rather than the footage. Lower lets the video lead, higher follows the prompt more literally. Adds no charge.
segmentsstring--JSON array of timed segment prompts for scene by scene direction. Each entry takes start, end and prompt in seconds.
video_urlstring--Source video to score, as a publicly reachable URL. Up to 300MB and 6 minutes. Uploading a video in the playground sets this for you.

Good to know

Modes

  • auto scores the attached video, and falls back to text to music when there is no video
  • Video mode follows the cuts and pacing of the source footage
  • Text mode generates from a prompt alone

Controls

Supports prompt, mode, source video, 5 to 360 second duration in text mode, m4a, wav or mp3 output, 1 to 10 variants, stem separation, ducking, speech preservation, prompt influence, and JSON segment prompts.

Limits

  • Source video up to 300MB and 6 minutes
  • Duration 5 to 360 seconds in text mode. Video mode follows the length of the source
  • Ducking, speech preservation and prompt influence apply to video mode only

Billing

  • Charged per generated second at the catalog rate, with a 10 second minimum per track. A 4 second track bills 10 seconds.
  • Each variant is billed separately and the 10 second minimum applies to each one.
  • Stem separation, ducking and prompt influence add no charge.
  • A request rejected before generation is not billed.

Sonilo v1.1 API: common questions

How much does the Sonilo v1.1 API cost?

On EmpirioLabs, Sonilo v1.1 is billed pay as you go: Text to music $0.0045 per generated second; Video to music $0.018 per generated second. The live rate card on this page always matches what the API charges.

Which endpoint does Sonilo v1.1 use?

Sonilo v1.1 is served through POST /v1/audio/generations on api.empiriolabs.ai with standard bearer-token authentication.

Can I try Sonilo v1.1 in the browser before integrating?

Yes. The EmpirioLabs playground runs Sonilo v1.1 in the browser with the same parameters the API exposes, so you can test prompts before writing code.

How do I get a Sonilo v1.1 API key?

Create an EmpirioLabs account, then generate a key under API Keys in the dashboard. Billing is pay-as-you-go credits, so you only pay for the requests you make.

Ready to use better endpoints?

Check out our pricing or reach out if you want your own model deployed on our stack.