Wire MixLens into the tools you already use.
Signed webhooks, bearer-token API, a desktop CLI with watch-folder mode, an MCP server for Claude Desktop / Cursor, and a Discord relay you can fork. Producers stop refreshing the tab.
Score any bounce from your terminal.
The CLI ships with watch-folder mode, a CI gate flag, and a macOS Finder Service. Same endpoints the web UI hits.
$ mixlens analyze track.wav --wait mixlens: score=84 band=pass mix_id=…
Long-lived bearer tokens unlock every endpoint for desktop apps, scripts, and third-party clients.
- Reveal-once secrets, SHA-256 hashed at rest
- Per-token last-used timestamps for auditing
- Same endpoints the web frontend uses — no second-class API
POST JSON to your endpoint when analysis lands, a render completes, or anything fails.
- HMAC-SHA256 signed (same scheme as Stripe / GitHub)
- Retry backoff 1m → 5m → 30m → 2h with delivery log per attempt
- Subscribe per-event: analysis.complete / .failed, render.complete / .failed
Analyze, render, and watch-folder from your terminal. macOS Finder Service ships in the same install.
- `mixlens analyze track.wav` — upload + score in one call
- `mixlens watch ~/Bounces` — auto-upload every new export
- `--fail-on-band` exit codes for CI gating
- Token lives in macOS Keychain, never in plaintext
In-DAW analyze + render. Use the watch-folder + CLI today for the same outcome without a plugin install.
- Watch-folder mode covers the bounce → analyze path
- Native plugin is a multi-month commit; demand-gated
Drop the MCP server into Claude Desktop or Cursor and say 'fix this bounce' — the model handles upload, analyze, and render.
- Seven tools: whoami, list_mixes, get_mix, analyze_mix, render_corrected, auto_fix, get_render
- auto_fix mirrors the web UI's defaulting — one call after analysis lands
- Responses pruned so the LLM gets structured fields, not noise
- Runs locally; audio bytes go direct to R2
Producers get a Discord ping the moment a render lands, score + before/after included.
- Self-host the FastAPI relay anywhere with HTTP egress
- Embed color tracks readiness band (green / amber / red)
- Verifies webhook signatures — no trust in headers alone
First-class Slack app with channel-picker OAuth — for now use the webhook relay pattern.
- Webhook → Slack incoming-webhook works today (clone the Discord relay)
- First-class app + channel picker on the roadmap
Block merges on bounces that don't hit the band you require — pair the CLI with any CI runner.
- `mixlens analyze track.wav --wait --fail-on-band=almost`
- Exit 2 = gate tripped, exit 1 = upload error, exit 0 = pass
- Parseable stdout line: score, band, mix URL
Same endpoints as the web app. Same audio guarantees.
Everything above is a thin wrapper around the public API: presigned PUT for upload, structured payloads for analysis and renders. Signed webhooks fan events back out. Build whatever bridge you need; we'll keep the schemas stable.