Audio deconstruction and composition via Strudel live-coding. Decompose any audio into stems, extract samples, compose with the vocabulary, render offline to WAV/MP3.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Audio deconstruction and composition via Strudel live-coding. Decompose any audio into stems, extract samples, compose with the vocabulary, render offline to WAV/MP3.
{"openclaw":{"emoji":"🎵","requires":{"bins":"[Truncated]","anyBins":"[Truncated]","node":">=20"},"envVars":[],"install":["[Truncated]","[Truncated]","[Truncated]"],"securityNotes":"Compositions are JavaScript files evaluated by Node.js. They CAN access the filesystem, environment variables, and network. Only run compositions you trust or have reviewed. For untrusted compositions, run in a container or VM with no credentials in the environment.\nDiscord integration (VC streaming, message posting) uses the OpenClaw gateway's existing authenticated connection — this skill does NOT require its own bot token or Discord credentials. No separate authentication is needed.\nThe optional Python pipeline (Demucs, librosa) downloads ML models on first run (~1.5GB for htdemucs). These come from official PyTorch/Facebook sources.\n"}}
⚠️ Legal Notice: This tool processes audio you provide. You are responsible for ensuring you have the rights to use the source material. The authors make no claims about fair use, copyright, or derivative works regarding your use of this tool with copyrighted material.
Strudel Music 🎵
Compose, render, deconstruct, and remix music using code. Takes natural language prompts → writes Strudel patterns → renders offline through real Web Audio synthesis → posts audio or streams to Discord VC (via the OpenClaw gateway — no separate credentials needed). Can also reverse-engineer any audio track into stems, samples, and generative programs.
Rendering MUST run as a sub-agent or background process, never inline in your main session.
The offline renderer (chunked-render.mjs / offline-render-v2.mjs) runs a tight audio-processing loop that blocks the Node.js event loop. If you run it in your main OpenClaw session, it will kill the gateway after ~30 seconds (the heartbeat timeout).
✅ Correct: spawn a sub-agent or use background exec
❌ Wrong: run the renderer inline in your main conversation
Your own packs: Export from any DAW (Ableton, FL Studio, M8 tracker, etc.) as WAV directories. Strudel doesn't care where they came from — it's just WAV files in folders.
Named banks (Strudel built-in, requires CDN access):
Then wsl --shutdown and relaunch. Without this, WSL2's NAT breaks Discord's UDP voice protocol — the bot joins the channel but no audio flows because IP discovery packets can't traverse the NAT return path. Mirrored mode eliminates the NAT by putting WSL2 directly on the host's network stack.
This only affects VC streaming. Offline rendering and file posting work in any networking mode.
Platform Requirements
Two tiers, depending on what you need:
Compose & Render (JS-only)
Node.js 18+ (22+ recommended for stable OfflineAudioContext)
ffmpeg (MP3/Opus conversion)
Works everywhere — x86_64, ARM64, WSL2, bare metal, containers.
~2GB disk for PyTorch + Demucs model weights (downloaded on first run)
Optional: NVIDIA GPU + CUDA toolkit for ~5× Demucs speedup
Install the Demucs CLI:
uv tool install demucs # installs demucs + all Python deps in an isolated environment
If uv isn't available: pip install demucs also works (requires Python ≥3.10).
If Python deps are missing, composition and rendering still work — you just can't do stem extraction. The skill should fail gracefully with a message, not a stack trace.
Full Pipeline (Audio Deconstruction)
If you have an MP3 and want to extract instruments from it, build sample racks, and compose with the extracted material — that's the full pipeline. It goes:
This is a 4–8 minute process for a typical track. See docs/pipeline.md for the complete stage-by-stage breakdown with commands, timings, and resource requirements.
Total (4-min track, CPU): 4–8 minutes. Compose + render only (no Demucs): 2–3 minutes.
⚠️ Session Safety — READ THIS
The full pipeline takes 4–8 minutes. Composition + render alone takes 2–3 minutes.
DO NOT run this inline in a Discord channel interaction or primary OpenClaw session.
The 30-second response timeout will kill the process mid-render. There is no supervisor to recover. The skill will appear broken — silence, no output, no error message.
How to run safely
From an OpenClaw agent (correct):
sessions_spawn({
task: "Render strudel composition: /strudel dark ambient tension, 65bpm",
mode: "run",
runTimeoutSeconds: 600// 10 minutes — generous for full pipeline
})
What to tell the user: "Rendering takes a few minutes — I'll post the audio when it's ready." Don't leave them hanging with no feedback.
What NOT to do
// WRONG — will timeout after 30s in Discord contextexec({ command: "bash scripts/dispatch.sh render ..." })
// WRONG — blocking the main session for minutes// (anything inline that takes >30s)
Start with composition-guide.md if you're writing patterns. The space-separated vs angle-bracket distinction is the #1 source of bugs (gain explosions, distortion, memory crashes). The guide covers it with real case studies.
How It Works
The offline renderer uses node-web-audio-api (Rust-based Web Audio for Node.js) for real audio synthesis:
Note on mini notation: The renderer explicitly calls setStringParser(mini.mini) after import because Strudel's npm dist bundles duplicate the Pattern class across modules. Same class of bug as openclaw#22790.
Full tree: references/mood-parameters.md. Production techniques: references/production-techniques.md.
⚠️ Critical Pitfall: Gain Patterns
Use <> (slowcat) for sequential values, NOT spaces:
// ❌ WRONG — all values play simultaneously, causes clippings("kick").gain("0.3 0.3 0.5 0.3")
// ✅ RIGHT — one value per cycles("kick").gain("<0.3 0.3 0.5 0.3>")
Uses node-web-audio-api (Rust-based Web Audio for Node.js). No browser, no Puppeteer.
The renderer calls setStringParser(mini.mini) after import because Strudel's npm dist bundles duplicate the Pattern class across modules — the mini notation parser registers on a different copy than the one used by note() and s().
All synthesis is local and offline via OfflineAudioContext: oscillators, biquad filters, ADSR envelopes, AudioBufferSourceNode for samples, dynamics compression, stereo panning. Output: 16-bit stereo WAV at 44.1kHz.
Known Platform Issues
Platform
Issue
Workaround
ARM64 (all)
PyTorch CPU-only, no CUDA
Expected — Demucs runs ~0.25× realtime
ARM64 (all)
torchaudio.save() fails
Patch demucs/audio.py to use soundfile.write() (see First-Time Setup)
Strudel compositions are JavaScript files executed by Node.js. They have the same access as any Node.js script:
Filesystem: read/write access to the working directory
Environment: can read environment variables
Network: can make HTTP requests
For untrusted compositions:
Run in a container or VM with no sensitive credentials in the environment
Use OpenClaw's sub-agent isolation (each sub-agent gets its own process)
Review composition code before rendering
For your own compositions: No special precautions needed — you wrote the code.
This is the same trust model as any programming language skill. The renderer itself is safe; the risk is in what compositions you choose to run.
Discord Integration
This skill uses OpenClaw's built-in Discord voice channel support for streaming. No separate BOT_TOKEN, DISCORD_TOKEN, or any Discord credentials are required. OpenClaw handles all Discord authentication and connection management. The skill simply produces audio files and hands them to OpenClaw's voice subsystem.
npm install safety
package.json contains no postinstall, preinstall, or lifecycle hooks. npm run setup runs npm install + scripts/download-samples.sh (downloads CC0 sample packs from known URLs).
What scripts/download-samples.sh fetches
The download script sparse-clones tidalcycles/Dirt-Samples from GitHub (CC-licensed) — specifically these directories: bd sd hh oh cp cr ride rim mt lt ht cb 808bd 808sd 808hc 808oh. This fetches ~153 WAV files (~11MB total). The script is idempotent (skips if samples already exist).
What scripts/samples-manage.sh does
The sample manager downloads additional packs from user-specified URLs with safety controls:
Size limit: configurable via STRUDEL_MAX_DOWNLOAD_MB (default: 10GB)
Only one render should be active per session at a time. If a user requests /strudel clone while a previous render is in progress:
Check for active sub-agents using subagents(action=list)
If a strudel render is running, respond: "🎵 A render is already in progress. Please wait for it to complete."
Do not dispatch a second render — disk and memory contention can cause artifacts or failures.
Why: Concurrent renders with default output paths both write to output.wav, causing the second to overwrite the first. Even with explicit paths, two simultaneous OfflineAudioContext processes double memory usage. Sample loading is per-process (no shared cache), so there's no corruption risk — but disk I/O contention on the output write is real.