Learn-skills.dev acestep
Use ACE-Step API to generate music, edit songs, and remix music. Supports text-to-music, lyrics generation, audio continuation, and audio repainting. Use this skill when users mention generating music, creating songs, music production, remix, or audio continuation.
git clone https://github.com/NeverSight/learn-skills.dev
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/ace-step/ace-step-1.5/acestep" ~/.claude/skills/neversight-learn-skills-dev-acestep && rm -rf "$T"
data/skills-md/ace-step/ace-step-1.5/acestep/SKILL.mdACE-Step Music Generation Skill
Use ACE-Step V1.5 API for music generation. Always use
script — do NOT call API endpoints directly.scripts/acestep.sh
Quick Start
# 1. cd to this skill's directory cd {project_root}/{.claude or .codex}/skills/acestep/ # 2. Check API service health ./scripts/acestep.sh health # 3. Generate with lyrics (recommended) ./scripts/acestep.sh generate -c "pop, female vocal, piano" -l "[Verse] Your lyrics here..." --duration 120 --language zh # 4. Output saved to: {project_root}/acestep_output/
Workflow
For user requests requiring vocals:
- Use the acestep-songwriting skill for lyrics writing, caption creation, duration/BPM/key selection
- Write complete, well-structured lyrics yourself based on the songwriting guide
- Generate using Caption mode with
and-c
parameters-l
Only use Simple/Random mode (
-d or random) for quick inspiration or instrumental exploration.
If the user needs a simple music video, use the acestep-simplemv skill to render one with waveform visualization and synced lyrics.
MV Production Requirements: Making a simple MV requires three additional skills to be installed:
- acestep-songwriting — for writing lyrics and planning song structure
- acestep-lyrics-transcription — for transcribing audio to timestamped lyrics (LRC)
- acestep-simplemv — for rendering the final music video
Script Commands
CRITICAL - Complete Lyrics Input: When providing lyrics via the
-l parameter, you MUST pass ALL lyrics content WITHOUT any omission:
- If user provides lyrics, pass the ENTIRE text they give you
- If you generate lyrics yourself, pass the COMPLETE lyrics you created
- NEVER truncate, shorten, or pass only partial lyrics
- Missing lyrics will result in incomplete or incoherent songs
Music Parameters: Use the acestep-songwriting skill for guidance on duration, BPM, key scale, and time signature.
# need to cd to this skill's directory first cd {project_root}/{.claude or .codex}/skills/acestep/ # Caption mode - RECOMMENDED: Write lyrics first, then generate ./scripts/acestep.sh generate -c "Electronic pop, energetic synths" -l "[Verse] Your complete lyrics [Chorus] Full chorus here..." --duration 120 --bpm 128 # Instrumental only ./scripts/acestep.sh generate "Jazz with saxophone" # Quick exploration (Simple/Random mode) ./scripts/acestep.sh generate -d "A cheerful song about spring" ./scripts/acestep.sh random # Options ./scripts/acestep.sh generate "Rock" --duration 60 --batch 2 ./scripts/acestep.sh generate "EDM" --no-thinking # Faster # Other commands ./scripts/acestep.sh status <job_id> ./scripts/acestep.sh health ./scripts/acestep.sh models
Output Files
After generation, the script automatically saves results to the
acestep_output folder in the project root (same level as .claude):
project_root/ ├── .claude/ │ └── skills/acestep/... ├── acestep_output/ # Output directory │ ├── <job_id>.json # Complete task result (JSON) │ ├── <job_id>_1.mp3 # First audio file │ ├── <job_id>_2.mp3 # Second audio file (if batch_size > 1) │ └── ... └── ...
JSON Result Structure
Important: When LM enhancement is enabled (
use_format=true), the final synthesized content may differ from your input. Check the JSON file for actual values:
| Field | Description |
|---|---|
| Actual caption used for synthesis (may be LM-enhanced) |
| Actual lyrics used for synthesis (may be LM-enhanced) |
| Original input caption |
| Original input lyrics |
| BPM used |
| Key scale used |
| Duration in seconds |
| Detailed timing and model info |
| Seeds used (for reproducibility) |
| LM model name |
| DiT model name |
To get the actual synthesized lyrics, parse the JSON and read the top-level
lyrics field, not metas.lyrics.
Configuration
Important: Configuration follows this priority (high to low):
- Command line arguments > config.json defaults
- User-specified parameters temporarily override defaults but do not modify config.json
- Only
command permanently modifies config.jsonconfig --set
Default Config File (scripts/config.json
)
scripts/config.json{ "api_url": "http://127.0.0.1:8001", "api_key": "", "api_mode": "completion", "generation": { "thinking": true, "use_format": false, "use_cot_caption": true, "use_cot_language": false, "batch_size": 1, "audio_format": "mp3", "vocal_language": "en" } }
| Option | Default | Description |
|---|---|---|
| | API server address |
| | API authentication key (optional) |
| | API mode: (OpenRouter, default) or (polling) |
| | Enable 5Hz LM (higher quality, slower) |
| | Output format (mp3/wav/flac) |
| | Vocal language |
Prerequisites - ACE-Step API Service
IMPORTANT: This skill requires the ACE-Step API server to be running.
Required Dependencies
The
scripts/acestep.sh script requires: curl and jq.
# Check dependencies curl --version jq --version
If jq is not installed, the script will attempt to install it automatically. If automatic installation fails:
- Windows:
or download from https://jqlang.github.io/jq/download/choco install jq - macOS:
brew install jq - Linux:
(Debian/Ubuntu) orsudo apt-get install jq
(Fedora)sudo dnf install jq
Before First Use
You MUST check the API key and URL status before proceeding. Run:
cd "{project_root}/{.claude or .codex}/skills/acestep/" && bash ./scripts/acestep.sh config --check-key cd "{project_root}/{.claude or .codex}/skills/acestep/" && bash ./scripts/acestep.sh config --get api_url
Case 1: Using Official Cloud API (https://api.acemusic.ai
) without API key
https://api.acemusic.aiIf
api_url is https://api.acemusic.ai and api_key is empty, you MUST stop and guide the user to configure their key:
- Tell the user: "You're using the ACE-Step official cloud API, but no API key is configured. An API key is required to use this service."
- Explain how to get a key: API keys are currently available through acemusic.ai for free.
- Use
to ask the user to provide their API key.AskUserQuestion - Once provided, configure it:
cd "{project_root}/{.claude or .codex}/skills/acestep/" && bash ./scripts/acestep.sh config --set api_key <KEY> - Additionally, inform the user: "If you also want to render music videos (MV), it's recommended to configure a lyrics transcription API key as well (OpenAI Whisper or ElevenLabs Scribe), so that lyrics can be automatically transcribed with accurate timestamps. You can configure it later via the
skill."acestep-lyrics-transcription
Case 2: API key is configured
Verify the API endpoint:
./scripts/acestep.sh health and proceed with music generation.
Case 3: Using local/custom API without key
Local services (
http://127.0.0.1:*) typically don't require a key. Verify with ./scripts/acestep.sh health and proceed.
If health check fails:
- Ask: "Do you have ACE-Step installed?"
- If installed but not running: Use the acestep-docs skill to help them start the service
- If not installed: Use acestep-docs skill to guide through installation
Service Configuration
Official Cloud API: ACE-Step provides an official API endpoint at
https://api.acemusic.ai. To use it:
./scripts/acestep.sh config --set api_url "https://api.acemusic.ai" ./scripts/acestep.sh config --set api_key "your-key" ./scripts/acestep.sh config --set api_mode completion
API keys are currently available through acemusic.ai for free.
Local Service (Default): No configuration needed — connects to
http://127.0.0.1:8001.
Custom Remote Service: Update
scripts/config.json or use:
./scripts/acestep.sh config --set api_url "http://remote-server:8001" ./scripts/acestep.sh config --set api_key "your-key"
API Key Handling: When checking whether an API key is configured, use
config --check-key which only reports configured or empty without printing the actual key. NEVER use config --get api_key or read config.json directly — these would expose the user's API key. The config --list command is safe — it automatically masks API keys as *** in output.
API Mode
The skill supports two API modes. Switch via
api_mode in scripts/config.json:
| Mode | Endpoint | Description |
|---|---|---|
(default) | | OpenRouter-compatible, sync request, audio returned as base64 |
| + | Async polling mode, supports all parameters |
Switch mode:
./scripts/acestep.sh config --set api_mode completion ./scripts/acestep.sh config --set api_mode native
Completion mode notes:
- No polling needed — single request returns result directly
- Audio is base64-encoded inline in the response (auto-decoded and saved)
,inference_steps
,infer_method
are not configurable (server defaults)shift
and--no-wait
commands are not applicable in completion modestatus- Requires
field — auto-detected frommodel
if not specified/v1/models
Using acestep-docs Skill for Setup Help
IMPORTANT: For installation and startup, always use the acestep-docs skill to get complete and accurate guidance.
DO NOT provide simplified startup commands - each user's environment may be different. Always guide them to use acestep-docs for proper setup.
For API debugging, see API Reference.