| 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.
|
Strudel Maestro — Process-Oriented Pattern Generation
This skill teaches you the process of creating Strudel patterns,
not a library of templates. Learn to fish, don't memorize fish.
Core Principle
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
Phase 1: UNDERSTAND — What Strudel Needs
What is Strudel?
Strudel is a browser-based music pattern language (TidalCycles port to JavaScript).
- Patterns describe cycles (1 cycle = 1 bar by default)
- Everything is a pattern: notes, sounds, effects, timing
- Patterns compose via
stack() (simultaneous) and seq() (sequential)
How It Works in Our DAW
- Each track has a Strudel code editor
evaluateStrudelCode(trackId, code) runs the pattern
- Audio via Superdough (built-in synths + sample banks)
- BPM synced to DAW transport
- Convertible to MIDI:
strudelEventsToMidiNotes()
- MIDI importable:
midiToStrudelCode(notes, options)
Minimum Syntax to Start
note("c4 e4 g4")
s("bd sd hh").bank("RolandTR808")
stack(melody, bass, drums)
note("c4 [d4 e4] f4 g4")
note("c4@2 e4 g4")
note("c4 ~ e4 ~")
note("[c3,e3,g3]")
.velocity("0.7 0.5 0.8")
.s("piano")
.lpf(800).room(0.3)
That's enough to start. Look up advanced features as needed.
Phase 2: FIND — Researching Strudel Patterns
How to Find Examples
When you need a pattern you haven't written before:
-
Search the Strudel docs and examples:
- Search the web:
site:strudel.cc {technique or genre}
- Search the web:
strudel.cc workshop {topic}
- Search the web:
strudel music pattern example {what you need}
-
Search TidalCycles community (syntax is very similar):
- Search the web:
TidalCycles "{pattern type}" example
- Search the web:
tidalcycles.org tutorial {technique}
- TidalCycles patterns translate to Strudel with minor syntax changes
-
Search GitHub for real compositions:
- Search the web:
github strudel composition "{genre}"
- Search the web:
github tidalcycles live coding "{genre}"
-
Read the DAW's own Strudel integration for what's available:
src/engine/strudelEngine.ts — available functions
src/services/strudelConversion.ts — MIDI ↔ Strudel conversion
How to Adapt Found Examples
When you find a reference pattern:
- Identify the core technique — what makes it sound good?
- Extract the pattern structure — what's the rhythmic grid?
- Adapt to the target key/scale — transpose note names
- Adjust to target BPM — more/fewer subdivisions
- Modify to taste — change notes, add variation
When Syntax is Unclear
Don't guess syntax. Instead:
- Search the web:
strudel.cc documentation {function name}
- Search the web:
strudel "{function}" example usage
- Read:
src/engine/strudelEngine.ts for what's actually available
Phase 3: PROTOTYPE — Build Minimal First
The One-Layer-at-a-Time Rule
Never write a full multi-track pattern from scratch. Instead:
- Start with drums — get the groove right alone
- Add bass — make sure it locks with the kick
- Add chords — verify harmonic fit
- Add melody — last, because it sits on top of everything
Each layer should sound decent on its own before combining.
Prototyping Checklist
Before writing each layer, ask:
Pattern Length Convention
- 1 cycle = 1 bar (Strudel default)
- For a 4-bar loop: write 1 bar of pattern (it cycles)
- For variation across bars: use
seq() or cat() for multi-bar phrases
- For slow chords: use
@ to extend notes across beats
Phase 4: LAYER — Building Up
Layering Structure
stack(
stack(
s("...").bank("..."),
s("...").bank("..."),
s("...").bank("...")
),
note("...").s("...").lpf(...),
note("...").s("...").velocity(...),
note("...").s("...").velocity(...)
)
Layer-Specific Guidelines
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).
Phase 5: REFINE — Making It Musical
Humanization Techniques
.velocity("0.7 0.55 0.8 0.6")
s("hh [~ hh] hh [~ hh]").velocity("0.4 0.15 0.45 0.15")
.lpf("400 600 800 600")
.room(0.3).delay(0.15)
Common Refinements
| 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 |
When to Stop
A pattern is done when:
- Each layer contributes something distinct
- There's rhythmic interplay (not everything on the same beats)
- There's dynamic range (soft and loud moments)
- Removing any element would leave a gap
- It serves the user's described intent
Anti-Patterns (What NOT to Do)
- Don't dump 8 genre templates — research the specific genre needed
- Don't write 50+ lines of Strudel — keep patterns concise (10-25 lines typical)
- Don't use syntax you haven't verified — search docs first
- Don't use
# for sharps — Strudel uses s: cs4 not c#4
- Don't make all layers equally loud — drums and melody louder, pads quieter
- Don't skip rests — space is what makes music breathe
- Don't generate all layers at once — build iteratively, one layer at a time
Error Handling
If evaluateStrudelCode() fails:
- Read the error message from the Strudel engine (
lastError in strudelEngine.ts)
- Common causes: misspelled note names, missing
.s(), invalid function call
- Fix the syntax error and re-evaluate
- If the error is unclear, search the web:
strudel error "{error message}"
Related Skills
- music-theory-engine — How to research genre theory, analyze references, extract composition principles
- compose — Full song composition workflow that orchestrates this skill and music-theory-engine