Episort
A Windows-first JavaFX desktop application. It scans a folder, parses names with deterministic rules, resolves titles against TMDB, then shows the exact source to destination plan. Nothing is written until that plan has been read and approved. Shipped as a portable build for Windows and Linux, with the Java runtime embedded.
- Status
- Maintained, in production
- Role
- Sole developer, from product design to packaging.
The initial problem
A download folder holds hundreds of files named by a dozen release groups. Several shows sit in one folder. Aired, DVD and absolute episode orders disagree. Renaming by hand costs a weekend. Automating it blindly destroys the library, and a wrong match does not fail loudly. It quietly moves the wrong file somewhere else.
The solution
A fully deterministic pipeline: scan, rule-based parsing, TMDB resolution, identity review, plan review, journaled apply. The same folder always produces the same plan. Two explicit gates, and neither can be skipped. Conflicts, duplicates and unsafe Windows paths block the run before it starts.
Key decisions
Deterministic rules, no model. The same folder must always produce the same plan, and every value on screen traces back to a real signal.
The unit of work is the detected group, not the file. Correcting twenty-five files costs one click.
An unavailable action stays visible and disabled, with the reason on screen. Hiding a button to prevent an action tells the user nothing.
Architecture
Scan
reads the folder
Parse
rules, no model
Match
TMDB, through Janus
Identity review
one line per detected group
You approve
Plan review
every source and destination
You approve
Apply
inside the workspace, journalled
The only stage that writes
Six separate stages, each one inspectable. The interface never touches a file: it approves a plan. Only the apply stage writes, inside the configured workspace, with a journal that lets an interrupted run be recovered. TMDB is reached through Janus, so no TMDB secret exists anywhere in this project.
Episort calls TMDB through Janus, so it ships with no upstream key and the people using it need no account. Being the first consumer of my own gateway found problems in it that none of my tests had.
What is left
The project is maintained, in production.
Publish real screenshots of the review screens
Broaden the release-naming test corpus
Document the parsing rules for contributors
Technologies
Java 25 · JavaFX 25 · Gradle · JUnit 5 · TMDB API · Janus gateway · Go 1.26 · GitHub Actions
Jonathan Blanchard