Skip to content

Releases: MHJoy99/joyvoice

JoyVoice v2.4.0 - Logging and diagnostics overhaul

Choose a tag to compare

@MHJoy99 MHJoy99 released this 03 Sep 00:16

JoyVoice v2.4.0 — Logging & Diagnostics Overhaul

Observability-only release. No dictation behavior changes. No action required to upgrade.

This release makes JoyVoice easier to troubleshoot and support: bounded rotating logs with secrets redacted, end-to-end tracing for every dictation, a tabbed Diagnostics viewer with one-click export, and usage telemetry that joins directly to log lines.

  • Tag: v2.4.0
  • Scope: 8 commits on master since the v2.3.9 closeout — rotating redacted logging, job_id pipeline tracing, structured crash reports + diagnostics export bundle, and usage-telemetry join keys
  • Dictation pipeline (mic → ASR → translation/style → paste) is unchanged

What changed

1. Rotating, redacted logging

  • The main log now rotates automatically: 5 MB per file, 5 backups kept (UTF-8). Unbounded growth is gone — the oldest backup is discarded.
  • Every line carries correlation fields — [job=<id> phase=<phase> sess=<session>] — so one dictation can be followed end to end.
  • Secrets are scrubbed before they ever hit disk or console: API keys, Bearer tokens, sk-... keys, passwords, and query-string secrets become [REDACTED].
  • Transcripts appear as 80-character previews only. Raw audio bytes are never logged.
  • Optional single-line JSON log mode for tooling (see knobs below).
  • Startup banner logs Python / app version, resolved paths, sanitized settings (key redacted), engine mode, and audio/text models.

2. job_id pipeline tracing (recording → ASR → LLM → paste)

  • Each press of the hotkey mints one job_id and reuses it unchanged through recording → ASR → optional LLM rewrite → paste → completion.

  • Phases: recordingtranscribingpastingidle. Stale worker results (e.g. after Cancel/Esc) are logged and ignored.

  • To follow one dictation, filter the log by its job number, e.g. in PowerShell:

    Select-String "job=7" "$env:APPDATA\JoyVoice\joyvoice.log"
  • Health watchdog lines (widget visibility, hotkey health) stay quiet at DEBUG when healthy and escalate to WARNING only when action was taken.

3. Structured crash reports + diagnostics viewer + export bundle

  • Crashes now write a capped (8 KB traceback), dual-format block: human-readable + structured JSON with timestamp, kind, session id, version, exception type, and message. One session id ties all crashes from a single run together.

  • Diagnostics dialog (tray / widget → Diagnostics…) is now tabbed:

    • Health — legacy device/connection checks
    • Logs — last 200 lines, copyable
    • Usage & System — event counts, paths, version
  • One-click Export bundle (.zip) from the dialog, or headless via:

    python tools\collect_logs.py --output joyvoice-diagnostics.zip --tail 200

    The bundle contains: joyvoice.log (+ rotated joyvoice.log.* siblings), usage.jsonl (if present), settings-sanitized.json (secrets redacted — never raw), system_info.json, usage_summary.json, version.txt, and log_tail_200.txt. Missing files never fail the bundle.

4. Usage-telemetry join keys (usage.jsonl)

  • Every telemetry row now carries timestamp (UTC ISO-8601) and session id — plus job_id for pipeline rows — matching the same keys in log lines so a usage event joins directly to its log trace.
  • Canonical event kinds for new rows: asr | llm | paste | pipeline. Legacy rows (audioasr, text_rewritellm) are still accepted on write and grouped correctly on read.
  • Retention keeps the file bounded (default: 30 days / 5000 newest events, atomic rewrite, corrupt lines dropped). Telemetry never raises into the dictation path.

