Skip to content
CAI
Software that uses CAICheck a score

jamiepine/voicebox

46.4

Weak · 28 September 2026

57k

lines of production code

TypeScript

with Python, Rust

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This release delivers a comprehensive overhaul of the project's infrastructure, introducing a \justfile\-driven workflow, automated versioning, and Docker support for headless and GPU-accelerated builds. The application architecture is significantly modernized with a route-based navigation system, a generated OpenAPI client, and a new platform abstraction layer that unifies Tauri, web, and macOS-specific capabilities like native dictation and audio capture. Backend improvements include a modular service layer, expanded TTS engine support, and an integrated MCP server for AI agent integration. Additionally, the release expands internationalization support, adds dark mode, and introduces a new Next.js landing site.

Features

Add cross-platform audio capture support for Linux, macOS, and Windows

The audio capture module now provides native implementations for Linux, macOS, and Windows, enabling system-level audio recording on all supported platforms. On Linux, it uses \pactl\ to detect PipeWire/PulseAudio monitor sources. On macOS, it leverages the ScreenCaptureKit framework to capture desktop audio. On Windows, it utilizes the WASAPI API for loopback audio capture. Each platform-specific module handles its own initialization, stream management, and sample extraction, exposing a unified \AudioCaptureState\ interface.

_tauri/src-tauri/src/audio\capture · high confidence

Add native macOS support for dictation via accessibility, input monitoring, and synthetic key injection

The Tauri backend now includes native macOS implementations for the core dictation pipeline. This adds \accessibility.rs\ to verify and request Accessibility permissions, \input\_monitoring.rs\ to handle Input Monitoring permissions for global hotkeys, \focus\_capture.rs\ to remember and restore the active application window, \clipboard.rs\ to save and restore the system clipboard, and \synthetic\_keys.rs\ to inject the paste command. These modules work together to enable the auto-paste feature on macOS, ensuring that synthetic keyboard events are delivered correctly and that the user's environment is preserved during dictation.

tauri/src-tauri/src · high confidence

Centralized language and UI layout constants

The application now uses a centralized language configuration file that defines supported languages for each TTS engine (Qwen, LuxTTS, Chatterbox, Tada, Kokoro) and provides helper functions to retrieve language options per engine. Additionally, a new UI constants file defines safe area padding for the top and bottom of the screen, with specific handling for Windows to account for the drag region bar.

app/src/lib/constants · high confidence

Expanded language support with new translations

The app now supports Italian, Japanese, Korean, and Traditional Chinese in addition to the previously available English, Spanish, French, Brazilian Portuguese, and Simplified Chinese. This update adds the necessary translation files and updates the i18n configuration to include these new locales, allowing users to interact with the application in their preferred language.

app/src/i18n · high confidence

Improved audio handling and date formatting

Added new utility functions for audio processing, including accurate duration detection for uploaded and recorded files, and conversion to WAV format. Enhanced date formatting to support multiple locales (Spanish, French, Japanese, Chinese) and correctly parse naive UTC timestamps from the backend. Added debug logging utilities and key code mappings for chord configuration.

app/src/lib/utils · high confidence

Introduce Tauri platform abstraction for audio, filesystem, lifecycle, and updates

Added a new platform abstraction layer in the Tauri integration, implementing the Platform interface with specific modules for audio capture and playback, file saving and directory picking, server lifecycle management (start/stop/restart), and automatic update checking and installation. This refactors the Tauri-specific logic into a structured set of modules (audio, filesystem, lifecycle, metadata, updater) that can be swapped or extended for other platforms.

tauri/src/platform · high confidence

Introduce Voicebox MCP server for local AI agent integration

A new Model Context Protocol (MCP) server is now available at /mcp, allowing local AI agents (such as Claude Code, Cursor, and VS Code extensions) to interact with Voicebox. This enables agents to speak text in cloned voices, transcribe audio, and browse captures. The server supports per-client voice profile bindings and exposes tools like voicebox.speak, voicebox.transcribe, and voicebox.list\_captures. A REST endpoint POST /speak is also provided for non-MCP callers.

