Media Drop: Sorted, Verified, Then Published
Media Drop is a drag-and-drop app that files movies, TV, music, and photos onto our media server.
I built the whole pipeline: it works out what each file is, sends it over SSH, and tells the library to index it.
The detail I am proud of is that nothing is published until the bytes are verified and the file has been decoded to prove it plays.
Why it exists
Filing movies onto the family media server by hand was leg-work, and error-prone leg-work at that. Every file needed a canonical name, the right folder, and the right drive, and one slip meant a movie the library could not see.
The deeper reason is trust. The server’s drives went through a stretch of dropping off the bus mid-write, and a file corrupted that way looks perfect. Right size, plays fine, until one night it does not. One film decoded cleanly for almost seven gigabytes before the damage surfaced. I wanted a pipeline that could never publish a file like that again. The family’s movie nights run on this thing now.
What it does
Drop a pile, get a plan
Drag files or whole folders onto the window. It works out what each one is, what it should be called, and where it belongs, and shows one review row per item before anything moves.
Verified, then published
Nothing counts as delivered until the landed bytes prove they decode. Every file is checked on the server itself after it arrives, and only then does it get its final name.
Resumable transfers
An interrupted upload picks up where it left off instead of starting over. With multi-gigabyte files, that matters.
It checks its guesses
Titles are matched against the library’s own metadata, with posters and details on each row, so I can confirm the match or pick the right one before sending.
Quarantine, not deletion
A file that fails verification is parked under an honest label rather than published or thrown away. The library never sees it, and neither does movie night.
Phones too
The same drop can also deliver music straight to a phone, and the landed bytes are checked there too.
How it works
Every decision happens before any bytes move. A drop is classified, parsed, and planned into one reviewable row per item, and the Send button only lights up when every item is either verified or explicitly accepted by me.
The upload itself lands under a temporary name, never the real one. Then two checks run. The landed byte count has to match the source exactly, and the file has to actually decode on the server it now lives on. Only after both pass is it renamed into place in one atomic move and the library told to index it. If either check fails, the file is parked and labeled, and nothing downstream ever knows it existed.