From 553bd6f42708befe6becee5a6c4c8c9eb5825579 Mon Sep 17 00:00:00 2001 From: Dymas Date: Tue, 15 Sep 2026 15:57:43 +0200 Subject: [PATCH] Add anime metadata providers --- CHANGELOG.md | 6 + README.md | 10 +- VERSION | 2 +- docker-compose.yml | 3 + package.json | 2 +- public/assets/app.js | 18 ++- public/assets/styles.css | 7 + server.js | 310 +++++++++++++++++++++++++++++++++++++++ 8 files changed, 353 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 66f879a..767085c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 1.4.0 - 2026-09-15 + +- Added missing metadata fetching from AniList, with AniDB fallback when AniList has no usable match or is unavailable. +- Added a per-title `Metadata` action that fills only missing local metadata fields by default. +- Added cached AniDB title matching and optional rich AniDB HTTP metadata when `ANIDB_CLIENT_NAME` and `ANIDB_CLIENT_VERSION` are configured. + ## 1.3.0 - 2026-09-15 - Moved movie and series browsing out of the sidebar into a Jellyfin-style main collection grid. diff --git a/README.md b/README.md index 9d62084..8ac0368 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # h-player -h-player is a small local web app for browsing a folder-based private video collection. The interface follows Kaizoku's dark purple glass-panel design, including the same card gradients, rounded controls, cover fallback treatment, and accent colors. The app remains a standalone private library browser and does not integrate with Plex, Jellyfin, Kodi, or any external metadata provider. +h-player is a small local web app for browsing a folder-based private video collection. The interface follows Kaizoku's dark purple glass-panel design, including the same card gradients, rounded controls, cover fallback treatment, and accent colors. The app remains a standalone private library browser and does not integrate with Plex, Jellyfin, or Kodi. The sidebar holds app navigation, search, and rescanning controls. Movies and series appear in the main collection grid, similar to Jellyfin-style library browsing. Selecting a collection card opens that movie or series folder with its metadata, seasons, episodes, and playable files. @@ -33,6 +33,8 @@ The included compose file keeps the existing `/mnt/ssd2/docker_data/h-play` host To add a browser password prompt, uncomment `AUTH_USERNAME` and `AUTH_PASSWORD` in `docker-compose.yml`. +To enable rich AniDB fallback metadata, register an AniDB HTTP API client and set `ANIDB_CLIENT_NAME` plus `ANIDB_CLIENT_VERSION`. Without those values, h-player can still use AniDB's cached public title dump for fallback matching, but rich descriptions and images come from AniList unless AniDB API credentials are configured. + ## Run Without Docker ```bash @@ -48,6 +50,8 @@ LIBRARY_DIR=/path/to/Library DATA_DIR=/path/to/private-library-data AUTH_USERNAME=viewer AUTH_PASSWORD=change-me +ANIDB_CLIENT_NAME=my_registered_client +ANIDB_CLIENT_VERSION=1 ``` Set `HOST=0.0.0.0` only when you intentionally want the app reachable from other machines on the network. Use `AUTH_USERNAME` and `AUTH_PASSWORD` before exposing it beyond localhost. @@ -74,8 +78,10 @@ Use the app to edit: The `Thumbnail` button extracts a frame from the first video in a title and stores it under `data/thumbnails`. +The `Metadata` button searches AniList first and falls back to AniDB if AniList has no usable result or is unavailable. Provider metadata only fills missing local fields by default, so manually edited descriptions and thumbnails are preserved. + ## Privacy Notes -- No external metadata lookup is performed. +- External metadata lookup is performed only when the `Metadata` button is used. - Optional Basic Auth is available through `AUTH_USERNAME` and `AUTH_PASSWORD`. - Do not expose this container directly to the public internet. diff --git a/VERSION b/VERSION index f0bb29e..88c5fb8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.0 +1.4.0 diff --git a/docker-compose.yml b/docker-compose.yml index 895a90c..72f3588 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,9 @@ services: # Uncomment these to require browser Basic Auth. # AUTH_USERNAME: viewer # AUTH_PASSWORD: change-me + # Optional rich AniDB fallback metadata. Register your own AniDB client first. + # ANIDB_CLIENT_NAME: my_registered_client + # ANIDB_CLIENT_VERSION: 1 volumes: - /mnt/hdd1/Video/Hentai:/library:ro - /mnt/ssd2/docker_data/h-play:/data diff --git a/package.json b/package.json index d970dcb..09f0894 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "h-player", - "version": "1.3.0", + "version": "1.4.0", "private": true, "description": "A small private web app for browsing a folder-based video collection.", "scripts": { diff --git a/public/assets/app.js b/public/assets/app.js index c3a5da9..0a0629b 100644 --- a/public/assets/app.js +++ b/public/assets/app.js @@ -119,7 +119,10 @@ function renderDetails(title) {

${escapeHtml(title.title)}

${escapeHtml(title.folder)} · ${title.count} file${title.count === 1 ? "" : "s"} · ${bytes(title.size)}

- +
+ + +