_backend/mcp\server · high confidence

Introduce auto-update and theme synchronization hooks

Added useAutoUpdater and useThemeSync hooks to manage application updates and theme synchronization. The new useAutoUpdater hook provides a React interface for checking for, downloading, and installing updates, including toast notifications for update status and progress. The useThemeSync hook ensures the application's dark mode state stays in sync with the user's system preferences or explicit theme settings.

app/src/hooks · high confidence

Introduce dedicated components for audio playback, capture state, and accessibility

The app now uses a suite of new, dedicated UI components to improve the user experience. An AudioPlayer component provides native playback with waveform visualization, while an AudioKeepAlive mechanism prevents audio session teardown in webviews. The Captures tab features a new CapturePill for live recording status, a DictationReadinessChecklist to guide users through setup prerequisites, and a ChordPicker for configuring hotkeys. Additionally, an AccessibilityGate component proactively checks for and prompts users to enable macOS Accessibility permissions, ensuring features like global chord pasting function correctly.

app/src/components · high confidence

Introduce generated OpenAPI client for API communication

The app now uses a generated OpenAPI client (via openapi-typescript-codegen) to interact with the backend. This adds a comprehensive set of TypeScript types and service methods for voice profiles, history, model downloads, and other endpoints, replacing the previous ad-hoc fetch calls with a structured, type-safe API client.

app/src/lib/api · high confidence

Introduce platform abstraction for cross-platform capabilities

The application now uses a \PlatformContext\ to abstract platform-specific functionality, providing a unified interface for file system operations, update management, audio capture, and server lifecycle control. This change enables the app to support different backend implementations (such as CUDA or ROCm GPU acceleration) by isolating platform-dependent logic in the \app/src/platform\ directory.

app/src/platform · high confidence

Introduce web-specific platform abstraction layer

Added a new platform abstraction for the web environment, providing stub implementations for audio capture, file system operations, lifecycle management, metadata, and update checking. These changes ensure that web-specific behaviors (such as disabling system audio capture or skipping automatic updates) are handled gracefully within the application's platform interface.

web/src/platform · high confidence

New UI component library for the landing page

A new set of reusable UI components has been added to the landing page, including a styled Button, Card (with Header, Title, Description, Content, and Footer sub-components), FeatureCard, Hero, Section, and Separator. These components provide a consistent, modern aesthetic with features like backdrop blur, smooth transitions, and responsive sizing, forming the visual foundation for the voicebox.sh landing page.

landing/src/components/ui · high confidence

New backend modules for blog, pricing, releases, and token transparency

Added new server-side modules in landing/src/lib to power the landing page and new site sections. blog.ts reads markdown posts from the src/posts directory to render a blog. pricing.ts defines the Local, Cloud, and Studio tiers with placeholder pricing and feature lists. releases.ts fetches the latest GitHub release, download links, and total download counts, caching the results. token-stats.ts and constants.ts provide live on-chain statistics for the $VOICEBOX token, including supply, locked accounts, and creator rewards, while utils.ts provides a utility for CSS class merging.

landing/src/lib · high confidence

New backend utilities for capture chords, chunked TTS, audio effects, and progress tracking

Added several new utility modules in backend/utils: capture\_chords.py defines platform-specific hotkey chords for push-to-talk and toggle-to-talk; chunked\_tts.py implements engine-agnostic text chunking and audio concatenation with crossfading for long-text TTS; effects.py introduces a post-processing audio effects engine using pedalboard (chorus, reverb, delay, compressor, gain, filters, pitch shift) with built-in presets; dac\_shim.py provides a lightweight replacement for descript-audio-codec to avoid heavy dependencies; hf\_offline\_patch.py patches huggingface\_hub and transformers to enforce offline mode for cached models and harden tokenizer loading against network failures; hf\_progress.py tracks HuggingFace Hub download progress; progress.py provides a thread-safe ProgressManager for SSE-based download status updates; tasks.py introduces a TaskManager to track active downloads and generations; images.py handles avatar upload validation and processing; platform\_detect.py detects Apple Silicon and AMD GPUs on Windows; and validation.py was removed.