Upgrade notes — no action needed

  • Drop-in update. Install / replace as usual — existing %APPDATA%\JoyVoice\settings.json, history.json, and portable-mode data\ folders are preserved.
  • No settings migration. No new required keys, no renamed keys, no model re-download.
  • No new dependencies for normal use. Same Python 3.11 runtime, same cloud + free/offline engines.
  • No behavior change to hotkeys, recording, transcription, translation, text styles, paste, call muting, or UI layout.
  • Log format change only: if you parse joyvoice.log with external tools, expect the new [job=… phase=… sess=…] prefix and rotation siblings (joyvoice.log.1, …). Set JV_LOG_JSON=1 if you prefer single-line JSON.

Where logs live

File Normal install Portable mode (portable.txt next to the app)
Main log %APPDATA%\JoyVoice\joyvoice.log (+ joyvoice.log.1 … rotation siblings) <app folder>\data\joyvoice.log
Usage telemetry %APPDATA%\JoyVoice\usage.jsonl <app folder>\data\usage.jsonl
Settings / history %APPDATA%\JoyVoice\settings.json, history.json <app folder>\data\

Quickest way to open: paste %APPDATA%\JoyVoice into Explorer's address bar, or open Diagnostics… → Logs tab inside the app.

Diagnostics how-to (for a bug report)

Option A — inside the app (recommended):

  1. Right-click the floating widget (or tray icon) → Diagnostics….
  2. Check the Logs and Usage & System tabs.
  3. Click Export bundle (.zip) → save the file.
  4. Attach the .zip to your GitHub issue. Settings inside are already sanitized (API key redacted).

Option B — command line (headless, same contents):

python tools\collect_logs.py --output joyvoice-diagnostics.zip --tail 200

This prints the bundle path and its contents, e.g. joyvoice.log, usage.jsonl, settings-sanitized.json, system_info.json, usage_summary.json, version.txt, log_tail_200.txt.

When reporting a failed dictation, include the job=<id> lines for that attempt:

Select-String "job=7" "$env:APPDATA\JoyVoice\joyvoice.log"

Log knobs (environment variables, all optional)

Variable Default Effect
JV_LOG_JSON off Set to 1 (also true / yes / on) for single-line JSON log lines instead of human-readable text.
JV_LOG_LEVEL INFO Global level, or per-module overrides (comma/semicolon separated). Examples: DEBUG, INFO,joyvoice.gemini_audio=DEBUG, WARNING;joyvoice.main=DEBUG.
JV_SESSION_ID auto (random per run) Override the 8-character session id used in [sess=…] correlation. Advanced / testing use only.

Set them before launch, e.g. in PowerShell:

$env:JV_LOG_JSON = "1"
$env:JV_LOG_LEVEL = "INFO,joyvoice.gemini_audio=DEBUG"
.\run.bat

Privacy

  • API keys, Bearer tokens, sk-... keys, passwords, and auth tokens are redacted in both the log file and the export bundle.
  • The bundle embeds settings-sanitized.json only — never raw settings.json.
  • Logs record sizes, durations, latencies, model names, and short transcript previews — never raw audio bytes or full dictation text.
  • Review the .zip before uploading if your dictation contains sensitive spoken content (the 80-character preview may quote it).
  • Never paste your API key into an issue. The bundle already redacts it — keep it that way when quoting log lines.

Links

JoyVoice v2.3.9 - Fast Native Audio Gateway

Choose a tag to compare

@MHJoy99 MHJoy99 released this 08 Aug 16:38

JoyVoice v2.3.9

Fast, reliable native audio transcription and translation for Windows.

Highlights

  • Native Gemini audio through the verified joyvoice-fast-audio gateway route.
  • Mono 16-bit PCM WAV at 16 kHz is sent as OpenAI-compatible input_audio.
  • Exact structured output: transcript, translation, and target_override.
  • 180-second request timeout for longer recordings, with no automatic retry after timeout.
  • Google Web Speech fallback remains available when native audio cannot complete.
  • Existing text-only chat, offline mode, clipboard-safe paste, language detection, and floating widget behavior remain supported.

Download

Download JoyVoice.exe below and follow the setup guide.

