Audio generation PLANNED
Text to music. Send a style prompt, lyrics, or both, and get back a finished track as a stored audio file. Same submit-and-poll shape as every other lane - see Submit, poll, result for the mechanics.
ace-step is the music engine and
the default. audioldm is short 16kHz sound effects on non-commercial
weights, so its output must not go into anything you sell - see the licence note below.
The shortest useful request
curl -X POST https://flopco.in/v1/generate \
-H "Authorization: Bearer $FLOP_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "audio",
"model": "ace-step",
"prompt": "lo-fi hip hop, warm rhodes, vinyl crackle, relaxed"
}'
That returns a generation id. Poll GET /v1/generations/{id} until status is done; result is then the path to the finished audio.
Prompt and lyrics are separate fields
prompt is the style line - genre, instruments, mood, production. params.lyrics is the sung text. They do different jobs, and either one alone is a valid request:
| You send | You get |
|---|---|
| prompt only | An instrumental in that style. |
| lyrics only | A sung track; the model chooses its own backing. |
| both | Those lyrics, sung in that style. This is the one you usually want. |
| neither | A bad_request error. There is nothing to condition on. |
Putting lyrics inside the style prompt does not work. The model reads the prompt as production direction, so a verse pasted there becomes a mood description and is never sung.
Parameters
Per-model tunables go in a params object. Every one is optional, and an omitted parameter uses the tuned default below rather than the underlying library's default.
| Name | Type | Range | Default | What it does |
|---|---|---|---|---|
lyrics | string | up to 4000 chars | empty | The sung text. Blank gives an instrumental. |
duration | float | 5 - 240 | 120 | Track length in seconds. |
steps | int | 10 - 120 | 60 | Diffusion steps. 60 is the quality setting; past 60 gains very little for the extra time. |
guidance_scale | float | 1.1 - 30 | 15 | How literally the prompt is followed. The floor is 1.1 because exactly 0 or 1 switches guidance off entirely. |
omega_scale | float | 1 - 20 | 10 | Sampler granularity. Leave it unless the mix sounds smeared. |
scheduler | enum | euler, heun | euler | heun is second-order: cleaner transients, roughly twice the render time. |
format | enum | wav, mp3, flac | wav | Output container. wav is 48kHz stereo, uncompressed. |
seed | int | 0 - 2147483647 | 4242 | Same prompt, seed and settings reproduce the take. |
duration: 500 gives you a 240-second track, not an error. The worker echoes back the settings it actually used, so read those rather than assuming your request went through verbatim.
A full request
{
"mode": "audio",
"model": "ace-step",
"prompt": "folk ballad, fingerpicked acoustic guitar, close mic, sparse",
"params": {
"lyrics": "the road was long\nand the lantern low\n...",
"duration": 90,
"steps": 60,
"scheduler": "heun",
"format": "wav",
"seed": 1234
}
}
Ask the catalog, do not hardcode
The table above is published as data. GET /v1/models?type=audio returns each audio model with a params array carrying the same names, types, ranges and defaults, so a client can build its own controls and stay correct when a model is added or a range moves.
curl https://flopco.in/v1/models?type=audio
Models
| Model | Weights license | Use |
|---|---|---|
ace-step | Apache-2.0 | The shippable music engine. 48kHz stereo, up to four minutes, lyrics-aware. This is the default and the one you want. |
audioldm | CC BY-NC-SA 4.0 | Short sound effects and ambience at 16kHz. Non-commercial weights - its output must not go into anything you sell. |
non-commercial tag in the catalog. That tag is the authoritative answer, and it travels with the model row so you can enforce it in code rather than remembering it.
Timing
A warm worker renders far faster than real time - a two-minute track lands in well under a minute. A cold worker has to start and load the checkpoint first, so the first request after an idle period can take several minutes. The job timeout for the audio lane is 40 minutes; poll rather than holding a connection open.
The audio lane runs on its own RunPod endpoint, separate from the image lane, because the two need different pinned dependencies. That split is invisible from the API - it is one mode either way.