backend/utils · high confidence

New build and asset conversion scripts for release and development workflows

Added several new scripts to the \scripts/\ directory to support the new release and build processes. \package\_cuda.py\ and \package\_rocm.py\ split the PyInstaller output into a smaller server core and separate archives for NVIDIA/AMD runtime libraries, enabling independent updates. \prepare-release.sh\ automates the Tauri signing and release build process. \convert-assets.sh\ converts PNG and MOV files to web-optimized formats. \update-icons.sh\ generates platform-specific icons and favicons. \setup-dev-sidecar.js\ creates placeholder binaries for Tauri compilation in dev mode. \build-server.sh\ was updated to build both the server and MCP sidecars. \generate-api.sh\ was updated to use the local API port 17493 instead of 8000.

scripts · high confidence

New hooks for audio capture, recording, and generation state management

The app introduces a suite of new React hooks in the lib/hooks directory to support dictation, audio recording, and generation workflows. useCaptureRecordingSession and useAudioRecording handle microphone access, media recording, and Tauri cross-window broadcasting for the capture pill UI. useChordSync and useDictationReadiness manage hotkey activation and prerequisite checks (STT/LLM models, macOS permissions). useGenerationForm and useGenerationProgress manage the generation form state, model download tracking, and SSE-based status updates. useRestoreActiveTasks polls for active downloads and generations. useSettings provides optimistic updates for capture and generation settings. useStories and useMCPBindings manage story items and MCP client bindings. These hooks collectively enable the new dictation, capture, and generation features.

app/src/lib/hooks · high confidence

New landing page components for voice dictation, API, and agent integration

The landing page now features a suite of new interactive components: a 'CaptureHero' and 'CaptureSection' demonstrating the local voice dictation workflow; an 'ApiSection' showcasing the built-in REST API with a curl example and endpoint reference; an 'AgentIntegration' component visualizing AI agents speaking back via cloned voices; and a 'CapturesMockup' showing the app's capture history. Additionally, the 'DownloadSection' now links to the Mac ARM build, and the footer includes a 'CopyAddress' component for the $VOICEBOX token.

landing/src/components · high confidence

New landing site with blog, cloud, and download pages

The landing/src/app directory now contains a complete Next.js 16 application for voicebox.sh, including a main landing page, a blog with dynamic routes and Open Graph image generation, a cloud backup and sync information page, a download page with platform-specific redirects, and a Linux build-from-source guide. The site also includes API routes to fetch release information and GitHub star counts, alongside global styles and layout components.

landing/src/app · high confidence

New services layer for captures, channels, and cloud login

The backend/services directory now contains dedicated service modules for managing audio captures, audio channels, cloud device login, and more. The captures service handles persisting raw audio alongside STT transcripts and LLM-refined versions. The channels service manages audio channel configurations and device mappings. The cloud service implements the 'Log in with browser' flow for Voicebox Cloud, exchanging authorization codes for API keys. Additionally, the generation service consolidates TTS generation orchestration, the history service manages generation records, the personality service enables character-driven text generation, and the profiles service handles voice profile management. These modules replace the previous monolithic structure with a more modular, maintainable architecture.

backend/services · high confidence

New state stores for audio channels, effects, generation, and playback

The app introduces several new Zustand stores to manage application state: audioChannelStore for managing audio channels, effectsStore for post-processing audio effects, generationStore for tracking active generations, logStore for server logs, storyStore for story playback and selection, and updates to playerStore, serverStore, and uiStore with new capabilities like theme persistence, profile selection, and server URL handling.

app/src/stores · high confidence

Release infrastructure and development workflow overhaul

