TRANSPORT
TRACKS
AI
ARRANGE
CREATE
SESSION
LOOP BUILDER
PRESETS
GETTING STARTED
QUICK START
1.Load a Preset from the dropdown, or click + AI TRACK
2.Press Cmd+Enter (or click Play) to hear a track
3.Edit the code -- changes happen live
4.Add more tracks with + TRACK or + AI
5.Use PRODUCER to chat with AI about your music
KEY CONCEPTS
TracksEach block is an independent instrument/sound
Live codingEdit code while it plays -- no stop needed
StrudelThe language that turns text into music
PatternsSequences of notes, drums, or effects
INTERFACE MODES
BEGINNERSimplified toolbar with essential controls
EXPERTFull toolbar with all features visible
PERFORMFullscreen mode for live performance
KEYBOARD SHORTCUTS
PLAYBACK
Cmd/Ctrl+EnterPlay focused block
Cmd/Ctrl+Shift+EnterPlay all blocks
Cmd/Ctrl+MMute focused block
SpaceToggle play/stop all
EscapeStop all
BackspacePANIC (kill all)
NAVIGATION
Cmd/Ctrl+UpPrevious block
Cmd/Ctrl+DownNext block
1-9Jump to block N
NAdd new block
DeleteRemove focused block
TEMPO
TTap tempo
[BPM -5
]BPM +5
PANELS
e / EEvolve subtle / moderate
PToggle patterns
SToggle sounds
HToggle this help
STRUDEL MINI-NOTATION
BASICS
spaceSequence: "bd sd hh"
~Rest: "bd ~ sd ~"
[x y]Group: "[bd sd] hh"
*nMultiply: "hh*8"
/nDivide: "[c d e]/2"
<x y>Alternate: "<bd sd>"
,Stack: "bd, hh*4"
ADVANCED
(k,n)Euclidean: "bd(3,8)"
:nSample #: "hh:2"
?Random: "hh*8?"
|Choice: "bd|sd"
@nElongate: "c@3 e"
!nReplicate: "c!3"
EFFECTS
.lpf(n)Low-pass filter
.hpf(n)High-pass filter
.delay(n)Delay send
.room(n)Reverb
.gain(n)Volume
.pan(n)Stereo 0-1
.shape(n)Distortion
.crush(n)Bitcrush
.speed(n)Playback speed
TRANSFORMS
.fast(n)Speed up
.slow(n)Slow down
.rev()Reverse
.jux(fn)Stereo split
.off(t,fn)Layer offset
.every(n,fn)Every N cycles
.chop(n)Granular
.slice(n,p)Slice + reorder
.struct(p)Apply rhythm
AI FEATURES
PRODUCER
PRODUCERChat with AI about your music. Ask for beats, melodies, genres.
Examples"make a deep house beat", "add strings in Bb minor"
ContextAI sees all your playing tracks and adapts
AI TRACK
+ AICreates a new track that harmonizes with playing tracks
EVOLVE
~ (subtle)Small variations to a playing track
+ (moderate)Noticeable changes while keeping the vibe
++ (dramatic)Major transformation of the pattern
PER-TRACK AI
AI... menuPer-track actions in the ... menu
ActionsEvolve, transpose, vary, genre-shift, add elements
ANALYZEUpload audio for AI to analyze and recreate
SOUND LIBRARY
PATTERNS
PATTERNS144 ready-to-use patterns across all categories
CategoriesDrums, bass, melody, chords, FX, ambient...
InsertClick any pattern to insert in focused track
BROWSE
BROWSESearch thousands of built-in samples
PreviewClick to hear, double-click to insert
LOOP BUILDER
LOOPVisual step sequencer for drums and melodies
ModesDrum grid or piano roll
ApplyConverts visual pattern to Strudel code
CUSTOM SAMPLES
UPLOADUpload WAV, MP3, OGG, FLAC, AIF files
CHOPUpload audio, trim, and chop into slices
AUDIO FILES & SAMPLE PACKS
SUPPORTED FORMATS
Audio.wav, .mp3, .ogg, .flac, .aif, .aiff
Max size~50 MB per file (Cloud Run limit)
Multi-uploadSelect multiple files at once in IMPORT
HOW TO USE ANY AUDIO FILE (STEP-BY-STEP)
1. DownloadGet any .wav/.mp3/.ogg file from anywhere (Splice, LANDR, Looperman, your own recordings, etc.)
2. IMPORTClick IMPORT button → "Add Samples" → select your files
3. Auto-loadFiles are uploaded to /samples/ and registered with Strudel automatically
4. Use in codeType
s("filename_without_extension") in a blockExampleUploaded "techno_kick.wav" → use
s("techno_kick") in your patternFROM SPLICE / LANDR / LOOPERMAN
BROWSE → PACKSShows deep-link search for external platforms
SplicePaid (~$10/mo). Click SEARCH → opens splice.com with your query
LoopermanFree with account. Click SEARCH → opens looperman.com
LANDR SamplesPaid. Click SEARCH → opens samples.landr.com
Why deep links?These services have no public API — we open their site, you download .wav files, then IMPORT them back
FREESOUND (DIRECT INTEGRATION)
BROWSEAll the "Vocal Chops", "Vocal Loops", etc. tabs load live from Freesound
Search barType anything at the top — "duduk", "rain", "808 kick" — loads via Shabda
No downloadSamples are cached and ready to use immediately — no upload step needed
In code
s("duduk").gain(0.4) works the moment you load the samplesTIPS FOR SAMPLE NAMING
Underscore OK
s("my_kick") — underscores work fineNo spacesRename "my kick.wav" to "my_kick.wav" before uploading
Multi-variantsFiles like kick1.wav, kick2.wav → use
s("kick:0 kick:1")FoldersSubfolders become sample banks automatically
CHOP AUDIO (SLICE A LONG FILE)
CHOPUpload a long sample, visually trim + auto-detect segments
Auto-chopFinds onsets/transients and slices automatically
Fixed sizeOr slice every N seconds
ResultEach slice becomes a separate sample you can use with s("name_001"), s("name_002")...
VOCAL SAMPLER (PRODUCER → VOCALS)
Upload trackAny audio file (song, acapella, stem)
Auto-extractAI separates vocals (Demucs) + splits into phrases by silence
TranscribeOptional Whisper transcription for phrase labels
One-click useClick a phrase → inserts
s("phrase_name").cut(1) into focused blockVOCAL GENERATOR (PRODUCER → VOCALS → GENERATE)
Type textAny phrase or lyric
BarkExpressive — speaking, singing ♪, whispering, shouting
XTTS-v2Clean multilingual (en/fr/es/de/it/pt/ja/zh)
ResultGenerated WAV becomes a normal Strudel sample you can pitch/chop/loop
RECORDING & EXPORT
AUDIO RECORDING
RECRecord audio output as WebM + MP3
Click onceStart recording (red indicator appears)
Click againStop and download the file
SESSION RECORDING
SESSIONRecord all code changes and actions
ReplayPlay back your entire session step by step
PRESETS
SAVESave current tracks as a named preset
MANAGEView, load, or delete saved presets
SECTIONSSave song sections for live switching