ThangQT

JAN 2026

project

← all projects

DavPlay

Personal Rust media browser for streaming a seedbox library through mpv

§ notes

DavPlay is a small personal media browser I made for my own seedbox setup. It is not something I plan to release or open source. The provider has a pretty good desktop client, but it does not support Linux. Without it, I had to open the web UI, find a video, copy the play link, and pass it to mpv every time.

That got old quickly. I also did not want to download files just to watch them once. My mpv setup already has a large cache, so streaming from the seedbox is usually smooth enough. I mainly needed a better way to browse the library and start playback.

I built it in Rust with egui, partly because I had been curious about egui for a while. It is easy enough to get something working, and I do not have to worry much about styling or customization, which makes it a good fit for internal apps and personal tools. The first version only listed files over WebDAV, which is where the name came from. Later it grew into a proper local library app. It scans the remote files, parses movie and TV filenames, fetches metadata from TMDB, caches artwork, and stores everything in a local SQLite database. Now I can open the app, browse the remote library, and play something directly in mpv.

DavPlay TV shows page showing Happy Endings
The TV shows library view, with TMDB metadata and cached poster artwork.

What it does

  • Browse media sources from WebDAV, rclone mounts, or local folders.
  • Scan movies, TV shows, and music into a local SQLite library.
  • Fetch movie and TV metadata, seasons, episodes, posters, backdrops, and stills from TMDB.
  • Read music tags and enrich artists and albums with MusicBrainz and cover art.
  • Open media directly in mpv, including playlist playback for the current file and following episodes.
  • Track recently watched items and jump back into the last or next TV episode.
  • Mark movies, shows, or individual episodes as completed.
  • Override difficult filename matches with local .meta.json files.
  • Manage multiple sources from the app, including rclone auto-mount and unmount behavior.