The project introduces a comprehensive release and development workflow, centered on a new \justfile\ that automates setup, builds, and dev environments across Windows, macOS, and Linux. A \.bumpversion.cfg\ file and associated scripts automate versioning across all project files (Tauri, package.json, backend). The release process is supported by a generated \CHANGELOG.md\ and a \bumpversion\-based release workflow. Additionally, the project adds a Model Context Protocol (MCP) server configuration (\.mcp.json\) for AI agent integration, a \Dockerfile\ and \docker-compose.yml\ for headless web deployment, and a \docker-compose.rocm.yml\ overlay for AMD GPU support. The \setup.md\ guide is removed in favor of the new \justfile\ and \CONTRIBUTING.md\ documentation.

(repo-wide) · high confidence

Unified backend abstraction layer with multi-engine support

The backend/backends directory now provides a unified abstraction layer for TTS and STT backends, replacing per-engine dispatch maps with a declarative ModelConfig registry. This refactoring introduces dedicated backend implementations for Chatterbox (multilingual voice cloning), Chatterbox Turbo (fast English-only with paralinguistic tags), HumeAI TADA (high-quality voice cloning), Kokoro (lightweight CPU-friendly TTS), LuxTTS, MLX (Apple Silicon), and PyTorch (Qwen3-TTS). Each backend implements the TTSBackend protocol, enabling multi-engine support and consistent model loading, caching, and device detection across all TTS engines.

backend/backends · high confidence

Architecture

Backend refactored into modular services and routers with improved startup and cross-platform support

The backend has been restructured into a modular architecture, extracting routes into domain-specific routers and moving CRUD and service modules into dedicated directories. This includes a new \config\ module for data directory management, a \server.py\ entry point for PyInstaller builds, and runtime hooks to fix numpy and torch compatibility issues in frozen binaries. The FastAPI app factory now integrates MCP server lifespan management and supports AMD ROCm and CUDA backend variants. Additionally, non-ASCII filename handling in Content-Disposition headers has been improved for better browser compatibility.

backend · high confidence

Backend routes are modularized into domain-specific files

The monolithic route definitions in main.py have been extracted into separate files within the backend/routes directory. This refactoring organizes the API into distinct modules for health, profiles, channels, generations, history, transcription, LLM, captures, stories, effects, audio, models, settings, tasks, CUDA, ROCm, speak, MCP bindings, events, and cloud login, each registering their respective endpoints on the FastAPI application.

backend/routes · high confidence

Behavioural changes

14 commits (0 fixes) modifying landing/public

A change to existing behaviour in landing/public — 14 commits, 10 files.

landing/public · medium confidence · unverified

7 commits (1 fix) modifying tauri/src-tauri/icons

A change to existing behaviour in tauri/src-tauri/icons — 7 commits (1 fix), 32 files.

tauri/src-tauri/icons · medium confidence · unverified

App layout and routing overhaul with @tanstack/react-router

The application's navigation and structure have been migrated from a tab-based UI to a route-based architecture using @tanstack/react-router. This introduces a persistent sidebar for navigation and organizes the app into distinct pages: a main editor, stories, voices, captures, effects, and models tabs, plus a comprehensive settings area with sub-tabs for general, generation, captures, MCP, GPU, logs, about, and changelog. The App component now handles platform-specific logic (like the dictate window and Tauri lifecycle) and integrates auto-update and chord sync features.

app/src · medium confidence

Dark mode support and improved hot-reload for Tauri

The Tauri entry point now automatically detects and applies the user's system dark/light theme preference, ensuring the UI respects OS-level appearance settings. Additionally, the Vite development server configuration has been updated to watch files in the app directory, enabling hot-reload for changes in that directory during development.

tauri · high confidence

Database schema and migration system restructured

The backend/database package has been reorganized into a modular structure with separate files for models, migrations, session management, and seeding. This change introduces a new ORM-based schema for voice profiles, generations, stories, and effect presets, along with an idempotent migration system that automatically updates the SQLite database schema on startup. Users will benefit from improved database reliability, better handling of schema changes over time, and the ability to backfill missing data like generation versions and built-in effect presets.

