{"ok":true,"site":{"host":"webtracks.namirsab.dev","url":"https://webtracks.namirsab.dev/","type":"live","desc":"Web Tracks: an unofficial fan-made browser groovebox. Not affiliated with Novation or Focusrite.","tools":[{"name":"get_parameter_reference","kind":"answer","impl":"imperative","description":"Reference for synth, drum, project and patch parameters, lookup tables, mod matrix, macros and the song format. Call with no section for the section list and best practices; call with a section before using complex tools so parameter names are exact. Sections: synth, patch, drums, project, lookup_tables, mod_matrix, macros, song_format, best_practices.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"section":{"type":"string","description":"Section name, or empty for the overview.","enum":["","synth","patch","drums","project","lookup_tables","mod_matrix","macros","song_format","best_practices"],"default":""}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"load_song","kind":"act","impl":"imperative","description":"Load a complete song (patterns, sounds, FX, mixer, song order) into the project, replacing it. The song format is the hardware server's: see get_parameter_reference(\"song_format\"). CRITICAL: all patterns share one length (16 or 32); include \"sounds\" for both synths; synth p-locks use the step/track \"macros\" key, drum automation the track \"params\" key; mod matrix names are space separated (\"filter frequency\") while macro targets use snake_case parameter names (\"filter_frequency\"); gate max 16. Pattern names map to slots 1-8 and the \"song\" list to scenes. Then start_sequencer to listen and export_song_to_project to save.","inputSchema":{"type":"object","properties":{"song":{"description":"Complete song description for the Circuit Tracks.\n\nDefines patterns, sounds, FX, mixer, and song structure.\nUse ``get_parameter_reference`` to look up valid synth parameter names,\nmod matrix sources/destinations, and macro destinations.","properties":{"name":{"default":"Song","description":"Song/project name.","title":"Name","type":"string"},"bpm":{"default":120,"description":"Tempo in BPM.","maximum":240,"minimum":40,"title":"Bpm","type":"integer"},"swing":{"default":50,"description":"Swing amount.","maximum":80,"minimum":20,"title":"Swing","type":"integer"},"color":{"default":8,"description":"Pattern color index.","maximum":13,"minimum":0,"title":"Color","type":"integer"},"scale":{"$ref":"#/$defs/ScaleConfig"},"sounds":{"anyOf":[{"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthSoundConfig"},{"$ref":"#/$defs/DrumSoundConfig"}]},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track sound/patch configuration.","title":"Sounds"},"fx":{"anyOf":[{"$ref":"#/$defs/FXConfig"},{"type":"null"}],"default":null},"mixer":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/MixerTrackConfig"},"propertyNames":{"enum":["synth1","synth2"]},"type":"object"},{"type":"null"}],"default":null,"title":"Mixer"},"patterns":{"additionalProperties":{"$ref":"#/$defs/PatternConfig"},"description":"Named patterns. At least one required.","minProperties":1,"title":"Patterns","type":"object"},"song":{"anyOf":[{"items":{"type":"string"},"maxItems":16,"type":"array"},{"type":"null"}],"default":null,"description":"Ordered list of pattern names for playback (max 16 scenes).","title":"Song"}},"required":["patterns"],"title":"SongSchema","type":"object"}},"required":["song"],"additionalProperties":false,"$defs":{"DelayConfig":{"description":"Delay engine parameters.","properties":{"time":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Time"},"sync":{"anyOf":[{"maximum":35,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Sync"},"feedback":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Feedback"},"width":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Width"},"lr_ratio":{"anyOf":[{"maximum":12,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lr Ratio"},"slew":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Slew"}},"title":"DelayConfig","type":"object"},"DrumSoundConfig":{"description":"Drum track sound configuration.","properties":{"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sample/patch index.","title":"Sample"},"level":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Level"},"pitch":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pitch"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"distortion":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Distortion"},"eq":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Eq"},"pan":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pan"}},"title":"DrumSoundConfig","type":"object"},"DrumStepConfig":{"additionalProperties":false,"description":"A single step in a drum track.","properties":{"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Probability"},"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Per-step sample override.","title":"Sample"},"micro_step":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Micro-step offset within the step (0-5).","title":"Micro Step"}},"title":"DrumStepConfig","type":"object"},"DrumTrackConfig":{"additionalProperties":false,"description":"Track data for a drum track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/DrumStepConfig"},"description":"Step index (as string) -> step data.","title":"Steps","type":"object"},"params":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["pitch","decay","distortion","eq","reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level parameter automation. Keys: 'pitch', 'decay', 'distortion', 'eq', 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Params"}},"title":"DrumTrackConfig","type":"object"},"FXConfig":{"description":"Global FX configuration.","properties":{"reverb":{"anyOf":[{"$ref":"#/$defs/ReverbConfig"},{"type":"null"}],"default":null},"delay":{"anyOf":[{"$ref":"#/$defs/DelayConfig"},{"type":"null"}],"default":null},"reverb_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Reverb preset by name or index (0-7).","title":"Reverb Preset"},"delay_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Delay preset by name or index (0-15).","title":"Delay Preset"},"reverb_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track reverb send level.","title":"Reverb Sends"},"delay_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track delay send level.","title":"Delay Sends"},"sidechain":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/SidechainConfig"},"propertyNames":{"enum":["synth1","synth2","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"title":"Sidechain"}},"title":"FXConfig","type":"object"},"MacroConfig":{"description":"Configuration for one macro knob (1-8).","properties":{"targets":{"items":{"$ref":"#/$defs/MacroTarget"},"title":"Targets","type":"array"},"position":{"default":0,"description":"Initial knob position.","maximum":127,"minimum":0,"title":"Position","type":"integer"}},"required":["targets"],"title":"MacroConfig","type":"object"},"MacroTarget":{"description":"A single destination routed to a macro knob.","properties":{"dest":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Parameter name (e.g. 'filter_frequency') or macro destination index (0-70). Use get_parameter_reference for the full list.","title":"Dest"},"start":{"default":0,"description":"Value when knob is at 0.","maximum":127,"minimum":0,"title":"Start","type":"integer"},"end":{"default":127,"description":"Value when knob is at 127.","maximum":127,"minimum":0,"title":"End","type":"integer"},"depth":{"default":127,"description":"Modulation depth. 127=full, 64=none.","maximum":127,"minimum":0,"title":"Depth","type":"integer"}},"required":["dest"],"title":"MacroTarget","type":"object"},"MixerTrackConfig":{"description":"Mixer settings for a synth track.","properties":{"level":{"default":100,"maximum":127,"minimum":0,"title":"Level","type":"integer"},"pan":{"default":64,"maximum":127,"minimum":0,"title":"Pan","type":"integer"}},"title":"MixerTrackConfig","type":"object"},"ModMatrixEntry":{"description":"A single mod-matrix routing slot.","properties":{"source1":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source1"},"source2":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source2"},"dest":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"}],"description":"Destination parameter (use space-separated names, NOT snake_case).","title":"Dest"},"destination":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Alias for 'dest'. Either 'dest' or 'destination' may be used.","title":"Destination"},"depth":{"default":0,"description":"Signed depth: -64 to +63. 0 = no modulation.","maximum":63,"minimum":-64,"title":"Depth","type":"integer"}},"required":["dest"],"title":"ModMatrixEntry","type":"object"},"PatternConfig":{"description":"A named pattern containing track data.","properties":{"length":{"default":16,"description":"Pattern length in steps.","maximum":32,"minimum":1,"title":"Length","type":"integer"},"tracks":{"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthTrackConfig"},{"$ref":"#/$defs/DrumTrackConfig"}]},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"title":"Tracks","type":"object"}},"title":"PatternConfig","type":"object"},"ReverbConfig":{"description":"Reverb engine parameters.","properties":{"type":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Type"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"damping":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Damping"}},"title":"ReverbConfig","type":"object"},"ScaleConfig":{"description":"Musical scale applied to synth/MIDI note quantization.","properties":{"root":{"default":"C","enum":["C","C#","Db","D","D#","Eb","E","F","F#","Gb","G","G#","Ab","A","A#","Bb","B"],"title":"Root","type":"string"},"type":{"default":"chromatic","enum":["natural minor","minor","major","dorian","phrygian","mixolydian","melodic minor","harmonic minor","bebop dorian","blues","minor pentatonic","hungarian minor","ukranian dorian","marva","todi","whole tone","chromatic"],"title":"Type","type":"string"}},"title":"ScaleConfig","type":"object"},"SidechainConfig":{"description":"Sidechain compressor settings for a synth or MIDI track.","properties":{"preset":{"anyOf":[{"maximum":7,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sidechain preset (1-7). Required to activate sidechain on hardware. 0 or omit = OFF.","title":"Preset"},"source":{"default":"off","enum":["drum1","drum2","drum3","drum4","off"],"title":"Source","type":"string"},"attack":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Attack"},"hold":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Hold"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"depth":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Depth"}},"title":"SidechainConfig","type":"object"},"SynthSoundConfig":{"description":"Synth engine patch configuration (synth1, synth2).","properties":{"preset":{"anyOf":[{"enum":["pad","bass","lead","pluck"],"type":"string"},{"type":"null"}],"default":null,"description":"Base preset to start from before applying params.","title":"Preset"},"name":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"default":null,"description":"Patch name.","title":"Name"},"params":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"default":null,"description":"Synth parameter name -> value (0-127). Use get_parameter_reference for names.","title":"Params"},"mod_matrix":{"anyOf":[{"items":{"$ref":"#/$defs/ModMatrixEntry"},"type":"array"},{"type":"null"}],"default":null,"description":"Mod matrix routing slots.","title":"Mod Matrix"},"macros":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/MacroConfig"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Macro knob definitions. Keys are '1' through '8'.","title":"Macros"}},"title":"SynthSoundConfig","type":"object"},"SynthStepConfig":{"additionalProperties":false,"description":"A single step in a synth or MIDI track.\n\nOnly these fields are allowed — no others. Use 'macros' for p-locks, NOT 'params' or 'p-locks'.","properties":{"note":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"MIDI note number. Mutually exclusive with 'notes'.","title":"Note"},"notes":{"anyOf":[{"items":{"maximum":127,"minimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Multiple MIDI notes for polyphony. Mutually exclusive with 'note'.","title":"Notes"},"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"gate":{"anyOf":[{"maximum":16,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Gate length in steps (e.g. 0.5 = half step, 2.0 = two steps). Max 16.","title":"Gate"},"tie":{"default":false,"description":"Tie forward — sustain this note into the next triggered step.","title":"Tie","type":"boolean"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Playback probability, 0.0 to 1.0.","title":"Probability"},"macros":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-step macro p-locks. Keys are macro numbers '1'-'8', values are 0-127. These lock the macro knob position for this step.","title":"Macros"}},"title":"SynthStepConfig","type":"object"},"SynthTrackConfig":{"additionalProperties":false,"description":"Track data for a synth or MIDI track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/SynthStepConfig"},"description":"Step index (as string, e.g. '0', '4') -> step data.","title":"Steps","type":"object"},"macros":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level macro automation. Keys are macro numbers '1'-'8'. Values are {step_position: value} dicts. Float positions supported for micro-step resolution (e.g. '2.5').","title":"Macros"},"mixer":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level mixer automation. Keys: 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Mixer"}},"title":"SynthTrackConfig","type":"object"}}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"read_project","kind":"answer","impl":"imperative","description":"Read the live project back in the load_song song format (patterns by name where known, sounds, fx, mixer, scale, song order): what the user played or edited on the pads, ready to modify and load_song again.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_pattern","kind":"act","impl":"imperative","description":"Define or replace one named pattern (a slot 1-8 on every track) with song-format track configs: {\"synth1\": {\"steps\": {\"0\": {\"note\": 60, \"gate\": 1}}}, \"drum1\": {\"steps\": {\"0\": {}, \"4\": {}}}}. Tracks not given are silent in this pattern. Length must match the other patterns (all 16 or all 32). When the sequencer is stopped the new pattern is selected on all tracks.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Pattern name, e.g. \"intro\".","minLength":1,"maxLength":32},"tracks":{"type":"object","minProperties":1,"propertyNames":{"enum":["synth1","synth2","midi1","midi2","drum1","drum2","drum3","drum4"]},"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthTrackConfig"},{"$ref":"#/$defs/DrumTrackConfig"}]},"description":"track name -> track config."},"length":{"type":"integer","minimum":1,"maximum":32,"description":"Pattern length in steps (default 16)."}},"required":["name","tracks"],"additionalProperties":false,"$defs":{"DelayConfig":{"description":"Delay engine parameters.","properties":{"time":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Time"},"sync":{"anyOf":[{"maximum":35,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Sync"},"feedback":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Feedback"},"width":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Width"},"lr_ratio":{"anyOf":[{"maximum":12,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lr Ratio"},"slew":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Slew"}},"title":"DelayConfig","type":"object"},"DrumSoundConfig":{"description":"Drum track sound configuration.","properties":{"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sample/patch index.","title":"Sample"},"level":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Level"},"pitch":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pitch"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"distortion":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Distortion"},"eq":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Eq"},"pan":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pan"}},"title":"DrumSoundConfig","type":"object"},"DrumStepConfig":{"additionalProperties":false,"description":"A single step in a drum track.","properties":{"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Probability"},"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Per-step sample override.","title":"Sample"},"micro_step":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Micro-step offset within the step (0-5).","title":"Micro Step"}},"title":"DrumStepConfig","type":"object"},"DrumTrackConfig":{"additionalProperties":false,"description":"Track data for a drum track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/DrumStepConfig"},"description":"Step index (as string) -> step data.","title":"Steps","type":"object"},"params":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["pitch","decay","distortion","eq","reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level parameter automation. Keys: 'pitch', 'decay', 'distortion', 'eq', 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Params"}},"title":"DrumTrackConfig","type":"object"},"FXConfig":{"description":"Global FX configuration.","properties":{"reverb":{"anyOf":[{"$ref":"#/$defs/ReverbConfig"},{"type":"null"}],"default":null},"delay":{"anyOf":[{"$ref":"#/$defs/DelayConfig"},{"type":"null"}],"default":null},"reverb_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Reverb preset by name or index (0-7).","title":"Reverb Preset"},"delay_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Delay preset by name or index (0-15).","title":"Delay Preset"},"reverb_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track reverb send level.","title":"Reverb Sends"},"delay_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track delay send level.","title":"Delay Sends"},"sidechain":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/SidechainConfig"},"propertyNames":{"enum":["synth1","synth2","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"title":"Sidechain"}},"title":"FXConfig","type":"object"},"MacroConfig":{"description":"Configuration for one macro knob (1-8).","properties":{"targets":{"items":{"$ref":"#/$defs/MacroTarget"},"title":"Targets","type":"array"},"position":{"default":0,"description":"Initial knob position.","maximum":127,"minimum":0,"title":"Position","type":"integer"}},"required":["targets"],"title":"MacroConfig","type":"object"},"MacroTarget":{"description":"A single destination routed to a macro knob.","properties":{"dest":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Parameter name (e.g. 'filter_frequency') or macro destination index (0-70). Use get_parameter_reference for the full list.","title":"Dest"},"start":{"default":0,"description":"Value when knob is at 0.","maximum":127,"minimum":0,"title":"Start","type":"integer"},"end":{"default":127,"description":"Value when knob is at 127.","maximum":127,"minimum":0,"title":"End","type":"integer"},"depth":{"default":127,"description":"Modulation depth. 127=full, 64=none.","maximum":127,"minimum":0,"title":"Depth","type":"integer"}},"required":["dest"],"title":"MacroTarget","type":"object"},"MixerTrackConfig":{"description":"Mixer settings for a synth track.","properties":{"level":{"default":100,"maximum":127,"minimum":0,"title":"Level","type":"integer"},"pan":{"default":64,"maximum":127,"minimum":0,"title":"Pan","type":"integer"}},"title":"MixerTrackConfig","type":"object"},"ModMatrixEntry":{"description":"A single mod-matrix routing slot.","properties":{"source1":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source1"},"source2":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source2"},"dest":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"}],"description":"Destination parameter (use space-separated names, NOT snake_case).","title":"Dest"},"destination":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Alias for 'dest'. Either 'dest' or 'destination' may be used.","title":"Destination"},"depth":{"default":0,"description":"Signed depth: -64 to +63. 0 = no modulation.","maximum":63,"minimum":-64,"title":"Depth","type":"integer"}},"required":["dest"],"title":"ModMatrixEntry","type":"object"},"PatternConfig":{"description":"A named pattern containing track data.","properties":{"length":{"default":16,"description":"Pattern length in steps.","maximum":32,"minimum":1,"title":"Length","type":"integer"},"tracks":{"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthTrackConfig"},{"$ref":"#/$defs/DrumTrackConfig"}]},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"title":"Tracks","type":"object"}},"title":"PatternConfig","type":"object"},"ReverbConfig":{"description":"Reverb engine parameters.","properties":{"type":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Type"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"damping":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Damping"}},"title":"ReverbConfig","type":"object"},"ScaleConfig":{"description":"Musical scale applied to synth/MIDI note quantization.","properties":{"root":{"default":"C","enum":["C","C#","Db","D","D#","Eb","E","F","F#","Gb","G","G#","Ab","A","A#","Bb","B"],"title":"Root","type":"string"},"type":{"default":"chromatic","enum":["natural minor","minor","major","dorian","phrygian","mixolydian","melodic minor","harmonic minor","bebop dorian","blues","minor pentatonic","hungarian minor","ukranian dorian","marva","todi","whole tone","chromatic"],"title":"Type","type":"string"}},"title":"ScaleConfig","type":"object"},"SidechainConfig":{"description":"Sidechain compressor settings for a synth or MIDI track.","properties":{"preset":{"anyOf":[{"maximum":7,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sidechain preset (1-7). Required to activate sidechain on hardware. 0 or omit = OFF.","title":"Preset"},"source":{"default":"off","enum":["drum1","drum2","drum3","drum4","off"],"title":"Source","type":"string"},"attack":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Attack"},"hold":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Hold"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"depth":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Depth"}},"title":"SidechainConfig","type":"object"},"SynthSoundConfig":{"description":"Synth engine patch configuration (synth1, synth2).","properties":{"preset":{"anyOf":[{"enum":["pad","bass","lead","pluck"],"type":"string"},{"type":"null"}],"default":null,"description":"Base preset to start from before applying params.","title":"Preset"},"name":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"default":null,"description":"Patch name.","title":"Name"},"params":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"default":null,"description":"Synth parameter name -> value (0-127). Use get_parameter_reference for names.","title":"Params"},"mod_matrix":{"anyOf":[{"items":{"$ref":"#/$defs/ModMatrixEntry"},"type":"array"},{"type":"null"}],"default":null,"description":"Mod matrix routing slots.","title":"Mod Matrix"},"macros":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/MacroConfig"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Macro knob definitions. Keys are '1' through '8'.","title":"Macros"}},"title":"SynthSoundConfig","type":"object"},"SynthStepConfig":{"additionalProperties":false,"description":"A single step in a synth or MIDI track.\n\nOnly these fields are allowed — no others. Use 'macros' for p-locks, NOT 'params' or 'p-locks'.","properties":{"note":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"MIDI note number. Mutually exclusive with 'notes'.","title":"Note"},"notes":{"anyOf":[{"items":{"maximum":127,"minimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Multiple MIDI notes for polyphony. Mutually exclusive with 'note'.","title":"Notes"},"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"gate":{"anyOf":[{"maximum":16,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Gate length in steps (e.g. 0.5 = half step, 2.0 = two steps). Max 16.","title":"Gate"},"tie":{"default":false,"description":"Tie forward — sustain this note into the next triggered step.","title":"Tie","type":"boolean"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Playback probability, 0.0 to 1.0.","title":"Probability"},"macros":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-step macro p-locks. Keys are macro numbers '1'-'8', values are 0-127. These lock the macro knob position for this step.","title":"Macros"}},"title":"SynthStepConfig","type":"object"},"SynthTrackConfig":{"additionalProperties":false,"description":"Track data for a synth or MIDI track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/SynthStepConfig"},"description":"Step index (as string, e.g. '0', '4') -> step data.","title":"Steps","type":"object"},"macros":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level macro automation. Keys are macro numbers '1'-'8'. Values are {step_position: value} dicts. Float positions supported for micro-step resolution (e.g. '2.5').","title":"Macros"},"mixer":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level mixer automation. Keys: 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Mixer"}},"title":"SynthTrackConfig","type":"object"}}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_track","kind":"act","impl":"imperative","description":"Replace (default) or merge the steps of one track inside a named pattern while everything else keeps playing. steps: {\"0\": {\"note\": 48, \"velocity\": 110}, \"8\": {\"notes\": [48, 55]}} for synths, {\"0\": {}, \"4\": {\"velocity\": 80}} for drums. Track-level automation lanes are kept.","inputSchema":{"type":"object","properties":{"pattern_name":{"type":"string","description":"Pattern name."},"track":{"type":"string","enum":["synth1","synth2","midi1","midi2","drum1","drum2","drum3","drum4"],"description":"Track name."},"steps":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthStepConfig"},{"$ref":"#/$defs/DrumStepConfig"}]},"description":"step index (as string) -> step config; absent steps are rests."},"clear_existing":{"type":"boolean","description":"true (default) replaces all steps of the track; false merges into them.","default":true}},"required":["pattern_name","track","steps"],"additionalProperties":false,"$defs":{"DelayConfig":{"description":"Delay engine parameters.","properties":{"time":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Time"},"sync":{"anyOf":[{"maximum":35,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Sync"},"feedback":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Feedback"},"width":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Width"},"lr_ratio":{"anyOf":[{"maximum":12,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lr Ratio"},"slew":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Slew"}},"title":"DelayConfig","type":"object"},"DrumSoundConfig":{"description":"Drum track sound configuration.","properties":{"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sample/patch index.","title":"Sample"},"level":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Level"},"pitch":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pitch"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"distortion":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Distortion"},"eq":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Eq"},"pan":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pan"}},"title":"DrumSoundConfig","type":"object"},"DrumStepConfig":{"additionalProperties":false,"description":"A single step in a drum track.","properties":{"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Probability"},"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Per-step sample override.","title":"Sample"},"micro_step":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Micro-step offset within the step (0-5).","title":"Micro Step"}},"title":"DrumStepConfig","type":"object"},"DrumTrackConfig":{"additionalProperties":false,"description":"Track data for a drum track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/DrumStepConfig"},"description":"Step index (as string) -> step data.","title":"Steps","type":"object"},"params":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["pitch","decay","distortion","eq","reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level parameter automation. Keys: 'pitch', 'decay', 'distortion', 'eq', 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Params"}},"title":"DrumTrackConfig","type":"object"},"FXConfig":{"description":"Global FX configuration.","properties":{"reverb":{"anyOf":[{"$ref":"#/$defs/ReverbConfig"},{"type":"null"}],"default":null},"delay":{"anyOf":[{"$ref":"#/$defs/DelayConfig"},{"type":"null"}],"default":null},"reverb_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Reverb preset by name or index (0-7).","title":"Reverb Preset"},"delay_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Delay preset by name or index (0-15).","title":"Delay Preset"},"reverb_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track reverb send level.","title":"Reverb Sends"},"delay_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track delay send level.","title":"Delay Sends"},"sidechain":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/SidechainConfig"},"propertyNames":{"enum":["synth1","synth2","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"title":"Sidechain"}},"title":"FXConfig","type":"object"},"MacroConfig":{"description":"Configuration for one macro knob (1-8).","properties":{"targets":{"items":{"$ref":"#/$defs/MacroTarget"},"title":"Targets","type":"array"},"position":{"default":0,"description":"Initial knob position.","maximum":127,"minimum":0,"title":"Position","type":"integer"}},"required":["targets"],"title":"MacroConfig","type":"object"},"MacroTarget":{"description":"A single destination routed to a macro knob.","properties":{"dest":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Parameter name (e.g. 'filter_frequency') or macro destination index (0-70). Use get_parameter_reference for the full list.","title":"Dest"},"start":{"default":0,"description":"Value when knob is at 0.","maximum":127,"minimum":0,"title":"Start","type":"integer"},"end":{"default":127,"description":"Value when knob is at 127.","maximum":127,"minimum":0,"title":"End","type":"integer"},"depth":{"default":127,"description":"Modulation depth. 127=full, 64=none.","maximum":127,"minimum":0,"title":"Depth","type":"integer"}},"required":["dest"],"title":"MacroTarget","type":"object"},"MixerTrackConfig":{"description":"Mixer settings for a synth track.","properties":{"level":{"default":100,"maximum":127,"minimum":0,"title":"Level","type":"integer"},"pan":{"default":64,"maximum":127,"minimum":0,"title":"Pan","type":"integer"}},"title":"MixerTrackConfig","type":"object"},"ModMatrixEntry":{"description":"A single mod-matrix routing slot.","properties":{"source1":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source1"},"source2":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source2"},"dest":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"}],"description":"Destination parameter (use space-separated names, NOT snake_case).","title":"Dest"},"destination":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Alias for 'dest'. Either 'dest' or 'destination' may be used.","title":"Destination"},"depth":{"default":0,"description":"Signed depth: -64 to +63. 0 = no modulation.","maximum":63,"minimum":-64,"title":"Depth","type":"integer"}},"required":["dest"],"title":"ModMatrixEntry","type":"object"},"PatternConfig":{"description":"A named pattern containing track data.","properties":{"length":{"default":16,"description":"Pattern length in steps.","maximum":32,"minimum":1,"title":"Length","type":"integer"},"tracks":{"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthTrackConfig"},{"$ref":"#/$defs/DrumTrackConfig"}]},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"title":"Tracks","type":"object"}},"title":"PatternConfig","type":"object"},"ReverbConfig":{"description":"Reverb engine parameters.","properties":{"type":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Type"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"damping":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Damping"}},"title":"ReverbConfig","type":"object"},"ScaleConfig":{"description":"Musical scale applied to synth/MIDI note quantization.","properties":{"root":{"default":"C","enum":["C","C#","Db","D","D#","Eb","E","F","F#","Gb","G","G#","Ab","A","A#","Bb","B"],"title":"Root","type":"string"},"type":{"default":"chromatic","enum":["natural minor","minor","major","dorian","phrygian","mixolydian","melodic minor","harmonic minor","bebop dorian","blues","minor pentatonic","hungarian minor","ukranian dorian","marva","todi","whole tone","chromatic"],"title":"Type","type":"string"}},"title":"ScaleConfig","type":"object"},"SidechainConfig":{"description":"Sidechain compressor settings for a synth or MIDI track.","properties":{"preset":{"anyOf":[{"maximum":7,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sidechain preset (1-7). Required to activate sidechain on hardware. 0 or omit = OFF.","title":"Preset"},"source":{"default":"off","enum":["drum1","drum2","drum3","drum4","off"],"title":"Source","type":"string"},"attack":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Attack"},"hold":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Hold"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"depth":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Depth"}},"title":"SidechainConfig","type":"object"},"SynthSoundConfig":{"description":"Synth engine patch configuration (synth1, synth2).","properties":{"preset":{"anyOf":[{"enum":["pad","bass","lead","pluck"],"type":"string"},{"type":"null"}],"default":null,"description":"Base preset to start from before applying params.","title":"Preset"},"name":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"default":null,"description":"Patch name.","title":"Name"},"params":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"default":null,"description":"Synth parameter name -> value (0-127). Use get_parameter_reference for names.","title":"Params"},"mod_matrix":{"anyOf":[{"items":{"$ref":"#/$defs/ModMatrixEntry"},"type":"array"},{"type":"null"}],"default":null,"description":"Mod matrix routing slots.","title":"Mod Matrix"},"macros":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/MacroConfig"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Macro knob definitions. Keys are '1' through '8'.","title":"Macros"}},"title":"SynthSoundConfig","type":"object"},"SynthStepConfig":{"additionalProperties":false,"description":"A single step in a synth or MIDI track.\n\nOnly these fields are allowed — no others. Use 'macros' for p-locks, NOT 'params' or 'p-locks'.","properties":{"note":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"MIDI note number. Mutually exclusive with 'notes'.","title":"Note"},"notes":{"anyOf":[{"items":{"maximum":127,"minimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Multiple MIDI notes for polyphony. Mutually exclusive with 'note'.","title":"Notes"},"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"gate":{"anyOf":[{"maximum":16,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Gate length in steps (e.g. 0.5 = half step, 2.0 = two steps). Max 16.","title":"Gate"},"tie":{"default":false,"description":"Tie forward — sustain this note into the next triggered step.","title":"Tie","type":"boolean"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Playback probability, 0.0 to 1.0.","title":"Probability"},"macros":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-step macro p-locks. Keys are macro numbers '1'-'8', values are 0-127. These lock the macro knob position for this step.","title":"Macros"}},"title":"SynthStepConfig","type":"object"},"SynthTrackConfig":{"additionalProperties":false,"description":"Track data for a synth or MIDI track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/SynthStepConfig"},"description":"Step index (as string, e.g. '0', '4') -> step data.","title":"Steps","type":"object"},"macros":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level macro automation. Keys are macro numbers '1'-'8'. Values are {step_position: value} dicts. Float positions supported for micro-step resolution (e.g. '2.5').","title":"Macros"},"mixer":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level mixer automation. Keys: 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Mixer"}},"title":"SynthTrackConfig","type":"object"}}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_pattern","kind":"answer","impl":"imperative","description":"Read one named pattern in song format (length and per-track steps / automation).","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Pattern name."}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"list_patterns","kind":"answer","impl":"imperative","description":"Named patterns with their slots, unnamed slots that hold data, the current song order and the pattern length in use.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"clear_pattern","kind":"act","impl":"imperative","description":"Clear every track of a named pattern (the name keeps its slot).","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Pattern name."}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_song","kind":"act","impl":"imperative","description":"Set the song order: a list of pattern names becomes scenes 1..n and a scene chain that loops as a whole (like the hardware). While playing it takes over at the end of the current Drum 1 pattern. Example: [\"intro\", \"verse\", \"verse\", \"chorus\"].","inputSchema":{"type":"object","properties":{"patterns":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":16,"description":"Pattern names from load_song / set_pattern, in playback order."}},"required":["patterns"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"queue_patterns","kind":"act","impl":"imperative","description":"Append pattern names to the song order (see set_song).","inputSchema":{"type":"object","properties":{"patterns":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":16,"description":"Pattern names from load_song / set_pattern, in playback order."}},"required":["patterns"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"clear_queue","kind":"act","impl":"imperative","description":"Drop the song order; the current pattern selection loops.","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_sequencer_status","kind":"answer","impl":"imperative","description":"Current state: playing, BPM, swing, audio unlock state, project name and slot, per-track pattern/step/mute/chain, scene chain, loaded synth patches, drum samples, and the pattern names known from load_song.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"start_sequencer","kind":"act","impl":"imperative","description":"Start playback. Optionally select a named pattern (from load_song) on every track first and/or set the tempo. Loops the current pattern selection or scene chain until stop_sequencer.","inputSchema":{"type":"object","properties":{"pattern":{"type":"string","description":"Pattern name from load_song to select on all tracks before starting. Omit to play the current selection."},"bpm":{"type":"number","minimum":40,"maximum":240,"description":"Tempo in BPM."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"stop_sequencer","kind":"act","impl":"imperative","description":"Stop playback (all notes off).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"transport","kind":"act","impl":"imperative","description":"Transport control: \"start\" plays from the top, \"continue\" resumes from where playback last stopped, \"stop\" stops. Optional bpm sets the tempo first.","inputSchema":{"type":"object","properties":{"action":{"type":"string","description":"One of start, stop, continue.","enum":["start","stop","continue"]},"bpm":{"type":"number","minimum":40,"maximum":240,"description":"Tempo in BPM."}},"required":["action"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_bpm","kind":"act","impl":"imperative","description":"Set the tempo (40-240 BPM). Works while playing.","inputSchema":{"type":"object","properties":{"bpm":{"type":"number","minimum":40,"maximum":240,"description":"Tempo in BPM."}},"required":["bpm"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_swing","kind":"act","impl":"imperative","description":"Set swing (20-80, 50 = straight). Web Tracks extra; on hardware swing is part of the song.","inputSchema":{"type":"object","properties":{"swing":{"type":"integer","minimum":20,"maximum":80,"description":"Swing amount, 50 = none."}},"required":["swing"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"mute_track","kind":"act","impl":"imperative","description":"Mute or unmute a track. Takes effect immediately.","inputSchema":{"type":"object","properties":{"track":{"type":"string","enum":["synth1","synth2","midi1","midi2","drum1","drum2","drum3","drum4"],"description":"Track name."},"muted":{"type":"boolean","description":"true to mute, false to unmute.","default":true}},"required":["track"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"select_pattern","kind":"act","impl":"imperative","description":"Select which of the 8 pattern slots a track plays (Web Tracks extra). While playing the switch is queued for the end of the current pattern unless immediate is true.","inputSchema":{"type":"object","properties":{"track":{"type":"string","enum":["synth1","synth2","midi1","midi2","drum1","drum2","drum3","drum4"],"description":"Track name."},"pattern":{"type":"integer","minimum":1,"maximum":8,"description":"Pattern slot 1-8."},"immediate":{"type":"boolean","description":"Switch now instead of at the pattern end.","default":false}},"required":["track","pattern"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_synth_params","kind":"act","impl":"imperative","description":"Set one or more parameters of the live patch on Synth 1 or 2 (also affects sounding notes). Keys are snake_case patch parameter names from get_parameter_reference(\"synth\") or (\"patch\"), e.g. {\"filter_frequency\": 80, \"osc1_wave\": 2}. Also accepts macro_knob1-8 (knob positions) and \"name\" (patch name, string).","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"params":{"type":"object","minProperties":1,"description":"param_name -> value 0-127 (\"name\" -> string).","additionalProperties":{"anyOf":[{"type":"integer","minimum":0,"maximum":127},{"type":"string","maxLength":16}]}}},"required":["synth","params"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"edit_synth_patch","kind":"act","impl":"imperative","description":"Edit the current patch on Synth 1 or 2: same as set_synth_params (all 340-byte patch parameters incl. mod matrix slots modN_source1/source2/depth/destination and \"name\"). Kept for parity with the hardware server.","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"params":{"type":"object","minProperties":1,"description":"param_name -> value 0-127 (\"name\" -> string).","additionalProperties":{"anyOf":[{"type":"integer","minimum":0,"maximum":127},{"type":"string","maxLength":16}]}}},"required":["synth","params"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"create_synth_patch","kind":"act","impl":"imperative","description":"Build a synth patch from scratch (or from a preset: pad, bass, lead, pluck) and put it on Synth 1 or 2. Call get_parameter_reference(\"patch\"), then (\"mod_matrix\"), then (\"macros\") first. params are snake_case patch parameters 0-127. mod_matrix entries use SPACE-separated source/dest names ({\"source1\": \"LFO 1+/-\", \"dest\": \"filter frequency\", \"depth\": 30}, depth -64..63). macros are keyed \"1\"-\"8\" and their targets use snake_case PARAMETER names, not mod matrix names: {\"5\": {\"targets\": [{\"dest\": \"filter_frequency\", \"start\": 0, \"end\": 127, \"depth\": 63}]}}. Macros ADD to base values: set base values low for params a macro should sweep up.","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"name":{"type":"string","description":"Patch name (up to 16 chars).","maxLength":16},"params":{"type":"object","additionalProperties":{"type":"integer","minimum":0,"maximum":127},"description":"param_name -> value."},"mod_matrix":{"type":"array","items":{"$ref":"#/$defs/ModMatrixEntry"},"maxItems":20},"macros":{"type":"object","propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"additionalProperties":{"$ref":"#/$defs/MacroConfig"}},"preset":{"type":"string","description":"Base preset.","enum":["pad","bass","lead","pluck"]}},"required":["synth","name"],"additionalProperties":false,"$defs":{"DelayConfig":{"description":"Delay engine parameters.","properties":{"time":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Time"},"sync":{"anyOf":[{"maximum":35,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Sync"},"feedback":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Feedback"},"width":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Width"},"lr_ratio":{"anyOf":[{"maximum":12,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Lr Ratio"},"slew":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Slew"}},"title":"DelayConfig","type":"object"},"DrumSoundConfig":{"description":"Drum track sound configuration.","properties":{"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sample/patch index.","title":"Sample"},"level":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Level"},"pitch":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pitch"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"distortion":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Distortion"},"eq":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Eq"},"pan":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Pan"}},"title":"DrumSoundConfig","type":"object"},"DrumStepConfig":{"additionalProperties":false,"description":"A single step in a drum track.","properties":{"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Probability"},"sample":{"anyOf":[{"maximum":63,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Per-step sample override.","title":"Sample"},"micro_step":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Micro-step offset within the step (0-5).","title":"Micro Step"}},"title":"DrumStepConfig","type":"object"},"DrumTrackConfig":{"additionalProperties":false,"description":"Track data for a drum track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/DrumStepConfig"},"description":"Step index (as string) -> step data.","title":"Steps","type":"object"},"params":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["pitch","decay","distortion","eq","reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level parameter automation. Keys: 'pitch', 'decay', 'distortion', 'eq', 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Params"}},"title":"DrumTrackConfig","type":"object"},"FXConfig":{"description":"Global FX configuration.","properties":{"reverb":{"anyOf":[{"$ref":"#/$defs/ReverbConfig"},{"type":"null"}],"default":null},"delay":{"anyOf":[{"$ref":"#/$defs/DelayConfig"},{"type":"null"}],"default":null},"reverb_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Reverb preset by name or index (0-7).","title":"Reverb Preset"},"delay_preset":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Delay preset by name or index (0-15).","title":"Delay Preset"},"reverb_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track reverb send level.","title":"Reverb Sends"},"delay_sends":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-track delay send level.","title":"Delay Sends"},"sidechain":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/SidechainConfig"},"propertyNames":{"enum":["synth1","synth2","midi1","midi2"]},"type":"object"},{"type":"null"}],"default":null,"title":"Sidechain"}},"title":"FXConfig","type":"object"},"MacroConfig":{"description":"Configuration for one macro knob (1-8).","properties":{"targets":{"items":{"$ref":"#/$defs/MacroTarget"},"title":"Targets","type":"array"},"position":{"default":0,"description":"Initial knob position.","maximum":127,"minimum":0,"title":"Position","type":"integer"}},"required":["targets"],"title":"MacroConfig","type":"object"},"MacroTarget":{"description":"A single destination routed to a macro knob.","properties":{"dest":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Parameter name (e.g. 'filter_frequency') or macro destination index (0-70). Use get_parameter_reference for the full list.","title":"Dest"},"start":{"default":0,"description":"Value when knob is at 0.","maximum":127,"minimum":0,"title":"Start","type":"integer"},"end":{"default":127,"description":"Value when knob is at 127.","maximum":127,"minimum":0,"title":"End","type":"integer"},"depth":{"default":127,"description":"Modulation depth. 127=full, 64=none.","maximum":127,"minimum":0,"title":"Depth","type":"integer"}},"required":["dest"],"title":"MacroTarget","type":"object"},"MixerTrackConfig":{"description":"Mixer settings for a synth track.","properties":{"level":{"default":100,"maximum":127,"minimum":0,"title":"Level","type":"integer"},"pan":{"default":64,"maximum":127,"minimum":0,"title":"Pan","type":"integer"}},"title":"MixerTrackConfig","type":"object"},"ModMatrixEntry":{"description":"A single mod-matrix routing slot.","properties":{"source1":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source1"},"source2":{"anyOf":[{"enum":["direct","velocity","keyboard","LFO 1+","LFO 1+/-","LFO 2+","LFO 2+/-","env amp","env filter","env 3"],"type":"string"},{"type":"integer"}],"default":"direct","title":"Source2"},"dest":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"}],"description":"Destination parameter (use space-separated names, NOT snake_case).","title":"Dest"},"destination":{"anyOf":[{"enum":["osc 1 & 2 pitch","osc 1 pitch","osc 2 pitch","osc 1 v-sync","osc 2 v-sync","osc 1 pulse width / index","osc 2 pulse width / index","osc 1 level","osc 2 level","noise level","ring modulation 1*2 level","filter drive amount","filter frequency","filter resonance","LFO 1 rate","LFO 2 rate","amp envelope decay","filter envelope decay"],"type":"string"},{"type":"integer"},{"type":"null"}],"default":null,"description":"Alias for 'dest'. Either 'dest' or 'destination' may be used.","title":"Destination"},"depth":{"default":0,"description":"Signed depth: -64 to +63. 0 = no modulation.","maximum":63,"minimum":-64,"title":"Depth","type":"integer"}},"required":["dest"],"title":"ModMatrixEntry","type":"object"},"PatternConfig":{"description":"A named pattern containing track data.","properties":{"length":{"default":16,"description":"Pattern length in steps.","maximum":32,"minimum":1,"title":"Length","type":"integer"},"tracks":{"additionalProperties":{"anyOf":[{"$ref":"#/$defs/SynthTrackConfig"},{"$ref":"#/$defs/DrumTrackConfig"}]},"propertyNames":{"enum":["synth1","synth2","drum1","drum2","drum3","drum4","midi1","midi2"]},"title":"Tracks","type":"object"}},"title":"PatternConfig","type":"object"},"ReverbConfig":{"description":"Reverb engine parameters.","properties":{"type":{"anyOf":[{"maximum":5,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Type"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"damping":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Damping"}},"title":"ReverbConfig","type":"object"},"ScaleConfig":{"description":"Musical scale applied to synth/MIDI note quantization.","properties":{"root":{"default":"C","enum":["C","C#","Db","D","D#","Eb","E","F","F#","Gb","G","G#","Ab","A","A#","Bb","B"],"title":"Root","type":"string"},"type":{"default":"chromatic","enum":["natural minor","minor","major","dorian","phrygian","mixolydian","melodic minor","harmonic minor","bebop dorian","blues","minor pentatonic","hungarian minor","ukranian dorian","marva","todi","whole tone","chromatic"],"title":"Type","type":"string"}},"title":"ScaleConfig","type":"object"},"SidechainConfig":{"description":"Sidechain compressor settings for a synth or MIDI track.","properties":{"preset":{"anyOf":[{"maximum":7,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Sidechain preset (1-7). Required to activate sidechain on hardware. 0 or omit = OFF.","title":"Preset"},"source":{"default":"off","enum":["drum1","drum2","drum3","drum4","off"],"title":"Source","type":"string"},"attack":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Attack"},"hold":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Hold"},"decay":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Decay"},"depth":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Depth"}},"title":"SidechainConfig","type":"object"},"SynthSoundConfig":{"description":"Synth engine patch configuration (synth1, synth2).","properties":{"preset":{"anyOf":[{"enum":["pad","bass","lead","pluck"],"type":"string"},{"type":"null"}],"default":null,"description":"Base preset to start from before applying params.","title":"Preset"},"name":{"anyOf":[{"maxLength":16,"type":"string"},{"type":"null"}],"default":null,"description":"Patch name.","title":"Name"},"params":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"default":null,"description":"Synth parameter name -> value (0-127). Use get_parameter_reference for names.","title":"Params"},"mod_matrix":{"anyOf":[{"items":{"$ref":"#/$defs/ModMatrixEntry"},"type":"array"},{"type":"null"}],"default":null,"description":"Mod matrix routing slots.","title":"Mod Matrix"},"macros":{"anyOf":[{"additionalProperties":{"$ref":"#/$defs/MacroConfig"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Macro knob definitions. Keys are '1' through '8'.","title":"Macros"}},"title":"SynthSoundConfig","type":"object"},"SynthStepConfig":{"additionalProperties":false,"description":"A single step in a synth or MIDI track.\n\nOnly these fields are allowed — no others. Use 'macros' for p-locks, NOT 'params' or 'p-locks'.","properties":{"note":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"MIDI note number. Mutually exclusive with 'notes'.","title":"Note"},"notes":{"anyOf":[{"items":{"maximum":127,"minimum":0,"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Multiple MIDI notes for polyphony. Mutually exclusive with 'note'.","title":"Notes"},"velocity":{"anyOf":[{"maximum":127,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Velocity"},"gate":{"anyOf":[{"maximum":16,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Gate length in steps (e.g. 0.5 = half step, 2.0 = two steps). Max 16.","title":"Gate"},"tie":{"default":false,"description":"Tie forward — sustain this note into the next triggered step.","title":"Tie","type":"boolean"},"enabled":{"default":true,"title":"Enabled","type":"boolean"},"probability":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Playback probability, 0.0 to 1.0.","title":"Probability"},"macros":{"anyOf":[{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Per-step macro p-locks. Keys are macro numbers '1'-'8', values are 0-127. These lock the macro knob position for this step.","title":"Macros"}},"title":"SynthStepConfig","type":"object"},"SynthTrackConfig":{"additionalProperties":false,"description":"Track data for a synth or MIDI track within a pattern.","properties":{"steps":{"additionalProperties":{"$ref":"#/$defs/SynthStepConfig"},"description":"Step index (as string, e.g. '0', '4') -> step data.","title":"Steps","type":"object"},"macros":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["1","2","3","4","5","6","7","8"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level macro automation. Keys are macro numbers '1'-'8'. Values are {step_position: value} dicts. Float positions supported for micro-step resolution (e.g. '2.5').","title":"Macros"},"mixer":{"anyOf":[{"additionalProperties":{"additionalProperties":{"maximum":127,"minimum":0,"type":"integer"},"type":"object"},"propertyNames":{"enum":["reverb_send","delay_send","level","pan"]},"type":"object"},{"type":"null"}],"default":null,"description":"Track-level mixer automation. Keys: 'reverb_send', 'delay_send', 'level', 'pan'. Values are {step_position: value} dicts.","title":"Mixer"}},"title":"SynthTrackConfig","type":"object"}}},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"save_synth_patch","kind":"act","impl":"imperative","description":"Store the live patch of Synth 1 or 2 into a slot of the pack's patch bank (0-127) so select_patch and the Preset view can recall it; included in Export pack.","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"slot":{"type":"integer","minimum":0,"maximum":127,"description":"Bank slot."}},"required":["synth","slot"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_synth_patch","kind":"answer","impl":"imperative","description":"Read the live patch of Synth 1 or 2: name, all parameter values, active mod matrix slots (named sources/destinations, signed depth) and macro assignments.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."}},"required":["synth"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_drum_params","kind":"act","impl":"imperative","description":"Set drum track parameters: level, pitch, decay, distortion, eq, pan (0-127), sample (0-63, the drum sample slot), reverb_send, delay_send. E.g. {\"pitch\": 80, \"sample\": 2}.","inputSchema":{"type":"object","properties":{"drum":{"type":"integer","minimum":1,"maximum":4,"description":"Drum track: 1-4."},"params":{"type":"object","description":"param_name -> value.","minProperties":1,"additionalProperties":{"type":"integer","minimum":0,"maximum":127}}},"required":["drum","params"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_project_params","kind":"act","impl":"imperative","description":"Set project-level parameters: FX sends, mixer, master filter, reverb, delay, FX bypass, sidechain. Names:\n- reverb_<track>_send / delay_<track>_send (track: synth1, synth2, midi1, midi2, drum1-4)\n- <track>_level / <track>_pan\n- master_filter_frequency (0-63 low-pass, 64 off, 65-127 high-pass), master_filter_resonance\n- reverb_type (0-5), reverb_decay, reverb_damping, reverb_preset (0-7)\n- delay_time, delay_time_sync (0-35), delay_feedback, delay_width, delay_lr_ratio (0-12), delay_slew_rate, delay_preset (0-15)\n- fx_bypass (0/1)\n- sidechain_<synth1|synth2|midi1|midi2>_preset (1-7 activates, 0 off), _source (0-3 = drum1-4, 4 = off), _attack, _hold, _decay, _depth\nE.g. {\"reverb_synth1_send\": 60, \"delay_feedback\": 80, \"sidechain_synth1_preset\": 3, \"sidechain_synth1_source\": 0}.","inputSchema":{"type":"object","properties":{"params":{"type":"object","description":"param_name -> value.","minProperties":1,"additionalProperties":{"type":"integer","minimum":0,"maximum":127}}},"required":["params"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"set_macro","kind":"act","impl":"imperative","description":"Turn a macro knob (1-8) on Synth 1 or 2 to a position 0-127. Macros ADD to the patch base values through the assignments shown by get_macros.","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"macro":{"type":"integer","minimum":1,"maximum":8,"description":"Macro knob 1-8."},"value":{"type":"integer","minimum":0,"maximum":127,"description":"Knob position."}},"required":["synth","macro","value"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"get_macros","kind":"answer","impl":"imperative","description":"Macro knob layout for both synths: current knob positions and, per macro, the parameters it moves with their start/end knob range and signed depth.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"play_notes","kind":"act","impl":"imperative","description":"Audition notes right now (independent of the sequencer). Pass a track name, or a channel like the hardware: 0 = synth1, 1 = synth2, 2 = midi1, 3 = midi2, 9 = drums (notes 60, 62, 64, 65 hit drums 1-4). Middle C = 60.","inputSchema":{"type":"object","properties":{"notes":{"type":"array","items":{"type":"integer","minimum":0,"maximum":127},"minItems":1,"maxItems":16,"description":"MIDI note numbers; several = chord."},"track":{"type":"string","enum":["synth1","synth2","midi1","midi2","drum1","drum2","drum3","drum4"],"description":"Track name (preferred)."},"channel":{"type":"integer","minimum":0,"maximum":15,"description":"Hardware-style channel if no track is given."},"velocity":{"type":"integer","minimum":1,"maximum":127,"description":"Velocity (default 100)."},"duration_ms":{"type":"integer","minimum":20,"maximum":20000,"description":"Hold time in ms (default 500)."}},"required":["notes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"play_drum","kind":"act","impl":"imperative","description":"Trigger one drum hit right now.","inputSchema":{"type":"object","properties":{"drum":{"type":"integer","minimum":1,"maximum":4,"description":"Drum track: 1-4."},"velocity":{"type":"integer","minimum":1,"maximum":127,"description":"Velocity (default 100)."}},"required":["drum"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"list_drum_samples","kind":"answer","impl":"imperative","description":"List the 64 drum samples of the loaded pack with their index numbers and names (4 pages of 16). Use the index with set_drum_params {\"sample\": n} or sounds.drumN.sample.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"page":{"type":"integer","minimum":1,"maximum":4,"description":"Only this page (1-4); omit for all."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"list_patches","kind":"answer","impl":"imperative","description":"List the synth patches of the loaded pack with their index numbers (Web Tracks extra). Use the index with select_patch.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"select_patch","kind":"act","impl":"imperative","description":"Load a patch from the pack's patch bank onto Synth 1 or 2 by index (see list_patches).","inputSchema":{"type":"object","properties":{"synth":{"type":"integer","minimum":1,"maximum":2,"description":"Synth number: 1 or 2."},"patch_number":{"type":"integer","minimum":0,"maximum":127,"description":"Patch index in the bank."}},"required":["synth","patch_number"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"list_projects","kind":"answer","impl":"imperative","description":"List the project bank slots that hold a project (Web Tracks extra).","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"select_project","kind":"act","impl":"imperative","description":"Load a project from the bank by slot (0-63), replacing the live project. queued = true switches at the end of the current pattern while playing. An empty slot loads an init project.","inputSchema":{"type":"object","properties":{"project_number":{"type":"integer","minimum":0,"maximum":63,"description":"Project slot 0-63."},"queued":{"type":"boolean","description":"Switch at the pattern end while playing.","default":false}},"required":["project_number"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"export_song_to_project","kind":"act","impl":"imperative","description":"Save the live project into a bank slot (0-63), like pressing Save on the hardware. Defaults to the current slot, else the first empty one. Optional name renames the project (16 chars fit the hardware display). Use download_project to get the .ncs file.","inputSchema":{"type":"object","properties":{"slot":{"type":"integer","minimum":-1,"maximum":63,"description":"Target slot; -1 = current/first empty."},"name":{"type":"string","description":"Project name.","maxLength":32}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"download_project","kind":"act","impl":"imperative","description":"Download the live project as a hardware-ready .ncs file in the user's browser (Web Tracks extra; the file can be sent to a Circuit Tracks with Components or the hardware MCP server).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"},{"name":"undo","kind":"act","impl":"imperative","description":"Restore the project state from before the last structural agent call: load_song, set_pattern, set_track, clear_pattern, set_song, create_synth_patch, edit_synth_patch, select_patch, select_project. Live tweaks (tempo, macros, mutes, synth/drum/project params) are not undone. Repeat to go further back (up to 12 states).","inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/webtracks.namirsab.dev.png","apiSurface":"polyfill","toolCount":38}}