For native audio, set JV_NATIVE_AUDIO=true and configure JV_API_KEY as an environment variable. Never place an API key in source code or commit it to GitHub.

Verification

  • 41 focused cloud-pipeline tests passed.
  • Exact tag build completed with the authoritative PyInstaller spec.
  • Release asset is the Windows executable built from tag v2.3.9.

JoyVoice v2.3.8 - Reliable ASR and Fidelity Prompts

Choose a tag to compare

@MHJoy99 MHJoy99 released this 06 Aug 11:06

JoyVoice v2.3.8 makes Google Web Speech the reliable default ASR path and keeps Gemini 3.6 Flash for faithful text translation and style formatting. Translation and AI-prompt contracts now preserve facts, constraints, names, numbers, technical terms, qualifiers, and uncertainty without unintended summarization or invention. Long AI prompts remain cohesive up to 4000 characters, while transcript salvage protects spoken content if translation fails. Verified with 36 automated tests and a live Bengali dictation workflow. The Windows executable is not Authenticode-signed, so Windows may display a publisher warning.

JoyVoice v2.3.2 - Long-Audio Reliability and Release Workflow

Choose a tag to compare

@MHJoy99 MHJoy99 released this 03 Aug 04:55

JoyVoice v2.3.2 consolidates the long-audio reliability fixes, native-audio default restoration with opt-out, transcript preservation when translation fails, call-mute hotkey and click-safe toast fixes, synchronized release metadata, and the guarded fix-to-public-release workflow. Built from the exact v2.3.2 tag. Asset SHA-256: 93eb73d770f9252db41488b185e304bae4a310e6468c85b7c4f361f5dddfdc09

JoyVoice v2.3.1 — Call-Mute Fixes & Single EXE

Choose a tag to compare

@MHJoy99 MHJoy99 released this 31 Jul 20:14

JoyVoice v2.3.1 — Call-Mute Fixes & Single EXE

What's new

  • Mute-other-apps overhaul — the Audio settings tab now has a mode selector:
    • Hotkey — sends the mute key to detected call apps (Discord/Teams: Ctrl+Shift+M, Zoom: Alt+A). The settings explain that the keybind must be set inside the app (e.g. Discord → Settings → Keybinds → Toggle Mute) or it will not mute.
    • Virtual device (most reliable) — mutes a VB-Cable/VoiceMeeter capture endpoint; a new device dropdown auto-detects them.
  • Failure feedback — you get a toast when nothing was muted (no call app detected, no virtual device, keyboard unavailable) instead of silent failure.
  • Single EXE — one JoyVoice.exe does BOTH cloud mode and free/offline mode (offline libraries bundled). No more choosing between two downloads.

Download

JoyVoice.exe — the only build you need (~173 MB, does both Cloud and Free & Offline).

Install

  1. Download JoyVoice.exe and run it.
  2. Free: Settings → Free Mode → Free & OfflineSet up Free ModeTest → press F8.
  3. Cloud: Settings → API → paste your API key → Test connection → press F8.
  4. Mute others (optional): Settings → Audio → Mute other apps → choose Hotkey or Virtual device.

Good to know

  • Free Mode needs internet once to download the model, then runs offline.
  • Free Mode offline translation targets English; other target languages are transcription-only for now.
  • AI text styles require Cloud mode.

SHA-256

01910914c600bc0d8044c7ed44b4622e8c7a87dcd47842bb640e39d6490c8d65  JoyVoice.exe

Full details: CHANGELOG.md

JoyVoice v2.3.0 — Free & Offline Mode

Choose a tag to compare

@MHJoy99 MHJoy99 released this 31 Jul 19:32

JoyVoice v2.3.0 — Free & Offline Mode

JoyVoice can now run totally free and offline — no API key, no cloud — using a small local Whisper model. Press F8, speak, and clean text is pasted into any app.