backend/database · high confidence

Enable dark mode support and expose changelog in the app

The app now supports dark mode by applying a 'dark' class to the root element based on the user's system preference or stored setting. Additionally, a Vite plugin has been added to expose the project's CHANGELOG.md file as a virtual module, making changelog data available to the application.

app · high confidence

Integrates React Query and Platform Context into the app root

The application entry point now wraps the App component with React Query's QueryClientProvider and a new PlatformProvider. This change introduces client-side data caching and a platform abstraction layer, allowing the application to adapt its behavior based on the current environment (e.g., web vs. desktop).

web/src · high confidence

Introduces platform abstraction for Tauri integration

The application now wraps the main App component with a PlatformProvider, passing a tauriPlatform instance. This change enables the frontend to access platform-specific context, allowing the UI to adapt its behavior or appearance based on the underlying platform (e.g., Tauri vs. web). The React Query devtools are also disabled in this entry.

tauri/src · high confidence

macOS audio capture and screen recording support

The app now requests microphone and screen capture permissions on macOS, enabling voice cloning and system audio recording features. This is supported by new entitlements and Info.plist entries, plus a build script that compiles the app icon and links Swift runtime libraries for the ScreenCaptureKit framework.

tauri/src-tauri · medium confidence

Fixes

Extracted shared QueryClient instance

The shared TanStack Query client configuration has been extracted into its own module (queryClient.ts) to allow import from both React bootstrap code and non-React code (such as stores and utilities) without pulling in React DOM or other bootstrap side effects.

app/src/lib · medium confidence

Fix frozen-binary imports for scipy and transformers

Added PyInstaller hooks for scipy.stats.\_distn\_infrastructure and transformers.masking\_utils to ensure their Python source files are bundled alongside bytecode. This allows runtime patches in pyi\_rth\_torch\_compiler\_disable.py to successfully read the source code, preventing NameError exceptions during execution in frozen environments.

_backend/pyi\hooks · medium confidence

Test coverage

Added audio capture integration test; Added comprehensive test suite for the Voicebox backend.

Dependencies

Update project dependencies and build configuration

The project's dependency manifests have been updated across multiple packages. In the backend, \requirements.txt\ now includes \qwen-tts\, \linacodec\, \Zipvoice\, and various TTS engine dependencies (Conformer, Diffusers, Kokoro, Misaki, etc.), while also pinning \transformers\ and \numpy\ versions. New files \requirements-mlx.txt\ and \requirements-rocm.txt\ define specific dependencies for Apple Silicon and AMD ROCm environments. The frontend and Tauri apps have been upgraded to version 0.5.0, with \app/package.json\ adding Radix UI, TanStack Router, Tauri plugins, and i18n support. The root \package.json\ now enforces Bun as the package manager and includes new scripts for development and building. The Rust \Cargo.lock\ has been updated to reflect new and updated Rust crates like \alsa\, \bindgen\, and \keytap\.

(dependencies) · medium confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 37 → 46 (+9.8)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.

Lenses

  • Code Health 55 → 65 (+10.8)
  • Architecture 87 → 93 (+6.4)
  • Maturity 73 → 73 (-0.5)
  • Readiness 10 → 23 (+12.8)
  • Security 55 → 63 (+8.0)
  • Accessibility 67 (new)
  • Performance 70 (new)

