john mark lowry
§ lab · 2026–present

AI guitar tone engine

Describe a tone in plain English — “Mayer’s Gravity, live” — and an agent dials it into the amp sims in real time.

01 · the moment

I studied music theory and jazz guitar before I ever shipped software, and tone-chasing is the guitarist's oldest time sink — an hour of knob-twiddling to approximate a sound you can describe in one sentence. The sentence is the interface I actually wanted: plug in, say “Gravity, live version,” and play.

02 · the reframe

The hard part was never the AI. REAPER's built-in HTTP control surface has no verbs for plugin parameters at all — so before any model can touch a knob, something has to exist that can. The real build was the bridge: a long-running Lua script inside REAPER doing file-based IPC with a Python controller, plus a one-shot enumerator that dumps every parameter of every plugin — index, range, current value — into structured JSON. Build the system first; the model comes last.

03 · the architecture

A Claude agent with tool use sits on top of a tone knowledge base — per-plugin parameter maps with role aliases (so “treble” resolves to the right knob on each amp), 25 documented artist tones, a vocabulary file mapping words like “warm” and “scooped” to parameter tendencies, and genre defaults. The agent proposes settings as structured output; every value is validated against the enumerated map before it touches the live FX. A FastAPI server exposes it over REST and WebSocket to a chat-style web UI with live parameter state at 2 Hz.

One desktop shortcut takes the rig from cold to playing in about nine seconds — REAPER boots, the bridge heartbeats, the server launches, the browser connects.

Two flows: the nine-second cold start from script to connected browser, and a tone request from plain English through knowledge-base reasoning and parameter validation to the live amp sims
cold start and a tone request — validation against the enumerated map is the step that keeps it honest
04 · the outcome

It works — “make it brighter” reads the current state and adjusts; “something heavier” swaps amp sims; presets save and recall, including the six-effect vocal chain. The roadmap runs toward reference-audio tone matching (spectral analysis → parameter mapping) and hands-free control. It is also the most honest demo I have of the working method: same spec-first, knowledge-base-grounded, validate-everything architecture as the enterprise tools — built for the thing I loved first.

view the architecture
ai guitar tone engine — architecture (as it runs today)

  strat -> scarlett 4i4 (hi-z) -> reaper (live sound template)
                                     |
                                     |  hosts:
                                     |    track 1: jmx + nolly x amp sims
                                     |    track 2: 6-fx vocal chain
                                     |    track 3: analog lab (keys, midi)
                                     v
        bridge.lua (long-running reascript inside reaper)
            ^   file-ipc: _cmd_*.json / _resp_*.json
            |   heartbeat: _bridge_alive.json
            v
        python ToneController (get / set / snapshot / preset)
            ^
            |
   agent_cli.py (repl)          web_server.py (fastapi :3000)
   claude tool-use              rest + websocket -> web ui
                                2 hz live param state

knowledge base injected into the system prompt:
  plugins/   per-amp param names, ranges, role aliases
  artists    25 named tones (gravity live, texas flood,
             comfortably numb, polyphia clean lead...)
  vocabulary tone words -> parameter tendencies
  genres     defaults per genre
  delay      slapback, dotted-eighth, ...

every parameter change is validated against the
enumerated map before it touches the live fx.
the signal chain as it actually runs — from the project's own state-of-the-system doc.

Claude is the interface, not the system. The enumerated parameter map and the tone knowledge base are the actual product — the same rule as every tool at work, pointed at a Stratocaster.

the insight
ran onPython + FastAPI · Claude API (tool use) · Lua / ReaScript · REAPER · Neural DSP VST3 · WebSocket + file-IPC bridge

← all work