Alan Gaudet
RST-03 · Rev 0.23.2

MediaLint

A Rust CLI and desktop GUI that audits Plex movie and TV libraries for naming problems.

Released; no public download

See it on the bench

MediaLint
MediaLint dashboard: severity counters, the library health bar, the finding trend chart, and cards for the last scan, the fix queue and the last batch.
Dashboard.
MediaLint
MediaLint history view: saved scans with per-severity counts and export actions.
Scan history.

Description

Plex expects a fixed naming scheme for movie and TV folders and files. MediaLint walks the library roots, flags files and folders that break that scheme, and resolves the title and year behind each flagged name through TMDB to suggest a corrected path. It is for a self-hosted Plex library that needs cleaning, where a bulk rename with no way back is the thing to avoid.

Block diagram

  1. Library roots
  2. Scanner
  3. Rules
  4. TMDB resolver
  5. Report

Decisions

Reuse Avatarr's resolver through a small extracted crate

Avatarr is my earlier media manager, now archived. Its TMDB and IMDb resolver and the Plex naming formatters moved out of Avatarr's core into a new avatarr-media crate, with Avatarr's existing tests guarding a refactor that changed no behaviour. MediaLint depends only on that crate and the parser, which keeps Avatarr's download client out of its build. The price is a path dependency: a source build needs the Avatarr checkout beside MediaLint.

Advisory by default, with a journal before every move

A scan only reports; moving files takes an explicit fix command, a preview and approval. Apply and undo refuse paths outside the configured roots, never replace an occupied destination, and save each undo intent before its move, with cross-device moves done as copy, fsync and delete. Atomicity stops at other tools: a process with the same write access can still race a move.

Model advice never reaches the fix planner

Review by a hosted or local model is opt-in and limited to parser edge cases. Only the media kind, the rule messages, any deterministic suggestion and root-relative paths leave the machine, with a strict response schema. The answer lands in a separate field that the fix planner ignores, so the GUI shows the advice but it cannot be approved or passed to Fix.

Errata

  • The AppImage has no public download at the moment.

Revision history

Version Changes
0.23.2 The release entered in OpenAI's Build Week: AI review results show in the Suggested column and the finding detail, still advisory.
0.23.1 Approvals can be cleared one row at a time; local endpoints no longer receive the hosted reasoning option.
0.23.0 Several library locations per media kind, hosted or local AI review settings, and fixes from the GUI dogfood pass.
0.22.0 End-to-end GUI tests for scan, apply and undo, scan cancellation, and a degraded mode when SQLite cannot open.