Resolved (101)

  • Boundary-crossing change coupling: FloatingGenerateBox.tsx ↔ useGenerationForm.ts (app/src/components/Generation/FloatingGenerateBox.tsx)
  • Boundary-crossing change coupling: HistoryTable.tsx ↔ useGenerationProgress.ts (app/src/components/History/HistoryTable.tsx)
  • Boundary-crossing change coupling: ModelManagement.tsx ↔ languages.ts (app/src/components/ServerSettings/ModelManagement.tsx)
  • Boundary-crossing change coupling: ModelManagement.tsx ↔ useModelDownloadToast.tsx (app/src/components/ServerSettings/ModelManagement.tsx)
  • Boundary-crossing change coupling: ModelsTab.tsx ↔ lifecycle.ts (app/src/components/ModelsTab/ModelsTab.tsx)
  • Boundary-crossing change coupling: ModelsTab.tsx ↔ useGenerationForm.ts (app/src/components/ModelsTab/ModelsTab.tsx)
  • Boundary-crossing change coupling: ServerTab.tsx ↔ lifecycle.ts (app/src/components/ServerTab/ServerTab.tsx)
  • Boundary-crossing change coupling: ServerTab.tsx ↔ types.ts (app/src/components/ServerTab/ServerTab.tsx)
  • Boundary-crossing change coupling: StoriesTab.tsx ↔ useGenerationForm.ts (app/src/components/StoriesTab/StoriesTab.tsx)
  • Boundary-crossing change coupling: StoryTrackEditor.tsx ↔ useStoryPlayback.ts (app/src/components/StoriesTab/StoryTrackEditor.tsx)
  • Coverage not measured — test suite did not build
  • Critical CVE: [GHSA redacted] (backend/requirements.txt)
  • Critical CVE: [GHSA redacted] (backend/requirements.txt)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • …and 81 more

New (419)

  • App.MainApp (cognitive 18) (app/src/App.tsx)
  • App.MainApp (cyclomatic 16) (app/src/App.tsx)
  • AudioOutputState::play_to_device (cognitive 40) (tauri/src-tauri/src/audio_output.rs)
  • AudioOutputState::play_to_device (cyclomatic 20) (tauri/src-tauri/src/audio_output.rs)
  • AudioPlayer.AudioPlayer (cognitive 112) (app/src/components/AudioPlayer/AudioPlayer.tsx)
  • AudioPlayer.AudioPlayer (cyclomatic 98) (app/src/components/AudioPlayer/AudioPlayer.tsx)
  • AudioSampleRecording.AudioSampleRecording (cyclomatic 17) (app/src/components/VoiceProfiles/AudioSampleRecording.tsx)
  • AudioSampleUpload.AudioSampleUpload (cognitive 18) (app/src/components/VoiceProfiles/AudioSampleUpload.tsx)
  • AudioTab.AudioTab (cognitive 55) (app/src/components/AudioTab/AudioTab.tsx)
  • AudioTab.AudioTab (cyclomatic 46) (app/src/components/AudioTab/AudioTab.tsx)
  • CaptureInlinePlayer.CaptureInlinePlayer (cognitive 24) (app/src/components/CapturesTab/CaptureInlinePlayer.tsx)
  • CaptureInlinePlayer.CaptureInlinePlayer (cyclomatic 24) (app/src/components/CapturesTab/CaptureInlinePlayer.tsx)
  • CapturesPage.CapturesPage (cognitive 16) (app/src/components/ServerTab/CapturesPage.tsx)
  • CapturesPage.CapturesPage (cyclomatic 16) (app/src/components/ServerTab/CapturesPage.tsx)
  • CapturesTab.CapturesTab (cognitive 154) (app/src/components/CapturesTab/CapturesTab.tsx)
  • CapturesTab.CapturesTab (cyclomatic 115) (app/src/components/CapturesTab/CapturesTab.tsx)
  • Change coupling: App.tsx ↔ ConnectionForm.tsx (app/src/App.tsx)
  • Change coupling: AudioPlayer.tsx ↔ HistoryTable.tsx (app/src/components/AudioPlayer/AudioPlayer.tsx)
  • Change coupling: mlx_backend.py ↔ pytorch_backend.py (backend/backends/mlx_backend.py)
  • Change-coupling hub: Sidebar.tsx → App.tsx, AudioPlayer.tsx, HistoryTable.tsx (app/src/components/Sidebar.tsx)
  • …and 399 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

jamiepine/voicebox was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 51f49dea198384b4eb6087b72c17057c6eb1c1cd — the exact code this score is about.
  • Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.