Drift Player is a cross-platform desktop media player that pairs a modern Qt 6 interface with the mpv playback engine. It focuses on an ambient viewing experience: blurred video backdrops, a curated playlist flow, and lightweight playback controls that stay out of the way while you watch or listen.
Or, to put it differently:
Drift Player drifts between worlds of sound and sight,
a window of quiet glow.Its heart, mpv,
beats beneath a glassy calm, where motion softens, fades.Blur and light entwine,
controls retreat like thought in dream,
and playlists flow like time.
- Features
- Quick Start
- Usage Highlights
- Configuration & Persistence
- Project Layout
- Contributing
- License
- Acknowledgements
- Playlist-first workflow – add multiple audio or video tracks, shuffle or repeat, and jump seamlessly between entries.
- Ambient visuals – mpv video is rendered into a blurred OpenGL scene that keeps controls readable without obscuring the content.
- Adaptive controls – transport, progress, and playlist panels fade in on interaction, keeping the canvas uncluttered when idle.
- Playback management – seek with a scrubber, view elapsed/remaining time, toggle repeat modes, and adjust volume inline.
- Background blur control – fine-tune the visual intensity or let hardware decoding decide when blur should be disabled.
- Stream-friendly – paste a YouTube (or any yt-dlp supported) URL to play it instantly without a manual download.
- Persistent settings – volume, blur, shuffle, and repeat preferences are stored via
QSettingsso they survive restarts.
Install the following dependencies before building Drift Player:
- Qt 6 (modules:
Core,Gui,Widgets,OpenGLWidgets) - mpv with the
libmpvdevelopment headers - CMake 3.22 or newer
- A C++20-capable compiler (GCC 11+, Clang 12+, MSVC 19.3+)
- To stream online media (YouTube, Vimeo, etc.), ensure
yt-dlp(oryoutube-dl) is available on your PATH so mpv can resolve URLs.
On Debian/Ubuntu:
sudo apt update
sudo apt install build-essential cmake qt6-base-dev qt6-base-dev-tools libmpv-devOn Arch Linux:
sudo pacman -S cmake qt6-base mpvOn macOS (Homebrew):
brew install cmake qt mpvWindows builds require the Qt and mpv development packages installed manually. Ensure
qmakeandcmakeare available in your shell.
git clone https://github.com/hyperfield/drift-player.git
cd drift-player
cmake -S . -B build
cmake --build build
# optional: install binaries + desktop entry/icon
cmake --install build --prefix ~/.localThe configured target name is drift_player, and the generated executable is placed at build/Drift Player (or build/Drift Player.exe on Windows).
On Windows you can use the helper script which auto-detects a Qt 6 installation (Qt6_DIR, CMAKE_PREFIX_PATH, common C:\Qt\6.x\msvc* layouts) before invoking CMake:
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/compile.ps1For libmpv, the helper expects an MSYS2 installation (for example C:\msys64) with the appropriate mpv package installed (mingw-w64-x86_64-mpv, mingw-w64-ucrt-x86_64-mpv, or mingw-w64-clang-x86_64-mpv depending on the prefix). It copies the headers, converts the MSYS2 DLL into an MSVC-friendly import library (using gendef from the matching binutils package, or dumpbin as a fallback), and wires the resulting prefix into CMake automatically. Use -MpvPath to point at a custom mpv prefix, -MsysRoot/-MsysSubdir if your MSYS2 install lives elsewhere, -QtPath to override Qt detection, and -Config/-NoBuild to adjust the build step.
- Install MSYS2 from msys2.org and update the environment.
- Inside the MSYS2 UCRT64 (or the prefix you prefer) shell:
Replace
pacman -S mingw-w64-ucrt-x86_64-mpv mingw-w64-ucrt-x86_64-binutils
ucrtwithx86_64orclangif you target those prefixes. - Make sure Qt 6 development files are available (Qt installer or a vcpkg-provided Qt).
- From a Developer PowerShell for VS 2022 run:
The script stages
powershell -NoProfile -ExecutionPolicy Bypass ` -File scripts/compile.ps1 ` -CMake "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" ` -QtPath "C:\path\to\qt\share\Qt6"
libmpv, runs CMake, builds the executables, and copies the required Qt and mpv DLLs (viawindeployqtwhen available) into the build output directory so the binaries run immediately.
./build/Drift\ PlayerThe application creates a window titled Drift Player and persists user settings under the organization evoid. On Linux, installing via cmake --install build --prefix ~/.local registers the .desktop file plus icon so GNOME/KDE display the proper logo in app grids and docks.
- Add Media – click the
Add Mediabutton to select one or more files; Drift Player automatically normalises and deduplicates paths before queuing tracks. - Open URL – choose
File → Open URL…(or press Ctrl+U) to stream online media directly through mpv/yt-dlp without downloading the file first. - Playback controls – play/pause, next, previous, repeat mode toggle, and shuffle are available in the central control bar.
- Progress & seeking – drag the position slider to scrub; the time label displays the current position and total duration.
- Visual tweaks – adjust the blur slider to change the strength of the background blur; the slider is disabled when hardware decoding already applies blur.
- Fade interactions – moving the cursor over playlists or controls temporarily raises their opacity; the panels fade after inactivity.
- Quality selector – choose
Playback → Qualityto pin streaming videos to Auto, 4K, 1440p, 1080p, 720p (default), 480p, or 360p without leaving the app.
Keyboard shortcuts (default Qt behaviors) such as Space for play/pause also work.
Drift Player stores preferences via QSettings (organization evoid, application Drift Player). Saved values include:
audio/volumeplayback/shuffleplayback/repeatvisual/blur
Delete the relevant configuration file for a clean state (location is platform dependent; e.g. ~/.config/evoid/Drift Player.conf on Linux).
├── CMakeLists.txt # Root CMake project definition
├── include/
│ ├── MainWindow.h # Main window and UI controller
│ └── VideoBackgroundWidget.h # OpenGL-backed mpv renderer
├── src/
│ ├── CMakeLists.txt # Target definition for drift_player
│ ├── main.cpp # Application entry point
│ ├── MainWindow.cpp # UI setup and application logic
│ └── VideoBackgroundWidget.cpp # Rendering & mpv integration
├── third_party/
│ └── spdlog/ # Header-only logging dependency
└── README.md # You are here
- Fork the repository and create a feature branch.
- Follow the existing coding style (Qt/modern C++) and prefer concise logging via
spdlog. - Add or update tests/scripts if you introduce new functionality that can be covered.
- Submit a pull request describing the change and manual testing performed.
Bug reports and feature ideas are welcome—please include OS, reproduction steps, and any relevant logs.
Drift Player is released under the MIT License. You are free to use, modify, and redistribute the software under the terms described there.
- mpv for the playback engine and libmpv API.
- Qt Project for the cross-platform UI toolkit.
- spdlog for high-performance logging.
- All early testers and contributors who helped shape the Drift Player experience.
Enjoy the drift—feedback, issues, and pull requests are always appreciated.
