con un clic
strudel-maestro
// Process-oriented Strudel pattern generation skill for ACE-Step-DAW. Teaches Claude how to research Strudel techniques, find examples, and generate patterns through a principled workflow — not by memorizing templates.
// Process-oriented Strudel pattern generation skill for ACE-Step-DAW. Teaches Claude how to research Strudel techniques, find examples, and generate patterns through a principled workflow — not by memorizing templates.
Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.
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.
Process-oriented music theory skill for AI-assisted composition in ACE-Step-DAW. Instead of dumping all theory upfront, this skill teaches Claude HOW to research, analyze, and apply music theory for a specific composition task. Invoke when composing, arranging, or analyzing music.
| name | strudel-maestro |
| version | 2.0.0 |
| description | Process-oriented Strudel pattern generation skill for ACE-Step-DAW. Teaches Claude how to research Strudel techniques, find examples, and generate patterns through a principled workflow — not by memorizing templates. |
This skill teaches you the process of creating Strudel patterns, not a library of templates. Learn to fish, don't memorize fish.
Don't generate patterns from memory — research, prototype, refine.
1. UNDERSTAND → What does Strudel need to express this music?
2. FIND → Search for similar Strudel patterns or TidalCycles examples
3. PROTOTYPE → Write minimal pattern, test one layer at a time
4. LAYER → Build up: drums → bass → chords → melody
5. REFINE → Add dynamics, effects, humanization
Strudel is a browser-based music pattern language (TidalCycles port to JavaScript).
stack() (simultaneous) and seq() (sequential)evaluateStrudelCode(trackId, code) runs the patternstrudelEventsToMidiNotes()midiToStrudelCode(notes, options)// Notes (sharps=s, flats=b): c4 cs4 db4 d4 eb4 e4 f4 fs4 g4 ab4 a4 bb4 b4
note("c4 e4 g4") // melody
s("bd sd hh").bank("RolandTR808") // drums
stack(melody, bass, drums) // layer parts
note("c4 [d4 e4] f4 g4") // [x y] = subdivide one beat
note("c4@2 e4 g4") // @2 = hold 2 beats
note("c4 ~ e4 ~") // ~ = rest
note("[c3,e3,g3]") // comma = chord (simultaneous)
.velocity("0.7 0.5 0.8") // dynamics
.s("piano") // sound source
.lpf(800).room(0.3) // effects
That's enough to start. Look up advanced features as needed.
When you need a pattern you haven't written before:
Search the Strudel docs and examples:
site:strudel.cc {technique or genre}strudel.cc workshop {topic}strudel music pattern example {what you need}Search TidalCycles community (syntax is very similar):
TidalCycles "{pattern type}" exampletidalcycles.org tutorial {technique}Search GitHub for real compositions:
github strudel composition "{genre}"github tidalcycles live coding "{genre}"Read the DAW's own Strudel integration for what's available:
src/engine/strudelEngine.ts — available functionssrc/services/strudelConversion.ts — MIDI ↔ Strudel conversionWhen you find a reference pattern:
Don't guess syntax. Instead:
strudel.cc documentation {function name}strudel "{function}" example usagesrc/engine/strudelEngine.ts for what's actually availableNever write a full multi-track pattern from scratch. Instead:
Each layer should sound decent on its own before combining.
Before writing each layer, ask:
.s() or .bank())seq() or cat() for multi-bar phrases@ to extend notes across beatsstack(
// Layer 1: Drums (rhythmic foundation)
stack(
s("...").bank("..."), // kick
s("...").bank("..."), // snare
s("...").bank("...") // hi-hat
),
// Layer 2: Bass (harmonic + rhythmic anchor)
note("...").s("...").lpf(...),
// Layer 3: Chords (harmonic body)
note("...").s("...").velocity(...),
// Layer 4: Melody (top voice)
note("...").s("...").velocity(...)
)
Drums: Separate kick/snare/hh into individual lines for clarity.
Bass: Keep in octave 1-2. Always specify .lpf() (bass shouldn't have bright harmonics).
Chords: Use [note,note,note] for simultaneous voicings. Keep velocity lower than melody.
Melody: Highest register. Most velocity variation. Most rests (space = musicality).
// Velocity variation (most important)
.velocity("0.7 0.55 0.8 0.6") // NOT .velocity(0.7) everywhere
// Subtle timing feel (ghost notes for drums)
s("hh [~ hh] hh [~ hh]").velocity("0.4 0.15 0.45 0.15")
// Filter movement (adds life to synths)
.lpf("400 600 800 600") // filter sweep across beats
// Reverb/delay for space
.room(0.3).delay(0.15) // subtle, not too wet
| Problem | Fix |
|---|---|
| Sounds robotic | Add velocity variation per note |
| Too busy | Remove notes, add rests (~) |
| Too thin | Add octave doubling or chord extensions |
| Boring | Add .every(4, x => x.rev()) or similar transformation |
| Harsh | Add .lpf() to tame high frequencies |
| No groove | Check kick/bass alignment; add ghost notes |
| Too static | Use filter sweeps or seq() for multi-bar variation |
A pattern is done when:
# for sharps — Strudel uses s: cs4 not c#4If evaluateStrudelCode() fails:
lastError in strudelEngine.ts).s(), invalid function callstrudel error "{error message}"