Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "get-strudel-guide"
⟨25 unchanged words⟩ ,"signal-corruption","weather-machine","two-decks","trade-a-beat","still-water","lullaby"],"type":"string"},"topic":{ ⟨84 unchanged words⟩
Changed the definition of "get-strudel-guide"
⟨25 unchanged words⟩ ,"signal-corruption","weather-machine","two-decks","trade-a-beat","still-water","lullaby"],"type":"string"},"topic":{ ⟨84 unchanged words⟩
Changed the definition of "create-share-link", "get-music-guide", "get-session" and 4 more
⟨48 unchanged words⟩ refreshes its expiry. Playback does not require thistool.tool, and a play result's '▶ Play in browser' link already opens the piece for anyone when it fit in the link; this tool gives a short stored link. Provide kind 'score' with score, or kind ⟨9 unchanged words⟩
⟨8 unchanged words⟩ ,"type":"string"},"pattern":{"properties":{"autoplay":{"description":"Start playing immediately (default:Thetrue).argumentsMayyou
Changed the definition of "create-share-link", "get-music-guide", "get-session" and 4 more
⟨48 unchanged words⟩ refreshes its expiry. Playback does not require thistool.tool, and a play result's '▶ Play in browser' link already opens the piece for anyone when it fit in the link; this tool gives a short stored link. Provide kind 'score' with score, or kind ⟨9 unchanged words⟩
⟨8 unchanged words⟩ ,"type":"string"},"pattern":{"properties":{"autoplay":{"description":"Start playing immediately (default:Thetrue).argumentsMayyou
Changed the definition of "get-session", "get-strudel-guide" and "update-session"
⟨38 unchanged words⟩ read — taps (cycle and position), changes to the piece's remember() state (with its current values), code they edited and ran, and when they ⟨72 unchanged words⟩
⟨24 unchanged words⟩ ,"lossy-terminal","signal-corruption","weather-machine","two-decks","trade-a-beat"],"type":"string"},"topic":{ ⟨68 unchanged words⟩
Changed the definition of "get-session", "get-strudel-guide" and "update-session"
⟨38 unchanged words⟩ read — taps (cycle and position), changes to the piece's remember() state (with its current values), code they edited and ran, and when they ⟨72 unchanged words⟩
⟨24 unchanged words⟩ ,"lossy-terminal","signal-corruption","weather-machine","two-decks","trade-a-beat"],"type":"string"},"topic":{ ⟨68 unchanged words⟩
Changed the definition of "get-session"
⟨97 unchanged words⟩ get-session(wait: 'pass'), answer, listen again. The listener can also End the session from the player; get-session then says so, and the player stops listening for updates.
Changed the definition of "get-session"
⟨97 unchanged words⟩ get-session(wait: 'pass'), answer, listen again. The listener can also End the session from the player; get-session then says so, and the player stops listening for updates.
Changed the definition of "get-session", "get-strudel-guide" and "play-live-pattern"
⟨64 unchanged words⟩ and when the user says it's your turn. With wait: 'pass' it LISTENS — holds until the listener presses Pass — so you can play a whole back-to-back set in one turn: update-session, get-session(wait: 'pass'), answer, listen again.
⟨18 unchanged words⟩ a-z2-7]{16}$","type":"string"},"wait":{"description":"Listen instead of just reading: 'pass' holds until the listener presses Pass, 'activity' until they play (a few seconds after their first move). Returns at once if that already happened since your last read, and after ~40 s if not — call again to keep listening. Lets you stay in the booth for a whole set.","enum":["pass","activity"],"type":"string"}},"required":["session"],"type":"object"}
Added "get-session" and "update-session"; changed the definition of "create-share-link", "get-strudel-guide" and "play-live-pattern" (8 tools before, 10 now)
⟨119 unchanged words⟩ "maxLength":65536,"type":"string"},"session":{"description":"Open a LIVE SESSION: this player stays open as one performance. update-session swaps in new code on the next bar without a new player and says whether it ran; get-session reads the player's runtime reports and what the user did (taps, code edits, handing you the turn). Use it to iterate on a long piece, to check that a piece really played, or to jam back-to-back. Its log (reports, taps, edits, your updates) is kept on the server until 2 hours idle.","type":"boolean"},"theme":{"description":"Editor colour theme; the ⟨549 unchanged words⟩
⟨22 unchanged words⟩ ,"duet","petri-dish","lossy-terminal","signal-corruption"
Added "get-session" and "update-session"; changed the definition of "create-share-link", "get-strudel-guide" and "play-live-pattern" (8 tools before, 10 now)
⟨119 unchanged words⟩ "maxLength":65536,"type":"string"},"session":{"description":"Open a LIVE SESSION: this player stays open as one performance. update-session swaps in new code on the next bar without a new player and says whether it ran; get-session reads the player's runtime reports and what the user did (taps, code edits, handing you the turn). Use it to iterate on a long piece, to check that a piece really played, or to jam back-to-back. Its log (reports, taps, edits, your updates) is kept on the server until 2 hours idle.","type":"boolean"},"theme":{"description":"Editor colour theme; the ⟨549 unchanged words⟩
⟨22 unchanged words⟩ ,"duet","petri-dish","lossy-terminal","signal-corruption"
Changed the definition of "get-strudel-guide" and "play-live-pattern"
⟨74 unchanged words⟩ wavetables, ZZFX, continuous signals, chord voicings). Beyond music — pattern code is real browser JavaScript: stage (your own canvases into Hydra, an ASCII camera, cycle/onFrame/onEvent/onTap/say), film (music videos and short films: scenes on bars, typewriter text, letterbox, narration), interactive (taps become notes, call and response, a voice that speaks on the beat), craft (what makes a piece land), debugging (what the widget reports back), gallery (complete pieces — a short film, a spoken duet, a Game of Life composer; fetch one with `piece`).
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"piece":{"description":"With topic 'gallery': the complete code of one piece (the index lists them).","enum":["first-light","duet","petri-dish","lossy-terminal","signal-corruption"],"type":"string"},"topic":{"description":"Reference topic. Start with 'genres'
Changed the definition of "get-strudel-guide" and "play-live-pattern"
⟨74 unchanged words⟩ wavetables, ZZFX, continuous signals, chord voicings). Beyond music — pattern code is real browser JavaScript: stage (your own canvases into Hydra, an ASCII camera, cycle/onFrame/onEvent/onTap/say), film (music videos and short films: scenes on bars, typewriter text, letterbox, narration), interactive (taps become notes, call and response, a voice that speaks on the beat), craft (what makes a piece land), debugging (what the widget reports back), gallery (complete pieces — a short film, a spoken duet, a Game of Life composer; fetch one with `piece`).
{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"piece":{"description":"With topic 'gallery': the complete code of one piece (the index lists them).","enum":["first-light","duet","petri-dish","lossy-terminal","signal-corruption"],"type":"string"},"topic":{"description":"Reference topic. Start with 'genres'
Certificate recorded, valid to 2026-12-25
Authorization not required
First tool surface recorded: 8 tools (server version 0.6.0)
https://music-studio.linxule.com/mcp (mcp_streamable_http) — from mcp_registry
Added "create-share-link"; changed the definition of "analyze-harmony" (7 tools before, 8 now)
⟨117 unchanged words⟩ ":{"description":"What to work out.detect-chord/detect-keydetect-chordneedneeds notes; detect-key needs notes or chords; scale-for-chord needs chords; suggest-progression/key-chords need a key.","enum": ⟨11 unchanged words⟩
Create Music Share Link — Create a hosted music share link only when the user asks to share or store a piece online. Uploads the supplied score or pattern to MCP Music Studio for 30 days; anyone with the link can view and play it without signing in. Creating the same share again refreshes its expiry. Playback does not require this tool. Provide kind 'score' with score, or kind 'play' with pattern. Never include private information or secrets.
Certificate changed, valid to 2026-12-14
Certificate recorded, valid to 2026-10-16
Authorization not required
First tool surface recorded: 7 tools (server version 0.5.5)
Showing the latest 22 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
ReturnsReferencedetailedforreferenceABCmaterialsheetformusic.musicTopics:composition.genresTopics(complete templates: jazz, blues, folk, rock, bossa, a 3/4 minuet, a lullaby), styles (what each accompaniment preset does), instruments (GMinstrumentlist + combos), drums (patterns + percussion notes), abc-syntax (notation reference), arrangements (multi-voice patterns), genres (complete ABC templates for jazz/blues/folk/rock/bossa/classical), styles (what each style preset does), midi-directives (%%MIDI reference).
ReadOnly for a live sessionopened by play-live-pattern(play-live-pattern session: true):. Reads whether the player is up and what itis playingplayed, itsruntime reports (errors,silence, missing sounds, a callback thatandthrew)silences, and what the human did since your last read—: taps(cycle and position), changes tothe piece'sremember() state(with its current values), code theyedited andran,and when theyapassedPassthetoturnyou,tooryou.End. Read it before assuming a pieceplayed, and when the user says it's your turn.played. With wait: 'pass' itLISTENS — holdslistens until thelistenerhuman presses Pass—, soyou can playa wholeback-to-backback-and-forth set fits in one turn: update-session, get-session(wait: 'pass'), answer, listen again.The listener can also End the session from the player; get-session then says so, and the player stops listening for updates.
⟨25 unchanged words⟩ ":"Listen instead of just reading: 'pass'holdsuntil the listener presses Pass, 'activity' until theyplay (a few seconds after their first move).play. Returns at once if that already happened since your last read,andelse after ~40 sif not— call again to keep listening.Lets you stay in the booth for a whole set.","enum":["pass","activity"], ⟨6 unchanged words⟩
Referencematerialand recipes for Strudel livecodingcoding.(performanceMusic:mode).genresTopics(complete templates:mini-notationtechno,(patternhouse,syntaxdnb, ambient, jazz, lofi, synthwave), mini-notation, sounds (synths, 71 drum banks, 128 GM instruments,128vcslorchestral/percussionsamples), effects(filters,reverb, delay, FM synthesis, envelopes)patterns,patternstips (transformations, probabilitytempo,euclidean,commonarrangementmistakes),genresadvanced (complete templates: techno/house/dnb/ambient/jazz/lofi/synthwave)samples,tips (tempowavetables,common mistakessignals,ABC↔Strudelchordcrossovervoicings),. Visuals: visuals (pianoroll/scopedraw methods,the visualspresetsand the theme,parameterthemes), hydra (WebGLshader backgrounds: initHydra, H(pattern), the audio-reactive a.fftobject, recipes, cheat-sheet), advanced (sample loading, wavetables, ZZFX, continuous signals, chord voicings).BeyondOptionalmusicmodules —patternthe code is real browser JavaScript: stage (your own canvasesinto Hydra,an ASCII cameraonFrame/onEvent/onTap,cycle/onFrame/onEvent/onTap/saysay), film (music videos and short films:scenes on bars,typewritertext,letterbox,narration), interactive (tapsbecomeinto notes,call andfaders/pads/xy,responsetilt/mic,aremember()voiceforthatcontrolsspeaksyouondraw,thelivebeatsessions), craft (what makes a piece land), debugging (what thewidgetplayer reports back), gallery (completepieces — a short film, a spoken duet, a Game of Life composer;pieces; fetch one with `piece`).
⟨54 unchanged words⟩ 'advanced' for sample loading. For a music video,filmorinteractive piecefilm: 'craft',then'stage', 'film', then gallery piece 'first-light'. For taps, controls, a drawn grid or a jam: 'interactive' alone (take only the sections you need),andthenagalleryworkedpieceexample'weather-machine'fromor'gallery'.'trade-a-beat'.","enum":["mini-notation","sounds"," ⟨19 unchanged words⟩
Live-code musicpatternsinusingStrudel (TidalCycles mini-notation inJavaScript.JavaScript) and play it in a player the user can edit. Layer drums,synths,bass andbassmelody with stack(). Choose from: 71drum machinedrum-machine banks, 128 GM instruments,built-insynths,and a full effects chain.Patterns play in a REPL the user can edit directly.Add .pianoroll()to a pattern to showfor a livepiano-roll animation in thepianowidgetroll (or .punchcard()/.scope()/.spectrum()—, onedraw methodper pattern). For a custom animated background,startpassthe`visuals`codeforwitha`awaitready-madeinitHydra()`animation andwrite Hydra shader code — H(pattern) locks it`theme`tofor thesequence, and `() => a.fft[0]` makeseditoritcolours.reactEachtocallthecreatesaudioaitselfNEW(Strudel'splayer.outputOptional,notwhentheyoumic);wantseemore (get-strudel-guide topic'hydra'. Rather not hand-write one? `visuals` picks a ready-made animation for code that has none (pianoroll/punchcard/scope/spectrum, orinhydra-kaleid/pulse/wash/feedbrackets). `theme` sets the code-editor colour:scheme,shaderwhichbackgroundsalsothattintsfollow thevisualsmusic —match it tostartthewithmood`await initHydra(teletext chiptune)`,sonicPinklocksynthwave,tonordtheambient,beatgruvboxDarkwithlofiH(pattern).,Beyondreactmusic:to thecode is real browser JavaScriptsound—withcycle(),onFrame,=>onEvent(pattern,a.fft[0]fn('hydra'); canvases,onTapscenes andsay(text) (aspokenline as a sample)linesbuildfor music videos,short filmsandinteractivefilmspieces('stage',and fader('name''film')/;pad('name')taps,/faders,xy('name')padsputand controlsonyouthedraw,playerplayedthatby theuser performs (each is a pattern, e.g. .gain(fader('rain'))), anduser; tilt()/and mic(), which follow thedevice's motionphoneandonmicrophonethewherebrowserallowedplayer (played by hand whereanot);chat'sseeframetopicsusually'stage',blocks'film',them) ('interactive'and 'gallery'. Each call creates);acompleteNEWpiecesplayer.('gallery'). Tokeepjamonebackplayerandgoingforth,—oriteratingtoonchange a piece,or playing back-to-back with thewhileuserit—plays, pass session: true, thenchange it withuse update-session(it swaps on the next bar)andread what happened with get-session (runtime errors, the user's taps and edits). Use get-strudel-guide for genre templates, sound references, and advanced features like arrangement and sample loading.get-session. The Strudel REPL renders inline with an editable ⟨6 unchanged words⟩
⟨114 unchanged words⟩ :"string"},"session":{"description":"Open a LIVE SESSIONOptional: keep this playerstaysopen asoneaperformance.live session. update-sessionswapstheninswaps new code in on thenextbarwithout a new player, andsays whether it ran;get-sessionreads the player'sreportsruntimewhatreportsplayed and what the userdiddid.(taps,
ComposeWrite a score in ABC notation and play it as sheet music:withavisualmelody,notationa harmonized piece,multi-instrumentaaudiomulti-voice arrangement or a well-known tune,andonstyleanypresets.ofWritetheABC128notationGeneralforMIDImelodies,instruments.arrangements,Putharmonizedchordpieces,symbolsorabovewell-knownthetunes.notesAddand add a style (rock, jazz, bossa, waltz, folk...) forautomaticdrums, bass,andchordchords.accompaniment.TheReturnsuseracanparse-statuseditconfirmationtheandscorerendersin theplayer;player,itchangedoesitsnotstylereturnandrawinstrument,audio.andUsedownloadget-music-guideWAVfororgenreMIDI.templates,Theinstrumentresultlists,confirms the parse; it returns no audio. Start with get-music-guide topic 'genres'; 'abc-syntax' andABC'instruments'syntaxforreference.the rest. The music player renders inline with interactive playback controls.
SwapOnly for a live session. Swaps newpatterncode intoa livethe session's player— no new player,while the music keeps playing. Send the WHOLE pattern, asyou would tofor play-live-pattern. Ittakes overlandsaton the next bar (quantize 1, the default),atthe next multiple of ncyclesbars, or at once (0). Patterns run on the session's clock, so: set quantize to your phrase length (an8-bar phrase → 8).andIf theswap lands on its first bar.playerTheanswerscodewithinisasyntax-checkedfewfirst;seconds, the result says whetherthe player ranit,and its error if not, whenran theplayer answerscode,withinoraitsfewerror.seconds.ToEditchange a piece's remember() state,withship a merge, not a new start value (get-strudel-guide topic 'interactive').
ReturnsReferencedetailedforreferenceABCmaterialsheetformusic.musicTopics:composition.genresTopics(complete templates: jazz, blues, folk, rock, bossa, a 3/4 minuet, a lullaby), styles (what each accompaniment preset does), instruments (GMinstrumentlist + combos), drums (patterns + percussion notes), abc-syntax (notation reference), arrangements (multi-voice patterns), genres (complete ABC templates for jazz/blues/folk/rock/bossa/classical), styles (what each style preset does), midi-directives (%%MIDI reference).
ReadOnly for a live sessionopened by play-live-pattern(play-live-pattern session: true):. Reads whether the player is up and what itis playingplayed, itsruntime reports (errors,silence, missing sounds, a callback thatandthrew)silences, and what the human did since your last read—: taps(cycle and position), changes tothe piece'sremember() state(with its current values), code theyedited andran,and when theyapassedPassthetoturnyou,tooryou.End. Read it before assuming a pieceplayed, and when the user says it's your turn.played. With wait: 'pass' itLISTENS — holdslistens until thelistenerhuman presses Pass—, soyou can playa wholeback-to-backback-and-forth set fits in one turn: update-session, get-session(wait: 'pass'), answer, listen again.The listener can also End the session from the player; get-session then says so, and the player stops listening for updates.
⟨25 unchanged words⟩ ":"Listen instead of just reading: 'pass'holdsuntil the listener presses Pass, 'activity' until theyplay (a few seconds after their first move).play. Returns at once if that already happened since your last read,andelse after ~40 sif not— call again to keep listening.Lets you stay in the booth for a whole set.","enum":["pass","activity"], ⟨6 unchanged words⟩
Referencematerialand recipes for Strudel livecodingcoding.(performanceMusic:mode).genresTopics(complete templates:mini-notationtechno,(patternhouse,syntaxdnb, ambient, jazz, lofi, synthwave), mini-notation, sounds (synths, 71 drum banks, 128 GM instruments,128vcslorchestral/percussionsamples), effects(filters,reverb, delay, FM synthesis, envelopes)patterns,patternstips (transformations, probabilitytempo,euclidean,commonarrangementmistakes),genresadvanced (complete templates: techno/house/dnb/ambient/jazz/lofi/synthwave)samples,tips (tempowavetables,common mistakessignals,ABC↔Strudelchordcrossovervoicings),. Visuals: visuals (pianoroll/scopedraw methods,the visualspresetsand the theme,parameterthemes), hydra (WebGLshader backgrounds: initHydra, H(pattern), the audio-reactive a.fftobject, recipes, cheat-sheet), advanced (sample loading, wavetables, ZZFX, continuous signals, chord voicings).BeyondOptionalmusicmodules —patternthe code is real browser JavaScript: stage (your own canvasesinto Hydra,an ASCII cameraonFrame/onEvent/onTap,cycle/onFrame/onEvent/onTap/saysay), film (music videos and short films:scenes on bars,typewritertext,letterbox,narration), interactive (tapsbecomeinto notes,call andfaders/pads/xy,responsetilt/mic,aremember()voiceforthatcontrolsspeaksyouondraw,thelivebeatsessions), craft (what makes a piece land), debugging (what thewidgetplayer reports back), gallery (completepieces — a short film, a spoken duet, a Game of Life composer;pieces; fetch one with `piece`).
⟨54 unchanged words⟩ 'advanced' for sample loading. For a music video,filmorinteractive piecefilm: 'craft',then'stage', 'film', then gallery piece 'first-light'. For taps, controls, a drawn grid or a jam: 'interactive' alone (take only the sections you need),andthenagalleryworkedpieceexample'weather-machine'fromor'gallery'.'trade-a-beat'.","enum":["mini-notation","sounds"," ⟨19 unchanged words⟩
Live-code musicpatternsinusingStrudel (TidalCycles mini-notation inJavaScript.JavaScript) and play it in a player the user can edit. Layer drums,synths,bass andbassmelody with stack(). Choose from: 71drum machinedrum-machine banks, 128 GM instruments,built-insynths,and a full effects chain.Patterns play in a REPL the user can edit directly.Add .pianoroll()to a pattern to showfor a livepiano-roll animation in thepianowidgetroll (or .punchcard()/.scope()/.spectrum()—, onedraw methodper pattern). For a custom animated background,startpassthe`visuals`codeforwitha`awaitready-madeinitHydra()`animation andwrite Hydra shader code — H(pattern) locks it`theme`tofor thesequence, and `() => a.fft[0]` makeseditoritcolours.reactEachtocallthecreatesaudioaitselfNEW(Strudel'splayer.outputOptional,notwhentheyoumic);wantseemore (get-strudel-guide topic'hydra'. Rather not hand-write one? `visuals` picks a ready-made animation for code that has none (pianoroll/punchcard/scope/spectrum, orinhydra-kaleid/pulse/wash/feedbrackets). `theme` sets the code-editor colour:scheme,shaderwhichbackgroundsalsothattintsfollow thevisualsmusic —match it tostartthewithmood`await initHydra(teletext chiptune)`,sonicPinklocksynthwave,tonordtheambient,beatgruvboxDarkwithlofiH(pattern).,Beyondreactmusic:to thecode is real browser JavaScriptsound—withcycle(),onFrame,=>onEvent(pattern,a.fft[0]fn('hydra'); canvases,onTapscenes andsay(text) (aspokenline as a sample)linesbuildfor music videos,short filmsandinteractivefilmspieces('stage',and fader('name''film')/;pad('name')taps,/faders,xy('name')padsputand controlsonyouthedraw,playerplayedthatby theuser performs (each is a pattern, e.g. .gain(fader('rain'))), anduser; tilt()/and mic(), which follow thedevice's motionphoneandonmicrophonethewherebrowserallowedplayer (played by hand whereanot);chat'sseeframetopicsusually'stage',blocks'film',them) ('interactive'and 'gallery'. Each call creates);acompleteNEWpiecesplayer.('gallery'). Tokeepjamonebackplayerandgoingforth,—oriteratingtoonchange a piece,or playing back-to-back with thewhileuserit—plays, pass session: true, thenchange it withuse update-session(it swaps on the next bar)andread what happened with get-session (runtime errors, the user's taps and edits). Use get-strudel-guide for genre templates, sound references, and advanced features like arrangement and sample loading.get-session. The Strudel REPL renders inline with an editable ⟨6 unchanged words⟩
⟨114 unchanged words⟩ :"string"},"session":{"description":"Open a LIVE SESSIONOptional: keep this playerstaysopen asoneaperformance.live session. update-sessionswapstheninswaps new code in on thenextbarwithout a new player, andsays whether it ran;get-sessionreads the player'sreportsruntimewhatreportsplayed and what the userdiddid.(taps,
ComposeWrite a score in ABC notation and play it as sheet music:withavisualmelody,notationa harmonized piece,multi-instrumentaaudiomulti-voice arrangement or a well-known tune,andonstyleanypresets.ofWritetheABC128notationGeneralforMIDImelodies,instruments.arrangements,Putharmonizedchordpieces,symbolsorabovewell-knownthetunes.notesAddand add a style (rock, jazz, bossa, waltz, folk...) forautomaticdrums, bass,andchordchords.accompaniment.TheReturnsuseracanparse-statuseditconfirmationtheandscorerendersin theplayer;player,itchangedoesitsnotstylereturnandrawinstrument,audio.andUsedownloadget-music-guideWAVfororgenreMIDI.templates,Theinstrumentresultlists,confirms the parse; it returns no audio. Start with get-music-guide topic 'genres'; 'abc-syntax' andABC'instruments'syntaxforreference.the rest. The music player renders inline with interactive playback controls.
SwapOnly for a live session. Swaps newpatterncode intoa livethe session's player— no new player,while the music keeps playing. Send the WHOLE pattern, asyou would tofor play-live-pattern. Ittakes overlandsaton the next bar (quantize 1, the default),atthe next multiple of ncyclesbars, or at once (0). Patterns run on the session's clock, so: set quantize to your phrase length (an8-bar phrase → 8).andIf theswap lands on its first bar.playerTheanswerscodewithinisasyntax-checkedfewfirst;seconds, the result says whetherthe player ranit,and its error if not, whenran theplayer answerscode,withinoraitsfewerror.seconds.ToEditchange a piece's remember() state,withship a merge, not a new start value (get-strudel-guide topic 'interactive').
⟨93 unchanged words⟩ when the player answers within a few seconds. Edit a piece's remember() state with a merge, not a new start value (get-strudel-guide topic 'interactive').
⟨93 unchanged words⟩ when the player answers within a few seconds. Edit a piece's remember() state with a merge, not a new start value (get-strudel-guide topic 'interactive').
⟨23 unchanged words⟩ ,"petri-dish","lossy-terminal","signal-corruption","weather-machine","two-decks"],"type":"string"},"topic":{ ⟨68 unchanged words⟩
⟨211 unchanged words⟩ a pattern, e.g. .gain(fader('rain'))), and tilt() / mic() follow the device's motion and microphone where allowed (played by hand where not); see topics 'stage', 'film', 'interactive' and ⟨81 unchanged words⟩
⟨183 unchanged words⟩ build music videos, short films and interactivepieces;pieces, and fader('name') / pad('name') / xy('name') put controls on the player that the user performs (each is a pattern, e.g. .gain(fader('rain'))), and tilt() / mic() follow the device's motion and microphone where allowed (played by hand where not); see topics 'stage', 'film', 'interactive' and 'gallery'. Each call creates a NEWplayer ratherplayer.thanToupdatingkeeptheonelastplayeronegoing —foriterating on atweakpiece,sendor playing back-to-back with thewholeuserrevised—patternpassandsession:asktrue, then change it with update-session (it swaps on theusernexttobar)stopand read what happened with get-session (runtime errors, theprevioususer'sone.taps and edits). Use get-strudel-guide for genre templates, sound references, ⟨22 unchanged words⟩
⟨111 unchanged words⟩ "maxLength":65536,"type":"string"},"session":{"description":"Open a LIVE SESSION: this player stays open as one performance. update-session swaps in new code on the next bar without a new player and says whether it ran; get-session reads the player's runtime reports and what the user did (taps, code edits, handing you the turn). Use it to iterate on a long piece, to check that a piece really played, or to jam back-to-back. Its log (reports, taps, edits, your updates) is kept on the server until 2 hours idle.","type":"boolean"},"theme":{"description":"Editor colour theme; the ⟨236 unchanged words⟩
Read Live Session — Read a live session opened by play-live-pattern(session: true): whether the player is up and what it is playing, its runtime reports (errors, silence, missing sounds, a callback that threw), and what the human did since your last read — taps (cycle and position), code they edited and ran, and when they passed the turn to you. Read it before assuming a piece played, and when the user says it's your turn. With wait: 'pass' it LISTENS — holds until the listener presses Pass — so you can play a whole back-to-back set in one turn: update-session, get-session(wait: 'pass'), answer, listen again.
Update Live Session — Swap a new pattern into a live session's player — no new player, the music keeps playing. Send the WHOLE pattern, as you would to play-live-pattern. It takes over at the next bar (quantize 1, the default), at the next multiple of n cycles, or at once (0). Patterns run on the session's clock, so set quantize to your phrase length (an 8-bar phrase → 8) and the swap lands on its first bar. The code is syntax-checked first; the result says whether the player ran it, and its error if not, when the player answers within a few seconds.
⟨183 unchanged words⟩ build music videos, short films and interactivepieces;pieces, and fader('name') / pad('name') / xy('name') put controls on the player that the user performs (each is a pattern, e.g. .gain(fader('rain'))); see topics 'stage', 'film', 'interactive' and 'gallery'. Each call creates a NEWplayer ratherplayer.thanToupdatingkeeptheonelastplayeronegoing —foriterating on atweakpiece,sendor playing back-to-back with thewholeuserrevised—patternpassandsession:asktrue, then change it with update-session (it swaps on theusernexttobar)stopand read what happened with get-session (runtime errors, theprevioususer'sone.taps and edits). Use get-strudel-guide for genre templates, sound references, ⟨22 unchanged words⟩
⟨111 unchanged words⟩ "maxLength":65536,"type":"string"},"session":{"description":"Open a LIVE SESSION: this player stays open as one performance. update-session swaps in new code on the next bar without a new player and says whether it ran; get-session reads the player's runtime reports and what the user did (taps, code edits, handing you the turn). Use it to iterate on a long piece, to check that a piece really played, or to jam back-to-back. Its log (reports, taps, edits, your updates) is kept on the server until 2 hours idle.","type":"boolean"},"theme":{"description":"Editor colour theme; the ⟨236 unchanged words⟩
Read Live Session — Read a live session opened by play-live-pattern(session: true): whether the player is up and what it is playing, its runtime reports (errors, silence, missing sounds, a callback that threw), and what the human did since your last read — taps (cycle and position), code they edited and ran, and when they passed the turn to you. Read it before assuming a piece played, and when the user says it's your turn.
Update Live Session — Swap a new pattern into a live session's player — no new player, the music keeps playing. Send the WHOLE pattern, as you would to play-live-pattern. It takes over at the next bar (quantize 1, the default), at the next multiple of n cycles, or at once (0). Patterns run on the session's clock, so set quantize to your phrase length (an 8-bar phrase → 8) and the swap lands on its first bar. The code is syntax-checked first; the result says whether the player ran it, and its error if not, when the player answers within a few seconds.
⟨152 unchanged words⟩ sonicPink synthwave, nord ambient, gruvboxDark lofi). Beyond music: the code is real browser JavaScript — cycle(), onFrame, onEvent(pattern, fn), onTap and say(text) (a spoken line as a sample) build music videos, short films and interactive pieces; see topics 'stage', 'film', 'interactive' and 'gallery'. Each call creates a NEW player rather than ⟨51 unchanged words⟩
⟨152 unchanged words⟩ sonicPink synthwave, nord ambient, gruvboxDark lofi). Beyond music: the code is real browser JavaScript — cycle(), onFrame, onEvent(pattern, fn), onTap and say(text) (a spoken line as a sample) build music videos, short films and interactive pieces; see topics 'stage', 'film', 'interactive' and 'gallery'. Each call creates a NEW player rather than ⟨51 unchanged words⟩