ComfyUI Node

ACE-Step v1.5 Base

Write a whole song from a prompt — ACE-Step makes lyrics, key, and BPM first-class inputs

By Runware·Created 2 years ago·Updated about a month ago· 140
ACE-Step v1.5 Base
  • audioSettings
  • audio
positivePrompt
audio
negativePrompt
seed0
steps100
CFGScale10.00
strengthfalse
strength_value0.50
duration60.0
numberResults1
settings.bpmfalse
settings.bpm_value30
settings.guidanceTypeapg
settings.keyScale
settings.lyrics
settings.repaintingStartfalse
settings.repaintingStart_value-300.00
settings.repaintingEndfalse
settings.repaintingEnd_value0.00
settings.timeSignature(default)
settings.vocalLanguageen
ttlfalse
ttl_value60
outputFormatMP3

ACE-Step is a music generation model, and this node is the rare case where the ComfyUI wrapper is arguably the best interface for the thing. You get full-song parameters as widgets - lyrics, BPM, musical key, time signature, vocal language - instead of fighting a text box. Type a prompt, paste lyrics, pick a key, and out comes an audio file. There aren't many music models in this pack, which makes the Audio category feel like a hidden wing; this is the headliner.

The model comes from the ACE-Step project (the same family as the ACE-Step-v1 3.5B checkpoint that made the rounds in May 2025, praised as ~15x faster than LLM-based music generators). v1.5 is the API version, so there are no weights to find - you're renting the inference.

What you set

positivePrompt is required - describe the song ("upbeat synth-pop with a driving bassline"). The inputs that actually shape the music:

  • settings.lyrics - paste full lyrics, formatted like a lyrics site. The model works dramatically better with real lyrics than with "make up some words."
  • settings.keyScale - musical key in {Note} {Mode} form, e.g. C major, F# minor.
  • settings.bpm / settings.timeSignature - tempo and beats-per-measure; leave unset and the model decides.
  • settings.vocalLanguage - ISO 639-1 code (en, es, ...) or unknown for instrumental.
  • settings.guidanceType - apg (default) or cfg. ACE-Step's default is adaptive guidance; only switch to cfg if you're chasing stronger prompt adherence and willing to trade quality.
  • steps (default 100) and CFGScale (default 10) - the diffusion knobs. 100 steps at 60s of audio is already slow-ish; don't max it out.

There's also an editing path: audio accepts a URL/UUID of an existing track, and repaintingStart/repaintingEnd (gated toggles) define a region to regenerate - negative start values prepend audio, values past the end append new audio. strength controls how much of the input carries through.

duration runs 30–300 seconds. Output is audio as an AUDIO dict (waveform + sample rate) - wire it to a Save Audio / preview audio node. outputFormat gives you MP3/WAV/FLAC/OGG.

Installing

Part of the Runware/ComfyUI-Runware 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

The deps are light (runware-sdk, pillow, soundfile) and there are no model downloads. You need a Runware API key from runware.ai/api-keys (Settings panel or RUNWARE_API_KEY).

Where people get burned

Music models are allergic to vague lyrics - give the model something with structure (verses, chorus) or you get mush. And watch the clock: 60+ seconds of audio at 100 steps is a genuinely long cloud job, and you're paying for compute the whole time. Start with duration short (30s), nail the style, then extend. Also note settings.lyrics is a plain string here, not a socket - you can't wire it from a text node, only type it in or templated into the widget.

CategoryRunware/Audio/runware

Inputs (25)

NameTypeDefaultDescription
positivePromptSTRINGText prompt describing elements to include in the generated output.
audioSettingsoptRUNWARE_AUDIOSETTINGS
audiooptSTRINGAudio input (UUID or URL).
negativePromptoptSTRINGPrompt to guide what to exclude from generation. Ignored when guidance is disabled (CFGScale ≤ 1).
seedoptINT00–2147483647Random seed for reproducible generation. When not provided, a random seed is generated in the unsigned 32-bit range.
stepsoptINT1001–300Total number of denoising steps. Higher values generally produce more detailed results but take longer.
CFGScaleoptFLOAT10.001–30Guidance scale representing how closely the output will resemble the prompt. Higher values produce results more aligned with the prompt.
strengthoptBOOLEANfalseEnable to set strength. This setting has usage rules in this model, so it is off unless you enable it.
strength_valueoptFLOAT0.500–1Fraction of steps using the input source instead of generated output.
durationoptFLOAT60.030–300Length of the generated audio track in seconds.
numberResultsoptINT11–4Number of results to generate. Each result uses a different seed, producing variations of the same parameters.
settings.bpmoptBOOLEANfalseEnable to set settings.bpm. Off uses the model's default.
settings.bpm_valueoptINT3030–300Beats per minute. If not set, the model decides automatically.
settings.guidanceTypeoptCOMBOapgControls how guidance is applied during generation.
settings.keyScaleoptSTRINGMusical key and scale in '{Note}{Accidental} {Mode}' format (e.g. 'C major', 'F# minor', 'Bb major').
settings.lyricsoptSTRINGSong lyrics, typically formatted like a lyrics website.
settings.repaintingStartoptBOOLEANfalseEnable to set settings.repaintingStart. Off uses the model's default.
settings.repaintingStart_valueoptFLOAT-300.00-300–300Start time in seconds for repaint region. Requires input audio. Negative values prepend audio before the start.
settings.repaintingEndoptBOOLEANfalseEnable to set settings.repaintingEnd. Off uses the model's default.
settings.repaintingEnd_valueoptFLOAT0.000–300End time in seconds for repaint region. Requires input audio. Values beyond audio duration append new audio.
settings.timeSignatureoptCOMBO(default)Beats per measure. If not set, the model decides automatically.
settings.vocalLanguageoptCOMBOenISO 639-1 language code for vocals. `unknown` for instrumental or auto detection.
ttloptBOOLEANfalseEnable to set ttl. Off uses the model's default.
ttl_valueoptINT60Time-to-live (TTL) in seconds for generated content. Only applies when `outputType` is `URL`.
outputFormatoptCOMBOMP3File format for the generated audio.

Outputs (1)

NameTypeDescription
audioAUDIO