Why
Current UX is CLI -> spawns local server -> opens browser. Too many steps for non-CLI users. Goal: native Mac app, double-click to open, no terminal, no localhost URL.
Approach
- Wrap existing
packages/ui web UI in an Electrobun shell (native window, system WebView, TS backend via Bun - no Rust/Node split, fits current monorepo).
- Bundle FFmpeg inside the app (FFmpeg is LGPL by default if GPL-only codecs like libx264 are excluded from the build - no conflict with Hance's own FSL-1.1-Apache-2.0 license). Ship a signed, notarized universal binary (arm64 + x86_64).
- Wire
packages/ui directly to a local FFmpeg call in-process, replacing the current CLI-trigger + server flow.
- Optional: use VideoToolbox (
-c:v h264_videotoolbox) as FFmpeg's encoder backend for faster export on Apple Silicon, while keeping FFmpeg's -filter_complex chain (grade -> halation -> aberration -> weave) as the effects engine - AVFoundation has no equivalent to arbitrary filter graphs, so it can't replace FFmpeg outright.
Why Electrobun over Tauri
- TS/Bun end to end, matches the existing Bun workspaces setup - no Rust glue layer.
- Reuses
packages/ui as-is (system WebView rendering).
- v1-stable, 12.2k stars, production apps already shipping on it.
- Tradeoff: larger bundle than Tauri (~64MB app-shell overhead before FFmpeg vs Tauri's single-digit MB), but that's dwarfed by the bundled FFmpeg binary either way, so not a deciding factor here.
Scope
Out of scope (future issue)
- MCP server for agent-driven control - power-user feature, not needed for initial non-technical-user adoption target.
Why
Current UX is CLI -> spawns local server -> opens browser. Too many steps for non-CLI users. Goal: native Mac app, double-click to open, no terminal, no localhost URL.
Approach
packages/uiweb UI in an Electrobun shell (native window, system WebView, TS backend via Bun - no Rust/Node split, fits current monorepo).packages/uidirectly to a local FFmpeg call in-process, replacing the current CLI-trigger + server flow.-c:v h264_videotoolbox) as FFmpeg's encoder backend for faster export on Apple Silicon, while keeping FFmpeg's-filter_complexchain (grade -> halation -> aberration -> weave) as the effects engine - AVFoundation has no equivalent to arbitrary filter graphs, so it can't replace FFmpeg outright.Why Electrobun over Tauri
packages/uias-is (system WebView rendering).Scope
packages/uito in-process FFmpeg calls (drop CLI-trigger + local server step)Out of scope (future issue)