unsubbed.co

Medialytics

For statistics & metrics, Medialytics is a self-hosted solution that provides basic, tool that shows information about Plex content.

Plex content analytics, honestly reviewed. Not play history — what your collection is made of.

TL;DR

  • What it is: A free, browser-based analytics tool that parses your Plex server’s content libraries and generates charts about what’s in them — studios, genres, codecs, resolutions, countries, decades [README].
  • Who it’s for: Plex users with large movie or TV libraries who want to understand their collection’s composition — not who watched what, but what’s actually there and whether it’s healthy.
  • Cost: $0. GPL-3.0 licensed. No SaaS tier. Run it as a local HTML file or via Docker [README].
  • Key strength: The only free tool focused specifically on content analytics rather than activity analytics. Fills the gap that Tautulli, Plex’s built-in stats, and every other Plex tool doesn’t touch [README].
  • Key weakness: Requires embedding your private Plex admin token in config — the README itself warns you loudly not to host it publicly. Also locked to Plex (no Jellyfin support), built on Vue 2 (EOL), and small community with 210 GitHub stars and 8 forks [README].

What is Medialytics

Medialytics is a small client-side web application that connects to your Plex server via its XML API, pulls library data, and renders charts. It’s not a viewing history tracker. It doesn’t tell you what your family watched most. It tells you things like: what percentage of your movies are in 4K vs 1080p vs 720p, which studios dominate your collection, what the bitrate distribution looks like, or which directors appear most often.

The README summarizes the gap it fills directly: “Plex itself, as well as other tools, generate statistics regarding your server activity (most watched, most active, etc.) but they don’t report much on the nature of your media content itself” [README]. That’s the precise use case. It’s a collection auditing tool, not a usage dashboard.

The project is currently at version 2.6.1, runs entirely in the browser using Vue 2, Axios, D3, and plotly.js, and supports Movie and TV libraries. Audio and image libraries are explicitly excluded. It has been actively developed through at least 2024 — version 2.3 shipped new charts for movie resolution and container types [2], and the 2.6.x releases added tree maps for TV shows and an expanded movie analysis tool [README].

One technical note worth flagging upfront: Vue 2 reached end-of-life in December 2023. The project is using a framework that no longer receives security patches. For a locally-run tool this is a manageable risk; for anything internet-facing, it’s not.


Why people choose it

The third-party coverage of Medialytics specifically is thin — this is a small, focused tool with 210 stars, not a platform with a marketing budget. What does exist confirms a consistent use case: Plex users who want collection intelligence that the platform itself doesn’t provide.

The selfh.st self-hosted newsletter, which tracks new releases and updates across the entire self-hosted space, covered Medialytics v2.3 as a notable software update alongside tools like Ghost, LinguaCafe, and Wallos [2] — suggesting it has a recognized place in the homelab community even if it isn’t widely written about.

The comparison point that matters most isn’t between Medialytics and a SaaS equivalent — there isn’t one with this specific scope. The comparison is between Medialytics and doing nothing, or between Medialytics and writing your own queries against Plex’s API every time you want to know what percentage of your library is H.265 encoded. For Plex users who care about collection hygiene and content composition, Medialytics is the available answer.

There’s also a growing subset of Plex users managing libraries in the hundreds or thousands of items who use tools like this for what amounts to technical auditing: finding files with bitrate mismatches, identifying unmatched items, spotting codec inconsistencies before they cause playback problems on specific clients. The movie analysis tool added in 2.6.x is aimed exactly at this.


Features: what it actually does

Based on the README and GitHub repository:

Charts and visualizations:

  • Tree map showing TV shows by episode count and audience rating [README]
  • Tree map for movies cross-referencing resolution, container, codec, and bitrate [README]
  • Bar and pie charts for: genre, country, decade, studio, content rating, actor, and (movies only) resolution, container, writer, director [README]
  • Scatter chart of TMDB audience rating vs. content rating [README]
  • Line chart for library additions over time [README]
  • Watched/unwatched breakdown across the library and within most charts [README]

