Widgets
Shift+F1 opens a dock of widgets beside the score. Add a scope, a spectrum, a vectorscope, or the event list. Press a to add one. The pictures move with the music.
rustel is a native engine for the Strudel pattern language. Write in Studio, or keep your own editor. MIDI, OSC, serial, webcam, and gamepad are built in. One binary. No browser. No server.
Already on strudel.cc? Bring your patterns here. Almost everything from Strudel works. The compatibility docs list the few missing or inactive features.
curl -L https://rustel.cc/install | bash && rustelup
Apple Silicon. Open a new terminal, then run rustel studio.
curl -L https://rustel.cc/install | bash && rustelup
x86_64. Open a new terminal, then run rustel studio.
irm https://rustel.cc/install.ps1 | iex
x86_64, in PowerShell. Open a new terminal, then run rustelup. Then run rustel studio.
rustelup installs into ~/.rustel/bin. On Windows that folder is %USERPROFILE%\.rustel\bin. Run rustelup again to refresh, or rustelup --version v0.3.0 to pin a build. To build from source, follow the readme.
rustel song.strudel --watch and edit in your favorite editor. Audio keeps running across saves. Or use the rustel-neovim plugin to drive the engine from Neovim.Shift+F1 opens a dock of widgets beside the score. Add a scope, a spectrum, a vectorscope, or the event list. Press a to add one. The pictures move with the music.
Ctrl+T opens the theme list. Arrow to a theme and press Enter. Themes can be customize and also supports hydra backgrounds.
The first successful update opens a tape beside the set. Each installed score is stored with its time. The tape keeps the score and the timing, not the audio. Open it from the set panel, or replay it from the shell.
$rustel replay tonight.rustel-session$rustel replay tonight.rustel-session --from 600
Add --from 600 to start ten minutes in. For sound on disk, record a take or export a bounce.
Ctrl+F, then Tab, opens the sample list. Right expands a bank. Space previews the sound. Enter copies the name into the score. Drop an audio file on the Studio window to import it.
Chords and scales are the next two tabs. Each row draws its notes on a keyboard. Right opens the row. Space plays the chord or the scale. The keys light while it sounds.
Ctrl+D opens the word under the caret. Ctrl+F browses the whole list. Type to search. Enter inserts the example.
_pianoroll(), _scope(), _spectrum(), _punchcard(), and the rest draw inside the score. The playhead moves with the clock.
The generator tab builds a part from a handful of sliders. Press c to copy the code, then paste it into the editor. The examples tab holds grooves, tracks, and Hydra sketches. Enter puts an example into the score.
F4 opens the mixer. The master and each orbit have a meter and a fader. Ctrl+Shift+Up and Ctrl+Shift+Down move the master.
Open Transport, then Add limiter to set. A brickwall sits on the master. The mixer strip sets the ceiling. Press c to cycle the character. Press b to bypass. .limit() in the score does the same job. The set keeps the limiter.
Ctrl+O opens settings. Playback, look, samples, controllers, and key bindings are in there. Tab changes page.
Studio checks the score as you write. A pause after typing stops, and a bad call is underlined. The header counts the problems. The footer names the first one, often with a suggestion.
Settings, then syntax check, picks the mode. full marks errors while you type. That is the default. on update marks them only when an update is refused. off leaves the editor unmarked. An update still refuses a bad score, and the footer and the log still say why.
Tab to Mapping on the settings sheet. Twelve slots sit in a grid. Enter on a slot, then move a MIDI knob, a fader, or a stick. That control drives the matching slider.
Ctrl+L learns a pad for the scene you are on. Hit the pad. That pad launches the scene, the way a Maschine Mk3 pad fires a sound. Launch on, at the top of Settings, chooses the line it waits for. Off means the scene starts now. Beat, cycle, or a phrase waits.
Rewind update is Ctrl+Shift+S. The scene plays from cycle zero. Ctrl+Shift+U keeps rewind on that scene, so every launch starts there.
Ctrl+E splits the editor. The other pane opens the next scene. With one scene in the set, Ctrl+E makes the second. F10 moves the caret across. You edit both.
Update the pane you want to hear. Ctrl+Enter and F5 both do that. The title marks the sounding scene. Hop to the other pane and update, and that scene takes the sound. Ctrl+E again closes the split. Both scenes stay in the set.
await initHydra(), then a chain that ends in .out(), draws behind the code. The picture follows the score. Visuals opacity in Settings sets the strength of the picture.
Shift+F11 records the master mix. The minimap stays on at the right edge. The header shows the running take. Press the chord again to finish. Studio writes a 24-bit WAV into the set.
The visuals dock sits across the top, with the set name in ASCII and the mixer orbits under it. Ctrl+Shift+X exports the focused scene. Choose a length in cycles, or run until the sound falls quiet. Pick wav or mp3. The limiter can ride along. Enter writes the file.
Transport, then Reveal last export or take, opens that file's folder. A take is the live master. Export renders the scene to a file.
Ctrl+H records from your microphone or voice. Press it again to finish. The take lands in the recordings bank, ready to use right away. Ctrl+J pastes the name into the score. Chop that line, then update, and the slice plays.
Ctrl+J on a number offers to make a slider. After you update, the fader sits in the score. Every slider in the score also shows up on the mixer, so you can reach them without scrolling the score.
Run the engine from a shell. Watch a file. Bounce a render. Query a cycle. Open Studio.
# play and reload on each stable save $rustel song.strudel --watch# bounce a render $rustel render song.strudel -o take.wav --format scalar-wav --duration 60# check a score without sound $rustel check song.strudel# replay a jam from its session tape $rustel replay tonight.rustel-session# list audio and MIDI devices $rustel devices# print one cycle as JSON $rustel query -e 'note("c e g").s("piano")' --json# install shell completion $rustel completions --install# open Studio on your last set (creates one on first use) $rustel studio# open a score file (starter score if the path is new) $rustel studio song.strudel# open a set folder $rustel studio set/
The rustel-neovim plugin plays the buffer you have open. Syntax colors the score. Active notes light up as they sound. Scope, piano roll, spectrum, and spiral draw in the buffer.
Neovim 0.9 or newer, and rustel on your PATH. Ctrl+Enter updates. Ctrl+. stops
Rust schedules patterns and runs DSP. Sandboxed QuickJS evaluates Strudel JavaScript. Ratatui draws Studio. DSP kernels pick SIMD paths from your CPU for low CPU and memory use. rustel doctor and Studio's About panel show the active kernels.
Ctrl+Enter updates. Ctrl+. stops. Same chords as strudel.cc. If your terminal blocks those, use Ctrl+S / F5 and Ctrl+G / F8. Open Settings → Keybinds to view or change bindings. On macOS use Control. Command works only when the terminal forwards Command.The Studio guide covers terminal profiles, keyboard fallbacks, and graphics modes.