What's new

  • Free & Offline Mode — new Settings → Free Mode tab with an engine switch:
    • Cloud (uses your API key, best quality) — the default, unchanged.
    • Free & Offline (local models, no API key needed).
  • Local speech-to-text via faster-whisper. The model auto-downloads once (needs internet the first time; about 460 MB for Small), then works fully offline. Choices: Tiny / Base / Small (recommended); Auto (GPU if available) / CPU only.
  • Built-in offline Bangla → English translation (Whisper translate) — no extra model.
  • One-click "Set up Free Mode" and "Test" buttons with live status.

Two builds

Build File What it is
Free (recommended) JoyVoice-Free.exe Bundles the offline libraries — fully-free dictation with no API key.
Cloud (slim) JoyVoice.exe Smaller cloud build — needs an API key in Settings → API.

Install (Free)

  1. Download JoyVoice-Free.exe and run it.
  2. Open Settings → Free Mode, choose Free & Offline, click Set up Free Mode (downloads the model once).
  3. Click Test to confirm, then press F8 to dictate.

Good to know

  • Free Mode needs internet once to download the model, then runs offline.
  • Offline translation currently targets English; other target languages produce transcription only in Free Mode for now.
  • AI text styles (Prompt for AI / Professional / Facebook) require Cloud mode.
  • Multilingual offline translation (NLLB) and offline AI styles (Ollama) are the planned next step.

SHA-256

d0c994a9f3831e154aca24fd4b697b699eba1f7a92e9ca4a7df92997e5299e17  JoyVoice-Free.exe
73e1bbf030c3b92f79345da1d46991410589c98cff6b74d630fd7651009f7c5a  JoyVoice.exe

Full details: CHANGELOG.md

JoyVoice v2.2.0 — Configurable API & Model Selection

Choose a tag to compare

@MHJoy99 MHJoy99 released this 31 Jul 18:30

JoyVoice v2.2.0 — Configurable API & Model Selection

Press F8, speak in any of 10 languages, and clean translated text is pasted into whatever app has focus. This release makes the cloud backend fully configurable from the UI.

