Skip to content

Releases

v0.13.2

Choose a tag to compare

@SubZtep SubZtep released this 27 Jun 22:44
Immutable release. Only release title and notes can be modified.

Full Changelog: v0.13.1...v0.13.2

v0.13.1

Choose a tag to compare

@SubZtep SubZtep released this 27 Jun 22:35
Immutable release. Only release title and notes can be modified.

Full Changelog: v0.13.0...v0.13.1

v0.13.0

Choose a tag to compare

@SubZtep SubZtep released this 27 Jun 22:22
Immutable release. Only release title and notes can be modified.
stttc

Full Changelog: v0.12.0...v0.13.0

v0.12.0 — drop pw-play/mp3, merge helpers into stt-info

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 22:50
Immutable release. Only release title and notes can be modified.

What's new

No more pw-play dependency — the success sound is now generated by ffmpeg like all other beeps (ascending two-tone, 660Hz → 880Hz). The assets/ directory and ~/.local/share/stt/ are gone.

stt-info replaces three scripts — stt-check, stt-status, and stt-download are merged into one:

stt-info                  # live status: processes, server, downloaded models
stt-info check            # which alias models are available
stt-info download         # pre-download all models
stt-info download hu en   # download specific languages

Install / update

curl -fsSL https://stt.demo.land/setup.sh | bash

v0.11.0 — countdown timer, audio beeps, auto-dismiss

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 18:00
Immutable release. Only release title and notes can be modified.

What's new

Countdown timer — the notification counts down while you hold the key: "Hallgatom… 20s", "Hallgatom… 19s"… Each tick auto-expires after 1.5s so it disappears cleanly on release without leaving a stale notification.

Audio beeps — no extra sound files, generated on the fly via ffmpeg:

  • Key press → short high beep (880Hz) — recording started
  • Key release → double-click tone (660Hz) — audio sent, transcribing
  • Error → low tone (400Hz)

Auto-dismiss notifications — no more lingering popups:

  • Transcribing: 1 second
  • Transcript result: 3 seconds
  • Errors: 3 seconds

Bug fixes:

  • curl exit 255 false error after SIGINT — now trusts HTTP status over curl exit code
  • Key release during server startup now cancels cleanly
  • Default URL fallback was accidentally set to port 3000

Install / update

curl -fsSL https://stt.demo.land/setup.sh | bash

v0.10.2 — fix key release during server startup

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 17:16
Immutable release. Only release title and notes can be modified.

Fix

Key release now works during server readiness wait — previously releasing the key while speaches was still starting up had no effect: the bindr only killed ffmpeg, which doesn't exist yet during the readiness check. stt kept polling for the full 30 seconds and then showed the error.

Two-part fix:

  1. /tmp/stt.recording is now created before the readiness loop (was after), so the bindr can act immediately on key release
  2. The bindr now removes /tmp/stt.recording in addition to killing ffmpeg — the readiness loop checks for its absence each iteration and exits cleanly (no error notification)

Install / update

curl -fsSL https://stt.demo.land/setup.sh | bash

Note: existing installs also need the Hyprland keybinding updated. Re-run setup.sh, or replace the bindr lines in your Hyprland config with:

bindr = SUPER, grave, exec, sh -c 'rm -f /tmp/stt.recording; kill -INT "$(cat /tmp/stt.ffmpeg.pid 2>/dev/null)" 2>/dev/null; true'
bindr = , grave, exec, sh -c 'rm -f /tmp/stt.recording; kill -INT "$(cat /tmp/stt.ffmpeg.pid 2>/dev/null)" 2>/dev/null; true'

v0.10.1 — fix cold-start timeout

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 17:08
Immutable release. Only release title and notes can be modified.

Fix

Extended server readiness wait — stt now waits up to 30 seconds (was 3) for the speaches container to become ready. The 3-second window was too short when Docker starts uvicorn from scratch (after reboot or first install), causing a false "could not reach" error. The "Hallgatom…" notification is already visible during the wait, so the user sees feedback immediately.

