Minor on the stable line. Faster Whisper and Parakeet extras, Speech Model simple setup, Snap uinput, Flatpak bundles on the tag, and QA fixes from the release branch.
Fixes tracked in the PR. Post-release follow-ups: #834.
* feat(settings): even out dropdowns and tidy the About page
Pin combos to a shared right-hand column so long labels cannot stretch a
row. Fold the dictation-tone preview into a two-stage Start/Stop button,
quiet the model status card, shorten Performance copy, and rebuild About
with combined links, channel+Check, family platform tiles, and Talk to us
moved up next to the license.
* fix(settings): keep tone preview on start if the cue fails
Do not flip Start/Stop when preview_tone_cue returns false, so a missing
file or silent player cannot skip the start cue. Also annotate
PreferenceRow.set_title / set_subtitle.
* fix(settings): paint About icons for dark dialogs
Dark ink on Adwaita/Yaru-dark buttons made the family tiles and Talk to us
marks disappear. Pick a light foreground on dark themes (and keep the
original ink on light ones) so the marks match the labels.
* fix(settings): show Android and iOS marks on VocaPhone
VocaPhone covers both, so the family tile now uses the Android robot and
the Apple mark instead of a single phone icon.
* fix(settings): cut repeated About copy
Name the AGPL once on the License row. The VocaHQ blurb is just the
private-dictation line. VocaPhone says TestFlight, not source-only, and
Gateway is self-hosted and headless.
* fix(settings): space About icons from their labels
Talk-to-us buttons and the family tiles were packing the mark against the
text. Give the image an end margin and a wider gap in the family tile.
* feat(ui): About page for this app, VocaHQ, and talk to us
Settings About now has three groups. Vocalinux keeps the existing icon,
version, AGPL-3.0, updater, and What's New. The website button opens
vocalinux.com.
Part of VocaHQ lists the family sites with PRODUCT.md status. Talk to us
opens GitHub issues, Discord, X, and email. Official Design marks from
VocaHQ/.github are vendored as-is and painted with iron-white ink.
* fix(ui): unique About Open names and pin Design SVG hashes
Open buttons on About still say Open. Each one now uses its tooltip as
the accessible name so a screen reader can tell vocahq.com from
vocalinux.com from Latest Release.
The Talk-to-us SVG test pins sha256 of the four official marks from
VocaHQ/.github 61c8eee.
* fix(ui): circular app icon and About source code link
The launcher and About header used the square teal fill. Switch
both to the circular family logo (voca-logo.svg). Website stays
vocalinux.com; Source code next to it opens the GitHub repo.
* fix(appimage): pin pywhispercpp to the version install.sh declares
* fix(appimage): pin pywhispercpp at both install sites
* test(docs): match AGENTS.md uv.lock wording
#727 dropped "unused until those phases land". The test still
looked for that line, so any PR that runs Python tests against
current main failed. Pin the current contract instead: uv.lock
is authoritative, and requirements/*.txt are not hand-edited.
---------
Co-authored-by: Sergey Silaev <hello@8am.dev>
#707 wrote generated start/stop files for the family picker. Swap those
for the downloaded preview bytes (voca is pair 05) and skip the catalog
ids in generate_sounds.py so they stay put.
Settings → Audio can pick start/stop cues from the shared catalog
(lift, flick, ember, step, voca, soft, chirp, scale, drop, glass, off).
New installs and any missing or unknown sound_effects.tone value use
voca. A saved id, including off, is left alone.
The old start_recording/stop_recording files stay on disk. They are
no longer the implicit default. Error cues still follow the existing
enable switch.
Replace the old traced app icon and tray SVGs with the approved family
mic geometry from VocaHQ/.github brand assets. Regenerate vocalinux.com
favicons and logo PNGs/WebPs from the same source. No version bump.
Per brand book §9 and §10.
* docs(web): refresh screenshots for v0.15 sidebar settings UI
Recapture product and settings gallery shots against the searchable
sidebar settings dialog, keeping the previous asset filenames and
exact pixel dimensions with wallpaper padding around each window.
* fix(web): correct screenshot semantics after adversarial review
Keep the existing transcription and tray images because the replacements did not
show their claimed flows. Populate the Logs dialog and unlock Advanced settings
so those refreshed images demonstrate the features described by the gallery.
* fix(web): retake screenshots as square crops with uniform padding
Resize settings dialogs to a near 1:1 window, capture with ~28px wallpaper
padding on all sides, open About from the tray menu, and skip redoing the
awkward XFCE system-tray asset.
* docs(web): retake v0.15 screenshots on GNOME (light/dark)
Window-only captures from Ubuntu/GNOME at 960x720 for settings and
logs, with matching dark variants under screenshots/dark/. Replace the
old Shortcuts shot with Performance to match the sidebar.
* feat(web): theme-aware light/dark screenshot switching
Serve paired GNOME captures and swap them with the site theme via
dark:hidden / hidden dark:block. Replace Shortcuts gallery entry with
Performance to match the v0.15 sidebar.
* docs(web): refresh screenshots after About moves into Settings
Rebase onto main brought the in-app update checker: About is now a
sidebar settings page. Recapture light/dark GNOME panels at 960x720 and
update gallery copy/metadata accordingly.
* docs: use single screenshot source for README and website
Point README images at web/public/screenshots so product shots live in
one place, drop the unused resources/screenshots tree (including the old
demo video and about-updates set), and replace the missing shortcuts
shot with performance.
* docs(web): refresh light/dark screenshots and product grid
Replace the screenshot set with fresh captures for both themes, and
lay out the three Product shots in a single equal-height row.
* fix(web): align screenshot metadata, sizes, and theme loading
Restore dictation copy for the 00-transcription asset, set width/height
from the recaptured PNGs, preload only the light next/image twin when
priority is set, and eager-load both theme variants by default so dark
mode does not flash empty on first toggle.
* fix(web): show full settings screenshot without crop
Use object-contain so the homepage settings dialog fits the frame
instead of object-cover clipping the sidebar.
* feat(settings): add in-app update checker with stable/nightly channels
Move About into the Settings sidebar and check GitHub Releases for updates.
Stable uses /releases/latest; Nightly follows nightly-YYYY-MM-DD tags.
Remove the standalone About dialog and wire tray About to Settings.
Fixes#183
* docs(readme): update About screenshot caption for Settings page
* fix(settings): address update-checker review and About polish
Discard stale in-flight results when the update channel changes, page
through GitHub releases for nightly tags, restore the About logo next
to the title, and replace the em dash in the app description.
* docs(screenshots): add About update-checker state captures
Host PR review screenshots on the branch so GitHub can render them
from raw.githubusercontent.com (Cursor artifact URLs 403 in PR bodies).
* fix(updates): recognize .devYYYYMMDD nightlies and clear Open style
Parse CI nightly versions like 0.14.2.dev20260802+sha when checking for
updates, and drop the suggested-action style from Open after a failed
GitHub lookup.
* fix(ui): AppImage smoke fixes for tray icons, labels, and identity
Replace placeholder mic tray SVGs with opaque branded icons, show
whisper.cpp instead of Whisper_cpp, set GLib/AppIndicator identity to
Vocalinux (not main.py), and give About dialog buttons enough padding
so labels are not clipped under Adwaita.
* fix(packaging): harden AppImage build for Wayland and tray deps
Pin the build interpreter, install onnxruntime into the bundle, set
desktop Exec=AppRun + StartupWMClass, prune typelibs to an allowlist
after linuxdeploy, and stop forcing GDK_BACKEND=x11 on Wayland
(VOCALINUX_FORCE_X11=1 remains as an escape hatch). CI AppImage jobs
also pull Ayatana AppIndicator and librsvg SVG loader packages.
* fix(packaging): bundle full stdlib from base_prefix in AppImage
When build.sh runs under a venv, sys.prefix only has site-packages, so
the AppImage was missing encodings and crashed on start. Copy the
interpreter and stdlib from sys.base_prefix, force pip
--ignore-installed into AppDir, set Gdk program class to Vocalinux, and
tone down the muted tray slash so small StatusNotifier icons stay slate.
* fix(tray): use absolute icon paths so stale hicolor icons lose
XFCE StatusNotifier resolves IconName through the system theme and can
ignore IconThemePath. A leftover ~/.local/share/icons placeholder
(vocalinux-microphone-off.svg filled #e74c3c) was winning over the
AppImage's bundled icons. Outside Flatpak, pass absolute SVG paths to
set_icon_full / new_with_path instead of bare theme names.
* docs(screenshots): refresh v0.14 settings/About shots and add website gallery
Replace the outdated About dialog screenshot and supersede the old single
settings dialog with the six v0.14.0-beta settings tabs. Keep unique product
shots that have no replacements. Add a dedicated /screenshots/ website page
with header/nav discoverability and a homepage link (no full gallery on home).
* docs(screenshots): drop obsolete features-overview shot
The annotated features overview was the pre-tabbed settings panel and no
longer matches the v0.14 UI. Remove it from README, website gallery, and assets.
* docs(screenshots): ship full-resolution web transcription shot
Restore the original PNG instead of the downscaled copy so the website
gallery matches the repo assets bit-for-bit.
* feat(web): add click-to-expand lightbox on screenshots gallery
Open a full-screen dialog when a shot is clicked, with prev/next controls,
keyboard arrows, Escape to close, and captioned counter for browsing the set.
* fix(web): avoid next/image HMR crash on screenshots gallery
Use plain img tags in the client gallery so dev-mode webpack chunk
reloads do not throw options.factory call errors while hydrating.
* feat(readme): add screenshots section to README
* feat(readme): add transcription screenshot to README
* feat(readme): remove duplicate settings screenshot, keep annotated version
* refactor(readme): move screenshots to resources directory
* feat(resources): add screenshots directory
* feat(readme): add all screenshots in 2x2 table layout with full-width features overview
* docs(readme): mark Improved Wayland support as completed in roadmap
Replace the current jarring sound alerts with smoother, more pleasant
bell-like tones inspired by voice assistants like Siri and Gemini.
Changes:
- start_recording.wav: Ascending perfect fifth (A4→E5, 0.30s)
- stop_recording.wav: Descending perfect fifth (E5→A4, 0.25s)
- error.wav: Low gentle chime (E4, 0.35s)
Technical improvements:
- Smooth frequency sweeps (sigmoid curve transitions)
- Subtle vibrato (8Hz) for warmth and richness
- Harmonic overtones for fullness
- Elegant exponential decay envelopes
- Reduced file sizes (926KB → 80KB total)
The new sounds are shorter (0.25-0.35s vs 0.5-1s), quieter
(20-25% amplitude vs full volume), and more pleasant for frequent use.
* Implement custom icon for Vocalinux (Closes#10)
* Fix system tray icon display issue
* Temp commit before purging
* refactor: restructure project into proper vocalinux package
* test: fix and improve audio_feedback and tray_indicator tests with proper mocking and isolation
* test: update import paths in test files to use the new package structure
* Remove icon background
* fix: implement robust resource path discovery in audio_feedback module
* fix: improve resource discovery across application for consistent icon and sound loading
* chore: ensure uninstall script is compatible with new resource paths
* Fix black formatting