Vocalinux
vocalinux.comLinuxOffline system-wide voice dictation for Linux (X11 and Wayland). Uses local models (whisper.cpp, Whisper, or VOSK) so microphone audio never leaves the device. Tray app with hotkeys; GPLv3. Currently beta software.
- Homepage:vocalinux.com
- GitHub:github.com/jatinkrmalik/vocalinux
- Web info:web-check.xyz/check/vocalinux.com
Vocalinux Source Code
Author
Description
Free, open-source, 100% offline voice dictation for Linux. Speak and type anywhere via whisper.cpp, Whisper & VOSK engines, GPU-accelerated, works on X11 + Wayland!
Homepage
https://vocalinux.com/Repository
- LicenseAGPL-3.0
- Created12 Apr 25
- Primary languagePython
- Size31,646 KB
- Stars945
- Forks103
- Watchers945
Top Contributors
@jatinkrmalik (451)
@devin-ai-integration[bot] (54)
@sesav (20)
@dependabot[bot] (15)
@kacperpaczos (13)
@Mr-Sunglasses (6)
@eiseleb47 (5)
@AnayGarodia (4)
@AmirF194 (3)
@AntoineMontane (3)
@flesler (3)
@juanfradb (2)
@webenefits (2)
@Sbenazar (2)
@subsy (2)
@AlexThunder1989 (2)
@sevenjay (1)
@only21mil (1)
@bbbboother (1)
@mre31 (1)
@viveknadig (1)
@Scrates1 (1)
@peplocanto (1)
@Nathan-Roll1 (1)
@mohamdhashim (1)
@LuigiKraken (1)
@tanjera (1)
@HashimAbdulaziz (1)
@guilhermefeitosa66 (1)
@GrahamJenkins (1)
@fsioni (1)
@karottenreibe (1)
@Depfrost (1)
@BlackEyedHatMan (1)
@Asseel-Naji (1)
Recent Commits
devin-ai-integration[bot](17 Oct 26)
fix(release): recreate refs/remotes dropped by git on the Flatpak remote publish (#966) * fix(release): recreate refs/remotes dropped by git on the Flatpak remote publish The first real remote publish (v0.18.3) failed at 'flatpak build-update-repo --generate-static-deltas' with 'opendir(refs/remotes): No such file or directory'. ostree init creates refs/remotes empty, git does not track empty dirs, and the site/repo checked back out of gh-pages therefore lacks it — while delta generation opens that dir unconditionally. mkdir -p it (and refs/mirrors) after the copy. Also name the Snap Store review-queue blockage in its publish error, so the fix (reject the stale upload on the dashboard, re-run) surfaces on the job page. * test(release): pin the refs/remotes mkdir before build-update-repo --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](17 Oct 26)
chore(release): v0.18.3 (#964) * chore(release): v0.18.3 - Update version from 0.18.2 to 0.18.3 - Add v0.18.3 sections to CHANGELOG, docs/UPDATE.md, metainfo.xml and website changelog - Bump website package metadata and softwareVersion schema - Clarify that the uinput-carrying sideload snap is the v0.18.2 asset * docs(release): include the transcribe modal-grab fix (#965) in v0.18.3 notes --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](17 Oct 26)
fix(ui): release modal grab after TinyDiarize download before transcript opens (#965) * fix(ui): release modal grab after TinyDiarize download before transcript opens The transcribe path's ModelDownloadDialog is modal. On success it stayed open behind the diarized transcript dialog, holding its grab so every button on the transcript was unclickable until the hidden dialog was found and closed. Destroy it on success there and let the transcript be the completion affordance; the failure path still keeps the dialog up to show the error. * style(tests): black-format new dialog-grab tests * fix(ui): stop download dialog pulse timer on destroy; type test helper * style(ui): type destroy-handler varargs --------- Co-authored-by: Jatin K Malik <[email protected]>
Jatin K Malik(17 Oct 26)
Remove 'PRs Welcome' badge from README Removed the 'PRs Welcome' badge from the README.
devin-ai-integration[bot](17 Oct 26)
fix(injection): send newlines as Return on the xdotool backend (#962) * fix(injection): send newlines as Return on the xdotool backend xdotool type maps '\n' to the Linefeed keysym, which GTK targets silently drop — "new line" produced nothing on X11 even though the segment reached the injector. Split each chunk on '\n' and press Return between typed segments so a newline lands as a real keypress in every app. Verified against a live GtkTextView on Xvfb: the same "A\nB" input that previously produced 'AB' now produces 'A\nB'. Fixes #955 * fix(commands): consume trailing punctuation after mid-utterance commands "New paragraph." inside a longer utterance substituted correctly but left the engine's sentence-final period typed after the break ("\\n\\n. Does this work now?"). Text-command substitution now consumes a run of trailing , . ! ? ; : … when it precedes whitespace or the end of the segment — the reporter's comma-phrased case ("…, new paragraph, …") stops leaking the stray comma the same way. A mark glued to following text ("newline.io") is untouched. Fixes #955 * fix(injection,commands): resume mid-chunk on retry, don't eat produced marks Greptile review follow-ups on #962: - A failed Return mid-chunk left 'typed' at the chunk start, so the retry re-sent text xdotool had already delivered. 'typed' now advances per typed segment and per Return keypress, so the retry resumes exactly at the un-typed position — and the clipboard fallback reports the same progress if retries run out. - _TRAILING_PUNCTUATION could consume a mark produced by an earlier command replacement ('hello new line exclamation mark' gave '\\n' instead of '\\n!'). The eater now only consumes marks before whitespace; the end-of-utterance case ('hello new line.') is a pre-pass on the raw segment before any substitution runs. * style: black-format comment indent and test condition * fix(commands): strip segment before the end-of-utterance cleanup Trailing whitespace ('hello new line. ') hid the final mark from the pre-pass: the raw segment ended in a space, and the stripped segment left the dot at end-of-string where the mid-utterance eater cannot touch it. Strip first, then run the cleanup. Also add the missing type hints on the new test helper. --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](16 Oct 26)
fix(hotkeys): prefer evdev on GNOME X11 and skip redundant IBus engine restore (#963) Fixes #954. GNOME X11: mutter never delivers physical key events to the XRecord extension pynput relies on, so the listener started cleanly but shortcuts stayed dead. Prefer the evdev backend there (same path as Wayland), falling back to pynput when /dev/input is unusable. Shutdown: `ibus engine <name>` rewrites the whole X server XKB map, and the unconditional restore collapsed GNOME's multi-layout map and broke layout switching. The daemon check now uses _query_active_engine() (no GNOME gsettings fallback) so a cleared engine reads as None; the restore write is skipped when a real engine is live or the target is an xkb:* source GNOME owns, and still runs for real IM engines (#558).
devin-ai-integration[bot](16 Oct 26)
fix(packaging): build pywhispercpp at the portable x86-64 baseline (#959) * fix(packaging): build pywhispercpp at the portable x86-64 baseline Every packaged channel shipped a libggml-cpu compiled for AVX2+FMA: the manylinux PyPI wheel itself carries -mavx2 -mfma -mbmi2 code, so any package that bundles it dies with SIGILL when whisper.cpp loads a model on a pre-Haswell CPU (the reporter's i5-3337U). GGML_NATIVE=OFF alone is not the portable baseline either; while the native default is on, ggml turns every GGML_* SIMD option on, so each is pinned off. - Snap: force the sdist (PIP_NO_BINARY) with the flag floor via CMAKE_ARGS in the part's build-environment. - Flatpak: extend the module's CMAKE_ARGS with the same floor. - Native .deb/.rpm: the build still vendors the wheels, then rebuilds libggml-cpu alone from the same hash-pinned sdist and swaps it into the vendored copies, asserting no AVX/FMA survives; the container image gains cmake, g++, make and binutils. - AppImage: extract the pinned-sdist reinstall into a shared helper and route every CPU-only fallback of the Vulkan path through a new baseline rebuild at the same floor; the Vulkan compile keeps its own flags via the same helper. Keeping the wheel on those paths was the bug's exact binary. Fixes #957 * style(tests): apply black/isort to the new packaging guards * fix(native): keep the wheel's libggml providers, alias its base/gomp sonames Swapping the whole libggml set for the baseline build broke the import smoke: the wheel's auditwheel-mangled core lib doubles as the extension's __cxa_call_terminate provider, and its NEEDED entries are the mangled names. Swap only libggml-cpu, and satisfy the baseline library's own unmangled NEEDEDs (libggml-base.so.0, libgomp.so.1) with aliases of the vendored copies, which carry no generated SIMD and are the same upstream version. Fail closed when the vendored set has restructured instead of silently shipping the AVX2 wheel. * fix(packaging): fail builds that lose the speech engine, unblock the ISA assert Greptile findings on the baseline work: - A failed baseline rebuild in the AppImage returned success after remove_appdir_pywhispercpp, so the bundle would ship with no speech engine at all while logging that the wheel was kept. Propagate the failure through every CPU-only fallback so the build stops instead. - The native libggml-cpu assertion used grep -q under pipefail, where grep's early exit SIGPIPEs objdump and the pipeline reports a miss, letting an AVX2 library through. Read the full disassembly instead. * fix(installer): build pywhispercpp from sdist on the CPU path install_cpu_pywhispercpp let pip pick the manylinux wheel, whose libggml-cpu is compiled for AVX2+FMA and SIGILLs on pre-Haswell CPUs (#957). Pass --no-binary pywhispercpp like the Vulkan/CUDA paths so the sdist compiles against this machine's own instruction set. * fix(installer): install C++ toolchain on distros that ship without one Forcing the pywhispercpp sdist on the CPU path needs a compiler, and the fedora, mageia, alpine, void and solus package maps did not request one. Add gcc-c++/make (rpm), build-base (alpine), base-devel (void) and gcc/g++/make (solus) so source installs compile on minimal systems. --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](16 Oct 26)
fix(ci): warn loudly when the Flatpak remote publish skips (#961) The credential gate silently skipped the remote publish when FLATPAK_GPG_PRIVATE_KEY / FLATPAK_REPO_TOKEN were unset, so the documented auto-update remote could stay unpublished for releases at a time (#951). Emit an Actions warning annotation and a run-summary entry instead of a plain log line, and note in docs/FLATPAK_REMOTE.md that any token with Contents write on the remote repo works. Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](15 Oct 26)
fix(commands): keep line breaks from standalone voice commands (#958) * fix(commands): keep line breaks from standalone voice commands Two stacked defects ate the newline "new line" / "new paragraph" produce when spoken alone: * _normalize_segment_text stripped all leading whitespace, so the command's leading newline never reached the injector (a clean "new line" segment was dropped entirely). * whisper.cpp transcripts arrive punctuated ("New line."), which missed the exact-match ladder and left a stray "." after the substituted break, injected as ". ". Normalize now strips only spaces/tabs, and the generic path substitutes on a punctuation-stripped core when the whole segment is command phrases, so engine edge punctuation cannot leak while real text keeps it. Fixes #955 * fix(injection): deliver newline-only segments to the focused app inject_text treated whitespace-only text as empty and returned early, so the "\n" a standalone "new line" now correctly produces was discarded before any backend ran ("Empty text provided, skipping injection"). Only a truly empty segment is skipped; whitespace-only input is typed/pasted verbatim (xdotool types "\n" as Return). Space/tab-only segments never reach this point: segment normalization strips them upstream. Fixes #955 * fix(injection): keep skipping space/tab-only segments The previous commit let every whitespace-only string through, which also delivered bare spaces and tabs a caller never wants typed. Narrow the skip to text with no content outside space/tab so "\n" still reaches the backend while " " stays a no-op (the pre-existing test_empty_text_injection contract). Fixes #955 * fix(injection): deliver newline segments over IBus too IBusTextInjector.inject_text had the same whitespace guard and dropped "\n" before it reached the engine socket; narrow it the same way so a newline-only segment is sent while space/tab-only stays a no-op. Also let capitalize_sentences uppercase the first letter after leading whitespace, so Vosk + auto_capitalize keeps working on "\n hello". Covers Greptile's findings: real-socket test for the IBus path, the capitalize regression via the main() callback seam, and type hints on the new injector tests. Fixes #955 * test(injection): add type hints to new IBus socket test AGENTS.md requires hints on every signature; the Greptile review flagged the new test for missing them. --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](15 Oct 26)
fix(snap): drop uinput plug denied by the Snap Store (#960) * fix(snap): drop uinput plug denied by the Snap Store The Snap Store rejected revisions 8-10 over the super-privileged uinput plug (allow-installation), and reviewers denied the grant request on forum.snapcraft.io/t/53528, pointing at the RemoteDesktop portal path the app already prefers. Remove the plug and the uinput-only ydotool so revisions pass automatic review again; Wayland typing continues through the RemoteDesktop portal (already the default backend ahead of ydotool), wtype, IBus Wayland on KDE, and clipboard paste. KDE Plasma loses its correct-case ydotool path on the store snap (KWin's portal mangles keysyms on some layouts, KDE bug 489021); the v0.18.x GitHub .snap still declares uinput for KDE users who sideload it. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(text-injection): stop telling snap users to connect uinput The Store snap no longer declares the plug, so the warning pointed at a command that cannot work. The Snap hints now explain that only the v0.18.x GitHub sideload declares uinput, and that native Wayland typing uses the RemoteDesktop portal or IBus Wayland on KDE. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Jatin K Malik <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
devin-ai-integration[bot](15 Oct 26)
docs(readme): add install-format badges and a Nix flake section (#949) Represent every distribution format in the README header shields: AppImage, .deb, .rpm, Flatpak, Snap (edge), AUR, PyPI, and Nix flake, grouped on their own row above the social badges. Also documents the flake install path in the Install section. Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](13 Oct 26)
chore(release): v0.18.2 (#943) * chore(release): v0.18.2 * chore(release): add Flatpak release notes and refresh changelog date --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](13 Oct 26)
fix(evdev): strip SW_RFKILL_ALL from uinput clone capabilities (#947) The evdev uinput clone copied EV_SW capabilities verbatim. "ThinkPad Extra Buttons" (thinkpad_acpi) declares SW_RFKILL_ALL, and a fresh uinput device reports every switch as 0. The kernel rfkill-input handler reads a 0 killswitch as radios-off, so every clone creation soft-blocked all radios at startup and again after every resume. Strip SW_RFKILL_ALL from the clone capability list, dropping EV_SW entirely when it was the only switch. Other switches stay declared so real switch events still forward; a forwarded SW_RFKILL_ALL write is dropped by the kernel for the undeclared code. Fixes #946
AlexThunder1989(12 Oct 26)
fix(evdev): leave held keyboards ungrabbed at startup (#941) Solid fix, this was leaving keys stuck on the desktop whenever someone was typing while the app started.
Sergey Silaev(12 Oct 26)
test(installer): cover the remote curl-to-bash install path end to end (#898) Nice, this locks in the remote install path and keeps the model size check working on Python 3.13.
Depfrost(12 Oct 26)
fix(nix): enable Vulkan GPU inference for pywhispercpp (#942) Nice work, Vulkan acceleration on Nix has been a long time coming.
devin-ai-integration[bot](12 Oct 26)
fix(packaging): build bundled pywhispercpp without -march=native (#939) Good catch, this is what was crashing the AppImage and Flatpak on older CPUs.
AlexThunder1989(12 Oct 26)
feat(overlay): live mic orb with audio-reactive pulse and ripple (#940) Looks great, the live level feedback makes the overlay feel a lot more responsive.
devin-ai-integration[bot](12 Oct 26)
fix(installer): keep piped script on stdin and prompt via /dev/tty (#935) * fix(installer): keep piped script on stdin and prompt via /dev/tty `curl | bash` left bash reading the installer itself from stdin, and the detection block's `exec < /dev/tty` (from #315) closed that pipe about 300 lines into a 3000-line script. curl died with error 23 writing to the closed pipe, and bash read the rest of the installer from the terminal as commands instead of finishing the script. stdin now stays on the pipe and a reachable terminal is recorded in TERMINAL_PROMPTS. Every interactive prompt goes through read_prompt, which reads /dev/tty explicitly only for that read, so user input still works in a terminal while the script body keeps flowing through the pipe. The interactive-mode gate now checks TERMINAL_PROMPTS rather than `-t 0`, which also lets `--interactive` work under a pipe. Regression coverage: the remote-install gate's second run now pipes the bootstrap in under a `script` pty (the literal `cat | bash` shape a curl user takes), and new tests run install.sh in a pty with the script on a pipe to assert the mode and engine prompts still answer on the terminal. Fixes #933 * fix(installer): drain the piped bootstrap before the handoff exec A curl|bash bootstrap leaves its unread tail on stdin; the tagged installer reads its commands from a file, so nothing drained the pipe and a still- streaming curl reported error 23 when the installer exited. Drain stdin to EOF before exec (Greptile P2 on #935). Gate: drip-feed the piped run so the producer is mid-write at the handoff like real curl, and run it under pipefail so a producer killed early fails the run. Tests: pass --tag so a slow release lookup cannot eat the window, wait for the engine prompt before Ctrl+C, and quote the installer path. * test(installer): propagate a killed producer's status in the piped gate A cat dying mid-drip (SIGPIPE when the consumer abandons the pipe) was swallowed by the loop and the final rm, so drip returned success and pipefail could not see the download failure the arm exists to catch. --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](11 Oct 26)
feat(nix): add flake package, NixOS and Home Manager modules (#936) * feat(nix): add flake package, NixOS and Home Manager modules Add a flake.nix plus packaging/nix derivations so Nix and NixOS users can run and install Vocalinux declaratively, including via Home Manager. - package.nix: buildPythonApplication with GTK3, libayatana-appindicator, IBus and libnotify typelibs; wraps the entry point with every host tool the injectors probe for (xdotool, wtype, ydotool, wl-clipboard, xclip, xsel, xprop, setxkbmap, ibus, gdbus, notify-send, paplay, aplay) - pywhispercpp.nix: builds pywhispercpp from its vendored PyPI sdist (absent from nixpkgs, same gap as Debian/Fedora), static whisper.cpp, GGML_NATIVE=OFF for a portable baseline - module.nix: NixOS module enabling hardware.uinput and installing the package; input/uinput group membership stays a per-user choice - home-manager.nix: programs.vocalinux.enable installs into the profile - docs/INSTALL.md gains a Nix / NixOS section; packaging/nix/README.md carries the usage snippets Refs #931 * fix(nix): address review findings on imports check and docs - pywhispercpp: check pywhispercpp.model and _pywhispercpp too, so the compiled binding is proven loadable, not just the package - README Home Manager example: declare the nixpkgs/home-manager inputs and pass pkgs, which homeManagerConfiguration requires - package.nix: use top-level xprop/setxkbmap attrs (xorg.* is deprecated) --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](09 Oct 26)
fix(installer): install cairo headers on suse, void, solus and alpine (#937) The pinned pycairo builds from source everywhere, and the sdist needs cairo.pc. Fedora, mageia and the debian/ubuntu maps list the headers explicitly; suse relied on gobject-introspection-devel pulling pkgconfig(cairo) transitively, which the current Tumbleweed image no longer does, so the opensuse/tumbleweed install gate now fails at "Dependency cairo not found" during pycairo metadata generation. void, solus and alpine have the same latent gap; each gets the same package spelled in its own convention. Co-authored-by: Jatin K Malik <[email protected]>
Kanishk Pachauri(09 Oct 26)
chore: add OSS Scanner build and threat model (#934)
devin-ai-integration[bot](08 Oct 26)
fix(evdev): monitor remapper virtual keyboards ungrabbed (#932) * fix(evdev): monitor remapper virtual keyboards ungrabbed On Wayland the device hub grabs every discovered keyboard and clones it via uinput so the dictation shortcut can be suppressed. With a remapper like keyd running, the hub grabbed its virtual keyboard too, and the remapper grabbed the clone in turn (keyd's default [ids] * matches it): forwarded keys went to the remapper instead of the compositor, so users could not type at all, and each forwarded event looped back through the chain. Detect virtual keyboards by their sysfs device path (uinput-spawned devices have no physical parent and live under /devices/virtual/input), falling back to known remapper names when sysfs is unreadable, and monitor them ungrabbed. Their events still reach the listener, so shortcuts bound to them keep working; only suppression is lost, which a grab could never provide anyway since the remapper re-emits on a device we cannot hold. keyd reports BUS_USB for its virtual devices, so the bus type cannot discriminate; the sysfs path can. Fixes #930 * test(evdev): annotate new #930 test mocks Satisfies the repo rule that every function signature carries type hints, including test fixtures. --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](08 Oct 26)
feat(web): showcase .deb/.rpm/Snap/Flatpak/AUR packages in install section (#929) Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](08 Oct 26)
chore(release): prepare v0.18.1 (#926) Prepares the v0.18.1 patch release: version bump, changelog and docs sync, native-package and web metadata, and release notes crediting every reporter and PR author.
devin-ai-integration[bot](08 Oct 26)
fix(ui): unbreak Initial Prompt TextView and dedupe save-dialog .txt (#927) Two small UI fixes found during the v0.18.1 smoke test. * Settings > Advanced > Initial Prompt never accepted typed input: the wrapping GtkListBoxRow grabs keyboard focus on button press and steals it back from the GtkTextView. Mark the row non-focusable. * Transcript and log save dialogs could return a doubled .txt.txt name; new paths.collapse_repeated_extension helper normalizes it, with a replace-confirmation when the collapsed path already exists.
dependabot[bot](08 Oct 26)
chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates (#910) * chore(deps): bump the npm_and_yarn group across 1 directory with 3 updates Bumps the npm_and_yarn group with 3 updates in the /web directory: [postcss-selector-parser](https://github.com/postcss/postcss-selector-parser), [sharp](https://github.com/lovell/sharp) and [source-map-js](https://github.com/7rulnik/source-map-js). Removes `postcss-selector-parser` Updates `sharp` from 0.35.4 to 0.35.5 - [Release notes](https://github.com/lovell/sharp/releases) - [Commits](https://github.com/lovell/sharp/compare/v0.35.4...v0.35.5) Updates `source-map-js` from 1.2.1 to 1.2.2 - [Release notes](https://github.com/7rulnik/source-map-js/releases) - [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md) - [Commits](https://github.com/7rulnik/source-map-js/compare/v1.2.1...v1.2.2) --- updated-dependencies: - dependency-name: postcss-selector-parser dependency-version: dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: sharp dependency-version: 0.35.5 dependency-type: indirect dependency-group: npm_and_yarn - dependency-name: source-map-js dependency-version: 1.2.2 dependency-type: indirect dependency-group: npm_and_yarn ... Signed-off-by: dependabot[bot] <[email protected]> * chore(deps): keep tailwindcss on v3 The group update pulled tailwindcss ^4.3.3, whose PostCSS plugin moved to @tailwindcss/postcss and whose Config type rejects darkMode: ["class"]. Pin back to ^3.4.3 so the Build Website and Netlify checks pass; the sharp 0.35.5 and source-map-js 1.2.2 bumps are kept. A Tailwind v4 migration needs its own PR. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jatin K Malik <[email protected]> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
devin-ai-integration[bot](08 Oct 26)
fix(whispercpp): reuse an on-disk same-size weight at startup (#923) * fix(whispercpp): reuse an on-disk same-size weight at startup The Settings picker already lets a downloaded same-size model stand in when the language-derived sibling is absent, but the startup path never applied it: a headless config with language=en-us and model_size=medium demanded ggml-medium.en.bin while ggml-medium.bin sat in the models directory and loads fine. Move the stand-in into whispercpp_model_info.on_disk_stand_in so both paths share it, and give resolve_whispercpp_variant a prefer_on_disk flag that only language-derived results use: pinned variants and stored specializations still load exactly what they name, the .en preference still wins when that file is present, and checksum verification is untouched. get_model_size_for_engine opts in so startup and headless launches match the Settings semantics. Fixes #916 * fix(whispercpp): keep is_model_downloaded free of makedirs get_model_path creates the model directory for callers that are about to write a file, but is_model_downloaded is a read-only probe: on a fresh profile its makedirs ran inside tests that stub os.makedirs for the config directory, breaking them, and a bare existence check should not mutate the filesystem anyway. Resolve the file path without creating directories in the probe; get_model_path keeps creating for writers. Refs #916 * test(whispercpp): annotate the stand-in fixture's return type AGENTS.md requires type hints on every signature; _downloaded returns the context manager from patch.object. Refs #916 --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](08 Oct 26)
fix(text-injection): end option parsing before typed text (#922) * fix(text-injection): end option parsing before typed text A 20-char xdotool chunk, or a 200-char wtype/ydotool chunk, that starts with '-' (a word hyphenated across the chunk boundary) is parsed as a flag: 'xdotool type --clearmodifiers -stickation' exits 1 with 'type: unrecognized option' and the rest of the dictation is dropped. Pass '--' before the text argument in the xdotool, wtype, and ydotool type invocations so the remaining argument is always typed literally. Fixes #921 * test(portal-fallback): expect the wtype option terminator The partial-type fallback assertion predates the -- terminator and still expected the bare ['wtype', 'llo'] argv. Refs #921 --------- Co-authored-by: Jatin K Malik <[email protected]>
devin-ai-integration[bot](08 Oct 26)
fix(dictation-pad): keep pad window out of the compositor ghost state (#912) * fix(dictation-pad): keep pad window out of the compositor ghost state On GNOME Wayland an idle, fully covered toplevel gets shelved by the compositor: it stays in the window list but renders nothing and takes no input. Keep the pad floating above other windows and pinned to all workspaces so it cannot be shelved, track iconify/obscure state events, deiconify on show, and repaint when visibility returns. Fixes #896 * test(dictation-pad): scope Window return_value patch in shelving test * fix(dictation-pad): detect Wayland shelving and recreate dead surface set_keep_above is a stub in GTK3's Wayland backend, so a covered idle pad still gets shelved by the compositor on GNOME/Wayland: it stays in the window list but draws nothing and takes no input, and present() cannot revive it. Add a frame-callback watchdog: each tick callback stamps the clock and a GLib timeout flags a mapped window whose frames went cold as shelved. A shelved pad is then recreated (hide + show_all) in show_pad, the same path the user's manual Close + tray reopen takes. Keep keep_above/stick for X11 where they are honored, plus the iconify and visibility-event handling from the previous commit. --------- Co-authored-by: Jatin K Malik <[email protected]>
Vocalinux Website
Website
Vocalinux: Offline Voice Dictation for Linux
Free and open-source voice dictation for Linux. Convert speech to text with whisper.cpp, VOSK, Remote API servers, Silero VAD, X11, and Wayland.
Redirects
Does not redirect
Security Checks
All 65 security checks passed
Server Details
- IP Address185.199.110.153
- Hostnamecdn-185-199-110-153.github.com
- LocationFrancisco,Indiana,United States of America,NA
- ISPGitHub Inc.
- ASNAS54113
Associated Countries
US
Safety Score
Website marked as safe
100%
Trackers
Loads 1 third-party tracker
- googletagmanager.comGoogle Ads
Blacklist Check
vocalinux.com was found on 0 blacklists
- AntiSocial Blacklist
- Artists Against 419
- Badbitcoin
- Bambenek Consulting
- CERT Polska
- CoinBlockerLists
- CRDF
- CryptoScamDB
- EtherAddressLookup
- EtherScamDB
- Fake Website Buster
- MetaMask EthPhishing
- NABP Not Recommended Sites
- OpenPhish
- PetScams
- PhishFeed
- PhishFort
- Phishing.Database
- PhishStats
- PhishTank
- Phishunt
- RPiList Not Serious
- Scam.Directory
- SecureReload Phishing List
- Spam404
- StopGunScams
- Suspicious Hosting IP
- ThreatFox
- ThreatLog
- TweetFeed
- URLhaus
- ViriBack C2 Tracker
Website Preview
Vocalinux Reviews
More Accessibility
⚠️ This section is still a work in progress ⚠️
Check back soon, or help us complete it by submiting a pull request on GitHub.
Or submit an entry here
About the Data: Vocalinux
Change History
- Added #680
Edit Vocalinux Data
You can edit Vocalinux's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external
sources, a list of these can be found data documentation.
Origin Data
Modify Data
API
You can access Vocalinux's data programmatically via our API. Simply make a GET request to:
https://api.awesome-privacy.xyz/v1/services/vocalinuxThe REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.
Share Vocalinux
Help your friends compare Accessibility, and pick privacy-respecting software and services.
Share Vocalinux and Awesome Privacy with your network!