Analysis tools:

  • Movie Analysis tool to compare attributes: container, codec, resolution, bitmap, file size, and more [README]
  • Library-wide stats: total size, total duration, longest item, oldest item, earliest/latest additions [README]
  • Detection of unmatched library items [README]
  • Multiple methods of CSV export for any chart data [README]

Deployment:

  • Zero-dependency local use: download, edit scripts.js with your server IP and token, open index.html in a browser [README]
  • Docker Compose for a slightly more permanent setup [README]
  • REST API as the data source (Plex’s own XML feed) [merged profile]

What it doesn’t do:

  • No play history, watch counts, or user activity
  • No transcoding statistics
  • No Jellyfin or Emby support (Plex only)
  • No notifications or alerts
  • No real-time updates — each library load is a fresh API call, and large libraries will take noticeable time

Pricing: the math is simple

There is no SaaS version of Medialytics. There is no cloud tier, no pro plan, no commercial license. The software is free under GPL-3.0 and always has been [README].

Self-hosted cost:

  • Software: $0
  • Running it locally (no server): $0 — just open the HTML file
  • Running it via Docker on an existing home server: $0 additional (you already have the server)
  • Running it on a VPS: you’d need a VPS anyway for Plex; this adds no meaningful resource overhead — it’s a lightweight Vue app

The GPL-3.0 license means if you modify and distribute it, you must release your changes under the same license. For personal use, that doesn’t matter.

There is no comparison to a paid SaaS equivalent because nothing in the market does specifically what Medialytics does at any price tier. The closest commercial analog would be advanced Plex Pass features or Plex’s built-in “Discover” stats, but those focus on viewing activity rather than collection composition.


Deployment reality check

Medialytics is one of the simplest self-hosted tools to get running. Two paths:

Local, no server needed:

  1. Clone the repo or download as zip
  2. Edit the serverIp and serverToken variables at the top of scripts.js
  3. Open index.html in a browser

That’s it. No Node, no npm, no reverse proxy, no database. This is genuinely drag-and-drop [README].

Docker (for persistent access):

  1. Copy .env.sample to .env
  2. Set SERVER_IP and SERVER_TOKEN in .env
  3. docker compose up -d

Both paths take under 15 minutes for anyone who’s used a command line before.

What can go wrong:

The biggest operational concern isn’t setup — it’s the security model. Medialytics requires your Plex admin token, which grants full administrative access to your server. The README is emphatic about this: “you do not want to share [it] with anyone… you should not host your copy of Medialytics anywhere that is publicly accessible, as the token itself is sent as part of the API request” [README]. The README explicitly states it’s “only recommended for local usage at this time” [README].

This is not a minor caveat. If you expose a Medialytics instance to the internet — even behind HTTP auth — you’re running a Vue 2 (EOL) application that passes an admin token over the wire. For homelab use where the instance is accessible only on your local network, the risk is contained. For anything else, don’t.

Large libraries will be slow. The tool makes a single API call per library to get all content data. A library with 2,000 movies may take 10–30 seconds to load depending on your hardware. This isn’t a bug — it’s an inherent trade-off of the architecture.


Pros and cons

Pros

  • Free, permanently. GPL-3.0, no freemium trap, no future pricing changes [README].
  • Fills a real gap. Nothing else does content composition analytics for Plex libraries at this specificity. Tautulli covers play activity; this covers what you actually own [README].
  • Zero-dependency local option. Open an HTML file. No npm install, no database, no server. This is unusually accessible for a self-hosted tool [README].
  • Useful for library hygiene. The codec/bitrate/container analysis features are practical for anyone managing large libraries and trying to identify encoding inconsistencies [README].
  • CSV export. Every chart’s underlying data is exportable [README]. Useful for further analysis in Excel or a spreadsheet tool.
  • Actively maintained through 2024. Version 2.6.1 with multiple feature additions, Docker support, and active commit history [README][2].

