Talon 1.0 (Sep 20, 2026)
This is the biggest update ever to Talon. If you run into any issues, the download links on talonvoice.com will still point to 0.4 to make it easier to downgrade. Join the Slack if you need support.
If you appreciate our continued hard work on Talon, please consider subscribing to the Talon Patreon, which also grants you better support and more frequent Talon updates.
- Introducing three new GPU-accelerated speech models (2026-09-20):
- Hum (streaming dictation)
- Song (command recognition + rejection)
- Tone (speaker verification)
- Add Conformer D2 (2026-05-27) model which improves accuracy and has an algorithm for rejecting incorrect commands.
- Add
noise(pop) and noise(dental_click) bindings in .talon files.
- Add Face Expression detection system.
- Add "mixed mode" support for simultaneous dictation + command mode.
- New UI
- Settings
- Command Editor
- Tutorial system
- Heads Up Display w/ adjacent floating subtitles
- Accessibility Inspector
- New Log Viewer design
- Update Window
- Label/Overlay System - look at
actions.list("labels")
- New: memory-safe UI rendering.
- New default .talon-file-only command set, implementing labels, show numbers, text selection / correction, mouse grid (
github.com/talonvoice/default_commands)
- New
axquery system for CSS-style queries against the accessibility hierarchy.
- New
egui based Python UI framework.
- New
skia module, with documentation.
- New docs (
talonvoice.com/docs).
- Add builtin implementation of many actions including
edit on macOS and Windows.
- Add native implementations of core Talon APIs for improved performance and stability.
- Add message timestamps to event log.
- Upgrade dependencies. Notably, Python is now on free-threaded 3.14t, and skia has some backwards-incompatible changes (mostly skia.Path).
- Improve software UI rendering performance.
- Improve UI scaling.
- Fix some voice activity detection bugs.
- Fix
fs_shadow scanning some directories with leading dot.
- Optimize grammar compilation performance (significantly).
- Optimize CPU and memory usage.
- Optimize context switching performance.
- Optimize script reload latency.
- Optimize list caching.
- Change: always consider the "all" mode to be active.
- Change: hide subtitles in screenshots.
- Change: don't compile anchor groups for empty modes (improves Cursorless performance).
- Change: don't copy fully-anchored commands (like
^word$) into anchor groups.
- Change: make the
Phrase object a list[str] subclass.
- Change: organize folder structure for recordings by month (.talon/recordings/2024-10/.flac)
- Change: use
os.PathLike for fs.watch and resource.watch annotations.
- Fix "not mode:" anchor groups.
- Fix spurious list cache flush happening when moving to talon sleep.
- Fix key name changes caused by winit update (e.g. ArrowLeft is now renamed back to Left).
- Fix an exception when printing tracebacks.
- Fix case where
ui.main_screen().main == False.
- Fix update progress bar.
- Fix startup race condition in Canvas.
- Fix some canvas drawing issues.
- Fix Log Viewer lagging by one line.
- Fix Debug Window word wrap overlap.
- Fix slow memory leak from drawing text on canvas.
- Fix support for older versions of macOS.
- Fix numeric accuracy issue in Conformer model.
- Fix webspeech issue where the old language could get stuck when switching languages.
- Fix dynamic list parsing issue.
- Fix high parrot cpu usage.
- Fix ActionImplError stacktrace growing every time it's raised
- Fix NoValue type annotation repr.
- Fix regression in settings causing NoValue to be returned.
- Fix tray menu glitches caused by Camera list refreshes.
- Fix
fs_shadow errors in the log.
- Fix context matching user-defined scopes.
- Fix input to iPhone Mirroring on macOS.
- Fix context updates on language/mode change.
- Fix webspeech engine not always reporting language changes.
- Fix
screen.name on macOS.
- Fix missing default settings in Debug Window.
- Fix calling actions from the
ready callback, defined in the same module, after Talon was already ready.
- Fix some textarea issues.
- Fix nondeterministic list compilation issue affecting
clear line command.
Face Expressions
- Add cross-platform webcam-based face expression system.
- Match face expressions like this in a .talon file:
face(smile): ...
face(smile:start): ...
face(smile:stop): ...
face(smile:repeat): ...
- Useful pseudo expressions combining left/right sides:
- blink
- smile
- frown
- squint
- dimple
- These alternate names remain for compatibility with the old macOS face expression system:
open_mouth
raise_eyebrows
eye_blink
pucker_lips_outwards
pucker_lips_left
pucker_lips_right
- All raw expressions:
brow_down_left, brow_down_right, brow_inner_up, brow_outer_up_left, brow_outer_up_right, blink_left, blink_right, gaze_down_left, gaze_down_right, gaze_in_left, gaze_in_right, gaze_out_left, gaze_out_right, gaze_up_left, gaze_up_right, squint_left, squint_right, eye_wide_left, eye_wide_right, jaw_open, jaw_left, jaw_right, mouth_close, dimple_left, dimple_right, frown_left, frown_right, mouth_funnel, mouth_lower_down_left, mouth_lower_down_right, mouth_press_left, mouth_press_right, mouth_pucker, mouth_right, mouth_left, mouth_roll_lower, mouth_roll_upper, mouth_shrug_lower, mouth_shrug_upper, smile_left, smile_right, mouth_stretch_left, mouth_stretch_right, mouth_upper_up_left, mouth_upper_up_right
- Add Camera menu.
- Add support for :change suffix in face events, e.g.
face(smile:change): print("smile {value}") will be called while your smile is moving.
- Add
face(presence) event, especially useful as face(presence:start) or face(presence:stop).
- Add
face(gaze_xy): print("gaze {x} {y}") pseudo-eye tracking event.
Eye Tracking
- New 3rd-generation eye tracking algorithm which eliminates gaze-level jitter.
- Significantly improve eye tracker reconnection after sleep.
- Only consider gaze targets within the screen when interrupting head tracking.
- Improve behavior when the eye tracking camera can't see one of the eyes.
- Mouse Jump now requires the mouse to move toward your gaze target before it will jump.
- Add an extra check to zoom mouse to prevent moving after click.
- Add
actions.tracking.jump() to manually teleport the mouse cursor.
- Add "Always On" eye tracking option.
- Add settings for zoom mouse.
- Add "live" mode to zoom mouse on Windows and macOS.
- Add "Head Jump" setting. Turning it off will prevent head movement from jumping the mouse in Head Control only mode.
- Remove 1-second debounce on Control Mouse stop.
- Fix: don't start mouse override timer when eye tracking is off.
- Fix possible crash on macOS when toggling eye tracking.
- Fix
tracking.jump() interactions with Control Mouse.
- Fix tracking.zoom() zooming in when zoom mouse is disabled.
- Fix issues with eye tracker reconnection.
Scripting:
- Add Dynamic Lists (
@ctx.dynamic_list)
- Add "selection lists" API via
ctx.selections["user.listname"] = "string of text for selection"
- Add
hotkey_wait setting to pause after complex hotkeys are pressed.
- Add recordings/reject/ folder to help debug rejected commands.
- Add some deprecations. Check your talon.log for details, e.g.
skia moved to the top-level skia instead of talon.skia.
- Add
ui.window_at(x, y) API.
- Add actions:
open(path)
open_url(url)
query("AXButton") -> Element
query_all("AXButton") -> list[Element]
- Add
--test PATH argument to Talon to launch a standalone test runner pointed at a user directory. Write test functions in your user Python with a test_ prefix e.g. def test_foo(): assert 0.
- Add support for a no-op (self) in
action_class methods.
- Add capture
_meta suffix for referencing meta-attributes like start/end timestamp of sub-captures and lists. For example, for @mod.capture(rule="<phrase>"), you can reference m.phrase_meta.start to get the start timestamp of the sub-capture.
- Add
apps actions and lists.
- Actions:
apps.list() - list launchable apps
apps.running() - list running apps
apps.launch(app) - launch app by path or by id
apps.focus(app) - focus app by name or ui.App instance
- Lists:
{apps.list} - a dynamic list backed by the apps.list() action.
{apps.running} - a dynamic list backed by the apps.running() action.
- Add
word actions namespace.
- Add
... in .talon files as a no-op (like skip())
- Add
mouse_nudge(x, y) action for relative mouse movement.
- Add preliminary RPC interface.
- Add new clipboard API, now supports raw data and multiple clipboard items on macOS.
- Add
tuple.get() action
- Add actions standard library:
math, types (string, dict, list, set, tuple, types). Try actions.list("math").
- Add single-line
if and for in TalonScript:
if true: print("true")
if false: print("false")
for a in "test": print(a)
- Improve
sim() helper to recursively resolve lists/captures.
- Improve TalonScript type checking.
- Optimize experimental.locate performance.
- Fix some actions type declarations.
- Fix
actions.sound.microphones() to be inexpensive to call.
- Fix
language prefix bug where it was not matching correctly for prefixes like en vs en_us.
- Fix ActionImplError printing an incomplete error for
@ctx.action_class issues.
- Fix TalonScript quoting behavior in string interpolation.
- Fix TalonScript comments raising NotImplementedError during repr()
- Fix TalonScript format string elision with multiple {} {}.
- Fix .talon-list incorrectly parsing strings as format strings with {}
- Fix .talon-list when raw values contain quotes but don't start with quotes.
- Remove deprecated
talon_plugins modules.
- Remove legacy
<dgndictation> and <dgnwords> captures. Use <phrase> and <word> instead.
macOS
- Use Metal rendering for all UI.
- Prevent canvas open animations on macOS Tahoe.
- Ignore Notification Center for
ui.window_at().
- Improve behavior when macOS returns a null screenshot for a Window.
- Implement defaults for
edit actions.
- Add:
key(menu) now points to the new contextual menu key.
- Add open menu tracking:
ui.active_menu().
- Fix element.window in chrome apps.
- Fix loops in element.find()
- Fix numpy warnings on M4 CPUs.
- Fix an internal accessibility error case.
- Fix missing screenshot colorspace info.
- Fix startup menu item being incorrectly enabled.
- Fix leak in
element_focus.
- Fix possible crash when connecting to Dragon.
- Fix: don't allow a window to become frontmost if it was closed
- Fix: ignore windows with id=0
- Fix: rework tray menu rendering.
- Fix canvas stealing focus from other Talon windows.
- Fix OCR when building for newer macOS SDK.
Windows
- New unified user/admin .exe installer.
- New
talon_console.exe launcher.
- Better handling for non-interactable windows in the window list.
- Remove pywin32 due to instability. Upgrade your community repo and plugins if you run into any problems with this.
- Add support for
mime.urls on the clipboard.
- Add
menu_open and menu_close events on ui.register().
- Implement
itemcontainer_pattern.
- Implement PNG clipboard image format.
- Fix accessibility
TextChild.text_range
- Fix
mouse_buttons_down with swapped buttons.
- Fix
%APPDATA%/talon/bin/python.exe error code handling.
- Add shortcut to all user desktops during system install.
- Add support for
canvas.allows_capture.
- Fix
sys.executable.
- Fix thread crash in camera backend.
- Fix race condition which could cause a hang during startup.
- Fix: check if screen is already locked when Talon starts.
- Fix: don't write (incorrect) version for windows uninstaller.
- Fix: truncate clipboard text at null byte.
- Fix: don't enable live zoom mouse on Windows 10 (where it doesn't work).
- Remove incorrect Talon Home shortcut.
- Improve "dead key" simulation on non-US keyboard layouts
- Add accessibility element == element equality.
- Add accessibility element.parent attribute.
- Accessibility: fix max depth for queries.
- Accessibility: implement
find() and find_one()
- Massive improvements to Accessibility API.
- Implement
element_focus accessibility event.
- Fix
iaccessible_current_selection getter.
- Fix
iaccessible_select.
- Fix
element.find().
Linux
- NOTE: Talon 1.0 (plus any minor fixes) is planned to be the last public release of Talon for Linux/X11.
- Fix some distros being unable to click through Talon overlays.
- Fix cpu info output when saving recordings.
- Ignore CRTC display errors from X11.
- Detect Wayland and warn the user about it.
- Reduce minimum version from Ubuntu 18.04 (2018) to CentOS 7 (2014).
- Remove most dependencies, now the
talon binary can be run directly without run.sh.
run.sh is only needed to set up udev rules for USB devices. ./talon works fine now.
- Add support for
numlock key.
- Improve stability.
- Fix clipboard crash.
- Fix autostart.
- Fix file not found error on startup.
- Fix an x11 error.
Current Talon+ features (previously called "beta", but the beta has always been more stable than public Talon due to more frequent updates)
- Ongoing Linux/X11 support.
deck() support for Elgato Stream Deck in .talon files.
- Parrot noise recognition.
- Conformer + Whisper Hybrid engine, now GPU-accelerated and powered by Whisper Large.
- macOS keyboard dictation engine.
- Conformer D (de_DE) German speech model.
- Wisp Small model.
- Faster speech recognition.
- Vosk multilingual engine.
- WebSpeech multilingual engine.
0.4.0 (Jul 24, 2023)
- Deprecation: use the
@resource.watch(path) decorator instead of resource.open(path).
- Deprecation: CommandImpl now uses
.script instead of .target attribute.
- The following deprecated APIs have been removed:
from talon.track.geom import Point2d - import from talon.types instead.
talon_plugins.speech
talon_plugins.menu
talon.microphone
- New: the Talon app core is now Rust instead of Qt / C++.
- New: update Python to 3.11.4.
- Add new Conformer D speech model, which is around 20% more accurate.
- Add new Control Mouse settings: Gaze Control, Head Control, Mouse Jump, and Gaze Focus (focus follows gaze).
- Add new Control Mouse settings to use a specific eye (both, left, or right) for tracking.
- Add
gamepad() support for receiving input from gamepads and joysticks in .talon files.
- Add native Log Viewer window.
- Add
.talon-list file format.
- Add logrotate support for talon.log, and a maximum log file size.
- Add window get/set properties:
.minimized .maximized .fullscreen
- Add
browser.query and browser.fragment to scope matching.
- Add automatic dark/light theme switching for Talon's UI.
- Add
@resource.watch(path) decorator.
- Change Control Mouse behavior to resume more smoothly when rapidly toggled.
- Reduce memory allocation pressure during DFA compiles.
- Optimize
talon.experimental.locate performance.
- Fix: the "Sleep" item in the Talon Speech Recognition menu now calls
actions.speech.disable().
- Fix type inference in .talon files for nested containers.
- Fix an issue if a user script called
sys.exit().
- Fix action/capture docstrings only storing the first line of text.
- Fix parrot issue caused by incorrect timestamp offsets.
- Fix various clipboard problems.
- Fix downloading Conformer model through some corporate proxies.
- Fix
fs.watch() behavior for files that don't yet exist.
- Fix some issues where
knausj_talon might not work on first install until a Talon restart.
- Fix
talon.experimental.locate false positive matches.
- Fix issue where multiple microphones could be active at once.
- Fix issue where hiss noise could get stuck.
- Linux: fix issues opening a terminal for the REPL.
- Linux: run
udevadm trigger after adding udev rules.
- Windows: add Accessibility API.
- Windows: add OCR API.
- Windows: improve tray icon rendering.
- Windows: change key delay behavior to make modifier key presses more reliable.
- Windows: fix some issues related to WMI polling.
- Windows: improve app/window list/event quality.
- Windows: reduce CPU usage while idle.
- Windows:
ui.screens() / ui.main_screen() now have the correct .scale property for DPI scaling.
- Windows: no longer create Talon Console shortcut. Talon Console is deprecated for normal use. It is slower and less reliable than launching Talon normally.
- Windows: move venv from
.venv to venv/3.11 (exact path is based on the Python version).
- Mac: reduce crashes when using Accessibility API to access Talon's own windows from within Talon.
- Mac: fix some memory leaks.
- Mac: change key delay behavior to make modifier key presses more reliable.
- Mac: fix
visible_rect calculation edge case.
- Mac: fix issue attempting to track windows for some apps.
Resolved GitHub issues:
0.3.1 (Jul 28, 2022)
- Inputs such as voice commands and hotkeys are now disabled when your screen is locked.
- Add Python include/ directory to Talon's virtual environment.
- Add a compatibility shim for some
knausj_talon usage of the deprecated talon_plugins.eye_mouse.
- Fix
control1_item.toggle() action.
- Linux: fix Control Mouse 2 when primary monitor origin isn't (0, 0)
- Linux: fix libffi issue preventing launch on RHEL / CentOS 8
- Windows: fix https://github.com/talonvoice/talon/issues/516 - pip install fails with no .egg-info
0.3.0 (Jul 7, 2022)
Breaking changes:
from __future__ import annotations does not work with runtime type checking. Talon now throws an error when you import annotations.
- Remove
m._words[...] attribute in captures. You should just index m[...] directly.
- Language support: commands, lists, and captures are now implicitly scoped to
en_US (English US).
They will not be available in other languages by default.
You should reimplement them for your specific language, e.g. to match German, use:
language: de_DE at the top of a .talon file.
ctx.matches = 'language: de_DE' in Python.
- Mac:
element.children.find(limit=) has been replaced with the less ambiguous element.children.find(max_results=).
Eye Tracking:
- Add a new Control Mouse mode. The old mode is still available as Control Mouse (Legacy).
- Add actions for the Eye Tracking menu, see
actions.list('tracking') for a list.
- Mouse control modes will now stay enabled if you restart Talon.
General changes:
- Significantly optimize Conformer.
- Significantly optimize grammar compilation.
- Significantly reduce Talon app size.
- Reduce Talon memory usage.
- Optimize
talon.experimental.locate API.
- All platforms now have hotkey support. You can bind hotkeys like
key(shift-f1): in a .talon file. You can also suffix with :up or :repeat, e.g. key(shift-f1:repeat): will run repeatedly while shift-f1 is held.
- Add MIME clipboard APIs.
- Add skia Path type.
- Constrain eye tracking calibration UI to a 27" monitor size when calibrating on larger monitors. This should make calibration easier.
- Add timing information to list-captured words.
- Fix issues with engine word timings.
- Fix some imgui rendering and placement issues.
- Fix issue where speech engines didn't show up in the menu on the very first launch.
- Fix command collision issue for non-Latin alphabets.
- Fix actions.key with multiple spaces between keys.
- Fix some cases where host Python environment variables could mess up the Talon Python environment.
- Mac: Add
max_visited, max_results, visible_only, and timeout params to find() and find_one().
- Mac: Add
ui.element_at(x, y).
- Mac: Add
talon.experimental.media API to interface with system-wide media playback.
- Mac: Add provisional
talon.experimental.ocr API.
- Mac: Add extended unicode / emoji key support to
actions.key() and ctrl.key_press()
- Mac: Improve performance and behavior of accessibility API and window management.
- Mac: Implement == and != equality for ui.Element objects.
- Mac: Fix glitchy imgui rendering.
- Mac: Fix screenshots to include embedded colorspace.
- Windows: prefer "Default Device" microphone over "Default Communications Device".
- Windows: add hotkey support in .talon files, e.g.
key(shift-f1): ...
- Linux: add hotkey support in .talon files, e.g.
key(shift-f1): ...
- Linux: add
talon.experimental.media API.
- Linux: hide "output monitor" audio sources.
- Linux: fix TextArea placement when no monitor is at y=0
- Linux: fix Start on Login
Resolved GitHub issues:
0.2.3 (Sep 30, 2021)
0.2.2 (Sep 23, 2021)
- Fix blank window appearing on Windows.
0.2.1 (Sep 22, 2021)
Now introducing the much more accurate Conformer b108 model, which you can install directly from Talon's Speech Recognition menu.
Upgrade to the Early-Access Talon Beta to get more Talon per Talon, including:
- Lighting fast (4-10x faster) speech recognition and command processing (coming soon!).
- Multi-language Vosk engine for dictation.
- Multi-language Webspeech engine for dictation.
- Parrot.py integration.
- Mac: face expression recognition on macOS Catalina and newer.
- Gratitude from the developers. Thank you, your support helps keep Talon possible!
Changes in v0.2.1:
- Add wav2letter Conformer model support.
- Add wav2letter downloader in the Speech Recognition menu.
- Add wav2letter no-LM mode, which uses much less memory.
- Add f0 freqeuency estimation for Parrot.
- Allow selecting version text in "About" window.
- Improve loading and selection of speech engines.
- Improve downloads over unreliable Internet connections.
- Fix parrot mic tracking.
- Fix
skia.Image.from_file() leaking file handles.
- Fix an edge case in the default
win.file_ext() action implementation.
- Fix screen state tracking on all platforms.
- Fix some eye tracking bugs.
- Mac: automatically toggle face expression recognition system based on context.
- Windows: fix potential Talon hang when showing a window, when the target window is hanging.
- Linux: support
_GTK_FRAME_EXTENTS when calculating window rectangle.
Resolved GitHub issues:
0.2.0 (Jul 17, 2021)
Changes in v0.2.0:
- Deprecate
action(): ... in .talon files for removal in Talon v0.3. You should reimplement actions on Context objects in Python now (which was already possible).
If you use knausj_talon, you should consider updating to the latest version so you have this PR: knausj85/knausj_talon/pull/482
Otherwise, from the menu under Scripting -> Console (REPL), you can run actions.migrate.v02_all() to perform an automatic migration of your eisting .talon actions.
This migration will first back up your user directory.
- Add extended Speech Recognition menu.
- Add on-screen subtitles for spoken phrases.
- Add experimental word-level timing information for wav2letter.
- Add model naming for wav2letter.
- Add web2letter geolocal server support.
- Add new
sim("phrase") command in the REPL.
- Add better flac comments for
speech.record_all = 1.
- Add options to events.tail().
- Add
speech.record_labels = 1 setting to record Audacity text labels. You can import these in Audacity by loading the corresponding flac file, then going to File -> Import -> Labels.
- Add actions for some Talon menu items, see
actions.list('menu').
- Change
storage API: add an implicit prefix (such as user.) to storage keys.
- Remove tray icon color, switch to a shape-based sleep indicator.
- Remove Eye Keyboard, Show Camera, and Show Debug Overlay (for now).
- Fix type checking for action implementations at load time.
- Fix
actions.find() decl attribution.
- Fix FLAC decoder leaking file descriptors.
- Fix wav2letter audio padding.
- Fix using a defaultdict for registry attributes. This will improve reported errors.
- Fix webspeech host/port arguments.
- Fix behavior of
settings.get('path', default=...) to not override module default.
- Fix bugs in events.tail() when event log was very long.
- Fix parser issue when capture rules were referenced but not defined.
- Fix DFA linker not writing missing rule messages to the log.
- Fix DFA linker not writing unknown token messages to the log.
- Fix line numbers in some TalonScript debug output.
- Fix fs watch recursing into VCS directories.
- Fix fs watch not working with file paths.
- Fix resource.open() not working outside the user/ directory.
- Fix readability of warnings printed to the log during startup.
- Fix log messages caused by code run in the REPL not being printed to the REPL.
- Fix automatic resource management from the REPL.
- Fix Start on Login checkbox tracking on Mac/Linux when you move the app.
- Fix update state machine not allowing Check for Updates after the "You're already up to date" dialog is dismissed.
- Fix issues related to incorrect microphone selection after unplugging a microphone or waking from sleep.
- Fix manual mouse override for Control Mouse on Linux/Windows.
- Optimize Talon app exit time.
- Mac: wav2letter speech engine is now Universal2 and runs natively on Apple Silicon.
- Mac: fix memory leak in wav2letter.
- Mac: fix accessibility attribute types (e.g. {$rect2d} -> Rect).
- Mac: fix accessibility element over-caching.
- Mac: fix errors related to empty ui events.
- Windows: add "Start on Login" support.
- Windows: add system sleep/wake events.
- Windows: fix issue where slow Talon exit may break update extraction.
- Windows: improve timing precision.
- Windows: vastly improve
cron precision and jitter.
- Windows: fix crash related to esoteric DLL load order.
- Windows: fix update taking too long if files are locked.
- Windows: fix crash when using RDP remote audio as a microphone.
- Windows: fix application names typically being the .exe name.
- Windows: add Z-ordering for ui.windows().
- Windows: fix detection of app names (MUI Cache).
- Windows: fix behavior issues focusing windows, including minimized or maximized windows.
- Windows: slightly improve app startup time and binary size.
- Linux: add "Start on Login" support.
- Linux: add system sleep/wake events.
- Linux: fix taking screenshots of secondary monitors.
- Linux: improve international keyboard layout support.
- Linux: rewrite X11 client to fix hangs and other bugs.
REPL improvements:
- Add support for reading from sys.stdin.
- Windows: repl.bat no longer spawns a secondary console window by default.
- Windows: add tab completion and history support.
- Linux: fix tab completion, history, and line editing hotkeys.
Resolved GitHub issues:
0.1.5 (Mar 10, 2021)
- Increase the default wav2letter speech timeout from 150ms to 300ms. This means Talon will respond to commands slightly more slowly, in exchange for more reliable speech recognition for longer commands and dictation. You can restore the old behavior by adding
settings(): speech.timeout = 0.150 to any global .talon file.
- Improve Talon startup time.
- Improve DFA minimization time.
- Improve error and watchdog tracebacks.
- Improve handling of eye tracking errors and calibration screen.
- Add new
app.register("ready", cb) event, which functions like app.register("launch", cb). However, unlike the launch event, ready will also be called immediately at registration time if Talon was ready.
- Update Skia, and improve Skia <--> numpy interoperability.
- "View Log" now shows the entire log from the current Talon run.
- Fix a race condition in cron.
- Fix clipboard mode support (e.g. "find" clipboard on Mac and "select" clipboard on Linux).
- Eye Tracking (Control Mouse): reset mouse movement timer when eye tracking is enabled.
speech.record_all: don't record when Talon is asleep.
- Linux: Fix error when launching Talon under a virtualenv.
- Windows: Code sign all EXE and DLL files (instead of just signing the main exe).
- Windows: Rework key codes to fix #243 and #188
- Mac: Improve
canvas.focused = True behavior.
- Mac: Fix cmd modifier when used with accent keys (like ^ and ~)
- Mac: Optimize UI enumeration time on Talon startup.
- Mac: Add a Metal renderer for Canvas (which was 3x faster than OpenGL in simple tests).
REPL improvements:
- Tab completion should now work in more cases.
- Fix text offset issues when you press Up to go through history on a freshly loaded REPL.
- Handle KeyboardInterrupt while connecting.
- Mac: Pressing tab on an empty line should now indent without a 1-keystroke delay.
Resolved GitHub issues:
0.1.4 (Jan 6, 2021)
- Improve "Control Mouse" mode. It should now be usable on the Tobii 5. More improvements to come.
- Refactored all
Rect and Point2d types to live in talon.types, e.g. from talon.types import Rect, Point2d. This means rect.contains() and rect.center now use and support Point2d values, and ui.Rect is skia.Rect now.
speech.record_all = 1 now writes microphone name and spoken text to the file as FLAC comments, and better handles very long file paths.
- Fix imgui flicker on show.
Resolved GitHub issues:
0.1.3 (Dec 25, 2020)
Added:
- Talon now uses Python 3.9.1.
- Talon is now a Universal 2 App on macOS, with native Apple Silicon support.
- Dragon recording is now supported with
speech.record_all = 1
- Added macOS engine for Dictation Mode (early-access beta only).
- Added Vosk engine for Dictation Mode (early-access beta only).
Added actions:
core.repeat_partial_phrase() action.
core.cancel_phrase__unstable() action.
speech.set_microphone(name: str) action.
Improved:
- Deprecation warnings are now turned on for Python.
- Documentation and error message updates.
- clip.capture(): s.get() will now throw an error if incorrectly called before block exits.
- .talon files can now use consecutive
and on identical match keys like mode and tag.
actions.next() now works if the next action in the chain is Module-implemented
- TalonScript format strings are now properly type checked.
- TalonScript errors have been improved, which includes the path and line number of the erroring script.
- Add a check preventing rules (captures or commands) from being "completely optional". Parsing for such rules was already broken, so now there is a check preventing you from creating them.
This means a capture such as
@ctx.capture(rule="[word]") will no longer be allowed. The check also prevents [optional]: "hello" in a .talon file, which would have been a very bad idea but was previously possible.
- Change the
app.exe scope to match just the basename of the exe, and add app.exe_path to match the full exe path.
- Fix issues related to editing engines.py without restarting Talon.
- General parser reliability and performance improvements.
- General imgui improvements.
- Dragon word parsing improvements.
Optimizations:
- Optimize a quadratic rule parsing case, which should improve the performance of numbers in knausj.
- The Python interpreter lock was not being released during list DFA minimization, which may have affected eye tracking latency. The GIL is now released during all DFA minimization steps.
- Do even less work when updating
Context.lists and the underlying list hasn't changed.
- Implement differential context refresh. This is a significant optimization for the "context refresh" path. This means much less work is performed every time you switch apps, update a list, reload a Talon/Python file, and more.
- record.py is no longer slow for very large recordings/ folders.
Removed:
- Remove unused properties of
Context, such as wrapper actions.
- Remove
Context getters/setters. You are intended to use the property directly, for example: ctx.settings_set(value) should instead be ctx.settings = value.
- Remove
Context.defines as well as commands and hotkeys (these were intended as a private API - instead use .talon files to declare commands and hotkeys).
- Context.reload() is now a private API. With the differential context refresh feature, asking Talon to manually reload a context would have no effect.
- Remove some legacy "core" prefixed actions.
- Remove implicit Capture sharing. Only one instance of a capture is now active at a time.
- Remove inner context list mutation, such as
ctx.lists[name][key] = value and ctx.lists[name].update({'key': 'value'}), because it never worked properly. It now throws TypeError: Cannot mutate word lists.
Windows:
- Fix window rect coordinates.
- Add support for window resize/movement API.
macOS:
- Change Canvas window level.
- Fix some event tap issues.
Resolved these GitHub issues:
0.1.2 (Sep 23, 2020)
- Add global
<digit_string> capture definition (#124)
- Fix updater on bad internet connections.
- Fix View Log tailing beta.log instead of talon.log (#126)
- Fix a list parsing bug (#125)
0.1.1 (Sep 22, 2020)
- Fix canvas scale when dragging between monitors (#92)
- Fix incorrectly lowercasing
<phrase>.
- Improve context matching priority for the
os match.
0.1.0 (Sep 20, 2020)
- Cross-platform (macOS/Windows/Linux) public release of Talon.
- Works with the integrated wav2letter speech engine as well as Dragon.
- Supports the Tobii 4C eye tracker, and has preliminary support for the Tobii 5.
- See the Documentation for getting started information.
- Join the Slack for help and general discussion.
- Report issues here talonvoice/talon or ask about them on Slack in the #help channel.
- To use speech recognition, you need to put user scripts such as knausj_talon in your
~/.talon/user directory, and to set up wav2letter. Instructions for both of these can be found in the Documentation, and further information can be found on the Community Wiki.
Notes for existing Beta users:
- This release does not yet support sconv models, such as sconv-b5.
- This release does not yet support the WebSpeech engine.
- You will need to stay on the Beta for now to maintain support for those features.
Notes for existing Legacy (v0.0.8.42) users:
- Talon v0.0.8.42 will continue to work if you don't want to update.
- v0.0.8.42 will not automatically update to v0.1.0. You must download v0.1.0 from the website and plan to adapt your user configuration if you want to update. The new API is not compatible with scripts written for the old API.
- If you were using Talon v0.0.8.42 on Mac, you will need to back up your
~/.talon/user/ directory and either start fresh with knausj_talon or manually port your commands.
- There is no automatic command porting system to move from (v0.0.8.42) to (0.1.0) right now. We will consider making one if enough people ask for it on Slack.
- See the Unofficial Docs for information on the new .talon files for defining voice commands.
0.0.1 - 0.0.8.42 and beta versions (2017-2020)
- This is a historical note.
- The earlier Talon release notes have been removed as they were long and no longer relevant.
- Talon was previously not cross-platform, didn't have .talon files, and didn't have the wav2letter speech engine.