Releases: jchirayath/mediahound
Release list
v0.9.1 — MediaHound
v0.9.1 — tab-scoped header stats
The header title count + estimated value (and the "X of N titles" denominator) now reflect the active media tab:
- All → whole catalog · Movies → only movies · Music → only music, etc.
- The header label adapts per type (movies / music / books / games / audiobooks).
Client-side only — no data change. 173 tests pass.
v0.9.0 — MediaHound
v0.9.0 — ★ Curated lists (Watchlist / Listenlist / Readlist / Playlist)
Build an ordered, per-media-type list of what you want to get to next — named for how you consume each medium: Watchlist (movies), Listenlist (music + audiobooks), Readlist (books), Playlist (games).
- Add/remove from each card in admin (+ Watchlist / ★ On Watchlist); a gold ★ badge marks listed items for everyone.
- ★ My List view shows just your listed items in your saved order. Reorder by dragging a card, or with ↑ / ↓ — the order persists.
- Stored in a new round-trip
data/lists.json({media_type: [id, …]}) via/api/lists, and baked onto each item'slist_posat build so the order shows on the published site too. Editing is admin-only; viewing is public — a shareable "what's next."
173 tests pass.
v0.8.1 — MediaHound
v0.8.1 — one Add dialog for photo + barcode
Changed
- Merged the separate Scan a barcode dialog into ➕ Add by photo or barcode — since both use the camera, there's now one place to add things:
- 📸 Photograph the cover or the barcode (decoded server-side — works on any phone, including iOS)
- ⌨️ Type a UPC/EAN/ISBN
- 📷 Scan live with the camera, shown only where the browser supports it
- The live scanner is feature-detected (
BarcodeDetector), so it appears on Chrome/Android/desktop and hides on iOS Safari automatically — no user-agent sniffing. - The ➕ Add menu drops from two entries to one.
172 tests pass.
v0.7.0 — MediaHound
v0.7.0 — big-library UX + music tooling
Added
- A–Z jump rail for long title-sorted lists — jump to any letter instead of scrolling thousands of items (cooperates with the virtualized grid).
- Mobile-first chrome — filters behind a toggle (with active-filter badge), condensed header, 44px tap targets, two-column grid, no horizontal overflow.
- 🖨 Printable inventory (PDF) —
export --format inventoryand a one-click admin Export button. - Music tooling (
tools/) — library scanner cleanup, resumable MusicBrainz enrichment, and a validated iTunes cover fallback.
Changed
- Virtualized grid — initial DOM drops from thousands of cards to ~60; more render as you scroll.
- Container-query card layout — alignment heights only in the dense grid; wide cards flow naturally; empty rows collapse; tracklist moved under the artist.
- Consistent inline-SVG icons (no OS-dependent emoji); per-type filter labels; secondary toolbar actions grouped under ⋯ More; chips restyled as filter buttons; de-duplicated format badge.
Fixed
- Service-worker cache staleness —
servere-stamps the content version after syncing the app shell; the version now also hashes app.js/styles.css so UI edits invalidate the cache.
169 tests pass.
MediaHound 0.6.0 — Audiobooks, song search & game resale
MediaHound 0.6.0
Audiobooks, songs you can search, and a richer demo — still zero-key by default.
🎧 Audiobooks (new media type)
A fifth media type. Audiobooks pull their book metadata (author / year / publisher / ISBN / cover) from Open Library and their duration + overview from the LibriVox catalogue — both keyless; the narrator comes from the cover, CSV, or a quick edit. New 🎧 Audiobooks tab, card (shows length like “19h 0m” + a narrator chip), inline editor, RawImages/audiobooks/, CSV columns, where-to-listen links (Audible / Libro.fm / LibriVox / Open Library), and the Audible / CD / MP3-CD / Cassette / Digital medium dimension.
🎵 Album track-info & song search
Every music card now shows a collapsible tracklist. Search a song and its album surfaces with the matching track highlighted — find a record by any track on it, not just the album or artist. Tracklists round-trip through CSV.
🎮 Game resale (PriceCharting)
Platform-aware used-value estimates (retro carts and Switch hold value; PC physical resale is low) and a PriceCharting price link (loose / CIB / sealed) next to the eBay sold-listings link.
✨ Real demo cover art
The sample catalog now uses real, hotlinked covers for every type — books & audiobooks via Open Library, games via Steam capsules — matching the movie/music demos.
🧩 Under the hood
Audiobooks were added through the shared media-type registry introduced in 0.5.0 — about one registry entry plus a provider. CI’s release upload moved to action-gh-release@v3 (Node 24).
164 tests, ruff clean. The macOS app is signed (Developer ID); Windows is pending SignPath.
MediaHound 0.5.0 — Books, Video games & change log
MediaHound 0.5.0
Two new media types and a compact change log — all still zero-key by default.
🎮 Video games (new media type)
Resolve a game by title (or a scanned UPC → product name) via the Wikidata Query Service — open data, no API key. Platform becomes the catalogue's format dimension (Switch / PS5 / PS4 / Xbox / PC / Retro), and each game gets where-to-play links chosen by platform (eShop / PS Store / Xbox / Steam + MobyGames). Adds a 🎮 Games tab, card + inline editor, RawImages/games/, CSV columns, and UPC scan routing.
📚 Books (new media type)
Resolve a book by ISBN (978/979 barcodes auto-route) or title + author via Open Library — no API key. 📚 Books tab, card + editor, RawImages/books/, CSV columns.
🧾 Compact change log
data/events.jsonl — an append-only audit of every add / remove / change, tuned for size (integer timestamp, one-char op, field names only for changes — never their values). Admin-only, excluded from publish. View it with mediahound log.
🧩 Under the hood
New media types now go through a shared registry (frontend TYPES map + backend _finalize_media) rather than copy-pasted branches — adding the next type is ~one entry plus a provider.
144 tests, ruff clean. The macOS app is signed (Developer ID); Windows is pending SignPath.
v0.4.0 — Barcode, Discogs, PWA & a new look
Changed
- New brand — a beagle in headphones inside a retro TV over an open book, with the
media(orange) hound(ink) wordmark. New icon everywhere (web favicon/apple-touch, macOS
.icns, Windows.ico, README, wiki), brand palette (orange#E97B0C+ ink#16232A) as the UI
accent, and Fredoka as the brand/heading font. See docs/brand/. - Decluttered UI — a two-row sticky header (brand/Help/Admin on top; media tabs + stats +
Settings + Library below) that stays locked while scrolling, and the admin actions consolidated into
popup menus: ➕ Add (photos/scan/CSV), 🔗 Connect (Discogs/Publish/Letterboxd),
⤓ Export (catalog CSV/JSON, changes, seen), 💾 Backup (backup/restore). Action rows wrap on
narrow screens. - Inline Help panel (❓) with searchable, collapsible sections; Settings dialog now scrolls and
exposes the Library & data folder control. - Desktop app slimmed 370 MB → 45 MB by using the native macOS WebKit backend (excluded Qt +
unused scientific libs in the PyInstaller spec); the bundle version is stamped from the package.
Added — installable on your phone
- 📱 PWA — published catalogs are now an installable, offline Progressive Web App (
manifest.json- a service worker). Add it to your phone's home screen for a full-screen, offline-capable app that
auto-updates on every republish (the SW cache is stamped with the build content-version).
- a service worker). Add it to your phone's home screen for a full-screen, offline-capable app that
Added — the four design proposals (docs/design/)
- 📷 Barcode / UPC scanning — identify the exact release from the barcode instead of fuzzy OCR.
Local decode via the optionalmediahound[barcode]extra (zxing-cpp, a pip wheel, no system lib);
music UPC → MusicBrainz/Discogs barcode search, movie UPC → UPCItemDB product name → the existing
identify-by-title path. New📷 Scan barcodeadmin tool (nativeBarcodeDetectorcamera + manual
entry),POST /api/identify-barcode, and a barcode-first pass inmediahound build --online. - 💿 Discogs integration — a Discogs music metadata provider (
[music.metadata] provider = "discogs"),
one-shot collection import (mediahound import-discogs <username>, a💿 Discogsbutton, and
POST /api/import-discogs), and condition-based price suggestions (resale.discogs_price).
Token stored in the OS keychain (DISCOGS_TOKEN, in Settings → API keys). - 🛟 Interop & safety —
mediahound backup/restore(zip of RawImages + data + config;--no-photos
for a quick curation-only backup;.env/secrets never included), a⬇ Backupbutton +GET /api/backup,
Letterboxd and JSON exporters (mediahound export --format letterboxd|json, plus a client-side
🎬 Letterboxdbutton), and JSON Feed + RSS of recently-added items (data/feed.json/feed.xml,
[feeds]config). - ⭐ Personal catalog — per-item rating (★1–10), note, tags/shelves, and a lending tracker
(loan out / returned, badge, On-loan filter), plus a 🎲 Surprise me picker and a My rating sort.
All personal data is admin-only and stripped from the published catalog (bundle.js/collection.json),
andcorrections.json/loans.jsonare excluded from Publish. See PRIVACY.md. - 📚 Library switcher — open / create / switch the served library at runtime from the admin UI,
with no restart. Backed by a recents list (~/.config/mediahound/recent.json);GET /api/libraries,
POST /api/switch-library,POST /api/create-library(all localhost-only). This is where the data
directory is chosen — per library viaconfig.toml[paths]— surfaced in the UI.
Fixed
- Upgrades now take effect — an existing library kept its own copy of the web UI, so upgrading
MediaHound left the old interface in place.build/app-open now refreshes the app shell from the
installed package (sync_web_assets), and the server sendsno-cacheon HTML/JS/CSS so a webview
can't run stale code. hiddenalways wins — a class that setdisplay(e.g. the static-copy banner) overrode the
HTMLhiddenattribute, so JS couldn't hide it. Added a global[hidden] { display: none !important }.- Static-copy guard — editing a static copy (no admin server) now shows a clear banner that changes
live only in that browser, with one-click Export. - Unidentified thumbnails — the mock/demo build generates real placeholder tiles, and
identify.js
falls back gracefully when a thumbnail file is missing (no more blank/broken images). - CI: green again (fixed Ruff lint in test helpers) and GitHub Actions bumped to Node-24 majors.
Downloads: macOS app below (signed; right-click → Open on first launch). Windows build attaches when SignPath signing is approved. pip install mediahound for the CLI.
v0.3.1
Patch release.
🐛 Fixed
- Desktop app crashed on launch ("started and exited") — the bundled app now opens correctly into its native window. (PyInstaller entry-point fix.)
✨ Added
- New logo — a hound wearing headphones, watching TV 🎧📺 (music + movies). New app icons, favicon, and wordmarks.
- Code-signing — macOS builds are signed & notarized (Developer ID, via Fastlane); free Windows signing wired for SignPath Foundation (OSS).
- PRIVACY.md — offline-first, no account, no telemetry.
Downloads
- macOS —
MediaHound-macOS.zipis signed & notarized (opens with no Gatekeeper warning). - Windows —
MediaHound-Windows.zip(unsigned for now → one-time "More info → Run anyway").
pip install mediahound · Demo: https://jchirayath.github.io/mediahound/
v0.3.0 — Easy mode
MediaHound 0.3.0 — "Easy mode." This release makes MediaHound usable by anyone — no Python, no terminal required.
✨ For everyone
mediahound app— one command sets up a library and opens the editor. First-run welcome screen.- 🖥️ Desktop app — download
MediaHound-macOS.zip/MediaHound-Windows.zipbelow, unzip, open. (Orpip install "mediahound[desktop]" && mediahound gui.) - ➕ Add photos — drag-and-drop covers straight into the catalog.
- 📱 Phone upload —
mediahound app --phoneshows a QR; scan it and snap covers from your phone (token-protected, nothing leaves your network). - 🔑 API keys in the admin console — set TMDB / OMDb / Anthropic keys under Settings, stored in your OS keychain (never in a file, never shown back).
- 🌐 One-click Publish — deploy your catalog to Netlify and get a shareable link.
🐛 Fixes
- Format is normalized when a title moves Movies↔Music (no more "DVD" on a music CD).
- Filters are media-type-aware; "Export changes" merges safely.
Install: pip install mediahound · Demo: https://jchirayath.github.io/mediahound/
Desktop builds are unsigned for now — a one-time Gatekeeper/SmartScreen prompt on first open (right-click → Open on macOS).
v0.2.0 — MediaHound
MediaHound 0.2.0 — ReelShelf grows into a multi-media catalog (movies and music).
Highlights
- 🎵 Music support — catalog CDs, vinyl & cassettes (MusicBrainz + Cover Art Archive, zero-key); Spotify/Apple/YouTube Music links.
- 🖥️
mediahound serve --admin— a localhost write API so portal edits save straight todata/and survive every rebuild. - 🔀 Move titles between Movies & Music from the admin screen (relocates the source photo, normalizes format).
- ⬆ Import list in the admin screen + media-type-aware filters.
- 📇 CSV import/export (
mediahound import/export) — onlytitleis required.
Fixes
- "Export changes" now merges with existing corrections (no silent drops).
- Format is normalized when a title changes type (no more "DVD" on a music item).
Full notes in CHANGELOG.md.
— Publishing this release triggers the PyPI upload via Trusted Publishing.