Releases: acailic/SayItErmano
Release list
v0.7.0 — language switching, remote STT, guardrails
The languages + endpoints + guardrails release.
Highlights
- Runtime language cycle + wrong-language guard —
hotkey.language_keysteps an orderedgeneral.language_cycle(may includeauto) as a RUNTIME override (never persisted); precedence per take: cycle > per-model >general.language. Every press announces; status/doctor report the effective source. When auto-detection lands outsidegeneral.language_whitelist, the take re-decodes once with the first whitelist entry (faster-whisper/whisper-torch). Upstream promised this in altic-dev#506 (unshipped since April) and closed altic-dev#100 — this ships it. - Remote OpenAI-compatible STT backend (
model.remote_url) — dictation POSTs the recorded WAV to any/v1/audio/transcriptionsserver: vLLM, whisper.cpp server, NVIDIA NIM, DGX Spark, cloud. Off by default — nothing leaves your machine while the URL is empty (test-enforced). Settings → Models → Remote group, doctor reachability probe, retry table mirroring the AI client (transport + 429/5xx, once). - AI refusal guardrail (
ai.refusal_guard, default on) — a polish/rewrite reply that reads as a model refusal ("I'm sorry, I can't assist with that.") is never typed; the raw transcript is used with a notification. Opt out explicitly if you want the model verbatim. - Spoken-send quiet countdown (
recording.spoken_send_countdown_s, default 1.2, 0 = off) — say the send phrase and go quiet: the pill counts down, speech cancels, expiry finishes the dictation by itself and presses Enter. No hotkey press needed. - Scriptable unix-socket API —
transcribe {path, process?}runs a file through the daemon's warm model (busy takes refuse),history {limit, since_ts?}queries stored dictations; no TCP by design. - Housekeeping — flagged screenshots retaken clean, STATUS/ROADMAP ledger accuracy pass, update-fixture pin so version bumps can't flip staged-release tests.
1712 offline tests green; deb install gate green. Full changelog: compare v0.6.0...v0.7.0.
Install
curl -fsSL https://raw.githubusercontent.com/acailic/SayItErmano/linux/scripts/install-one-shot.sh | bash
or download the deb below: sudo apt install ./sayit-ermano_0.7.0-1_amd64.deb
Unofficial community Linux port of altic-dev/FluidVoice (macOS); not affiliated.
v0.6.0 — Wayland, streaming preview, command mode v2
The Wayland + streaming release.
Highlights
- Wayland session support — session probe + per-capability matrix (doctor/Settings); insertion via wtype/ydotool with wl-clipboard paste + restore; DE-shortcut hotkey assist (no global grabs on Wayland); optional evdev push-to-talk ([wayland] extra); notification-fallback preview. X11 behavior unchanged, pinned by tests.
- Segmented streaming preview — live preview decodes constant-cost 2 s windows (50 % hop) on every backend — whisper.cpp and Parakeet get live preview for the first time — instead of re-transcribing the whole take; trailing-silence VAD auto-stop (recording.preview_vad_silence_s, default 2 s, 0 = off); per-take preview stats log line; first-word capture regression-pinned.
- Command mode v2 — multi-tool protocol, destructive-command strong confirm, per-app follow-up context store, History → Commands view with confirm-gated re-run.
- Idle model unload (model.idle_unload_s, default off) — release GPU/RAM after idle; the next take reloads. Upstream refuses to ship this.
- Hotkeys — self-healing refused XGrabKey combos; mouse push-to-talk; activation mode "both" (tap toggles, hold talks); paste-last shortcut; up to 3 dictation shortcuts with per-shortcut prompt profiles.
- Settings & UI — prompt profiles; per-model language; model pruning; spoken formatting actions; spoken slash/mention grammar; stats page (streak, time-saved, 7/30-day charts); pill hover action chips.
- Reliability — terminal-safety/chat formatting (tmux/Ghostty); clipboard-manager-safe insertion with restore; lock-watch via ListSessions for user-slice daemons; lock-screen hotkey suppression; test-isolation history integrity.
- Distribution — check-and-assist updater (doctor/CLI/notification), AUR recipe, pipx hygiene.
1533 offline tests green. Full changelog: compare v0.5.0...v0.6.0.
Install
curl -fsSL https://raw.githubusercontent.com/acailic/SayItErmano/linux/scripts/install-one-shot.sh | bash
or download the deb below: sudo apt install ./sayit-ermano_0.6.0-1_amd64.deb
Unofficial community Linux port of altic-dev/FluidVoice (macOS); not affiliated.
v0.5.0 — Parakeet backend, faster toggles, overlay motion
SayItErmano — community Linux port of FluidVoice
Local voice dictation, rebranded and its own app: 23 commits since v0.4.0, headlined by a second speech-recognition engine and a snappier hotkey.
New: NVIDIA Parakeet TDT backend
parakeet-tdt-0.6b-v2runs locally via ONNX Runtime alongside the faster-whisper backends — pick it in Settings → Model (backend = parakeet), auto-selection still prefers whisper on CUDA unless you choose Parakeet.- Real-audio integration fixtures and a factory-run test suite came with it.
Faster hotkeys
- Toggle-on dropped from a flat ~350 ms to ~100 ms: the recorder now polls for flowing PCM instead of sleeping a fixed fail-fast window.
- First dictation after daemon start no longer pays a ~390 ms CUDA warm-up tax — warmup runs one throwaway inference at startup (measured ~170 ms, same as steady state).
Overlay & history polish
- Pill motion science: fade-in, done-beat, elapsed cue, and reduced-motion support.
- History gains confidence bands (solid/mixed/shaky), date grouping, and inline repair.
Also
- Environment overrides renamed
FLUIDVOICE_*→SAYITERMANO_*(no aliases — update scripts/custom units). - Original app icon across all sizes, symbolic icons refreshed.
- Test suite: 620+ tests green; CI stays manual-trigger only.
Install
curl -fsSL https://raw.githubusercontent.com/acailic/SayItErmano/linux/scripts/install-one-shot.sh | bashOr grab sayit-ermano_0.5.0-1_amd64.deb below and sudo apt install ./….
sha256 b1f46555a468ee7dd9cb4f35cd54e3b66fbcf4ec30d7d4f8e3107032f2cfb13f
v0.4.0 — SayItErmano
SayItErmano — community Linux port of FluidVoice
Same app, own name — and its own face: the repo, deb package, command,
launcher and desktop integration are now SayItErmano (sayit-ermano),
with an original app icon (gold tile, speech bubble + waveform — no
FluidVoice artwork anywhere).
New icon
- All hicolor sizes (16–512), the tray icon (with the red recording badge)
and the in-pill logo use the new artwork. Regenerate/retint any time:
scripts/gen-app-icon.py [sol|fiesta|noche] --install(previews in
design/icons/). It remains a community
Linux port of FluidVoice — the
README, About dialog and package description say so, and the Python internals
keep the upstreamfluidvoicenaming.
Migrating from fluidvoice-linux
- Installing this package removes the old
fluidvoice-linuxdeb
automatically (Conflicts/Replaces) and starts the renamed
sayit-ermano.servicedaemon. - On first run the app takes over your old data:
~/.config/fluidvoice,
~/.local/share/fluidvoiceand~/.cache/fluidvoice(config, dictionary,
history, downloaded whisper models) move to theirsayit-ermano
counterparts. Nothing is re-downloaded. - User-space installs: the one-shot installer stops and retires the legacy
fluidvoice.serviceso old and new daemons can't fight over the hotkey.
Install (user-space, no sudo)
curl -fsSL https://raw.githubusercontent.com/acailic/SayItErmano/linux/scripts/install-one-shot.sh | bashsha256 (sayit-ermano_0.4.0-2_amd64.deb): c61a698851c2a59695ad6327239ef27c60a1daa334bebb5e6e0fb7ac5acca3ef