compose

star 62

Process-oriented full-song composition workflow for ACE-Step-DAW. Guides Claude through a principled research-first composition process: research genre → analyze references → extract principles → compose → evaluate. Invoke with /compose followed by a description of the desired song.

ace-step By ace-step schedule Updated 3/30/2026

name: compose version: 2.0.0 description: | Process-oriented full-song composition workflow for ACE-Step-DAW. Guides Claude through a principled research-first composition process: research genre → analyze references → extract principles → compose → evaluate. Invoke with /compose followed by a description of the desired song.

Compose — Research-First Composition Workflow

/compose <description> Example: /compose a chill lo-fi beat inspired by Nujabes


Core Principle

Compose like a musician, not a template engine.

A musician doesn't have all chord progressions memorized. They:

  1. Listen to references in the target style
  2. Analyze what makes those references work
  3. Extract a few key principles
  4. Create something new guided by those principles
  5. Iterate until it feels right

This skill follows the same process.


The Composition Process

Step 0: Parse the User's Intent

Extract from their description:

  • Genre/Style — the most important signal
  • Reference artists/songs — if mentioned, these are gold
  • Mood/Energy — calm, energetic, dark, uplifting, nostalgic
  • Key — if specified; otherwise, research what's common
  • BPM — if specified; otherwise, research genre defaults
  • Special constraints — "no drums", "piano only", "with strings"
  • Duration — how many bars or minutes

If the description is vague, ask the user to clarify before proceeding. Don't assume — a wrong assumption wastes a full generation cycle.

Step 1: RESEARCH the Genre/Style

This step is mandatory. Do not skip it.

Use music-theory-engine's Phase 1 research process:

  1. Search for genre analysis:

    • Search the web: "{genre}" music theory analysis chord progressions
    • Search the web: "{genre}" song structure typical arrangement
    • Search the web: "{genre}" production techniques rhythm patterns
  2. If user named a reference song/artist:

    • Search the web: "{song/artist}" chord progression key BPM
    • Search the web: "{song/artist}" song analysis music theory
    • This is the highest-value research — the user is telling you exactly what they want
  3. Search for Strudel/TidalCycles examples in the genre:

    • Search the web: strudel "{genre}" pattern example
    • Search the web: TidalCycles "{genre}" live coding
    • Finding a working pattern in the target style saves significant effort
  4. Check the DAW's built-in presets for defaults:

    • Read src/constants/generationPresets.ts for genre BPM/key suggestions

Step 2: ANALYZE and Extract Principles

From your research, distill 2-4 principles (default: 3; see music-theory-engine Phase 3):

Principle 1: [Harmonic character] — what chords, what voicing style
Principle 2: [Rhythmic character] — what drum pattern, what feel
Principle 3: [Textural character] — what instruments, what space/density

Step 3: Write a Composition Brief

Before writing any code, present the plan to the user:

## Composition Brief

Genre: Lo-Fi Hip-Hop
Reference: Nujabes "Feather"
Key: D Dorian
BPM: 78

Principle 1: Jazz-rooted harmony — Dm9, Gm7, Em7b5, A7b9 (i-iv-iiø-V7 in D minor); 7th+ voicings
Principle 2: Boom-bap foundation — lazy kick, ghost snares, soft hi-hats
Principle 3: Warm sparse texture — Rhodes keys, sub bass, pentatonic lead with delay

Song Structure:
  Intro:  4 bars (ambient, filtered)
  Loop A: 8 bars (main groove)
  Loop B: 8 bars (variation — add melody)
  Loop A: 8 bars (return)
  Outro:  4 bars (strip down)

Tracks:
  1. Drums (TR-808)
  2. Bass (sub synth)
  3. Keys (piano/rhodes)
  4. Melody (triangle wave + delay)

Wait for user approval before composing. The brief is cheap to change; a full composition is expensive to redo.

Step 4: COMPOSE — Build Layer by Layer

Follow strudel-maestro's Phase 3-4 process:

  1. Drums first — get the groove right
  2. Bass second — lock with kick pattern, follow chord roots
  3. Chords third — establish harmony, lower velocity than melody
  4. Melody last — sits on top, most expressive

For each layer:

  • Reference your 3 principles
  • Use the minimum Strudel syntax needed (see strudel-maestro Phase 1)
  • If you need syntax you're unsure about, search the docs first

Output format — Strudel stack():

stack(
  // Drums
  stack(
    s("...").bank("..."),   // kick
    s("...").bank("..."),   // snare
    s("...").bank("...")    // hi-hat
  ),
  // Bass
  note("...").s("...").lpf(...),
  // Chords
  note("...").s("...").velocity(...),
  // Melody
  note("...").s("...").velocity(...)
)

Step 5: EVALUATE Against Principles

After composing, verify:

  1. Principle 1 check — do the chords match the harmonic character I identified?
  2. Principle 2 check — does the rhythm feel right for the genre?
  3. Principle 3 check — is the texture/density what was intended?
  4. Key consistency — are ALL pitched parts in the same key?
  5. Velocity variation — no flat velocity anywhere?
  6. Musical space — are there enough rests?
  7. Syntax validity — sharps use s (not #), all .s() specified?

If anything fails, fix it before presenting to the user.

Step 6: Present and Iterate

Present the composition with:

  1. The Strudel code
  2. A brief explanation of musical choices ("used Dm9→Gm7 for the jazzy feel you wanted")
  3. Suggested modifications ("I could make the bass busier, add a counter-melody, change the drums to a half-time feel...")

Iteration is the norm, not the exception. Users will ask for changes. When they do:

  • Modify only the requested layer
  • Keep everything else consistent
  • Re-verify key/harmony consistency after changes

Handling Specific Requests

"Make it sound like [artist/song]"

This is the highest-value input. Research heavily:

  1. Search the web: "{song}" chord progression analysis
  2. Search the web: "{artist}" music production style analysis
  3. Extract the defining characteristics
  4. Apply them — but create something new, not a cover

"I don't know what I want"

Guide the user with questions:

  • "What mood? (happy/sad/energetic/chill/dark/dreamy)"
  • "Any genre preference? Or should I suggest based on mood?"
  • "Fast or slow?"
  • "Instrument preferences?"

Then use their answers to run the research process.

"Change the key / BPM / genre"

  • Key change: Transpose all note names by the interval
  • BPM change: May need to adjust note density (faster BPM = simpler patterns)
  • Genre change: Start the research process over — genre defines everything

"Add [specific instrument/part]"

  1. Research how that instrument typically functions in the genre
  2. Write the new layer respecting existing key/rhythm
  3. Add to the stack without modifying other layers

What This Skill Does NOT Include

  • Pre-built genre templates — research the genre each time instead
  • Complete chord progression databases — search for the right one each time
  • All Strudel API docs — look up what you need when you need it
  • Music theory encyclopedia — extract only the 3 principles you need

This is intentional. The process is more valuable than the data. The process adapts to any genre, any style, any reference. A template only works for the exact case it was written for.

Install via CLI
npx skills add https://github.com/ace-step/ACE-Step-DAW --skill compose
Repository Details
star Stars 62
call_split Forks 18
navigation Branch main
article Path SKILL.md
More from Creator