English | 中文
A desktop video player built with Wails, powered by a Go backend and a Vue 3 frontend. It features a cinema-inspired interface, subtitle support, playback progress memory, and an AB loop — just point it at your local videos and press play.
- 🎬 Multi-format support: MP4, WebM, MKV, AVI, MOV, M4V, FLV (decoded natively by WebView2)
- 📝 Subtitle support: auto-loads sibling
.srt/.vtt/.assfiles matching the video name - ⏱️ Playback progress memory: resumes each video from where you left off
- 🔁 AB loop: set A/B markers to loop a segment repeatedly
- 🎚️ Playback speed: adjustable rate (0.25×–2×)
- 📐 Aspect ratio: auto, 16:9, 4:3, 1:1, and fill
- 📸 Screenshot: capture the current frame as PNG, saved to your Pictures folder
- 🎨 Multiple themes: Retro (warm brown), Dark (emerald), Light (sky blue), and Minimal (black & white)
- 🔀 Playback controls: shuffle, repeat one/all, volume, seek, and previous/next
- 📁 Local video library: import folders or individual files; the library is persisted and restored on restart
- 🖥️ System tray: close to tray and restore from the tray icon
- 🖼️ Frameless window: custom title bar and window controls
- 🌐 Bilingual UI: Chinese and English with auto-detection
- 📂 Drag & drop: drop files or folders onto the window to import
![]() Cinema |
![]() Midnight |
![]() Daylight |
![]() Noir |
| Layer | Technology |
|---|---|
| Desktop framework | Wails v2 |
| Backend | Go 1.25 |
| Frontend | Vue 3 + Vite |
| System tray | energye/systray |
| Video decoding | WebView2 (Chromium) built-in codecs |
Backend modules:
main.go— application entry point; configures the Wails window and starts the media serverapp.go— app logic bound to the frontend (library loading, file pickers, window controls, progress tracking)library.go— video library management: scans files, resolves sibling subtitles, builds Videosmediaserver.go— a dedicated loopback HTTP server that streams video and subtitle files via Range requestsstore.go— library and playback progress persistence (saved to%AppData%/ReelPlayer/)tray.go— system tray icon with show/quit menu
Note: media assets run on a separate loopback port (rather than the Wails asset server) so that streaming and seeking work correctly in both
wails devand production builds.
- Go 1.25+
- Node.js (with npm)
- Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest - On Windows, the WebView2 runtime is required (usually pre-installed on Win10/11)
Run in the project root for live frontend reload:
wails devTo debug in a browser and call Go methods, open http://localhost:34115.
Produce a redistributable, production build:
wails buildThe output is ReelPlayer.exe.
- Import a local video folder or individual files from the sidebar; the library is saved automatically.
- Drag & drop video files or folders onto the window to add them quickly.
- Place a
.srt,.vtt, or.asssubtitle file in the same directory with the same name as the video to enable subtitles. - Double-click the video area to toggle fullscreen.
- Use the AB loop markers to repeat a segment for study or review.
- Switch the interface style anytime via the theme switcher.
ReelPlayer/
├── app.go # App logic bound to the frontend
├── main.go # Application entry point
├── library.go # Video library & subtitle resolution
├── mediaserver.go # Local media streaming server
├── store.go # Library & progress persistence
├── tray.go # System tray integration
├── util.go # Shared utility helpers
└── frontend/ # Vue 3 frontend
└── src/
├── components/ # UI components (player, controls, sidebar, etc.)
├── composables/ # Playback logic, settings & theming
└── i18n/ # Internationalization messages
You can configure the project by editing wails.json. See the Wails project configuration docs for details.



