Commit graph

469 commits

Author SHA1 Message Date
CJ Pais
f38b52e123 v0.7.0 2026-01-20 08:31:38 +08:00
CJ Pais
b733ccc458
init attempt at new kb (#580)
* init attempt at new kb

* 0.1.1 handy-keys

* format

* cleanup

* support for capslock/shiftlock?

* move kb to experimental

* use hook

* fix macos bug

* attempt mouse buttons as well
2026-01-20 08:23:35 +08:00
Gabe Duarte
246fb4e7da
Fix audio playback in History tab on Linux (#617)
* Add Portuguese translations for permission error messages

Add error message translations for the permission check flow in the Portuguese locale, covering both check failures and request failures.

* Fix history audio playback on Linux

WebKitGTK cannot play audio files via the asset:// protocol (or at least
not reliably), returning MEDIA_ERR_SRC_NOT_SUPPORTED. Additionally,
convertFileSrc was double- encoding the path (/ became %2F).

Changed to read audio files directly using the fs plugin and create
blob URLs instead. Also added APPDATA to fs:scope permissions to allow
reading recordings from the app data directory.

* Fix audio playback on macOS by using asset protocol on non-Linux

The blob URL approach for audio playback works on Linux but breaks
macOS.
This reverts the blob change to use convertFileSrc with the asset
protocol on macOS/Windows while keeping the blob approach for Linux
where it's needed. Also adds proper cleanup of blob URLs to prevent
memory leaks when history entries are unmounted.
2026-01-19 12:44:50 +08:00
CJ Pais
28d1d814b7
add experimental features to ui + reorg everything (#620) 2026-01-19 10:33:04 +08:00
Josh Ribakoff
f9d2aa68c3
refactor: use Immer for immutable state updates (#527)
* refactor: use Immer for immutable state updates

Replace Set/Map with Record types and use Immer's produce() for
immutable state updates. This fixes mutation bugs where .add()/.set()
were mutating state before copying (e.g., `new Set(prev.add(id))`).

Changes:
- Add immer dependency
- Convert Set<string> to Record<string, true> (sparse hash set pattern)
- Convert Map<K,V> to Record<K,V>
- Use produce() for all state mutations
- Update prop types in child components

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* move deps back to where they started

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-19 08:47:43 +08:00
Prasad Chalasani
c84e863423
feat: add automatic filler word removal from transcriptions (#589)
* feat: add automatic filler word removal from transcriptions

Add filter_transcription_output() that removes filler words (uh, um, hmm,
etc.) and hallucination patterns ([AUDIO], (pause), <tag>...</tag>) from
transcriptions. Inspired by VoiceInk's approach.

- Add regex-based filter in audio_toolkit/text.rs
- Integrate into transcription pipeline after custom word correction
- Add comprehensive tests for filler word removal
- Add regex crate dependency

* feat: collapse repeated 1-2 letter stutters in transcriptions

Add collapse_stutters() to reduce model hallucination artifacts like
"wh wh wh wh wh why" -> "wh why" or "I I I I think" -> "I think".

Collapses any 1-2 letter word that repeats 3+ times consecutively
to a single instance (case-insensitive matching).

* remove bracket/xml stuff

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-18 10:52:39 +08:00
ja
6522944886
feat(tray): add copy last transcript action (#598) 2026-01-18 10:33:50 +08:00
Enes
031fe4f52e
feat(i18n): add Turkish language support. (#582) 2026-01-15 09:58:30 +08:00
CJ Pais
56b0f44e45
fixes for 0.6.11: linking, ui (#579)
* static linking?

* move to 0.2.1

* transcribe-rs 0.2.2

* Update Cargo.lock

* remove settings which dont apply to models
2026-01-14 12:44:59 +08:00
CJ Pais
738c5a82d8 release v0.6.11 2026-01-14 09:54:55 +08:00
Andre Popovitch
e1c6007f71
Add permission step to onboarding (#545)
* Add permission step to onboarding

* translations

* minor ui

* Update AccessibilityOnboarding.tsx

* claude suggestions

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-14 09:53:49 +08:00
Michal Zemek
dfb72993b1
feat: add Czech translation (#568) 2026-01-12 12:46:57 +08:00
Noorain Panjwani
bfbeb32c2e
fix: keybinding changes failing silently due to incorrect key ordering (#524)
* fix: enhance error handling for shortcut bindings and settings persistence

Signed-off-by: Noorain Panjwani <noorain.panjwani@gmail.com>

* Oops. This wasn't needed

Signed-off-by: Noorain Panjwani <noorain.panjwani@gmail.com>

* style

* format

---------

Signed-off-by: Noorain Panjwani <noorain.panjwani@gmail.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 12:31:10 +08:00
Viren Mohindra
5da495157f
fix: improve apple intelligence ui and add reusable alert component (#517)
- hide model dropdown when apple intelligence is selected
- move error state into provider section (only shows when unavailable)
- remove redundant apple intelligence infobox
- add reusable Alert component with variants (error, warning, info, success)
- Alert supports contained prop for use inside settings groups
2026-01-10 12:11:10 +08:00
Sami Ansari
ae9c33e0c7
Fix race condition when toggling transcription via SIGUSR2 (#560)
* Fix race condition when toggling transcription via SIGUSR2

The toggle state was being set to false immediately when stop was called,
but the actual transcription runs asynchronously. If another signal arrived
before transcription completed, a new recording could start while the old
transcription was still running, causing the old text to paste unexpectedly.

Now the toggle state stays true until the async transcription task completes.

* remove import

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 11:38:58 +08:00
Mani Mohan
3bd2ad841d
feat(linux): add ydotool support for text input (#557)
Add ydotool as a fallback option for direct text input and key
combinations on Linux, after wtype/dotool (Wayland) and xdotool (X11).

ydotool uses uinput and works on both Wayland and X11, making it a
useful alternative when other tools are unavailable.

Requirements:
- ydotool installed
- ydotoold daemon running
- User in input group with uinput permissions
2026-01-10 11:29:21 +08:00
Vlad Gerasimov
1b580d54e8
feat: add Moonshine Base speech recognition model (#556)
* feat: add Moonshine Base speech recognition model

Add support for the Moonshine Base ASR model, which offers:
- 5x faster transcription than Whisper
- Better accent recognition
- ~240MB model size (encoder + decoder + tokenizer)

Changes:
- Update transcribe-rs to v0.2 with moonshine feature
- Add EngineType::Moonshine variant
- Add Moonshine Base model definition (400MB, 80% accuracy, 90% speed)
- Add model loading and transcription logic
- Add i18n translation for Moonshine Base

Note: Model files must be hosted at blob.handy.computer/moonshine-base.tar.gz
Expected structure: encoder_model.onnx, decoder_model_merged.onnx, tokenizer.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Update moonshine parameters.

* add translations

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 11:22:49 +08:00
Jackson
ba3f8a8a50
Prevent highlight and selection cursor hover on UI text items (#541)
* Add `select-none` and `cursor-default` to root to prevent selection and
hover on most items

* Lint

* refactor paths a bit

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-01-10 11:00:01 +08:00
Ivan Tur
415d0facec
feat(ui): add reusable Tooltip component and integrate with settings (#538)
Co-authored-by: Ivan Tur <49621041+buiiz@users.noreply.github.com>
2026-01-10 10:49:05 +08:00
CJ Pais
f343bed390 PR guidelines for AI 2026-01-10 10:27:21 +08:00
CJ Pais
5f4f76b50b dont allow package-lock with a bun project for now 2026-01-10 10:27:01 +08:00
CJ Pais
a0569d39f5
Update FUNDING.yml 2026-01-07 14:17:05 +08:00
CJ Pais
7a38b8024e
Update funding sources in FUNDING.yml 2026-01-07 14:07:23 +08:00
David Vital
e199ca6bfb
feat(i18n): add Portuguese language support and translations (#540) 2026-01-06 22:49:48 +08:00
Ivan Tur
c8aabdb913
feat(i18n): add Ukrainian language support and translations (#536)
Co-authored-by: Ivan Tur <49621041+buiiz@users.noreply.github.com>
2026-01-06 20:25:18 +08:00
CJ Pais
c606bf631b release v0.6.10 2026-01-04 07:52:38 +08:00
Viren Mohindra
d3a0281062
fix: prevent crash on macos 26.x beta during startup (#473)
defer apple intelligence availability check from app initialization
to when the user actually tries to use the feature. accessing
SystemLanguageModel.default during early app startup causes SIGABRT
on macOS 26.x (tahoe) beta.

- remove availability check from default_post_process_providers()
- always include apple intelligence provider on macos arm64
- add checkAppleIntelligenceAvailable command for lazy checking
- show error message if apple intelligence unavailable when selected
- clear error on any dropdown selection for better UX
2026-01-04 07:52:06 +08:00
johnmalek312
f7e73fc602
fix: direct typing (#493) 2025-12-31 03:19:29 -08:00
CJ Pais
13cae47ff4 Merge branch 'main' of github.com:cjpais/Handy 2025-12-29 12:29:20 +07:00
CJ Pais
26c4f6c53f try pr test build? 2025-12-29 12:28:35 +07:00
Viren Mohindra
e0b72f5f77
fix: unload model on cancel when immediate unload enabled (#498)
* fix: unload model on cancel when immediate unload enabled

adds model unload check to cancel_current_operation() to match
the behavior in transcribe(). previously, cancelling with escape
would leave the model loaded even with "unload immediately" enabled.

fixes #479

* also fix model not unloading if there is empty transcription

* refactor to util function

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-29 10:59:54 +07:00
Dmitry Gordin
5c5e428e06
fix: replace async-openai library with post request (#480)
* fix: replace async-openai library with post request to support custom providers

* move models call to llm_client too

* tweak post processing ui and add groq and cerebras

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-27 11:21:27 +07:00
Скляров Артем
b55c3fddde
Add Russian language (#474)
* Add Russian language

* Add Russian language

* Clean up hidden Unicode characters in Russian translation

* add languages.ts

* add some missing translations

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-27 10:11:24 +07:00
CJ Pais
d06d318a66 Release v0.6.9 2025-12-23 17:44:01 +07:00
CJ Pais
be1141cd50 description must be human written in PR 2025-12-23 09:17:02 +07:00
CJ Pais
e3aabdd916 fix type errors 2025-12-19 11:53:10 +07:00
Danny Smith
3f401d933a
Prevent possible deadlocks when pressing Escape to cancel recordings (#408)
* PRevent possible deadlocks when pressing Escape to cancel recordings

* same for sigusr2

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-18 21:28:10 +07:00
Viren Mohindra
0a7a1a0aa5
feat: add (Dev) indicator to tray menu version in debug builds (#470) 2025-12-18 04:15:29 -08:00
Viren Mohindra
bfca46fcd6
feat: add tray menu localization using system locale (#446) 2025-12-18 04:14:32 -08:00
CJ Pais
b3dd5a8c8e add better contribution guidelines + pr template 2025-12-17 10:03:59 +07:00
CJ Pais
7bd4a59107
Fix 'history limit' not saving to settings (#463)
* fix history limit not saving

* update the translations as well
2025-12-16 16:50:53 +07:00
CJ Pais
ffd38f4d89
stored settings for language, and also overlay is now transcribed (#465) 2025-12-16 11:01:23 +07:00
CJ Pais
57629f1374
suggestions from sem (#464) 2025-12-16 10:33:25 +07:00
giuliofoletto
f962054800
Add Italian translation (#459) 2025-12-16 10:29:33 +07:00
Rayearth
5b777dd572
Add Polish translation (#453)
* Polish language added to language list

* Polish translation added

* Corrected language code for Polish
2025-12-15 10:59:07 +07:00
CJ Pais
fdea7e13b2 fix build 2025-12-12 22:23:34 +07:00
CJ Pais
add9544d86 release v0.6.8 2025-12-12 22:15:00 +07:00
CJ Pais
58ac2fb4f3
Update build.rs (#447) 2025-12-12 22:14:17 +07:00
Viren Mohindra
b31a41ad2f
fix: prevent model auto-switch from interrupting active transcription (#443)
* fix: prevent model auto-switch from interrupting active transcription

when a model download completes during an active recording/transcription,
the app now skips auto-switching to prevent data loss.

adds is_recording tauri command to check recording state before
auto-switching models on download or extraction completion.

fixes #418

* Update bindings.ts

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-12 22:04:22 +07:00
Viren Mohindra
5f7ffe162b
feat: add german, japanese, and chinese translations (#444)
* feat: add german, japanese, and chinese translations

adds complete translations for:
- german (de)
- japanese (ja)
- chinese simplified (zh)

builds on the internationalization foundation added in #437.
updates CONTRIBUTING_TRANSLATIONS.md to reflect supported languages.

* fix: escape Chinese quotation marks in zh translation

* cleanup

* remove extra keys for now

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-12 21:54:23 +07:00