RC Surface 1.0.0
RC Surface turns a phone browser into a performance, mix, mapping and sensor controller for Ableton Live 12. Nothing to install on the phone: open the panel in Live, scan the QR code, play. The host side is an Ableton Extensions SDK extension; the phone side is plain browser JavaScript served over your own Wi-Fi.
1.0.0 is the first release built and tested as a finished instrument, not a preview. Everything since 0.7.0 (2026-08-27) went into making the control path trustworthy: every write to Live goes through one measured, serialized lane per parameter; every modulator (LFO, stutter, pad envelope, snapshot morph) obeys the same tempo and the same ceiling; every control can be configured in place; and the whole thing was rehearsed on real hardware before this tag was cut.
Em português: Guia do usuário · Instalação · FAQ
Why this is 1.0
The write path is measured, not guessed. RC Surface writes to Live parameters through a single-flight actuator: one write in flight per target, the newest value always wins, no queue of stale positions behind a slow parameter. On the reference setup (Live 12.4 Beta, Windows 11) that lane sustains 48 writes per second per parameter (21 ms per completed write), and every LFO shape ceiling in the product is derived from that number: sine up to 4 Hz, triangle and ramps up to 3 Hz, square up to 12 Hz. Faster settings slow down by musical octaves instead of turning into noise, and the interface shows the effective rate. The same limit shapes stutters, pad envelopes and snapshot morphs, so nothing in the surface promises Live something it cannot record as automation.
One clock for every modulator. LFOs and stutters lock to Live's tempo through AbletonOSC when it is installed and fall back to the SDK clock or a free-running clock otherwise. Rate and subdivision changes keep the oscillator phase; Play, resume and seek re-align it to the beat. SYNC offers straight, triplet and dotted divisions from 8 beats down to 1/64, and Auto picks the subdivisions that are actually reachable at the current tempo.
Every control is configurable where it lives. Config Mode (CFG) gives each pad, knob, fader, toggle, stutter and XY pad its own overrides: mode, LFO shape, subdivision, swing, XY friction and bounce. Open CFG from the phone header, or right-click a control in the desktop client. Changing an LFO's shape while it runs is pushed to Live immediately. Long-press CFG to clear every override.
Rehearsed on hardware. The release candidate went through owner acceptance sessions on a phone and a desktop browser against Live 12.4 Beta: all six tabs, MAP, snapshots, transport, trigger notes and every LFO shape printed to Live automation. The bugs those sessions found are fixed in this build.
What changed since 0.7.0
Identity
- Renamed from "Ableton RC Surface" to RC Surface, following Ableton's branding and trademark guidelines for Extensions. Manifest, UI, documentation, landing page, kit and artifact names all changed.
- The data folder moved from
worm.ableton-rc-surfacetoworm.rc-surface. The release kit ships a migrator (Migrate-RC-Surface-Data.cmd/.ps1on Windows,Migrate RC Surface Data.commandon macOS) that copies your mappings, presets and certificates into the new folder without moving or overwriting anything.
Performance surface
- Config Mode (CFG) — per-control overrides for mode, LFO shape, subdivision, swing and XY physics, persisted per control; a clear-all gesture; CFG appears only on the tabs where it applies.
- LFOs — five shapes (sine, triangle, ramp up, ramp down, square) with a live waveform preview in the SYNC settings, per-shape ceilings, phase-preserving rate changes, slower subdivisions up to 8 beats, effective-rate readouts and beat re-alignment on Play.
- Stutters — horizontal drag sets the rate, vertical drag sets the depth, with a depth bar inside the gate; swing and ratchet aware; unsupported divisions are disabled by tempo instead of failing silently.
- Pads — mode D exposes its envelope in Deep Sync Settings: under SYNC the burst length comes from a subdivision grid and the attack is a percentage of it.
- XY pads — the physics puck no longer sticks in corners; friction and bounce are per-pad CFG settings.
- MIX — eight knobs and eight faders; faders move one finger pixel per thumb pixel regardless of screen height; double-tap or double-click resets a fader to unity (or centre for bipolar targets).
Mapping
- MAP on the phone — bind any control without leaving the surface: a hierarchical Song / Main / Track / Return / Device / Parameter picker with search, per-axis XY selection, presets, inline ranges and curves, and Trigger Note.
- Target Scale — Auto, Linear or Geometric conversion. Auto keeps mixer and tempo travel conservative and gives frequency and cutoff parameters musically useful sweeps; feedback applies the exact inverse, so pickup and the curve dot agree with Live.
- Every mapping family clamps and quantizes at Live's real boundary; removing a mapping cancels its unsent writes and releases held notes.
Snapshots
- The SNP tab is complete: capture, recall and clear slots; morph between them on a grid with a Free (seconds) or Sync (musical length) transition; or blend four slots at once with the XY vector, which applies instantly.
- Recalling a snapshot restores only what was captured — stutter depths that were zero stay zero.
Audio (AUD)
- Twelve mappable descriptors: transient, kick, snare, brightness, centroid, rolloff, flux, flatness, spread and low/mid/high bands. Kick and snare are attack-weighted spectral heuristics, each measured inside its own band against that band's recent energy, so a kick and a hat drive different controls.
- K-weighted loudness (ITU-R BS.1770-4): momentary, short-term and integrated, with the band controls mapped in LU and the gain knob acting as a dB offset.
- Continuous short-window capture through AudioWorklet with a labelled compatibility fallback; superseded values are discarded instead of replayed as stale attacks.
- A live 2.5-second signal timeline, grouped controls, browser audio-input selection with explicit failure and unplug feedback, and a contextual CALIBRATE that sets control gain from five seconds of you actually playing.
Vision (VID)
- Single-hand tracking with bundled MediaPipe Hands (no CDN, works offline).
- Only intentional inputs are exposed: direct X/Y/Z, four opt-in detectors, Victory rotation, Pinch Clutch X/Y/Z that holds its value between pinches and re-anchors after a brief release, and three numbered learned-pose slots.
- Learned poses are hand-specific: teach a pose with the hand you will perform it with. Recognition presets (Precision / Balanced / Flexible) and per-axis smoothing are exposed where they matter and hidden where they do not.
- Contextual CALIBRATE checks light and tracking and enables only the camera modes it could confirm; hand loss, camera stop and absent-hand cadence share one release contract.
Transport and sync
- Transport Lite over AbletonOSC: play/stop, previous/next locator, jump by name, a visual metronome on the TRN button (beat one green, other beats blue), and Deep Sync Settings for clock source, subdivisions, phase offset and swing.
- The link survives Live's own restarts: Live rebuilds the AbletonOSC control surface after a Set loads, which used to leave RC Surface with dead listeners; the extension now detects a quiet link and re-registers. It also stopped polling Live's selection twice a second, which had been filling the AbletonOSC log.
Max for Live devices
- RC-Midi-Receiver v2.2 — no network at all. Trigger notes travel through a versioned SDK parameter with ordered note on/off and captured releases; old UDP receivers are rejected instead of broadcasting. SDK Notes arms itself after the device finishes loading, after discarding anything the Set restored, so a pad plays without clicking the device first. Panic disarms until clicked.
- RC-Audio-Sender v2 — an actual Max audio effect with transparent stereo pass-through, feeding the Receiver over Max's internal bus as an explicit opt-in.
Desktop client
- The phone UI runs in a desktop browser with keyboard nudges on every continuous control, right-click CFG, and layouts that give the camera and the audio workspace real width. Use one controller at a time: phone or desktop.
Security
- LAN traffic is HTTPS/WSS only; plain HTTP is loopback-only for the Live panel.
- Controller and admin tokens rotate on every server start; a stale QR, cookie or open page cannot keep write access after a restart.
- The panel page, which embeds both tokens, is served only to the admin token; its assets stay public and token-free.
- Every registered command is authorized explicitly; WebSocket payloads and connections are bounded and heartbeat-reaped; shared surface history is capped; Live track and device names are inserted as text, closing an HTML-injection path.
- Diagnostics and request logs redact credentials; CI runs with read-only tokens and every third-party Action is pinned to a commit.
- The Ableton Extensions SDK and CLI tarballs are no longer part of the repository;
vendor/README.mdexplains how to obtain and verify them.
Documentation
- Landing page with a plan view of every tab, a "New in 1.0" card and bilingual copy; a User Guide (EN and pt-BR) with a new Config Mode chapter; Install, FAQ, Security, Privacy, Compatibility and Customization guides in both languages.
Removed
- Follow Detected Note, the tonal DSP controls, the velocity editor and Audio Lab (unreliable musical results); the native Max LFO experiment; the UDP MIDI receiver.
Requirements
- Ableton Live 12.4.5+ Suite (Beta) with the Extensions SDK host enabled.
- Max for Live (included with Suite) for the two bundled devices.
- A phone with a current browser on the same Wi-Fi as the computer. Chrome on Android and a desktop Chrome are the tested clients.
- Optional: AbletonOSC for Transport Lite and tempo-locked modulators.
Install and upgrade
- Download
RC-Surface-1.0.0.ablxbelow and double-click it; Live installs it into the User Library. Restart Live. - Open the panel from any track's context menu (Extensions → RC Surface: Panel), scan the QR code, and follow INSTALL.md.
- Coming from a 0.x or "Ableton RC Surface" candidate: run the data migrator from the kit before opening the new panel, and replace every old RC-Midi-Receiver in your Sets with the v2.2 device attached below. The old device listened on UDP 9000; the new one does not, and the firewall rule you may have added for it can go.
SHA256SUMS.txtlists the checksums of the three attached files.
Known limitations
- One controller at a time: the phone and the desktop client on the same surface at once produce inconsistent state.
- Learned poses belong to the hand that taught them; the other hand is a mirrored shape and will not match.
- The XY vector morph applies instantly; the transition time applies to grid morphs only.
- Recalling a device preset on a Receiver that is already armed restores the packet before the device can clear it: disarm SDK Notes first.
- Tested on Windows 11 with Live 12.4 Beta; macOS runs the same code in CI but was not rehearsed on stage in this cycle. Safari/iOS is untested.
- Native Track / Audio Lab stays out of the package.
Documentation
Bug reports and field notes go to Issues. Licensed under PolyForm Noncommercial 1.0.0.