agentsclimarketplace

Strudel

Skill ahgraber/skills/skills/strudel

Use when writing, debugging, or explaining Strudel live-coding music patterns — mini-notation syntax, pattern functions (fast/slow/every/off/stack), synth/sample selection, audio effects, scale/chord/voicing API, or EDM production recipes. Triggers: "write a Strudel pattern", "how do I make a bassline in Strudel", "what does .every() do", "strudel drum beat", "strudel chord voicing", any Strudel code question.From its SKILL.md

Install
npx -y skills add ahgraber/skills --skill strudel

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.8 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

Strudel

Reference skill for programming music with Strudel — a JavaScript live-coding environment based on TidalCycles patterns, running in-browser.

Core Concepts

Cycle — the fundamental time unit (~2 seconds at the default 30 cpm). All events fit within cycles; adding events makes each shorter, not the total longer. One cycle = one bar of 4/4 at the default tempo.

Pattern — a pure function from time to events. Everything is a pattern. Transforming a pattern wraps it; the original is unchanged.

Mini-notation — a DSL written inside "double quotes" (single-line) or `backticks` (multi-line). Single quotes '...' are plain JS strings and are NOT parsed as patterns.

Chaining — methods chain left-to-right: note("c e g").s("piano").lpf(800).room(0.4).

$: tracks — the REPL syntax for parallel patterns. Each $: line is an independent stream. _$: mutes a track. Outside the REPL, use stack(...).

Quick Start

// First sound
s("bd sd hh cp")

// First note
note("c3 e3 g3 a3").s("piano")

// Stack drum + melody
stack(
  s("bd*4, ~ cp ~ cp, hh*8"),
  note("<c3 eb3 g3 bb3>/4").s("piano").room(0.4)
)

// Set BPM (default = 120 BPM in 4/4)
setcpm(120 / 4)   // cycles per minute = BPM ÷ beats-per-cycle

BPM Quick Reference

setcpm(120 / 4)   // 120 BPM, 4/4
setcpm(128 / 4)   // house
setcpm(135 / 4)   // techno
setcpm(174 / 4)   // drum and bass
setCps(140/60/4)  // cycles-per-second form

Keyboard Shortcuts (REPL)

KeyAction
Ctrl+EnterEvaluate / update pattern
Ctrl+.Stop all patterns

Reference Files

Pull these when you need detail:

FileContents
references/mini-notation.mdComplete DSL syntax — all operators, euclidean, alternation, polyrhythm
references/pattern-functions.mdAll pattern combinators — time, conditional, random, accumulation, signals, stepwise
references/sound-sources.mdSynths, drum banks, GM samples, FM synthesis, samples loading, MIDI/OSC
references/audio-effects.mdFull effects chain — filters, ADSR, envelopes, delay, reverb, phaser, distortion, sidechain
references/tonal.mdScale/chord/voicing API, transposition, xenharmonic
references/recipes.mdProduction idioms — beats, bass, arpeggios, chord progressions, house/techno/D&B/trap
references/visual-feedback.mdVisualizers (pianoroll, scope, spectrum, spiral) — what each shows and when to suggest them

Workflow

  1. Start with sound — identify what you're building (drum beat, melody, chord progression, full track).
  2. Reach for the right reference — use the table above. Most questions hit mini-notation or pattern-functions.
  3. Layer with stack() — combine independent streams.
  4. Automate with signals — use sine, rand, perlin for LFOs and continuous modulation.
  5. Add structure — use every, sometimes, chunk, arrange for variation over time.
  6. Add visualizers, especially in educational contexts — default to pianoroll(), scope(), or spectrum() when explaining or teaching. See references/visual-feedback.md for when each applies.

Common Gotchas

  • Mini-notation only parses inside "..." or `...` — not '...'.
  • Adding more events to a pattern makes each event shorter, not the cycle longer.
  • <a b c> alternates one element per cycle (3 cycles to complete) — the whole pattern isn't faster.
  • delay feedback ≥ 1 creates an infinite loop; keep it < 1.
  • Reverb roomsize is expensive to change while running; set it once.
  • .orbit(n) — each orbit has its own shared delay/reverb bus. Default orbit = 1.

What ships with it: 7 files

74.2 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,758. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.