ACE-Step v1.5 XL Turbo
Full songs from a text prompt, fast
- audioSettings
- audio
Music generation in ComfyUI used to mean dragging in a half-maintained local audio stack. Runware_ace_step_v1_5_xl_turbo skips all of it: it's ACE-Step, a music-generation model, running as one node that takes a text prompt and returns an AUDIO object. Describe the track - genre, tempo, mood, instrumentation - and get 30 to 300 seconds of actual music back. This is the "Turbo" variant (runware:[email protected]), distilled for speed at 8 denoising steps.
The "XL" and "Turbo" in the name are doing real work. ACE-Step's XL tier is the higher-fidelity line, and Turbo is its speed-distilled form - the classic trade where you swap a little refinement for a lot of latency. For a model that's already generating 60+ seconds of audio, that's not a cosmetic difference; Turbo is the one you reach for when you're iterating on a track concept and don't want to wait minutes per draft.
How it works
audioInference task with the turbo AIR. The node sends your prompt and settings up, Runware's GPUs run the denoising, and the returned audio file is decoded back into a ComfyUI AUDIO object (waveform tensor + sample rate) - decodable via soundfile, with torchaudio as fallback. You can generate from scratch, or feed audio (a URL or UUID) and use the repaint controls to regenerate a section of an existing track.
The inputs that matter
positivePrompt(required) - this is a music model, so "upbeat synthwave, 120 BPM, retro bassline" is a real prompt. Describe genre, instruments, and vibe like you'd brief a producer.duration- 30 to 300 seconds, default 60. The single biggest cost lever - more seconds, more compute.steps- 8 default. It's Turbo; it expects to run few steps. Crank it up and you mostly buy time, not quality.settings.lyrics- paste lyrics formatted like a lyrics site and the model will try to sing them.settings.vocalLanguage- ISO 639-1 code;unknownfor instrumental or auto-detect.settings.keyScale/settings.bpm/settings.timeSignature- musicality controls: "C major", beats per minute, beats per measure. Leave unset and the model decides.settings.repaintingStart/settings.repaintingEnd- the inpainting of the audio world; requires inputaudio, and lets you regenerate a slice of a track.
Installing it
Install the pack. ComfyUI Manager → search Runware → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/Runware/ComfyUI-Runware
pip install -r ComfyUI-Runware/requirements.txt
Key from runware.ai/api-keys → ComfyUI Settings → Runware API key (or RUNWARE_API_KEY). Note: audio output needs the soundfile package (it's in the pack's requirements.txt) - install it if you see decode warnings.
Where people get burned
- Turbo is a draft generator. 8 steps is fast and it sounds like it. If a track matters, the pack's
Runware_ace_step_v1_5_xl_sftis the full-quality sibling at 100 steps - use Turbo to find the idea, SFT to finish it. - Cost scales with duration. A 5-minute track is a real bill. Run a 30-second draft to validate the concept first.
- The
audioinput is a string, not a socket. You feed it a URL or UUID - use the pack's upload node to get a UUID for a local file you want to repaint. - Lyrics aren't magic. The model follows lyric formatting loosely; treating it like a text-to-speech node will disappoint.
ACE-Step Turbo is the fastest way to hear whether a song idea works. It's a composer's scratch pad with a wire in and a wire out.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| positivePrompt | STRING | Text prompt describing elements to include in the generated output. | |
| audioSettingsopt | RUNWARE_AUDIOSETTINGS | — | |
| audioopt | STRING | Audio input (UUID or URL). | |
| seedopt | INT | 00–2147483647 | Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range. |
| stepsopt | INT | 81–20 | Total number of denoising steps. Higher values generally produce more detailed results but take longer. |
| strengthopt | BOOLEAN | false | Enable to set strength. This setting has usage rules in this model, so it is off unless you enable it. |
| strength_valueopt | FLOAT | 0.500–1 | Fraction of steps using the input source instead of generated output. |
| durationopt | FLOAT | 60.030–300 | Length of the generated audio track in seconds. |
| numberResultsopt | INT | 11–4 | Number of results to generate. Each result uses a different seed, producing variations of the same parameters. |
| advancedFeaturesopt | BOOLEAN | false | Enable to set advancedFeatures. Off uses the model's default. |
| settings.bpmopt | BOOLEAN | false | Enable to set settings.bpm. Off uses the model's default. |
| settings.bpm_valueopt | INT | 3030–300 | Beats per minute. If not set, the model decides automatically. |
| settings.keyScaleopt | STRING | Musical key and scale in '{Note}{Accidental} {Mode}' format (e.g. 'C major', 'F# minor', 'Bb major'). | |
| settings.lyricsopt | STRING | Song lyrics, typically formatted like a lyrics website. | |
| settings.repaintingStartopt | BOOLEAN | false | Enable to set settings.repaintingStart. Off uses the model's default. |
| settings.repaintingStart_valueopt | FLOAT | -300.00-300–300 | Start time in seconds for repaint region. Requires input audio. Negative values prepend audio before the start. |
| settings.repaintingEndopt | BOOLEAN | false | Enable to set settings.repaintingEnd. Off uses the model's default. |
| settings.repaintingEnd_valueopt | FLOAT | 0.000–300 | End time in seconds for repaint region. Requires input audio. Values beyond audio duration append new audio. |
| settings.timeSignatureopt | COMBO | (default) | Beats per measure. If not set, the model decides automatically. |
| settings.vocalLanguageopt | COMBO | en | ISO 639-1 language code for vocals. `unknown` for instrumental or auto detection. |
| ttlopt | BOOLEAN | false | Enable to set ttl. Off uses the model's default. |
| ttl_valueopt | INT | 60 | Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`. |
| outputFormatopt | COMBO | MP3 | File format for the generated audio. |
| advanced_jsonopt | STRING | Optional JSON merged into the request. For: advancedFeatures.modularScheduler |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |