A desktop caption editor built with Tauri v2 + Preact. Transcribes audio/video using WhisperX and lets you edit, time, and export captions.
- App (Tauri/Rust + Preact) — the editor UI and file management
- Sidecar (Python/PyInstaller) — the transcription engine, downloaded on first launch
- The app and sidecar are versioned independently (
v*andsidecar-v*tags) - The sidecar ships in three variants: CPU (Windows), CPU (macOS arm64), and CUDA (Windows)
- GPU detection happens at install time — users with Nvidia GPUs get the CUDA variant
- Node.js 20+
- Rust (via rustup)
- Windows: no extra requirements
- macOS: Xcode Command Line Tools (
xcode-select --install)
npm install
npx tauri devThe app will show the sidecar setup screen if no sidecar binary is installed. For local sidecar development, build it with python sidecar/build.py (see below) — this places the binary in src-tauri/binaries/ for Tauri to find.
python -m venv sidecar/.venv-cpu
# Windows: sidecar\.venv-cpu\Scripts\activate
# macOS: source sidecar/.venv-cpu/bin/activate
pip install -r sidecar/requirements.txt
python sidecar/fetch_ffmpeg.py
python sidecar/build.pyFor CUDA builds:
python -m venv sidecar/.venv-cuda
# Windows: sidecar\.venv-cuda\Scripts\activate
pip install -r sidecar/requirements-cuda.txt
python sidecar/fetch_ffmpeg.py
python sidecar/build.py --cuda- Bump version in
package.json,src-tauri/tauri.conf.json, andsrc-tauri/Cargo.toml - Run
cargo update --workspaceinsrc-tauri/ - Commit, tag, and push:
git tag v0.5.6 git push origin main v0.5.6
- CI builds Windows (NSIS) and macOS (DMG) installers and creates a draft release
- Publish the draft on GitHub
- Commit any sidecar changes and push
- Tag and push:
git tag sidecar-v0.1.1 git push origin sidecar-v0.1.1
- CI builds Windows + macOS CPU variants and the Windows CUDA variant, and creates a draft release
- Publish the draft on GitHub
Release the sidecar before the app so new sidecar features are available when users update.
- Release App (
.github/workflows/release-app.yml) — triggered byv*tags, builds Windows + macOS - Release Sidecar (
.github/workflows/release-sidecar.yml) — triggered bysidecar-v*tags, builds CPU variants
| Secret | Purpose |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
Minisign private key for update signing |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
Password for the signing key |
CODFISH_GH_PAT |
Fine-grained PAT (Issues: read/write) for in-app bug reporter |
The app reads CODFISH_GH_PAT at compile time (via src-tauri/.env locally, or the CI secret). It is XOR-encoded into the binary — never stored as plaintext in source.
- Unsigned builds require
xattr -cr /Applications/Codfish.appor System Settings > Privacy & Security > Open Anyway - macOS Sequoia removed the right-click > Open workaround for unsigned apps
- An Apple Developer account ($99/yr) eliminates these warnings via code signing and notarization
- ffmpeg is fetched as a prebuilt LGPL binary (from the
ffmpeg-*-codfish.*release) and bundled into the sidecar — no Homebrew ffmpeg needed
Codfish is licensed under the Apache License 2.0. You are free to use, modify, and redistribute the source code under those terms.
Bundled and dependent components are licensed separately — see THIRD_PARTY_LICENSES.md. Notably, the bundled ffmpeg is built from source under LGPL terms with no GPL components.
"Codfish" is a trademark of Jared Bohlken. The Apache-2.0 license grants rights to the source code only — it does not grant permission to use the Codfish name in derivative works or forks. If you fork this project, please use a different name.
Codfish is built and maintained by one person in their spare time. If it's useful to you, consider sponsoring the project on GitHub. Sponsorships are what make continued development possible.