# Gen Music

> Generate songs from prompts or lyrics through an ACE-Step-compatible API backend. Use when users want text-to-music, lyrics-to-song, fast prompt iteration, stable output files, or to generate music and then play the result on Clawatch.

- Skill: `dvcrn/gen-music` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add dvcrn/gen-music`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/gen-music/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/gen-music

---


# ACE-Step Text To Music

Use an ACE-Step-compatible API backend for prompt-to-song and lyrics-to-song requests. This skill does not install or bundle ACE-Step, model weights, or the API server.

## Prerequisite

Before using this skill, make sure you already have access to an ACE-Step-compatible API backend. This can be a local server, usually at `http://127.0.0.1:8001`, or a remote compatible endpoint. If the backend is missing or stopped, this skill cannot generate music.

## Quick start

```bash
python3 {baseDir}/scripts/generate.py --prompt "playful beach pop song about rising waves"
python3 {baseDir}/scripts/generate.py --prompt "happy indie pop with bright guitars" --lyrics-file /path/to/lyrics.txt --duration 60
```

Defaults are tuned for fast local iteration:

- `batch_size=1` to avoid duplicate variants unless explicitly requested
- `audio_format=mp3`
- `sample_mode=text2music`
- `thinking=false` unless the user asks for heavier LM-assisted generation
- finished audio is copied into a stable output folder instead of leaving only temp API paths

## When to use

- An ACE-Step-compatible API backend is already available, commonly a local server at `http://127.0.0.1:8001` but possibly a remote endpoint
- The user wants text-to-music, lyrics-to-song, or quick style variations
- The user wants a single command that submits, polls, and returns saved files
- The user wants music generated locally and then played on Clawatch
- The user already has access to a local or remote ACE-Step-compatible backend

## Run

```bash
# Basic prompt
python3 {baseDir}/scripts/generate.py --prompt "playful synth-pop song about sunrise waves"

# With lyrics
python3 {baseDir}/scripts/generate.py \
  --prompt "cute upbeat summer beach song" \
  --lyrics-file /path/to/lyrics.txt \
  --duration 60

# Two variants
python3 {baseDir}/scripts/generate.py \
  --prompt "dreamy city-pop ocean groove" \
  --duration 45 \
  --batch-size 2

# Enable heavier LM planning only when needed
python3 {baseDir}/scripts/generate.py \
  --prompt "cinematic anthem about a storm becoming calm" \
  --duration 60 \
  --thinking
```

Useful flags:

- `--duration 10..600`
- `--lyrics` or `--lyrics-file`
- `--batch-size 1..8`
- `--thinking`
- `--model acestep-v15-turbo`
- `--out-dir /path/to/output`
- `--base-url http://127.0.0.1:8001` for local backends
- `--base-url https://your-remote-endpoint` for remote backends

## Clawatch playback

If the user also wants the result played on Clawatch:

1. Run the generator and wait for the saved output file paths.
2. Pick the final `.mp3` path from the script output or `manifest.json`.
3. Call `clawatch_play_audio` with:
   - `imei`: the explicit watch IMEI
   - `filePath`: the saved local audio path
   - `title`: optional short label

Do not pass ACE-Step temp URLs directly if the helper already copied a stable local file. Prefer the saved file path.

## Config

The script accepts CLI flags first, then env vars, then OpenClaw skill config.

Supported env vars:

- `ACESTEP_API_BASE_URL`
- `ACESTEP_API_KEY`
- `ACESTEP_OUTPUT_DIR`

Use `ACESTEP_API_BASE_URL` or the OpenClaw config entry to switch between local and remote ACE-Step-compatible backends.

Optional OpenClaw config in `~/.openclaw/openclaw.json`:

```json5
{
  skills: {
    entries: {
      "gen-music": {
        baseUrl: "http://127.0.0.1:8001",
        apiKey: "",
        outputDir: "~/Projects/tmp/ace-step"
      }
    }
  }
}
```

## Notes

- Check backend health first if needed: `curl http://127.0.0.1:8001/health` or the same path on your remote endpoint
- If the API returns temp `/v1/audio?path=...` URLs, the helper copies those files into the chosen output directory and writes a `manifest.json`
- Prefer `batch-size 1` for efficient prompt iteration; raise it only when the user explicitly wants variants

