Desktop release build
VideoCaptioner publishes desktop bundles for Windows and macOS from GitHub Actions. Users can download the zip files from a GitHub Release, extract them, and run the bundled VideoCaptioner executable without installing Python or FFmpeg.
Local build
uv sync --frozen
uv run --with pyinstaller --with static-ffmpeg python scripts/build_desktop.py --clean
uv run python scripts/smoke_desktop.py dist/VideoCaptionerThe build script downloads static ffmpeg and ffprobe for the current platform and bundles them under resource/bin inside the PyInstaller app. Runtime user data is kept in the system user-data directory, so app upgrades do not overwrite settings, logs, cache, models, or custom subtitle styles.
CI and releases
.github/workflows/build-desktop.yml builds on:
windows-latestmacos-13
Each job runs a real packaged-app smoke test:
- starts the packaged executable with
--version - lists bundled subtitle styles
- runs
doctor --json - generates a short video with bundled FFmpeg
- creates both soft-subtitle and hard-subtitle videos
- validates output duration with bundled ffprobe
On v* tags, desktop zip files are uploaded to the GitHub Release. The PyPI workflow still publishes the Python package and uploads the wheel/sdist to the same release.
