Repository navigation
ReaLackey v0.4.0-beta.1
Pre-releaseAdded
-
Take envelopes. The assistant can now read and edit the automation lanes
drawn on an item's take:get_take_envelopes/get_take_envelope_pointslist
them,create_take_envelopemakes a volume, pan, mute, or pitch lane (returning
an existing one untouched rather than hiding it), and
insert_take_envelope_point/set_take_envelope_point/
delete_take_envelope_pointedit the curve. All edits are confirmation-gated and
undo-wrapped. Take envelope times are item-relative and scaled by the take's
playrate; the tools say so, so the model doesn't mistake them for project seconds. -
Take FX are now fully editable, not just readable.
add_take_fxputs a
plugin on a take's FX chain andset_take_fx_paramchanges a parameter
(normalized 0..1, reporting the resulting display value) — closing the odd
asymmetry where the assistant could list a take FX's parameters but only ever
change them on tracks. Both confirmation-gated and undo-wrapped. -
Speech-to-text (transcription) — a new provider type alongside chat. The
Providers dialog is now tabbed by role (Chat / Transcription); on the
Transcription tab, Add → "OpenAI Whisper" (or "Local Whisper server")
and set it as the default, and the assistant can transcribe a media item's audio
to text with timestamps — ask it to caption, summarise, or find spoken words in
the selected item, then act on the text. Cloud transcription is consent-gated (the
audio is uploaded); a local whisper server (whisper.cpp, faster-whisper, LocalAI)
keeps it on-machine. Long items are transcribed in chunks automatically.whisper-1
(or a local whisper model) returns timestamped segments; OpenAI'sgpt-4o-transcribe
returns text only. Each role has its own default account. Bindable actions
(also under Extensions → ReaLackey) transcribe the selected item straight to its
notes, a plain-text file, or an SRT subtitle file — no chat needed. File
outputs are written next to the source media and never overwrite an existing file
(a numbered variant is used instead); the result is spoken and its path announced.
A progress dialog (progress bar + Cancel) shows while a transcription action
runs, so sighted users get visible progress and can cancel part-way through. -
Clear the conversation — a Clear button next to Send empties the chat and
the assistant's memory of it. Handy when switching to a different provider: without
it the next message re-sends the whole previous conversation to the new model, which
costs tokens and can fail outright where two providers disagree about how a past turn
should look (a reasoning block or a tool call the new one won't accept). The button
is reachable by Tab and announced; it does nothing mid-reply, so it can't cut a
message off half-written. -
Advanced mode (auto-approve edits): a toggle that lets the assistant apply
changes without asking for confirmation each time. Flip it from Extensions
→ ReaLackey → "Advanced mode (auto-approve edits)" (the menu item shows the
current on/off state) or bind the "ReaLackey: Toggle advanced mode" action to
a key. Off by default; the state persists. TheRAAI_CONFIRMenvironment
variable still overrides it. (Edits remain undoable in REAPER, and each tool the
assistant runs is still announced — you're just not prompted per change.) -
Cut by text — edit audio the way modern video editors do: transcribe an
item, then cut it down to a shortened transcript. Ask the assistant to "cut out
the part where I fumble the intro" (or give it the transcript with the unwanted
lines deleted) and it transcribes the item, works out which words you dropped,
and cuts those spans out of the audio, sliding the kept parts together so
they play back-to-back. It's deletion-only for now (moving text around isn't
reordered yet), and it needs a transcription provider that returns per-word
timings —whisper-1or a local Whisper server (OpenAI'sgpt-4o-transcribe
doesn't). By default only the target item is compacted; ask it to "ripple the
track" to also pull later items on that track earlier. The cut is confirmed
before it runs and is fully undoable. There's also a lower-level
remove_item_time_rangesthe assistant can use to cut explicit time ranges
out of an item (e.g. "remove 12s–15s") without transcribing. -
Cut-by-text editor — a keyboard-driven editor for cutting by text yourself,
built accessibility-first. Bind "ReaLackey: Cut selected item by text" (or run
it from Extensions → ReaLackey → "Cut selected item by text…", or ask the
assistant to open it): it transcribes the item and opens a modal where you
navigate the transcript by keyboard — Up/Down move by sentence (and read
the whole sentence), Left/Right by word (staying within the sentence), each
landing plays that snippet of audio so you can edit by ear. Space selects a
word, Shift+arrows extend the selection, Delete removes words (struck
through, reversibly), Ctrl+Z / Ctrl+Y undo/redo, and Tab reaches the
Confirm / Cancel buttons. A three-way audio-feedback setting (spoken word,
audio snippet, or both) lets you tune what you hear on each move; a Play button
previews the edited result. Confirm cuts exactly what you removed, as a single
undo point. Deletion-only for now (moving text is a later step); needs the HTML
pane (Windows/macOS) and a word-timestamp model (whisper-1or local Whisper).
A Keys button in the editor's header expands the full shortcut list, so
the keys are discoverable without leaving the editor; a Report button
copies a whole-clip, per-word diagnostic table to the clipboard — transcript
span, measured span, the drift between them, the gap to the next word, and,
for each edge the analysis could not measure, why — with a header that
summarises causes across the clip. -
Local word-timing refinement (optional) — cut-by-text is only as precise
as each word's timestamps, and plain Whisper endpoints are often 50-200 ms
off: the difference between a clean cut and a clipped consonant. A new
per-provider setting on the Transcription tab, "Refine word timings
locally", re-times every word on your own machine with a forced-alignment
model after each transcription — no audio leaves your computer for this step.
Off by default; enabling it offers a one-time download (~350 MB: the model
plus the ONNX Runtime libraries) with progress and Cancel, every file checked
against pinned digests. On Windows, "Use the graphics card for
refinement" runs the aligner via DirectML on any DirectX-12 GPU — measured
7-8x faster than the CPU even on a 2016 GTX 1060 — using a higher-precision
model (~670 MB download) and falling back to the CPU when no usable GPU
exists. For machines where a large download is not an option, each release
now also shipsrealackey-<version>-with-models-<platform>.zipwith the
CPU set pre-bundled: merge its folders into the REAPER resource path and
nothing needs downloading. macOS: Apple Silicon only (ONNX Runtime no longer
provides Intel-mac builds); elsewhere transcription simply runs without
refinement. The alignment model (Meta AI's MMS forced aligner) is licensed
CC-BY-NC 4.0 — non-commercial use. -
Templates — the assistant can now list, load, and save REAPER
templates. Ask it to list your track and project templates, load one by name (a
track template adds its tracks to the current project; a project template opens a
new project from it, leaving your current one alone), or save the selected
track(s) as a track template (with options for envelopes and media; existing
templates are never overwritten — a numbered variant is used). Saving the whole
project as a project template isn't included, since there's no way to do it without
re-pointing your current project at the template file — use REAPER's File menu for
that. -
Perplexity (Agent API) provider (Add → "Perplexity (Agent API, web-grounded)").
Unlike Perplexity's plain Sonar endpoint — which can't call tools and so can't
drive REAPER — the Agent API speaks the OpenAI Responses protocol with
client-side function calling, so the assistant can control REAPER and ground
its answers on live web results (web_search) in one loop. It's multi-provider:
pick a strong agentic model by id (openai/gpt-5.1,anthropic/claude-…, or
sonar-…) — the Model field is free-text (the Agent API has no model list to
fetch). Fixed endpoint, needs a Perplexity API key; web grounding is always on. -
oMLX provider preset (Add → "oMLX (local, Apple Silicon)"). oMLX is a native
MLX inference server for Apple Silicon (continuous batching, SSD KV cache) that's
faster than Ollama on a Mac. It exposes an OpenAI-compatible endpoint, so it uses
the existing adapter — the preset just points athttp://localhost:8000/v1; pick
your model with Fetch models…. (Any oMLX instance already worked via the
generic "OpenAI-compatible" provider; this is just one-click setup.)
Changed
- The "still working" feedback now says what the assistant is doing instead of
how many seconds have passed. The status line shows the live activity — "Reasoning…",
"Transcribing the audio", "Reading the project", "Running: set fx param", "Writing
the reply…" — and the periodic spoken reminder announces that activity rather than
"Still working… N seconds". (The activity is derived from the tool being run and the
reasoning/answer phase; the model's exact internal reasoning isn't exposed, so
during thinking it shows "Reasoning…".)
Fixed
- Connections behind antivirus / corporate proxies now work. ReaLackey trusted
only its own bundled list of certificate authorities, so on machines where security
software or a company proxy inspects HTTPS traffic (common with Kaspersky, ESET,
360, Zscaler and similar), every request failed with an unhelpful "error sending
request" — even though the same URL opened fine in a browser. It now also trusts the
certificates installed in your operating system's store, like your browser does.
(#3) - Network errors now say what actually went wrong. Instead of just "error sending
request for url (…)", the message names the real cause — an untrusted certificate, a
DNS failure, a refused connection, a timeout — and adds a hint for the ones you can
act on. This applies to fetching models and to chat/transcription requests. - Fetch models now authenticates with the top (highest-priority) key from the
key list — the one that would actually be used to send — instead of the "Add
key" input field or the stale saved key. Reordering or editing the key list and
then fetching (before saving) used the wrong key; typing into the Add-key field no
longer overrides the configured list either. (Falls back to a just-typed key only
when the list is empty, e.g. a brand-new account before you press Add.) - Screen-reader announcements were spoken twice (most noticeably under
VoiceOver): the assistant announced through both OSARA and the webview's
aria-live region, so a reader observing both channels heard everything doubled.
It now speaks through one channel — OSARA when it's present (focus-independent,
both platforms), and the aria-live region only as the fallback when OSARA isn't —
so each announcement is spoken once. - The message field no longer makes a screen reader recite a long instruction
string every time it gets focus. Its accessible name is now just "Message
the assistant" and the placeholder is a short prompt; the Enter / Alt+number /
Alt+P shortcuts moved into an optional, collapsed "Keyboard shortcuts"
section under the composer. Nothing is announced when you focus the field —
previously the full instructions lived in the field's accessible name and
placeholder, so VoiceOver (and NVDA) re-read them on every focus. - macOS: Alt+number message reading is now reliable. Jumping to a message
(Alt+1 … Alt+0) read it only intermittently on the Mac because it relied on
moving focus to the message heading, and VoiceOver only sometimes announces a
programmatic focus change on the WebKit view. The read now goes through the
same aria-live channel the copy confirmation uses — reliable on VoiceOver and
NVDA alike — and it announces the message's actual text, so navigating to an
assistant message now reads the response rather than just "Assistant".