MediaLyze is a self-hosted analysis tool for large video, music and audiobook collections. Point it at your media folders and it walks every file with ffprobe, stores the technical metadata in SQLite and turns it into a dashboard you can actually read: how many files there are, how much space they take, and how the mix of resolutions, codecs, bitrates and audio languages has changed over time.
It is built by Frederik Emmer as a FastAPI backend with a React front end, shipped as a single Docker container (one image, one SQLite database, one UI) and also packaged as an Electron desktop app for Windows, macOS and Linux. There is no cloud account and no external metadata service in the loop — the collection stays on your disk and the analysis stays on your server. A transcoding module is in beta: it writes linked video variants into a separate output folder and leaves the originals untouched unless you explicitly confirm a replacement.
path, size and mtime, so a large library only re-analyses what actually changed.*.nfo or */Extras/* keep samples, artwork and junk out of the statistics.Most self-hosted media stacks can tell you what is in the library but not what the library actually consists of. MediaLyze answers the questions that come up when a collection grows: how much of it is still 720p, how many files are H.265 versus H.264, which titles score badly enough to be worth re-grabbing, and how fast the whole thing is growing. Because the numbers are measured with ffprobe from your own files and kept in your own database, they stay available offline and cannot change under you because a third-party service retired an API. It complements the *arr stack and a media server rather than replacing them — it is the measurement layer they do not provide.
The container is the quickest path: ghcr.io/frederikemmer/medialyze:latest, published with a production docker-compose.yaml in the docker/ directory of the repository. Mount a config directory at /config, your media read-only at /media and a writable output directory at /transcode-output, then open http://localhost:8080 (set HOST_PORT to change it). The start-medialyze.sh and start-medialyze.ps1 launchers add gpus: all for NVIDIA and the /dev/dri device plus host group ids for Linux iGPUs only when the host actually has them. The service speaks plain HTTP, so put a reverse proxy in front for HTTPS. Desktop installers (.dmg, .AppImage, .exe) are on the releases page. Authentication is bring-your-own for now, so do not expose the port directly to the internet.
Free and open source, licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). The full text is in the repository’s LICENSE file. As with any AGPL project, if you run a modified version as a network service for other people, you are expected to make the modified source available.