From 5af8fe696771a08ca7caf8c121c5cae55e2756eb Mon Sep 17 00:00:00 2001 From: Palash Debnath <4178343+debpalash@users.noreply.github.com> Date: Wed, 16 Sep 2026 22:11:59 +0530 Subject: [PATCH] Make Electron the default desktop and refresh setup documentation --- .github/CONTRIBUTING.md | 26 +++++++++++++------- README.md | 36 +++++++++++++++++----------- docs/install/linux.md | 31 ++++++++++++++++++------ docs/install/macos.md | 21 ++++++++++++++-- docs/install/windows.md | 29 +++++++++++++++++----- docs/media/sponsor-slot.svg | 10 ++++++++ electron/README.md | 24 +++++++------------ package.json | 48 ++++++++++++++++++++++++------------- turbo.json | 6 ++++- 9 files changed, 161 insertions(+), 70 deletions(-) create mode 100644 docs/media/sponsor-slot.svg diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index ca85f6ca..a3d4e2c3 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -56,7 +56,17 @@ bun install bun run dev ``` -This starts both services: +This launches Electron with hot reload. Its runtime supervisor manages backend setup +and startup; do not launch a second backend. See [Electron setup](../electron/README.md). + +```bash +bun run build # build Electron +bun run start # launch the built Electron app +bun run dist # package locally without publishing +bun run dev:web # legacy browser UI + backend +``` + +The legacy browser command starts both services: | Service | URL | What it does | |---------|-----|---| @@ -71,23 +81,23 @@ cause doesn't scroll away with the terminal. The same death is also reported as a crash notice in the UI the next time the backend starts (see [docs/install/troubleshooting.md §14c](docs/install/troubleshooting.md)). -### Desktop App (Tauri) +### Legacy Desktop App (Tauri) ```bash -bun run desktop # dev: hot-reload Tauri shell + backend -bun run desktop-prod # production: builds, bundles the backend, then launches +bun run tauri # legacy dev: hot-reload Tauri shell + backend +bun run tauri:desktop-prod # legacy production: builds, bundles the backend, then launches ``` Both run `uv sync` first (so the Python backend env is set up) and start the backend automatically — you do **not** start it separately. Use the exact script -names: there is no `desktop=prod` (note the **hyphen** in `desktop-prod`). -`desktop-prod` is Windows-aware (auto-detects bash/git; see `scripts/desktop-prod.mjs`). +names: there is no `desktop=prod` (note the **hyphen** in `tauri:desktop-prod`). +`tauri:desktop-prod` is Windows-aware (auto-detects bash/git; see `scripts/desktop-prod.mjs`). Requires [Rust](https://rustup.rs/) and platform-specific Tauri dependencies — see the [Tauri prerequisites](https://v2.tauri.app/start/prerequisites/). After installing Rust with rustup (or `uv` with its installer), a terminal that -was already open still has the old `PATH`. The desktop launchers (`bun desktop`, -`bun desktop-prod`, `bun desktop-fresh`) detect this and add `~/.cargo/bin` / +was already open still has the old `PATH`. The desktop launchers (`bun tauri`, +`bun tauri:desktop-prod`, `bun tauri:desktop-fresh`) detect this and add `~/.cargo/bin` / `~/.local/bin` for that run, printing a one-line note; to make it permanent, open a new terminal, or on macOS/Linux load Cargo into the current one: diff --git a/README.md b/README.md index 7db3c260..c7143a78 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ VoiceStudio ranking on Trendshift

Open source voice cloning and workflow engine. Build local.

-

Clone voices, dub videos, dictate, and create audiobooks with local AI.

Website · Download · @@ -20,22 +19,23 @@ AGPL-3.0

