diff --git a/.bumpversion.cfg b/.bumpversion.cfg index bebc2594..055a0cbb 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.2.3 +current_version = 0.3.0 commit = True tag = True tag_name = v{new_version} diff --git a/CHANGELOG.md b/CHANGELOG.md index 00bcf160..f0e07b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,9 +7,25 @@ ## [Unreleased] -This release rewrites the backend into a modular architecture, migrates the documentation site to Fumadocs, and ships a batch of bug fixes and UI polish across the stack. +## [0.3.0] - 2026-03-17 -The backend's 3,000-line monolith `main.py` has been decomposed into domain routers, a services layer, and a proper database package. A style guide and ruff configuration now enforce consistency. On the frontend, model loading status is now visible in the UI, effects presets get a dropdown, and several race conditions and accessibility gaps are closed. +This release rewrites the backend into a modular architecture, overhauls the settings UI into routed sub-pages, fixes audio player freezing, migrates documentation to Fumadocs, and ships a batch of bug fixes targeting the most-reported issues from the tracker. + +The backend's 3,000-line monolith `main.py` has been decomposed into domain routers, a services layer, and a proper database package. A style guide and ruff configuration now enforce consistency. On the frontend, settings have been split into dedicated routed pages with server logs, a changelog viewer, and an about page. The audio player no longer freezes mid-playback, and model loading status is now visible in the UI. Seven user-reported bugs have been fixed, including server crashes during sample uploads, generation list staleness, cryptic error messages, and CUDA support for RTX 50-series GPUs. + +### Settings Overhaul ([#294](https://github.com/jamiepine/voicebox/pull/294)) +- Split settings into routed sub-tabs: General, Generation, GPU, Logs, Changelog, About +- Added live server log viewer with auto-scroll +- Added in-app changelog page that parses `CHANGELOG.md` at build time +- Added About page with version info, license, and generation folder quick-open +- Extracted reusable `SettingRow` component for consistent setting layouts + +### Audio Player Fix ([#293](https://github.com/jamiepine/voicebox/pull/293)) +- Fixed audio player freezing during playback +- Improved playback UX with better state management and listener cleanup +- Fixed restart race condition during regeneration +- Added stable keys for audio element re-rendering +- Improved accessibility across player controls ### Backend Refactor ([#285](https://github.com/jamiepine/voicebox/pull/285)) - Extracted all routes from `main.py` into 13 domain routers under `backend/routes/` — `main.py` dropped from ~3,100 lines to ~10 @@ -40,6 +56,17 @@ The backend's 3,000-line monolith `main.py` has been decomposed into domain rout - Softened select focus indicator opacity - Addressed 4 critical and 12 major issues from CodeRabbit review +### Bug Fixes ([#295](https://github.com/jamiepine/voicebox/pull/295)) +- Fixed sample uploads crashing the server — audio decoding now runs in a thread pool instead of blocking the async event loop ([#278](https://github.com/jamiepine/voicebox/issues/278)) +- Fixed generation list not updating when a generation completes — switched to `refetchQueries` for reliable cache busting, added SSE error fallback, and page reset on completion ([#231](https://github.com/jamiepine/voicebox/issues/231)) +- Fixed error toasts showing `[object Object]` instead of the actual error message ([#290](https://github.com/jamiepine/voicebox/issues/290)) +- Added Whisper model selection (`base`, `small`, `medium`, `large`, `turbo`) and expanded language support to the `/transcribe` endpoint ([#233](https://github.com/jamiepine/voicebox/issues/233)) +- Upgraded CUDA backend build from cu121 to cu126 for RTX 50-series (Blackwell) GPU support ([#289](https://github.com/jamiepine/voicebox/issues/289)) +- Handled client disconnects in SSE and streaming endpoints to suppress `[Errno 32] Broken Pipe` errors ([#248](https://github.com/jamiepine/voicebox/issues/248)) +- Fixed Docker build failure from pip hash mismatch on Qwen3-TTS dependencies ([#286](https://github.com/jamiepine/voicebox/issues/286)) +- Added 50 MB upload size limit with chunked reads to prevent unbounded memory allocation on sample uploads +- Eliminated redundant double audio decode in sample processing pipeline + ### Platform Fixes - Replaced `netstat` with `TcpStream` + PowerShell for Windows port detection ([#277](https://github.com/jamiepine/voicebox/pull/277)) - Fixed Docker frontend build and cleaned up Docker docs diff --git a/app/package.json b/app/package.json index 55409654..55a182e5 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "@voicebox/app", - "version": "0.2.3", + "version": "0.3.0", "private": true, "type": "module", "scripts": { diff --git a/backend/__init__.py b/backend/__init__.py index 5fde0541..108ff87a 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -1,3 +1,3 @@ # Backend package -__version__ = "0.2.3" +__version__ = "0.3.0" diff --git a/landing/package.json b/landing/package.json index b9c1b554..f9aa7e74 100644 --- a/landing/package.json +++ b/landing/package.json @@ -1,6 +1,6 @@ { "name": "@voicebox/landing", - "version": "0.2.3", + "version": "0.3.0", "description": "Landing page for voicebox.sh", "scripts": { "dev": "bun --bun next dev --turbo", diff --git a/package.json b/package.json index 71f14f51..d6d94b43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "voicebox", - "version": "0.2.3", + "version": "0.3.0", "private": true, "workspaces": [ "app", diff --git a/tauri/package.json b/tauri/package.json index 32c9425c..31eb0790 100644 --- a/tauri/package.json +++ b/tauri/package.json @@ -1,7 +1,7 @@ { "name": "@voicebox/tauri", "private": true, - "version": "0.2.3", + "version": "0.3.0", "type": "module", "scripts": { "dev": "vite", diff --git a/tauri/src-tauri/Cargo.toml b/tauri/src-tauri/Cargo.toml index 68cf2964..1f707f8e 100644 --- a/tauri/src-tauri/Cargo.toml +++ b/tauri/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "voicebox" -version = "0.2.3" +version = "0.3.0" description = "A production-quality desktop app for Qwen3-TTS voice cloning and generation" authors = ["you"] license = "" diff --git a/tauri/src-tauri/tauri.conf.json b/tauri/src-tauri/tauri.conf.json index 53d33d71..c4c5da85 100644 --- a/tauri/src-tauri/tauri.conf.json +++ b/tauri/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Voicebox", - "version": "0.2.3", + "version": "0.3.0", "identifier": "sh.voicebox.app", "build": { "beforeDevCommand": "bun run dev", diff --git a/web/package.json b/web/package.json index e06e8be9..74247f87 100644 --- a/web/package.json +++ b/web/package.json @@ -1,7 +1,7 @@ { "name": "@voicebox/web", "private": true, - "version": "0.2.3", + "version": "0.3.0", "type": "module", "scripts": { "dev": "vite",