What's new

  • New Settings → API tab — configure everything from the UI, no environment variables required:
    • API base URL — any OpenAI-compatible endpoint ending in /v1 (e.g. https://gpt.bdx.market/v1, https://api.openai.com/v1).
    • API key — masked field with a Show toggle, stored locally. Blank falls back to the JV_API_KEY env var.
    • Audio model & Text model — editable dropdowns (default gemini-3.6-flash).
    • Fetch models — pulls the live model list from your endpoint into the dropdowns.
    • Test connection — verifies the endpoint + key and reports available models.
  • Config resolution precedence: settings.json → environment variable → built-in default. Applied at startup and live on save.
  • Removed the old General-tab "Check API" button (superseded by the API tab).

Install

  1. Download JoyVoice.exe below and run it.
  2. Open Settings → API, paste your API key, pick your models, and click Test connection.
  3. Press F8 to dictate.

SHA-256

a9d737068e9b1d4099112a06d2b79e26f1ba24de5b8dcb09743a1de1979db971  JoyVoice.exe

Full details: CHANGELOG.md

v2.1.1 — AI Text Styles Fix & Pure Cloud Pipeline

Choose a tag to compare

@MHJoy99 MHJoy99 released this 25 Jul 18:16

v2.1.1 — AI Text Styles Execution Fix (2026-07-26)

Bug fix release connecting cloud LLM text rewriting to the main execution flow.

AI Text Styles Execution

  • Fixed uninvoked AI styles: Wired _run_llm() into AppController._on_asr_done() when text_style is set to prompt_for_ai, professional_message, or facebook_post.
  • Live preview update: Connected widget preview update (set_preview) upon completion of CloudLLMWorker.
  • Latency logging safety: Added llm_t0 timestamp recording in _run_llm and safe t.get("llm_s", 0.0) dictionary lookup for non-LLM pipeline runs.

JoyVoice v2.1.0 — Spoken override, cancel, ending cleanup, usage logs

Choose a tag to compare

@MHJoy99 MHJoy99 released this 21 Jul 13:33

🎉 JoyVoice v2.1.0

Floating cloud dictation for Windows — speak any of 10 languages, get a clean translation pasted into whatever app has focus.

Production model: gemini-3.1-flash-lite via BDX.market
Platform: Windows 10/11 · Python 3.11 cloud path (no local Whisper/GPU required for the EXE)


⬇️ Download

Asset Description
JoyVoice-v2.1.0.zip Windows portable EXE (~129 MB)
JoyVoice-v2.1.0.zip.sha256 SHA-256 checksum
SHA-256: 3782fd18a9796bac25287e8e5da8be5ef0144e571f5035e906dd64d4fa0a638e

Install

  1. Download + unzip
  2. Set env var JV_API_KEY to your BDX.market API key (setx JV_API_KEY "…")
  3. Run JoyVoice.exe
  4. Press F8 and speak

✨ What's new in 2.1.0

Spoken one-shot target override

End an utterance with a language command to force this paste only into that language (settings stay unchanged):

  • paste this in Russian / Give me the Russian
  • in Bengali please / বাংলায় দাও
  • trailing cue: Russian · Japanese · Hindi
  • phonetic BN: রাশিয়ান-এ ট্রান্সলেট…

Implementation:

  • Gemini JSON target_override + local detector
  • Dual detect on source and English translation
  • Always force a dedicated retranslate when override is set (fixes EN-paste-with-override-detected)
  • Command phrase stripped from paste body
  • Toast: Override → RU

Cancel (no more forced transcription)

  • Esc or widget right-click Cancel
  • Recording → discard audio, no API call
  • Transcribing → invalidate job, never paste / never history
  • Accidental F8 tap < 0.35s treated as cancel
  • F8 remains start / stop-and-process only

Ending cleanup

  • Prefer cutting dangling open lines over inventing missing words
  • Strip trailing ... / …… and soft polite filler tails
  • Drop incomplete final clauses; keep the last complete sentence
  • Higher token budgets (audio 1600 / rewrite 1200) to avoid mid-sentence CJK cuts

Usage telemetry

  • Append-only %APPDATA%\JoyVoice\usage.jsonl
  • Per-request: model, latency, prompt/completion/total tokens (when gateway returns usage)
  • End-to-end pipeline rows (asr_s, llm_s, total)
  • Never raises into the dictation path

🔒 Security

  • API key only from env JV_API_KEY — never hardcoded
  • No secrets, tokens, or credentials in source or release assets

📦 Included in this release

  • JoyVoice.exe (onefile, windowed, cloud pipeline)
  • Source already on master (43f012d + README badge bump)

🔗 Links

v2.0.0: 10 Languages, Glass UI, and Robustness

Choose a tag to compare

@MHJoy99 MHJoy99 released this 20 Jul 12:29

🎉 JoyVoice v2.0.0

Major Features

  • 🌍 10 Languages: English, Chinese, Japanese, Korean, French, German, Spanish, Russian, Portuguese, Arabic
  • 🔍 Auto Language Detection: Automatically detects the spoken language
  • ✨ Glass UI: Modern frosted-glass floating widget with transparency effects
  • 〰️ Waveform Visualization: Real-time audio waveform display during recording
  • 🔊 Sound Effects: Audio feedback for recording start/stop, success, and errors
  • 💪 Robustness: Improved error handling and recovery across the pipeline
  • 📊 Confidence Scores: Display confidence level for transcriptions
  • 🔔 Toast Notifications: Non-intrusive status toasts
  • 🔄 Language Switcher: Quick language selection from the floating widget
  • 📜 History: Recent transcriptions history panel

Technical Improvements

  • Modular audio engine with sound playback
  • Enhanced ASR pipeline with fallback strategies
  • Improved paste mechanism reliability
  • Settings persistence enhancements
  • Better hotkey handling

Security

  • All API keys read from environment variables only — never hardcoded
  • No secrets, tokens, or credentials in source code