- 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
* 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>
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
* 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>
* 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>
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
* 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>
* 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>
* 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>
* 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>
* 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>
* 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>