diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbadfd95..6284d955 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,10 +13,22 @@ Thank you for your interest in contributing to Voicebox! This document provides ### Prerequisites -- [Bun](https://bun.sh) - Package manager -- [Rust](https://rustup.rs) - For Tauri desktop app -- [Python 3.11+](https://python.org) - For backend -- Git +- **[Bun](https://bun.sh)** - Fast JavaScript runtime and package manager + ```bash + curl -fsSL https://bun.sh/install | bash + ``` + +- **[Python 3.11+](https://python.org)** - For backend development + ```bash + python --version # Should be 3.11 or higher + ``` + +- **[Rust](https://rustup.rs)** - For Tauri desktop app (installed automatically by Tauri CLI) + ```bash + rustc --version # Check if installed + ``` + +- **Git** - Version control ### Development Setup @@ -26,26 +38,104 @@ Thank you for your interest in contributing to Voicebox! This document provides cd voicebox ``` -2. **Install dependencies** +2. **Install JavaScript dependencies** ```bash bun install - cd backend && pip install -r requirements.txt && cd .. + ``` + This installs dependencies for: + - `app/` - Shared React frontend + - `tauri/` - Tauri desktop wrapper + - `web/` - Web deployment wrapper + +3. **Set up Python backend** + ```bash + cd backend + + # Create virtual environment + python -m venv venv + + # Activate virtual environment + source venv/bin/activate # On macOS/Linux + # or + venv\Scripts\activate # On Windows + + # Install Python dependencies + pip install -r requirements.txt + + # Install Qwen3-TTS (required for voice synthesis) + pip install git+https://github.com/QwenLM/Qwen3-TTS.git ``` -3. **Set up the database** +4. **Initialize database** ```bash cd backend python -c "from database import init_db; init_db()" ``` + This creates the SQLite database at `data/voicebox.db`. -4. **Start development** - ```bash - # Terminal 1: Backend server - bun run dev:server +5. **Start development servers** - # Terminal 2: Desktop app + **Terminal 1: Backend server** + ```bash + cd backend + source venv/bin/activate # Activate venv if not already active + bun run dev:server + # Or manually: uvicorn main:app --reload --port 8000 + ``` + Backend will be available at `http://localhost:8000` + + **Terminal 2: Desktop app** + ```bash bun run dev ``` + This will: + - Start Vite dev server on port 5173 + - Launch Tauri window pointing to localhost:5173 + - Enable hot reload + + **Optional: Web app** + ```bash + bun run dev:web + ``` + Web app will be available at `http://localhost:5174` + +### Model Downloads + +Models are automatically downloaded from HuggingFace Hub on first use: +- **Whisper** (transcription): Auto-downloads on first transcription +- **Qwen3-TTS** (voice cloning): Auto-downloads on first generation (~2-4GB) + +First-time usage will be slower due to model downloads, but subsequent runs will use cached models. + +### Building + +**Build Python server binary:** +```bash +./scripts/build-server.sh +``` +Creates platform-specific binary in `tauri/src-tauri/binaries/` + +**Build Tauri desktop app:** +```bash +cd tauri +bun run tauri build +``` +Creates platform-specific installers (`.dmg`, `.msi`, `.AppImage`) + +**Build web app:** +```bash +cd web +bun run build +``` +Output in `web/dist/` + +### Generate OpenAPI Client + +After starting the backend server: +```bash +./scripts/generate-api.sh +``` +This downloads the OpenAPI schema and generates the TypeScript client in `app/src/lib/api/` ## Development Workflow @@ -237,11 +327,30 @@ Releases are managed by maintainers: 4. Push tag: `git push --tags` 5. GitHub Actions builds and releases +## Troubleshooting + +See [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for common issues and solutions. + +**Quick fixes:** + +- **Backend won't start:** Check Python version (3.11+), ensure venv is activated, install dependencies +- **Tauri build fails:** Ensure Rust is installed, clean build with `cd tauri/src-tauri && cargo clean` +- **OpenAPI client generation fails:** Ensure backend is running, check `curl http://localhost:8000/openapi.json` + ## Questions? - Open an issue for bugs or feature requests - Check existing issues and discussions - Review the codebase to understand patterns +- See [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for common issues + +## Additional Resources + +- [README.md](README.md) - Project overview +- [backend/README.md](backend/README.md) - API documentation +- [docs/AUTOUPDATER_QUICKSTART.md](docs/AUTOUPDATER_QUICKSTART.md) - Auto-updater setup +- [SECURITY.md](SECURITY.md) - Security policy +- [CHANGELOG.md](CHANGELOG.md) - Version history ## License diff --git a/README.md b/README.md index e482939a..c0fa2824 100644 --- a/README.md +++ b/README.md @@ -182,7 +182,7 @@ Voicebox aims to be the **one-stop shop for everything voice** — cloning, synt ## Development -See [SETUP.md](SETUP.md) for detailed setup instructions. +See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed setup and contribution guidelines. ### Quick Start diff --git a/SETUP.md b/SETUP.md deleted file mode 100644 index 5bc265ab..00000000 --- a/SETUP.md +++ /dev/null @@ -1,214 +0,0 @@ -# Development Setup Guide - -This guide will help you set up the Voicebox development environment. - -## Prerequisites - -- **Bun** - Fast JavaScript runtime and package manager - ```bash - curl -fsSL https://bun.sh/install | bash - ``` - -- **Python 3.11+** - For backend development - ```bash - python --version # Should be 3.11 or higher - ``` - -- **Rust** - For Tauri desktop app (installed automatically by Tauri CLI) - ```bash - rustc --version # Check if installed - ``` - -- **Node.js 18+** (optional) - Fallback if Bun is not available - -## Initial Setup - -### 1. Install Dependencies - -```bash -# Install all workspace dependencies -bun install -``` - -This will install dependencies for: -- `app/` - Shared React frontend -- `tauri/` - Tauri desktop wrapper -- `web/` - Web deployment wrapper - -### 2. Setup Backend - -```bash -cd backend - -# Create virtual environment -python -m venv venv - -# Activate virtual environment -source venv/bin/activate # On macOS/Linux -# or -venv\Scripts\activate # On Windows - -# Install Python dependencies -pip install -r requirements.txt -``` - -### 3. Initialize Database - -```bash -cd backend -python -c "from database import init_db; init_db()" -``` - -This creates the SQLite database at `data/voicebox.db`. - -### 4. Install Qwen3-TTS (Optional) - -The Qwen3-TTS models are automatically downloaded from HuggingFace Hub on first use. However, you need to install the `qwen_tts` package: - -```bash -pip install git+https://github.com/QwenLM/Qwen3-TTS.git -``` - -**Note:** Models (~2-4GB) will be automatically downloaded on first generation. This may take a few minutes depending on your internet connection. - -## Development - -### Start Backend Server - -```bash -cd backend -source venv/bin/activate # Activate venv if not already active -uvicorn main:app --reload --port 8000 -``` - -Backend will be available at `http://localhost:8000` - -### Start Tauri Desktop App - -```bash -# From project root -bun run dev -``` - -Or manually: -```bash -cd tauri -bun run tauri dev -``` - -This will: -1. Start Vite dev server on port 5173 -2. Launch Tauri window pointing to localhost:5173 -3. Enable hot reload - -### Start Web App - -```bash -# From project root -bun run dev:web -``` - -Or manually: -```bash -cd web -bun run dev -``` - -Web app will be available at `http://localhost:5174` (or next available port) - -## Building - -### Build Python Server Binary - -```bash -./scripts/build-server.sh -``` - -This creates a platform-specific binary in `tauri/src-tauri/binaries/` - -### Build Tauri Desktop App - -```bash -cd tauri -bun run tauri build -``` - -Creates platform-specific installers: -- macOS: `.app`, `.dmg` -- Windows: `.exe`, `.msi` -- Linux: `.deb`, `.AppImage` - -### Build Web App - -```bash -cd web -bun run build -``` - -Output in `web/dist/` - -## Generate OpenAPI Client - -After starting the backend server: - -```bash -./scripts/generate-api.sh -``` - -This will: -1. Download OpenAPI schema from backend -2. Generate TypeScript client in `app/src/lib/api/` - -## Project Structure - -``` -voicebox/ -├── app/ # Shared React frontend -├── tauri/ # Tauri desktop wrapper -├── web/ # Web deployment wrapper -├── backend/ # Python FastAPI server -├── scripts/ # Build and utility scripts -├── data/ # User data (gitignored) -└── docs/ # Documentation -``` - -## Troubleshooting - -See [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for common issues and solutions. - -### Quick Fixes - -**Backend won't start:** -- Check Python version: `python --version` (needs 3.11+) -- Ensure virtual environment is activated -- Install dependencies: `pip install -r requirements.txt` - -**Tauri build fails:** -- Ensure Rust is installed: `rustc --version` -- Install Tauri CLI: `bunx @tauri-apps/cli install` -- Clean build: `cd tauri/src-tauri && cargo clean` - -**OpenAPI client generation fails:** -- Ensure backend is running on port 8000 -- Check `curl http://localhost:8000/openapi.json` returns valid JSON - -## Model Downloads - -Models are automatically downloaded from HuggingFace Hub on first use: -- **Whisper** (transcription): Auto-downloads on first transcription -- **Qwen3-TTS** (voice cloning): Auto-downloads on first generation - -First-time usage will be slower due to model downloads, but subsequent runs will use cached models. - -## Next Steps - -- Read [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines -- Check [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) if you encounter issues -- Review [backend/README.md](backend/README.md) for API documentation -- See [README.md](README.md) for project overview - -## Additional Resources - -- [Auto-Updater Setup](docs/AUTOUPDATER_QUICKSTART.md) - Configure automatic updates -- [Security Policy](SECURITY.md) - Security reporting and best practices -- [Changelog](CHANGELOG.md) - Version history and changes diff --git a/app/src/components/History/.gitkeep b/app/src/components/History/.gitkeep deleted file mode 100644 index 0d5b1631..00000000 --- a/app/src/components/History/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -# Generation history components diff --git a/app/src/components/History/HistoryTable.tsx b/app/src/components/History/HistoryTable.tsx index f558a323..3f3f4044 100644 --- a/app/src/components/History/HistoryTable.tsx +++ b/app/src/components/History/HistoryTable.tsx @@ -80,22 +80,15 @@ export function HistoryTable() { {history.map((gen) => { const isCurrentlyPlaying = currentAudioId === gen.id && isPlaying; return ( -