Cons

  • Vue 2 (EOL since December 2023). The frontend framework no longer receives security patches. Low-risk for local-only use, but it’s technical debt that limits confidence in long-term maintenance [README].
  • Private Plex token in plain config. No read-only API option exists in Plex. You must use an admin token, and the README warns against public hosting. This is a hard security limitation, not a solvable config issue [README].
  • Plex-only. If you’ve switched from Plex to Jellyfin — and many have [1] — this tool doesn’t help you. No multi-backend support.
  • Small community. 210 stars and 8 forks. Feature requests go slowly. If the maintainer goes quiet, this project may stagnate [README].
  • No activity analytics. If you want to know what you’ve actually watched, how often, or by whom — Medialytics is the wrong tool. It only knows what exists in the library, not what’s been played.
  • Large library performance. Single API call per library means slow initial loads for collections above ~1,000 items. No pagination or lazy loading [README].
  • Movies and TV only. Audio, photo, and other library types are not supported [README].

Who should use this / who shouldn’t

Use Medialytics if:

  • You run a Plex server with a large movie or TV library and want to understand what’s in it beyond what Plex’s interface shows.
  • You care about codec hygiene, bitrate distribution, or container consistency and want a visual way to spot problems.
  • You want to see your library broken down by studio, genre, decade, country, or director without writing your own API scripts.
  • You’re running this on a local network only and are comfortable with the token security model.
  • You want a zero-cost, zero-infrastructure analytics view you can open when needed.

Skip it if:

  • You want play history, user activity, or most-watched statistics — use Tautulli instead.
  • You’ve moved from Plex to Jellyfin or Emby — this tool doesn’t support those.
  • You need a publicly accessible dashboard (the security model is incompatible with that).
  • You’re running a multi-user Plex server and want per-user analytics.
  • You need real-time stats rather than a snapshot-on-demand view.

Alternatives worth considering

  • Tautulli — the standard choice for Plex analytics. Covers play history, user activity, notifications, and has a proper web interface with its own authentication. For activity data, this is what you want. It doesn’t overlap much with Medialytics’ content analysis focus, so many users run both.
  • Plex’s built-in statistics — available under Settings > Troubleshooting and in Plex Pass features. Good for basic play history but deliberately limited — Plex doesn’t expose deep collection composition data through its own interface.
  • Mydia — a newer self-hosted media manager that combines library management with content discovery and calendar views for upcoming releases [1]. Different focus (management over analytics), but worth considering if you want richer media organization beyond Plex’s native interface.
  • Varken — Plex stats via InfluxDB and Grafana. More powerful for infrastructure-conscious homelabbers who already run Grafana, but significantly more setup complexity.
  • Jellyfin — not an analytics replacement, but if you’re considering leaving Plex to avoid the dependency on a centralized platform and private token requirements, Jellyfin offers an open-source media server that fully open-source analytics tooling can build against. The Plex token model is what makes Medialytics’s security tradeoff necessary in the first place.

Bottom line

Medialytics is a narrow tool that does one thing the rest of the Plex ecosystem ignores: it tells you what your library is made of. Not what you’ve watched — what’s there. For Plex users who’ve accumulated hundreds or thousands of movies and TV episodes and want to audit codec health, surface genre distributions, or find unmatched items, it’s the right tool and it’s free. The Vue 2 dependency is technical debt worth watching, and the private token requirement rules out any internet-facing deployment unless you really know what you’re doing. Run it locally, pull it up when you want a library snapshot, close it again. That’s the appropriate usage pattern — and for that, it works exactly as described.


Sources

  1. Dhruv Bhutani, XDA Developers“This new self hosted media platform is exactly what my home lab was missing” (Mar 1, 2026). https://www.xda-developers.com/new-self-hosted-media-platform-exactly-what-home-lab-was-missing/
  2. Ethan Sholly, selfh.st“This Week in Self-Hosted (28 June 2024)” — Software Updates section, Medialytics v2.3. https://selfh.st/weekly/2024-06-28/

Primary sources:

Features

Integrations & APIs

  • REST API

Import & Export

  • CSV Import / Export

Analytics & Reporting

  • Charts & Graphs