Skip to content

Releases: jchirayath/mediahound

v0.9.1 — MediaHound

Choose a tag to compare

@jchirayath jchirayath released this 28 Jun 02:12

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

Choose a tag to compare

@jchirayath jchirayath released this 18 Jun 02:35

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's list_pos at 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

Choose a tag to compare

@jchirayath jchirayath released this 17 Jun 04:47

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

Choose a tag to compare

@jchirayath jchirayath released this 12 Jun 18:34

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 inventory and 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 stalenessserve re-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

Choose a tag to compare

@jchirayath jchirayath released this 12 Jun 05:45

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

Choose a tag to compare

@jchirayath jchirayath released this 12 Jun 05:01

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 Libraryno 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

Choose a tag to compare

@jchirayath jchirayath released this 12 Jun 03:04

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).

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 optional mediahound[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 barcode admin tool (native BarcodeDetector camera + manual
    entry), POST /api/identify-barcode, and a barcode-first pass in mediahound build --online.
  • 💿 Discogs integration — a Discogs music metadata provider ([music.metadata] provider = "discogs"),
    one-shot collection import (mediahound import-discogs <username>, a 💿 Discogs button, 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 & safetymediahound backup / restore (zip of RawImages + data + config; --no-photos
    for a quick curation-only backup; .env/secrets never included), a ⬇ Backup button + GET /api/backup,
    Letterboxd and JSON exporters (mediahound export --format letterboxd|json, plus a client-side
    🎬 Letterboxd button), 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),
    and corrections.json / loans.json are 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 via config.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 sends no-cache on HTML/JS/CSS so a webview
    can't run stale code.
  • hidden always wins — a class that set display (e.g. the static-copy banner) overrode the
    HTML hidden attribute, 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

Choose a tag to compare

@jchirayath jchirayath released this 11 Jun 20:49
1c95125

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

  • macOSMediaHound-macOS.zip is signed & notarized (opens with no Gatekeeper warning).
  • WindowsMediaHound-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

Choose a tag to compare

@jchirayath jchirayath released this 11 Jun 18:02
82703da

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.zip below, unzip, open. (Or pip install "mediahound[desktop]" && mediahound gui.)
  • ➕ Add photos — drag-and-drop covers straight into the catalog.
  • 📱 Phone uploadmediahound app --phone shows 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

Choose a tag to compare

@jchirayath jchirayath released this 11 Jun 05:51
42b77bf

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 to data/ 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) — only title is 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.