Make Electron the default desktop and refresh setup documentation

This commit is contained in:
Palash Debnath
2026-09-16 22:11:59 +05:30
parent 559f3fc0c1
commit 5af8fe6967
9 changed files with 161 additions and 70 deletions
+18 -8
View File
@@ -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:
+22 -14
View File
@@ -5,7 +5,6 @@
<a href="https://trendshift.io/repositories/28176?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-28176" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/28176" alt="VoiceStudio ranking on Trendshift" width="220" height="48" /></a>
</p>
<p><strong>Open source voice cloning and workflow engine. Build local.</strong></p>
<p>Clone voices, dub videos, dictate, and create audiobooks with local AI.</p>
<p>
<a href="https://voicestudio.sh/?utm_source=github&utm_medium=readme&utm_campaign=project">Website</a> ·
<a href="https://github.com/debpalash/VoiceStudio/releases/latest">Download</a> ·
@@ -20,22 +19,23 @@
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue" alt="AGPL-3.0" /></a>
</p>
</div>
<img width="2628" height="1950" alt="screenshot-2026-09-16_17-21-37" src="https://github.com/user-attachments/assets/b474497d-a453-49a3-a2dd-f023ec6b7659" />
![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.
<details>
<summary><strong>Explore the workspaces</strong> · Clone, dub, design & models</summary>
<table>
<tr>
<td><img src="docs/media/electron/voice-cloning.png" alt="Electron voice cloning workspace with the bundled demo voice" width="100%" /></td>
@@ -49,6 +49,10 @@ Local workflows run on your hardware. Remote services are optional; usage analyt
<tr><td align="center">Voice design</td><td align="center">Local models</td></tr>
</table>
<img width="2628" height="1950" alt="VoiceStudio desktop workspace" src="https://github.com/user-attachments/assets/b474497d-a453-49a3-a2dd-f023ec6b7659" />
</details>
## 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:**
<details>
<summary><strong>Run the Electron preview from source</strong></summary>
```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.
</details>
## 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)
<a href="https://forms.gle/2PYCvd39hbwijzX37"><img src="docs/media/sponsor-slot.svg" alt="Your brand — apply for a featured VoiceStudio sponsor slot" width="640" /></a>
**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
+24 -7
View File
@@ -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=<url>` overrides the wheel
index when you need a different ROCm version — e.g. AMD publishes newer
+19 -2
View File
@@ -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`,
+23 -6
View File
@@ -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 —
+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="640" height="104" viewBox="0 0 640 104">
<title>Your brand — partner with VoiceStudio</title>
<desc>Apply for a paid featured placement in the app, integrations directory, and README.</desc>
<rect x="1" y="1" width="638" height="102" rx="16" fill="#191420" stroke="#574051"/>
<circle cx="52" cy="52" r="23" fill="#30212e" stroke="#d3869b" stroke-width="1.5"/>
<text x="52" y="60" text-anchor="middle" fill="#f5eaf2" font-family="Arial,sans-serif" font-size="26" font-weight="700">?</text>
<text x="94" y="43" fill="#f5eaf2" font-family="Arial,sans-serif" font-size="19" font-weight="600">Your brand, where people build with voice.</text>
<text x="94" y="69" fill="#c0adbd" font-family="Arial,sans-serif" font-size="13">App placement · Integration page · README exposure</text>
<path d="M590 61l18-18m-15 0h15v15" fill="none" stroke="#d3869b" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 982 B

+8 -16
View File
@@ -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/
+32 -16
View File
@@ -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",
+5 -1
View File
@@ -2,7 +2,11 @@
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"outputs": ["dist/**", "build/**"]
"outputs": [
"dist/**",
"build/**",
"out/**"
]
},
"dev": {
"cache": false,