Install

curl -fsSL https://stt.demo.land/setup.sh | bash

v0.10.0 — 99 languages, exact PID tracking, CUDA, stt-status

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 17:01
Immutable release. Only release title and notes can be modified.

What's new

99-language coverage — model_aliases.json now covers all Whisper-supported languages with native i18n strings (listening/transcribing messages in the target language). Languages without a dedicated model fall back to multi + a language hint.

typing → transcribing — the in-progress notification text was renamed to better reflect what's happening.

Exact ffmpeg PID tracking — stt writes the ffmpeg PID to /tmp/stt.ffmpeg.pid and the Hyprland bindr kills that exact process, not a name pattern. Safer, no collateral kills.

Missed-release fallback — a naked-key bindr (modifier released before key) also stops the recording, so you no longer get orphaned ffmpeg processes from fast key presses.

stt-toggle — press once to start recording, press again to stop. Alternative to the hold-to-talk flow.

CUDA auto-detection — setup.sh runs nvidia-smi and pulls the CUDA speaches image automatically when an NVIDIA GPU is found.

Server readiness check — stt retries the speaches /models endpoint 3 times (1 s apart) before recording, avoiding "could not reach" errors when the container is still starting up.

--restart unless-stopped — the speaches container now survives reboots automatically.

stt-status — new diagnostic CLI:

$ stt-status
stt status

  stt      recording   pid=12345
  ffmpeg   recording   pid=12346

  speaches online      http://localhost:8000/v1
  models   2 downloaded
           Systran/faster-whisper-small
           Systran/faster-whisper-small.hu

Shows stt state (recording / transcribing / idle / stale pid), ffmpeg instances with tracked/orphan classification, speaches server status, downloaded models, and warns on concurrent transcription requests.

Install

curl -fsSL https://stt.demo.land/setup.sh | bash

v0.7.0 — VAD config, stt-download, i18n notifications

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 09:04
Immutable release. Only release title and notes can be modified.

What's new

VAD tuning — add a vad block to ~/.config/stt/config.json to control Voice Activity Detection sensitivity:

"vad": {
  "threshold": 0.6,
  "min_silence_duration_ms": 1000
}

Higher threshold = less sensitive, filters more background noise. Parameters are passed directly to Speaches/faster-whisper.

stt-download — pre-download models before you need them:

stt-download        # all aliases
stt-download hu en  # specific languages

Localized notifications — notification header shows the language name; listening/typing messages are in the detected language (e.g. "stt · Magyar / Hallgatom…").

Single-instance — re-pressing the hotkey cancels any in-progress transcription and starts fresh.

Simpler keybinding — all notification logic is now inside stt. The Hyprland binding is just exec stt / pkill -INT ffmpeg.

stt-check improved — instant check via GET /v1/models, no accidental downloads, shows key / name / model columns.

Install

curl -fsSL https://stt.demo.land/setup.sh | bash

v0.6.0 — i18n notifications, single-instance, richer model aliases

Choose a tag to compare

@SubZtep SubZtep released this 14 Jun 08:48
Immutable release. Only release title and notes can be modified.

What's new

Localized notifications — the notification header shows the language name and messages are in the detected language. Pressing the key in a Hungarian layout shows "stt · Magyar / Hallgatom…" instead of a generic "Listening…".

Rich model aliases — model_aliases.json now stores an object per language with model, name, listening, and typing fields. Easy to extend with more metadata. setup.sh transforms it to the flat format Speaches expects.

Single-instance — pressing the hotkey while a transcription is already running cancels it cleanly and starts a fresh recording. No stuck processes, no double transcriptions.

Simplified keybinding — all notification logic moved into stt. The Hyprland binding is now just exec stt / pkill -INT ffmpeg.

Better stt-check — uses GET /v1/models instead of POST, so it never triggers accidental downloads. Shows key / name / model columns and reports not-yet-fetched models in yellow.

Install / update

curl -fsSL https://stt.demo.land/setup.sh | bash