Commit graph

210 commits

Author SHA1 Message Date
Hoss
a4999164ae
feat(models): add opt-in custom Whisper model discovery (#622)
* feat(models): auto-discover custom Whisper models in models directory

Enable automatic discovery of custom GGML-format Whisper models (.bin files)
placed in the models directory, so users don't need to modify source code
to use their own fine-tuned models.

Backend changes:
- Add discover_custom_whisper_models() to scan for .bin files
- Generate display names from filenames (e.g., "my-model" → "My Model")
- Skip predefined model filenames to avoid duplicates
- Add 3 unit tests for discovery logic

Frontend changes:
- Split model dropdown into 3 sections: Custom, Downloaded, Downloadable
- Add collapsible section for downloadable models to reduce clutter
- Add max-height with scroll for long model lists
- Add "Custom" badge for user-provided models

* feat(models): make custom Whisper model discovery opt-in

[why] Address maintainer concern about support burden from community
models. Custom models should be a power-user feature, not enabled by
default.

[how] Add custom_models_enabled setting (default: false) in Debug
settings. Discovery only runs when enabled. Models show "Not officially
supported" messaging. Documentation updated with enable steps.

* feat(models): add is_custom field and integrate custom models with new UI

[why]
PR review requested an explicit is_custom field instead of inferring
custom status from url === null. Custom models also need proper
integration with the new models settings page from PR #478.

[how]
- Add is_custom: bool to ModelInfo struct, set true on discovered models
- Change discover_custom_whisper_models signature from &PathBuf to &Path
- Use 0.0 sentinel scores so UI hides score bars for custom models
- Add "Custom Models" section to ModelsSettings with 3-way model split
- Show "Custom" badge in ModelCard and ModelDropdown
- Hide language/translation tags when supported_languages is empty
- Remove custom models from available_models on delete instead of
  just marking as not downloaded (they have no re-download URL)
- Update tests with new fields and assertions

* chore(i18n): add custom model translation keys to all locales

[why]
Custom model feature introduces 5 new translation keys that need
to be present in all 15 non-English locales for CI to pass.

[how]
Add English placeholder values for: customModelDescription,
modelSelector.custom, settings.models.customModels,
settings.debug.customModels.label, settings.debug.customModels.description

* fix(models): keep language filter visible when no models match

[why]
The language filter was inside a conditionally rendered section
that disappeared when no downloaded models matched the selected
language, leaving the user stuck with no way to change the filter.

[how]
Always render the "Your Models" header row with the language filter,
only conditionally render the model cards below it.

* docs: fix custom models section reference in README

Model selector → Models settings page.

* fix(models): apply custom models toggle immediately without restart

[why]
Two bugs reported in PR review: (1) app breaks on restart when a
custom model was selected and the toggle is disabled — selected_model
still points to the missing model, causing "Model not found" error.
(2) Custom models remain visible in the UI after toggle-off because
the in-memory model list is never updated and no event is emitted.

[how]
- Add remove_custom_models() and add_custom_models() to ModelManager
  for runtime mutation of the available_models mutex
- On disable: reset selected_model to empty if it's a custom model,
  then remove custom models from the in-memory list
- On enable: run discover_custom_whisper_models against the mutex
- Emit model-state-changed event so the frontend refreshes immediately

* chore(i18n): remove "restart required" from custom model descriptions

Toggle now takes effect immediately, so the restart sentence
is inaccurate. Updated all 16 locales and README instructions.

* fix(models): clear stale model selection on startup

[why]
If a custom model file is deleted from disk while it's the selected
model, the app gets stuck on "Loading..." forever on next launch
because the model ID is not in available_models but
auto_select_model_if_needed only checked for empty string.

[how]
Validate that selected_model exists in available_models before
accepting it. If not found, clear the selection so auto-select
picks a valid downloaded model.

* remove toggle and clean up

* format

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-09 10:15:45 +08:00
CJ Pais
3eb370df80 make delete handy color 2026-02-08 16:18:59 +08:00
Viren Mohindra
ef24cfefda
feat: add models settings page with filtering and management (#478)
* feat: add models settings page with filtering and management

- add dedicated models settings page in sidebar
- reuse ModelCard component from onboarding for consistent UI
- add filter buttons for all/multi-language/translation models
- add model deletion with native confirmation dialog (tauri-plugin-dialog)
- consolidate model event listeners into useModels hook (Zustand store)
- remove duplicate event listeners from ModelSelector, LanguageSelector, TranslateToEnglish
- gate AccessibilityPermissions to macOS only
- add is_recommended field to model registry for featured models
- remove unused get_recommended_first_model command
- add translations for all 9 supported languages

* feat: add language filter to models settings page

adds a searchable language dropdown filter to the models page that lets users filter models by language support. when a non-english language is selected, models that don't support multiple languages (like parakeet) are hidden.

- add searchable language dropdown (right-aligned in filter row)
- filter models using supports_language_selection capability
- add allLanguages translation key to all 10 locales

* feat: add translation consistency checker script

- add scripts/check-translations.cjs to validate all language files
- script dynamically discovers languages from directory structure
- checks that all languages have same keys as english reference
- detects missing and extra keys in each language
- add check:translations npm script
- integrate into github actions lint workflow
- validates translations on every pull request

* fix: update imports and add missing translations after rebase

- replace useModels hook with useModelStore in components
- add permission error keys to all languages
- add model settings keys to cs and tr (new languages from main)

* fix: translate english placeholders in cs and tr locale files

* refactor: simplify model dropdown and migrate store to immer

- model dropdown now only shows downloaded models (no download/delete)
- convert store to immer with record types for immutability
- remove unused translation keys (welcome, downloadPrompt, etc.)
- add missing moonshine-base model fields
- sync translations after rebase

* fix: add download cancellation support and ui improvements

- add full download cancellation with Arc<AtomicBool> flags in rust backend
- add progress event throttling (100ms) to prevent ui freeze
- add cancel button to model card in settings page
- add model-deleted event listener to refresh dropdown after deletion
- remove pink background from recommended models in settings (keep badge only)
- add cancel/cancelDownload translation keys to all 14 languages

* fix: remove duplicate language/translate settings from general and advanced

settings are now only in ModelSettingsCard, not duplicated in their old locations

* fix: prevent model dropdown from being clipped by window edge

* add languages explicitly, clean up some ui

* fix: clear bottom progress bar when download is cancelled

The ModelSelector component maintains its own local state for download
progress. When a download was cancelled, the Rust backend would update
its state but never emitted an event to notify the frontend. This caused
the bottom progress bar to remain stuck showing "Downloading X%".

Added model-download-cancelled event emission in Rust and corresponding
listener in ModelSelector to clear progress state on cancellation.

* fix: align model card content to top to prevent floating elements

Changed ModelCard flex alignment from items-center to items-start so
the accuracy/speed bars stay at the top when the card expands (e.g.,
during download with progress bar visible).

* fix: prevent model deletion from interrupting active extractions

Added extracting_models HashSet to track models currently being
extracted. The update_download_status() function now skips cleanup
of .extracting directories for models that are actively extracting,
preventing a race condition where deleting one model would interrupt
another model's extraction process.

* refactor: migrate ModelCard buttons to Button component

Added two new Button variants for common patterns:
- primary-soft: soft/tinted primary buttons (used for download)
- danger-ghost: subtle destructive actions (used for delete/cancel)

Migrated all hardcoded buttons in ModelCard to use the shared Button
component for consistency and maintainability.

* feat: separate downloaded and available models into sections

Split the models list into "Your Models" and "Available to Download"
sections for clearer visual distinction between downloaded and
downloadable models.

Also adds missing translation keys to all locales:
- modelSelector.capabilities.singleLanguage
- modelSelector.capabilities.languageOnly
- settings.models.yourModels
- settings.models.availableModels

* fix: add missing translations after rebase onto main

add post-processing hotkey translations to all 15 locales and
backfill 29 missing keys for korean locale added in main.

* fix: add label to model delete button for clearer destructive state

* check translations as typescript

* format

* better text for dropdown

* wip ui tweaks

* rounded + ui tweaks

* fix download not 0% immediately, ui tweaks

* tweak name

* block for model downloading in onboarding

* small fixes

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-08 12:18:22 +08:00
CJ Pais
db854363b4 default for post-process and revert ui changes 2026-02-06 16:46:17 +08:00
Sam
462b03b024
feat: add optional hotkey for post-processing request (#355)
* feat: add post-processing hotkey

* rewrite

* bring back toggle

* Make sure the toggle on and off propagates for the key binding.

* rename for clarity

* cleanup

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-06 16:28:14 +08:00
ryanlee-ecosy
81b90aa675
feat(i18n): Add Korean translation (#721) 2026-02-06 10:34:34 +08:00
NourEldin Osama
804c1263d5
feat(i18n): Enhance RTL support and update language direction handling (#698)
* feat(i18n): Enhance RTL support and update language direction handling

* format

* minor tweaks

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2026-02-04 17:43:16 +08:00
CJ Pais
e9a6108559
Add a paste delay setting (#694)
* Add a paste delay setting.

* format
2026-02-01 20:58:02 +08:00
NourEldin Osama
90bfa73377
feat(i18n): Add Arabic localization support (#693) 2026-02-01 20:28:52 +08:00
CJ Pais
5ba5f77b45
basic working fix of history (#691)
* basic working fix of history

* format

* fix weird jank + cleanup impl
2026-02-01 13:03:13 +08:00
CJ Pais
9b361f661b
fix first launch on macos (#690) 2026-02-01 11:16:13 +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
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
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
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
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
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
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
e3aabdd916 fix type errors 2025-12-19 11:53:10 +07:00
Viren Mohindra
bfca46fcd6
feat: add tray menu localization using system locale (#446) 2025-12-18 04:14:32 -08: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
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
CJ Pais
f87051f464
Add Internationalization Support (#437)
* basic i18n

* tweak

* translate app

* add linting to make sure we have translations

* run linter on pr

* format
2025-12-12 11:16:54 +07:00
CJ Pais
aaade62f9d
Add ctrl+shift+v as option on windows and linux (#430)
* ctrl+shift+v

* clean up some clipboard code

* format
2025-12-10 17:49:43 +07:00
Chirag Agggarwal
bfecade869
Apple intel integration (#391)
* feat: add Apple Intelligence post-processing provider

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* feat: guide apple intelligence output

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* fix(build): add fallback stub for Apple Intelligence on older SDKs

- Checks if 'FoundationModels.framework' is present in the macOS SDK.
- If missing, compiles a stub Swift file that returns 'unavailable' errors instead of failing the build.
- Prevents build errors on older Xcode versions (or macOS versions < 26.0) where the macros are not supported.

* fix(ui): hide Apple Intelligence option when unavailable

- Checks for runtime availability of Apple Intelligence (via 'check_apple_intelligence_availability') in 'settings.rs'.
- Only adds the Apple Intelligence provider to the default settings if it is actually available on the device.
- Ensures the option does not appear in the UI for unsupported Macs (e.g., Intel or older macOS versions), even if the app was built with support enabled.

* move some files around as well as some ui text

* format

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Co-authored-by: CJ Pais <cj@cjpais.com>
2025-12-09 21:04:24 +07:00
Danny Smith
246feda45d
Add option to append trailing space after pasted text (#405) 2025-12-05 17:37:33 +07:00
CJ Pais
6c35a8d912
disable cancel on linux (#392) 2025-11-29 16:44:49 +07:00
CJ Pais
39adf1b455
Switch to disable update checking (#362)
* codex thinks it did it

* run format

* properly disable on startup

* text
2025-11-28 10:17:13 +07:00
CJ Pais
4fcf0447b3
notes regarding linux (#387)
* notes regarding linux

* fix overlay not being default false on linux

* note
2025-11-28 09:37:49 +07:00
Jackson
381b8a8bfb
Add a cancel hotkey and configuration (#224)
* From scratch

* Cleanup

* Small fixes

* simplify

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-28 09:00:47 +07:00
Ole Jakob Schjøth
c8389f34b2
feat: Add disabled option for pasting. (#364)
* feat: Add disabled option for pasting.

* update bindings

* -> none

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-27 17:38:41 +07:00
CJ Pais
9521ab9332
WIP: Add tauri-specta for generating TS bindings (#322)
* initial specta commands

* refactor to use the bindings in the ui

* merge fixes

* remove unused commands

* add clamshell to lib

* Remove Invoke from everything.

* fix settings not being loaded properly

* fix settings being overwritten due to deserialization failure + remove
provider kind

* fix model loading text bug
2025-11-27 17:07:22 +07:00
figwood
ec3b06d5b2
feat: add conversion between Simplified and Traditional Chinese. (#356)
* feat: add conversion between Simplified and Traditional Chinese. If the selected language is Simplified or Traditional Chinese, it will convert the text to the selected variant(Simplified or Traditional) after been recognized, depends on opencc, if it is not installed, the conversion will skip.

* Adopting ferrous-opencc makes cross-platform packaging easier.
2025-11-19 20:31:44 +07:00
Maicon Moreira
c2672638c9
Improve audio feedback timing using real sound duration and trimmed WAV files (#349)
* feat: add sound duration retrieval for audio feedback

* Trim trailing silence from pop_start.wav and pop_stop.wav

* refactor: simplify sound file and base directory retrieval

* feat: only delay mute if audio feedback is enabled

* change the logic

* simplify new logic

* simplify get_sound_path and get_sound_base_dir, reorder functions

* add implicit blocking to playTestSound

* modify to my pref style

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-19 10:10:23 +07:00
Jorge
97f3018be0
fix: update laptop detection logic to be more reliable (#348) 2025-11-18 20:43:35 +07:00
CJ Pais
18536aa81e
Add file based debug logging (#347)
* add basic logging to handy

* 100kb of logs

* add open button to the ui for logs

* use log everywhere

* some minor cleanup

* finish debug logging
2025-11-17 12:55:24 +07:00
CJ Pais
315c32eab4 format 2025-11-17 10:41:31 +07:00
Jorge
3b3ed5abc5
feat: add more options for deleting recordings automatically and added button to open the folder that holds the recordings (#330)
* feat: add more options for deleting recordings automatically and added button to open the folder that olds the recordings

- deleting automatically options: after certain time, never or preserving certain number of recordings
- new button "Open Recordings Folder" located on History page

* refactor: moved "Delete Recordings" selector to Debug settings

* refactor: simplify opening recordings folder logic by using tauri's opener plugin

* clean up ui and code a bit

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 10:41:05 +07:00
Jorge
45eec57226
feat: add fallback microphone for clamshell/desktop mode (#329)
* feat: add fallback microphone for clamshell/desktop mode

* refactor: moved "Closed Laptop Microphone" setting to Debug

* cleanup

* run format

* add check back

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-17 10:38:41 +07:00
CJ Pais
70ec82285a
format everything (#323) 2025-11-10 11:39:14 +08:00
Luis Eduardo
f7380fa69a
feat: LLM based post-processing (#222)
* Add LLM post-processing feature with settings management and UI integration

* Refactor LLM post-processing settings and prompt selection logic

* Rename CLAUDE.md to more standard AGENTS.md

* Replace Open Router with OpenAI Compatible endpoints for post-processing

* Fix post processing settings api styles

* refactor or something

* simplify

* cleanup a bit?

* remove useless code

* minor improvements

* fix laggy textarea

* Store post-processing results in db

* fix text color

* new default prompt

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-05 18:29:03 -08:00
helpful
09f16b1048
windows paste shift+ins instead of ctrl+v (#236)
* windows paste shift+ins instead of ctrl+v

Shift+Insert is older and more universal than Ctrl+V on windows. For example SSH terminal software often will not permit ctrl+v.

* add option for shift+ins on windows/linux

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-11-03 09:21:46 -08:00
CJ Pais
f6e315786c move paste method and clipboard handling to advanced 2025-11-03 08:34:39 -08:00
Jinhyeok Lee
d274a28dbf
fix: add missing defaults option to plugin-store load() call (#288)
The plugin-store 2.4.1 requires the 'defaults' property in StoreOptions.
Previously, only 'autoSave: false' was provided, causing a TypeScript error.
Now passing DEFAULT_SETTINGS as the defaults value.
2025-11-03 07:33:11 -08:00
Piyush Gupta
951283ca8a fix: tooltip overflow (#269)
* fix: tooltip overflow

* Adds more responsive Css

* StartHidden has tooltip bottom

* in debug setting too

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-30 08:06:44 -07:00
Bogdan
64ff385423
fix: disable Translate to English setting for the whisper turbo model (#259)
* feat: disable Translate to English switch for the whisper turbo

* add parakeet-tdt-0.6b-v2 to unsupportedTranslationModels

* disable language selector for parakeet v2

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-29 12:37:19 -07:00
CJ Pais
1fd08082e4 move app data dir to about instead of debug 2025-10-28 17:53:43 -07:00
Maicon Moreira
7c04ee85a7
feat: add “mute while recording” setting (#257)
* feat: mute while recording

* refactor: move MuteWhileRecording from AdvancedSettings to DebugSettings
2025-10-28 17:49:33 -07:00
CJ Pais
65c1e2dbcb
parakeet v2 support (#116)
* parakeet v2 support

* Update model.rs

* fix parakeet size

* new onboarding UI for parakeet v2 introduction

* tweak height
2025-10-28 16:32:26 -07:00
CJ Pais
ae406aebe2 fix build 2025-10-27 11:52:23 -07:00
Jackson
eb044d8810
Slight overlay UI fix for flickering (#231) 2025-10-23 10:35:31 -07:00
CJ Pais
a9a3e7bfd8
display download size + refactor (#221) 2025-10-17 16:57:51 -07:00
CJ Pais
db00ff240f
Add Setting to Copy to Clipboard (#220)
* update transcribe-rs

* add copy to clipboard feat
2025-10-17 16:25:35 -07:00
Jackson
93215dc097
A few optimizations on startup (#182)
* Use an optimal release profile... load managers & hotkeys first, add a
splash, simplify app handler

* removed splashscreen, hopefully app boots fast enough anyhow

* No need to load transcription model on start now that its loaded on
demand & cleanup

* Make an unloaded model status

* tiny modification to unloading

* update comment

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-17 16:05:43 -07:00
Jackson
a286fe5143
Add custom sound and control notif volume (#214)
* Add custom sound and control notif volume

* Modularize the picker and slider, consolidate the playback and loading

* Move custom sounds to advanced

* pairs of audio

* custom sound handling

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-16 09:08:27 -07:00
CJ Pais
d15fabf887 move always on mic to debug settings. really not for mainstream users. 2025-10-09 10:58:12 -07:00
Gr3mIin
aed3a75d54
feat(settings): add autostart toggle in advanced settings (#177)
* feat(settings): add autostart toggle in advanced settings

Enable users to configure autostart behavior through a new toggle in the advanced settings UI. The backend now checks user preferences on startup to enable or disable autostart accordingly, with the setting persisted and manageable via a new Tauri command. This provides better control over app initialization without affecting existing functionality.

* immediate toggle effect?

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-09 10:47:51 -07:00
CJ Pais
f165b40a60 add source code link in about 2025-10-08 17:23:38 -07:00
CJ Pais
25be30dd7d move paste method to debug 2025-10-08 16:53:05 -07:00
CJ Pais
1f0332941b better disabled states for parakeet 2025-10-08 16:52:50 -07:00
becker
d0e6a17c17
Add history limit setting (#150)
* Add history limit setting

Dearest Reviewer,

I have added a history limit setting. The limit change is applied instantly.
If the limit is 0 then no recordings are saved.

Becker

* remove extra save

save happens on exit

* move to debug menu

* use the text color

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-10-08 13:01:09 -07:00
CJ Pais
1432bac30f
add support for changing paste method (#187)
* add support for changing paste method

* rename/refactor of methods
2025-10-08 12:32:04 -07:00
Han Pham
9185b3db08
feat: delete a single audio entry (#119)
* feat: delete a single audio entry

* fix(HistorySetting): remove unnecessary loading state
2025-09-19 12:30:50 -07:00
CJ Pais
338d15d2c4
tweak onboarding (#112) 2025-09-09 18:59:09 -07:00
CJ Pais
45a473dc9f
Parakeet V3 (#111)
* wip: model manager support for parakeet

* working parakeet??git status

* Update LanguageSelector.tsx

* Use the published version of the crate.

* move word correction into audio toolkit
2025-09-09 18:33:57 -07:00
Dylan
b82b3b2f20
Added "Start Hidden" (#105)
* Added "Start Hidden"

* revert visible option in tauri conf

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
2025-09-06 14:07:33 -07:00
CJ Pais
7638f6b827
basic working history (#104) 2025-09-05 16:25:38 -07:00
CJ Pais
d6684ccb21
UI v2 (#103)
* wip ui

* pretty much fully new settings page

* proper dark/light mode

* slight style tweak for sidebar

* add about
2025-09-05 12:56:55 -07:00
CJ Pais
ae5f640da5
Add VRAM Inactivity Timer (#101)
* init vram unload

* logging

* add immediate unloading

* thread fixes
2025-09-03 19:00:36 -07:00
CJ Pais
5296738bac tweak thresh 2025-08-19 18:54:00 -07:00
CJ Pais
d52df53343 tweak default to 0.15 2025-08-15 12:11:35 -07:00
CJ Pais
87f97ab121 Correct wording. 2025-08-15 12:09:16 -07:00
CJ Pais
04b006d5b8 new default correction threshold + debug menu 2025-08-15 11:55:15 -07:00
CJ Pais
6be48caf82 slightly tweak styling 2025-08-11 15:28:26 -07:00
CJ Pais
c2b3815f56 'custom words' everywhere instead of 'correct words' 2025-08-11 15:19:48 -07:00
CJ Pais
a252655b2f reset icon color 2025-08-11 15:09:39 -07:00
CJ Pais
bc9617beb2 Use proper cursor for input 2025-08-11 09:32:36 -07:00
Vlad Gerasimov
24e0319256 fix(settings): handle default device labels and empty device lists 2025-08-09 08:21:43 +04:00
Vlad Gerasimov
46d28a0616 fix(settings): remove hardcoded Default option and add placeholder text 2025-08-09 08:10:18 +04:00
Vlad Gerasimov
1f96da9381 style(ui): unify components with shared Input/Button 2025-08-09 08:08:49 +04:00
Vlad Gerasimov
6f16fdf2f4 refactor(settings): wrap components in React.memo and improve ResetIcon 2025-08-09 07:52:28 +04:00
Vlad Gerasimov
f219bd14b6 refactor(settings): wrap CorrectWords with SettingContainer 2025-08-09 07:33:55 +04:00