A native desktop video player built on libmpv, with a Svelte 5 frontend and a Rust + Tauri 2 backend. Optimized for fast startup, low memory footprint, and a small binary.
dynaudnorm)| Subtitles | Audio |
|---|---|
| Multi-track subtitles, OpenSubtitles search, on-the-fly translation | 10-band equalizer, normalization, volume boost up to 200% |
libmpv-2.dll and ffmpeg.exe are not committed to the repository (they total ~220 MB and exceed GitHub's per-file limit). The published installer already bundles them — only contributors building from source need to fetch them manually.
Download both into src-tauri/binaries/:
| File | Source | Notes |
|---|---|---|
libmpv-2.dll |
mpv-player-windows builds | Pick the latest mpv-dev-x86_64-vXX.zip, extract libmpv-2.dll |
ffmpeg.exe |
gyan.dev builds | "essentials" build is enough; only the ffmpeg.exe is needed |
After placing the two files, the standard pnpm install && pnpm tauri dev flow works.
pnpm install
pnpm tauri dev
The dev build hot-reloads the frontend on save. Rust code changes trigger a full rebuild.
pnpm tauri build
Outputs:
src-tauri/target/release/vayou-desktop.exe (~5 MB after LTO + strip)src-tauri/target/release/bundle/nsis/Vayou_<version>_x64-setup.exeThe release profile uses lto = true, codegen-units = 1, opt-level = "s", and strip = true for the smallest possible binary at the cost of compile time.
src/ # SvelteKit frontend (adapter-static)
├── lib/
│ ├── bindings/ # Typed wrappers around Tauri invoke() per domain
│ ├── components/ # UI components (TitleBar, VideoControls, panels…)
│ ├── i18n/ # 13 locale files + reactive t() helper
│ ├── stores/ # Svelte 5 runes-based stores ($state classes)
│ └── utils/ # Pure helpers (time format, lang names)
└── routes/+page.svelte # Single-route shell
src-tauri/
├── src/
│ ├── mpv/ # libmpv FFI wrapper (libloading-based)
│ ├── services/ # Pure logic: playback, tracks, settings, translate, …
│ ├── commands/ # Thin #[tauri::command] handlers — delegate to services
│ ├── state/ # MpvState + AppState (settings, current file, pending resume)
│ └── error.rs # AppError / MpvError via thiserror
├── binaries/ # libmpv-2.dll, ffmpeg.exe (bundled)
├── icons/ # App icons + per-extension association icons
└── installer-hooks.nsh # NSIS hook overriding per-extension DefaultIcon
State flow: events flow upward (mpv:* events emitted from a dedicated event-loop thread); commands flow downward (frontend → command → service → mpv). UI never touches mpv directly.
libmpv integration: loaded dynamically at runtime via libloading from binaries/libmpv-2.dll. The native window's HWND is passed to mpv via the wid property, so mpv renders directly into the Tauri window with zero copy.
Subtitle translation: extracted via ffmpeg, chunked by character count, fanned out through a tokio::sync::Semaphore (max 8 concurrent requests) to avoid rate-limiting, then re-assembled and added to mpv as an external subtitle track. A monotonic run-id cancels stale translations when the user switches language mid-flight.
All shortcuts are rebindable from Settings → Shortcuts. Defaults:
| Action | Default |
|---|---|
| Play / pause | Space |
| Seek ±5 s | ← / → |
| Seek ±30 s | Shift + ← / → |
| Volume ±5 | ↑ / ↓ |
| Mute | M |
| Fullscreen | F / F11 |
| Frame step | . / , |
| Speed up / down | ] / [ |
| A–B loop cycle | L |
| Cycle subtitles | J |
| Cycle audio track | # |
| Screenshot | S |
| Aspect ratio | A |
| Open file | Ctrl + O |
| Open URL | Ctrl + U |
| Media info | I |
| Next / previous in playlist | > / < |
| Zoom in / out | * / / (numpad) |
| Pan | 8 / 2 / 4 / 6 (numpad) |
| Reset zoom & pan | 5 (numpad) |
The installer registers Vayou as a handler for the following extensions, each with a custom colored icon:
.mp4 .mkv .avi .mov .webm .flv .wmv .m4v .ts .mpg .mpeg.mp3 .flac .ogg .wav .aac .wma .m4a .opusFiles associated with Vayou can be opened via Open With in Explorer, double-click (when set as default), or by passing the path as a command-line argument.
%APPDATA%\Vayou\config.json%TEMP%\vayou-translate\ (cleared by the OS periodically)RUST_LOG=vayou=debug for verbose output)Vayou bundles or talks to the following third-party software and services. Their licenses and terms apply to the redistributed binaries / network usage and are independent of this project's MIT license:
| Component | License / Terms |
|---|---|
libmpv (libmpv-2.dll) |
LGPL-2.1-or-later. Source available at github.com/mpv-player/mpv |
FFmpeg (ffmpeg.exe) |
LGPL-2.1-or-later or GPL-2.0-or-later, depending on the bundled build |
| Tauri | MIT / Apache-2.0 |
| OpenSubtitles | Subject to the OpenSubtitles terms of service |
| Google Translate (unofficial endpoint) | Subject to Google Cloud Translation terms. The endpoint used (translate.googleapis.com/translate_a/single) is undocumented and may rate-limit or block client IPs without notice. Translation is best-effort and not guaranteed to be available. |
MIT — see the LICENSE file for the full text.