The directory worker registered video files with 'node["changed"] = node["changed"] or await _register_candidate(...)', so once one file in a directory was found changed, the rest were never registered: they fell out of known_paths, were pruned from the persisted seen-mtimes at finalize, and were rediscovered as new on every scan. That rotating ~10-item subset was reprocessed (metadata, TMDb lookups, logs) every 30 seconds forever. Also fix the self-sustaining reprocess loop for items that produce no index entries (no playable file, no parseable episodes, non-media): they never appear in the index, so the DB-aware mtime gating alone could never skip them. They are now recorded in a persisted empty_mtimes map (scan-state.json) and skipped while their mtime is unchanged. Episode/playable/blu-ray finder caches are now cleared at the start of each scan: an empty result cached before a download finished (or during a transient network-mount error) previously stuck for the process lifetime and reported "no episodes found" for series that have episodes. Logging: a no-change scan now emits a single line with item count and duration; per-item "up to date" chatter moved to debug; change scans report the new/changed count plus per-item reason lines (stored vs current mtime, index/empty-marker membership), finalize prune/commit traces, and scan-state load/save confirmations. Add AGENTS.md noting the project's Python 3.14 baseline (PEP 758 unparenthesized except) so tooling does not flag it as a syntax error.
MediaHive
Netflix style browsing of your local media archive. Supports keyboard, mouse and gamepad navigation. Uses your favorite movie player.
Windows and Mac portable ZIP downloads
Getting Started
- Windows and macOS: Download the portable ZIP from the releases page, extract it anywhere, and run
MediaHive. - Linux and other platforms: Install UV and run directly with
uvx --from mediahive[gui] mediahive.
What It Does
- Scans your chosen media folder for all movies and series that can be found
- Produces preview video clips and downloads metadata
- Search on names and other metadata, not just titles
- Hand off playback to your preferred system player
Windows and macOS builds are currently portable-only (no installer). On first startup, the app asks for your media folder, which you can later change using the in-app folder icon.
Note that .mediahive folder is created in your media folder to hold all the metadata and preview clips, avoiding the lengthy processing that you will see on initial startup.
Controls
MediaHive is designed to work with a mouse, keyboard, or gamepad.
| Input | Controls |
|---|---|
| Mouse | Click posters, rows, search, play, and folder actions directly. |
| Keyboard | Arrow keys move focus, Enter activates the focused item, Escape goes back, and / jumps to search. |
| Gamepad | D-pad or left stick moves focus, A selects or plays, and B goes back. RB/LB browses adjacent items, and the Search bar has an OSD keyboard. Player controls during playback. |
Recommended Players
MediaHive opens files with the OS default player, but one specific player may be configured via settings. You are of course free to use any player instead.
Atoggles play and pause.Bcloses the player.Ytoggles mute.- D-pad up and down change volume.
- D-pad left and right seek during playback, or step frames while paused.
Background
This project started as a personal project that I have used for browsing my warez for some time now. It is still in early development, but I have just now made it public for a wider audience.