-screenshot-2026-09-16_17-21-37 ![A tour of the Electron app: voice cloning, voice design, dubbing, and model management](docs/media/electron/voicestudio.gif) -## Create with VoiceStudio +## Your voice. Your workflow. -- **Clone & design voices** — use a reference recording or describe the voice you imagine. -- **Dub video** — transcribe, translate, assign speakers, and edit timed speech. -- **Dictate anywhere** — record, transcribe, and copy text with a floating recording widget. -- **Tell longer stories** — create multi-voice scripts, audiobooks, and batch jobs. -- **Choose your models** — manage speech and transcription engines, languages, and compute devices. +| Create | Produce | Connect | +| :--- | :--- | :--- | +| Clone a voice or design your own | Dub videos with timed speech | Local API & MCP for agents | +| Dictate with a floating widget | Stories, audiobooks & batch jobs | Optional remote workers | Start with **VoiceStudio** (default, powered by k2-fsa/OmniVoice), or choose another engine. Local workflows run on your hardware. Remote services are optional; usage analytics requires consent. +
+Explore the workspaces · Clone, dub, design & models + @@ -49,6 +49,10 @@ Local workflows run on your hardware. Remote services are optional; usage analyt
Electron voice cloning workspace with the bundled demo voice
Voice designLocal models
+VoiceStudio desktop workspace + +
+ ## Get started Download from [Releases](https://github.com/debpalash/VoiceStudio/releases/latest), then follow your platform guide: @@ -57,17 +61,19 @@ Download from [Releases](https://github.com/debpalash/VoiceStudio/releases/lates Open **Voice cloning**, choose a voice or add a clean reference recording, enter your text, and generate. Install the required model when prompted. Hardware needs vary by engine; see [performance](docs/performance.md). -**Run the Electron preview from source:** +
+Run the Electron preview from source ```bash git clone https://github.com/debpalash/VoiceStudio.git cd VoiceStudio bun install -cd electron bun run dev ``` -See [Electron setup](electron/README.md) for prerequisites and backend configuration. VoiceStudio is in active development; report bugs through [GitHub Issues](https://github.com/debpalash/VoiceStudio/issues). +See [Electron setup](electron/README.md) for prerequisites and backend configuration. + +
## Documentation @@ -80,11 +86,13 @@ See [Electron setup](electron/README.md) for prerequisites and backend configura Agent skills: `npx skills add debpalash/VoiceStudio` — choose **voicestudio** for audio workflows or **oss-maintainer** for repository maintenance. -## Support VoiceStudio +## Sponsors -[Ko-fi](https://ko-fi.com/debpalash) · [PayPal](https://paypal.me/palashCoder) · [Sponsor the project](SPONSORS.md) · [Partnerships](mailto:partner@voicestudio.sh) +Your brand — apply for a featured VoiceStudio sponsor slot -**Put your brand where people build with voice.** Explore paid placements in the app footer, integrations directory, documentation, and README. [Apply to partner](https://forms.gle/2PYCvd39hbwijzX37) or [email us](mailto:partner@voicestudio.sh). +**Become a featured partner.** [Apply for a paid placement](https://forms.gle/2PYCvd39hbwijzX37) · [Email us](mailto:partner@voicestudio.sh) + +Support development: [Ko-fi](https://ko-fi.com/debpalash) · [PayPal](https://paypal.me/palashCoder) · [Sponsorship details](SPONSORS.md) ## License & responsible use diff --git a/docs/install/linux.md b/docs/install/linux.md index f73f9327..f54dbecf 100644 --- a/docs/install/linux.md +++ b/docs/install/linux.md @@ -1,5 +1,22 @@ # VoiceStudio — Install on Linux +## Electron desktop (current) + +From the repository root, install Bun and uv, then run: + +```sh +bun install +bun run dev +``` + +Use `bun run desktop-prod` to build and launch Electron, or `bun run dist` +to create local installers without publishing. The app manages its backend. +See [Electron setup](../../electron/README.md) and [migration notes](../electron-migration.md). + +## Legacy Tauri installation and troubleshooting + +The instructions below apply to the sunset Tauri app and existing Tauri installers. + This page is self-contained: follow it top to bottom and you'll end up with a working VoiceStudio install on a Debian / Ubuntu / Fedora / Arch host. @@ -28,7 +45,7 @@ Everything above, plus the toolchain: `sudo dnf install python3.11` on Fedora, or already installed on Arch. - **Bun** — `curl -fsSL https://bun.sh/install | bash`. - **Rust / Cargo** — `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` or via your package manager (e.g., `sudo apt install rustc cargo`). - If you use rustup, reopen the shell or source `"$HOME/.cargo/env"` before running `bun run desktop-prod`. + If you use rustup, reopen the shell or source `"$HOME/.cargo/env"` before running `bun run tauri:desktop-prod`. - **GTK/WebKit deps** for the Tauri shell: ```bash @@ -66,10 +83,10 @@ git clone https://github.com/debpalash/VoiceStudio.git cd VoiceStudio bun install source "$HOME/.cargo/env" # only needed in a shell opened before rustup finished -bun desktop # development build with hot reload +bun tauri # development build with hot reload ``` -Use `bun run desktop-prod` instead when you need to build and launch the +Use `bun run tauri:desktop-prod` instead when you need to build and launch the production bundle. Both commands create the Python environment via `uv`, sync dependencies, and start the backend automatically; do not start the backend in a second terminal. @@ -87,7 +104,7 @@ pkg-config --exists \ && echo "Tauri system libraries are ready" ``` -`bun desktop` also checks the native `libxdo` linker input and GStreamer's +`bun tauri` also checks the native `libxdo` linker input and GStreamer's `autoaudiosink` before starting. The latter is required even if you do not plan to record: WebKitGTK 2.52 aborts its renderer when a page creates an audio element without that plugin, which otherwise turns a running app blank. The @@ -256,7 +273,7 @@ If you are on v0.4.0 or older, either update or build from source: git clone https://github.com/debpalash/VoiceStudio.git cd VoiceStudio bun install -bun run desktop-prod +bun run tauri:desktop-prod ``` Tracking issues: [#62](https://github.com/debpalash/VoiceStudio/issues/62), @@ -389,9 +406,9 @@ reinstall and left the CPU-only CUDA build in place). **2. Environment variable (existing installs / headless / source).** Set `OMNIVOICE_TORCH_VARIANT=rocm` before launching — the next bootstrap performs the same ROCm reinstall. Source installs honour it too: -`OMNIVOICE_TORCH_VARIANT=rocm bun run desktop` swaps torch right after +`OMNIVOICE_TORCH_VARIANT=rocm bun run tauri` swaps torch right after `uv sync` and launches the backend without re-syncing, so the wheel is not -reverted on the next start (#1665). Without the variable, `bun run desktop` +reverted on the next start (#1665). Without the variable, `bun run tauri` restores the lockfile's CUDA build — a hand-swapped ROCm wheel does not survive it. `OMNIVOICE_TORCH_INDEX=` overrides the wheel index when you need a different ROCm version — e.g. AMD publishes newer diff --git a/docs/install/macos.md b/docs/install/macos.md index a1d7ac2c..5b7a772f 100644 --- a/docs/install/macos.md +++ b/docs/install/macos.md @@ -1,5 +1,22 @@ # VoiceStudio — Install on macOS +## Electron desktop (current) + +From the repository root, install Bun and uv, then run: + +```sh +bun install +bun run dev +``` + +Use `bun run desktop-prod` to build and launch Electron, or `bun run dist` +to create local installers without publishing. The app manages its backend. +See [Electron setup](../../electron/README.md) and [migration notes](../electron-migration.md). + +## Legacy Tauri installation and troubleshooting + +The instructions below apply to the sunset Tauri app and existing Tauri installers. + This page is self-contained: follow it top to bottom and you'll end up with a working VoiceStudio install on macOS (Apple Silicon). @@ -36,7 +53,7 @@ Everything above, plus the toolchain: - **Python 3.11+** — `brew install python@3.11` (or use `pyenv` / the system Python if you already have ≥3.11). - **Bun** — `curl -fsSL https://bun.sh/install | bash`. - **Rust / Cargo** — `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` or `brew install rust`. - If you use rustup, reopen the terminal or source `"$HOME/.cargo/env"` before running `bun run desktop-prod`. + If you use rustup, reopen the terminal or source `"$HOME/.cargo/env"` before running `bun run tauri:desktop-prod`. FFmpeg/FFprobe and yt-dlp are **not** prerequisites on any install path: the app resolves them itself (a static build ships with the Python environment; @@ -63,7 +80,7 @@ Or manually: git clone https://github.com/debpalash/VoiceStudio.git cd VoiceStudio bun install -bun run desktop-prod +bun run tauri:desktop-prod ``` The first launch builds the Tauri shell, creates the Python venv via `uv`, diff --git a/docs/install/windows.md b/docs/install/windows.md index 202a4039..27705bb0 100644 --- a/docs/install/windows.md +++ b/docs/install/windows.md @@ -1,5 +1,22 @@ # VoiceStudio — Install on Windows +## Electron desktop (current) + +From the repository root, install Bun and uv, then run: + +```sh +bun install +bun run dev +``` + +Use `bun run desktop-prod` to build and launch Electron, or `bun run dist` +to create local installers without publishing. The app manages its backend. +See [Electron setup](../../electron/README.md) and [migration notes](../electron-migration.md). + +## Legacy Tauri installation and troubleshooting + +The instructions below apply to the sunset Tauri app and existing Tauri installers. + This page is self-contained: follow it top to bottom and you'll end up with a working VoiceStudio install on Windows 10 / 11 (x64). @@ -20,7 +37,7 @@ by the app itself on first launch. No toolchain needed. Everything above, plus the toolchain: - **Git for Windows** — `winget install --id Git.Git -e`. Needed for - `git clone`, and it includes **Git Bash**, which `bun run desktop-prod` + `git clone`, and it includes **Git Bash**, which `bun run tauri:desktop-prod` uses to run its build-and-launch script. Without it, `desktop-prod` stops with an error telling you to install it. - **Python 3.11+** — `winget install Python.Python.3.11` (or download from @@ -32,7 +49,7 @@ Everything above, plus the toolchain: - **Bun** — `powershell -c "irm bun.sh/install.ps1 | iex"`. - **FFmpeg** — `winget install Gyan.FFmpeg`. - **Rust / Cargo** — `winget install Rust.Rustup` or download `rustup-init.exe` from [rustup.rs](https://rustup.rs/). - After installing Rustup, close and reopen PowerShell before running `bun run desktop-prod`. + After installing Rustup, close and reopen PowerShell before running `bun run tauri:desktop-prod`. ## GPU support on Windows @@ -64,17 +81,17 @@ Or manually: git clone https://github.com/debpalash/VoiceStudio.git cd VoiceStudio bun install -bun run desktop-prod +bun run tauri:desktop-prod ``` The first launch creates the Python venv via `uv`, syncs deps, and downloads model weights. The splash screen shows progress. -> **Note:** `bun run desktop-prod` runs a bash script under the hood. You can +> **Note:** `bun run tauri:desktop-prod` runs a bash script under the hood. You can > launch it from PowerShell or cmd as shown — it finds Git Bash automatically > (installed with Git for Windows, see Prerequisites). If no Git Bash is > found, it prints instructions instead of failing silently. Alternatives -> that don't need bash: `bun run desktop` (dev mode) or the pre-built MSI +> that don't need bash: `bun run tauri` (dev mode) or the pre-built MSI > below. ## Install (pre-built MSI) @@ -283,7 +300,7 @@ peak throughput in exchange for the engine actually loading. ```powershell $env:TORCH_COMPILE_DISABLE = "1" -bun run desktop-prod +bun run tauri:desktop-prod ``` This setting is a no-op on macOS and Linux (the OOM is Windows-specific — diff --git a/docs/media/sponsor-slot.svg b/docs/media/sponsor-slot.svg new file mode 100644 index 00000000..0886cb6c --- /dev/null +++ b/docs/media/sponsor-slot.svg @@ -0,0 +1,10 @@ + + Your brand — partner with VoiceStudio + Apply for a paid featured placement in the app, integrations directory, and README. + + + ? + Your brand, where people build with voice. + App placement · Integration page · README exposure + + diff --git a/electron/README.md b/electron/README.md index 3fcc1498..b3d4d29e 100644 --- a/electron/README.md +++ b/electron/README.md @@ -1,19 +1,11 @@ -# VoiceStudio — Electron shell (preview) +# VoiceStudio — Electron desktop app -An Electron rewrite of the desktop shell, built page by page. Today it ships -**Voice cloning** only; the Tauri app in `frontend/` remains the product. +Electron is the primary desktop app for voice cloning, stories, dubbing, +transcription, voice design, and workflows. Tauri is retained only for its final +sunset update; see [migration notes](../docs/electron-migration.md). -Both shells talk to the same local FastAPI backend (`backend/`, port 3900), so -voices, history and installed engines are shared. Nothing leaves the machine. - -The Electron UI follows T3 Code's styling foundation: shadcn Base UI Mira, -Zinc light surfaces, near-black dark surfaces, blue actions, system fonts, -compact controls, and translucent popovers/dialogs. Shared palette roles live in -`src/renderer/src/styles/t3-theme.css`; app geometry and surface utilities live in -`styles/globals.css`. The palette is adapted from -[T3 Code](https://github.com/pingdotgg/t3code/blob/main/apps/web/src/index.css) -under the MIT license (see `T3CODE-LICENSE.txt`). -Light/dark switching is local; T3's theme editor and theme library are not included. +The runtime supervisor manages the local FastAPI backend. Network integrations +and remote workers require configuration; local generation stays on your machine. ## Stack @@ -28,7 +20,7 @@ Light/dark switching is local; T3's theme editor and theme library are not inclu ## Run it ```sh -cd electron +# From the repository root bun install bun run dev # electron-vite: main + preload + renderer with HMR ``` @@ -57,7 +49,7 @@ app-relative `/api/...`: ```sh bun run typecheck # tsgo, both projects -bun run check # vp: format + lint + types +bun run check:electron # types, tests, build, packaging contract bun run test # vitest (jsdom) bun run build # electron-vite build → out/ bun run dist # + electron-builder → release/ diff --git a/package.json b/package.json index 118af88d..43ec84dc 100644 --- a/package.json +++ b/package.json @@ -8,29 +8,45 @@ "setup:api": "uv sync && uv run python scripts/setup.py", "dev:api": "bun scripts/dev-backend.mjs", "dev:frontend": "bun run --cwd frontend dev", - "dev:desktop": "TAURI_SKIP_BACKEND=1 bun run --cwd frontend desktop", + "dev:desktop": "bun run --cwd electron dev", "wait:api": "wait-on -t 300000 http-get://localhost:3900/system/info", "wait:frontend": "wait-on -t 120000 http://localhost:5173", - "predev": "bun install && bun scripts/clear-dev-ports.mjs 3900 3901", - "dev": "bun run setup:api && concurrently -n api,fe -c green,cyan --kill-others-on-fail \"bun run dev:api\" \"bun run dev:frontend\"", - "predesktop": "bun install && bun scripts/desktop-runtime-preflight.mjs && bun scripts/clear-dev-ports.mjs 3900 3901", - "desktop": "bun run setup:api && concurrently -n api,app -c green,magenta --kill-others-on-fail \"bun run dev:api\" \"bun run dev:desktop\"", - "desktop-prod": "bun scripts/desktop-prod.mjs", - "desktop-prod:run": "bun scripts/desktop-prod.mjs --skip-build --keep-data", - "desktop-prod:upgrade": "bun scripts/desktop-prod.mjs --keep-data", - "desktop-prod:keep-models": "bun scripts/desktop-prod.mjs --keep-models", - "desktop-prod:pill": "bun scripts/desktop-prod.mjs --pill", - "desktop-prod:run:pill": "bun scripts/desktop-prod.mjs --skip-build --keep-data --pill", - "desktop-fresh": "bun scripts/desktop-fresh.mjs", - "desktop-fresh:run": "bun scripts/desktop-fresh.mjs --skip-build", - "build": "turbo run build", + "predev": "bun install", + "dev": "bun run --cwd electron dev", + "predesktop": "bun install", + "desktop": "bun run dev:desktop", + "build": "bun run --cwd electron build", "check:electron": "bun run --cwd electron typecheck && bun run --cwd electron test && bun run --cwd electron build && node electron/tests/packaging-contract.mjs", - "start": "turbo run start", + "start": "bun run --cwd electron start", "test:frontend": "node --test tests/frontend/*.test.mjs", "smoke-test": "bash scripts/smoke-test.sh", "smoke-test:quick": "bash scripts/smoke-test.sh --skip-build --skip-model", "smoke-test:upgrade": "bash scripts/smoke-test.sh --keep-data --skip-build", - "deps:check": "taze -r --maturity-period 7" + "deps:check": "taze -r --maturity-period 7", + "dev:web": "bun run setup:api && concurrently -n api,fe -c green,cyan --kill-others-on-fail \"bun run dev:api\" \"bun run dev:frontend\"", + "predev:web": "bun install && bun scripts/clear-dev-ports.mjs 3900 3901", + "dev:tauri": "TAURI_SKIP_BACKEND=1 bun run --cwd frontend desktop", + "pretauri": "bun install && bun scripts/desktop-runtime-preflight.mjs && bun scripts/clear-dev-ports.mjs 3900 3901", + "tauri": "bun run setup:api && concurrently -n api,app -c green,magenta --kill-others-on-fail \"bun run dev:api\" \"bun run dev:tauri\"", + "build:all": "turbo run build", + "build:web": "bun run --cwd frontend build", + "dist": "bun run --cwd electron dist --publish never", + "tauri:desktop-prod": "bun scripts/desktop-prod.mjs", + "tauri:desktop-prod:run": "bun scripts/desktop-prod.mjs --skip-build --keep-data", + "tauri:desktop-prod:upgrade": "bun scripts/desktop-prod.mjs --keep-data", + "tauri:desktop-prod:keep-models": "bun scripts/desktop-prod.mjs --keep-models", + "tauri:desktop-prod:pill": "bun scripts/desktop-prod.mjs --pill", + "tauri:desktop-prod:run:pill": "bun scripts/desktop-prod.mjs --skip-build --keep-data --pill", + "tauri:desktop-fresh": "bun scripts/desktop-fresh.mjs", + "tauri:desktop-fresh:run": "bun scripts/desktop-fresh.mjs --skip-build", + "desktop-prod": "bun run build && bun run start", + "desktop-prod:run": "bun run start", + "desktop-prod:upgrade": "bun run desktop-prod", + "test": "bun run --cwd electron test", + "typecheck": "bun run --cwd electron typecheck", + "lint": "bun run --cwd electron lint", + "format": "bun run --cwd electron format", + "dist:dir": "bun run --cwd electron dist:dir --publish never" }, "workspaces": [ "frontend", diff --git a/turbo.json b/turbo.json index 4175b5da..4dc42a1f 100644 --- a/turbo.json +++ b/turbo.json @@ -2,7 +2,11 @@ "$schema": "https://turbo.build/schema.json", "tasks": { "build": { - "outputs": ["dist/**", "build/**"] + "outputs": [ + "dist/**", + "build/**", + "out/**" + ] }, "dev": { "cache": false,