Releases: rodzalendo/nanohive-abs-theme
Release list
NanoHive v2.0.4
Quarter-star ratings save again
If your Star rating steps setting was quarter stars, a 4.25 or 4.75 rating could not be saved β silently from the Rate what you finished row, and as Could not save beside the stars on a book page. Half and whole stars were unaffected, and a quarter value written into ratings.json by hand always displayed correctly, because only the write path checked the step. The ratings API now accepts 0.25β5 in quarter steps; halves and whole stars are a subset of that, so nothing that used to be accepted is rejected.
Thanks to the reporter for the detail that isolated it β "editing the file directly displays fine" is what pointed straight at the write path.
Import your ratings from StoryGraph or Goodreads
New Import ratings control in Settings β Theme β Book Page. Export your books from StoryGraph or Goodreads as CSV, pick the file, and every match is shown before anything is saved.
Rows are matched against your own libraries in confidence order:
- ISBN-13 / ISBN-10 or Amazon ASIN. ISBNs are indexed in both forms, so a 10-digit ISBN in the file finds a 13-digit one in your library and vice versa.
- Title and author, compared after folding accents, punctuation, subtitles and leading articles. Authors are matched on surname in any order, because both sides list translators and co-authors inconsistently.
- A scored close match, for the rows an export leaves without any identifier at all.
The dry run separates what matched (and why), what is worth a second look, what you have already rated, and what is not in your library. Uncertain rows carry a picker over the runner-up candidates plus an explicit skip, and a title that exists in two libraries is always sent for review rather than guessed. Books you rated yourself are held back unless you tick overwrite; written reviews come along if you want them; quarter-star ratings keep their exact value. Only libraries that take part in ratings are searched.
The customizations pop-up no longer shifts when a dropdown opens
Opening a dropdown near the bottom of the settings pop-up moved the whole panel. Three separate causes behind one symptom:
- The flip-up decision was made against the viewport instead of the box that actually clips, so the menu opened downward into the dialog's edge and was cut off.
- An absolutely positioned menu that overflows a scroller extends that scroller's scroll range β so scrolling down to see the cut-off part and then closing the menu clamped the scroll position and jumped the panel by the menu's overhang.
- In Firefox, rewriting the dropdown button's label with the same text made the panel's multi-column layout re-balance, nudging every card.
The menu is now a body-level fixed layer that lives outside the panel: it cannot be clipped by any ancestor, it changes no scroll geometry, and it never mutates the panel's DOM. It also prefers to open on whichever side keeps it inside the dialog.
Also
- The ratings endpoint accepts a bulk write, so importing an export is one write instead of one per book. It can only ever write the caller's own ratings.
- New strings are in English and Polish; the other 38 languages fall back to English as elsewhere in the settings panel.
ghcr.io/rodzalendo/nanohive-abs-theme:2.0.4 Β· :latest
Theme stamp core3.118.0_enh6.178.1_book1.42.0_early1.6.0_njs1.13.0
Upgrading: the njs module changed in this release, so recreate the container (a plain restart keeps the old module). Already-open browser tabs run the previous inlined theme until reloaded.
v2.0.3
A follow-up to v2.0.2.
Home section order now updates as you hide a shelf. Previously, hiding e.g. Discover left it sitting in the Home section order list until you closed the customizations panel and opened it again. The list now refreshes in place.
This applies when you open customizations from the gear icon over your home page. On the standalone /config page the home page is not loaded, so the list can only refresh after you next visit home.
ghcr.io/rodzalendo/nanohive-abs-theme:2.0.3
or :latest.
v2.0.2
A settings-panel fix on top of v2.0.1.
Rate what you finished now has its own Hide switch in Settings β Theme β Home & Carousel β Hide Homepage Shelves, alongside the other six shelves. Previously the section appeared under Home section order with no switch next to its peers, and its toggle lived elsewhere in the panel with the opposite polarity β on meant shown, while every row in the Hide group means on = hidden.
The two lists now line up: seven Hide rows, and the order list shows those same sections, dropping any you have hidden.
Your existing setting is unchanged β nothing to redo after upgrading.
ghcr.io/rodzalendo/nanohive-abs-theme:2.0.2
or :latest.
v2.0.1
First round of post-release feedback, from GitHub issues and the Reddit thread. Thanks for the reports β several were real bugs I could not have found on my own setup.
Added
- Star rating steps β full, half (default) or quarter stars, for StoryGraph-style grading. Applies both to what you can pick and to how every rating is drawn, so whole-star mode never shows a partly-lit glyph.
- Ratings are per library. Podcast libraries are excluded by default; any library can be switched on or off individually under Settings β Theme β Book Page.
- Pause button on the home carousel, and it remembers your choice.
- The rating number follows your cursor while you hover the stars, on the book page and in the rate sheet β you need it once you are picking quarter stars.
Fixed
- "Rate what you finished" mixed libraries. It now only offers books from the library you are looking at. Membership comes from a direct item lookup rather than ABS's progress-filtered library query, which lags progress writes badly enough to empty the row.
- Podcast library nav icons β a leftover glyph name from the book library's menu was painted over the podcast icon (reported as "@group"). The mobile drawer had the same problem, and also kept the previous library's menu after switching.
- Finished checkmark is bigger, solid, and uses a heavy tick; the book page now draws the same mark instead of its own fainter version.
- Card star badge sat on top of the third caption line when the shelf is sorted by a field the card does not otherwise show ("Finished β¦", "Added β¦"). It now rides the author line.
- "Rate finished row on home" sat inside the Hide Homepage Shelves group, where every other toggle means the opposite, so it read as inverted.
- Rating numbers rounded to one decimal, so a 4.25 rating displayed as 4.3.
Not in this release
Importing ratings and reviews from Goodreads / StoryGraph. It is the most requested item and it is coming, but it needs CSV parsing for both formats, ISBN/ASIN matching against your library and a preview-before-import step β its own release rather than a patch.
Upgrade
ghcr.io/rodzalendo/nanohive-abs-theme:2.0.1
or :latest. Settings, ratings and server defaults carry over untouched.
NanoHive ABS Theme 2.0.0
A themed reverse proxy for Audiobookshelf Web β no Tampermonkey, no per-browser setup, applies to every user including guests. Nothing is written to your ABS container; remove the proxy and you're back to stock.
Verified against Audiobookshelf 2.35.1 and 2.36.0.
Ratings
- Server-wide star ratings with short reviews, shared by everyone on the server
- Stars on every card while browsing; series show the average of the books inside
- "Rate what you finished" row on the home page for finished-but-unrated books
- Admin moderation of any rating
Sorting and filtering
- Multi-level sort inside ABS's own Sort menu: up to 8 dimensions (author, series, title, year, added, duration, narrator, rating), direction per level, precedence numbered in the order you pick
- Stackable filters in ABS's Filter menu: genre, author, narrator, language, decade, progress and rating β any value within a dimension, all dimensions together β each value listed with its count
Stats
- Server Ranking: everyone ranked by listening time, medals for the top three, week/month/year/all-time, per-user drill-down
- Server statistics (admin): most played books, best rated, top genres and authors, filterable per library
- Your listening: current and longest streak, this week against last, the weekday you actually listen on, top books, authors and narrators
- Year in Review
- The ranking is complete even for users who never open the web app β an admin's browser publishes a small per-user summary. On by default; switching sharing off removes that user from the board and its totals and deletes their shared data
Frequently requested upstream
- Autoplay the next book in a series when one ends, with a notice naming what started (off by default)
- Finished-book tools: fix the finished date, and a list of books stuck at 97β99% with one tap to mark them done
- Report a problem from any book's three-dot menu, with a live count and queue for admins
Browsing
- Search every library at once, merged with a library badge per hit
- Collections rebuilt as an instant icon-emblem grid, with starter templates and in-app descriptions
- Narrators and Authors as card pages with cover collages, counts, filtering and sorting
- Custom series covers and descriptions, with a generated cover (layered deck, grid or first book) as fallback
- Per-user start page, reorderable home sections, user profile photos
Admin
- Save the current look as the server default, selectively per area
- Force-disable individual features for everyone
- Tidy authors β remove authors left behind with no books
Look and platform
- 12 base themes and any accent colour, per user
- Hero carousel of in-progress books; redesigned book page with a cinematic background
- Extended ereader with a typeface picker including OpenDyslexic
- Book lookup links (Goodreads plus the biggest site for your language, 25 logos bundled)
- Self-hosted logo upload, so it loads on an air-gapped server
- Themed date pickers and dropdowns
- A large mobile pass: cover-first hero, centred grids, single-scroll series page, charts that fit
- Translated into all 40 languages ABS ships
Running it
Docker, in front of ABS. Mount one volume at /data/nh to keep ratings, stats and uploads across container recreates. Compose example and env vars in the README.
ghcr.io/rodzalendo/nanohive-abs-theme:latest
v1.9.1 β Server-wide book ratings
Server-wide book ratings β
A Goodreads-style rating block under the Play/Read buttons on every book page β shared by all users of the server:
- Big stars filled to the community average, numeric score beside them
- Hover to preview, click to rate (half-star steps, 0.5β5) β saves instantly
- "N ratings Β· M reviews" opens a popup with everyone's stars, dates and review text
- Your own rating gets its own line with Add/Edit review and Remove
- Admins can moderate (remove any rating from the popup)
- Per-user toggle in Settings β Theme β Book Page, server-wide via
NH_SHOW_RATINGS=false - Stored on the proxy volume (
/data/nh/ratings.json) β ABS is never written to. Identity is validated against ABS with the caller's own login token (nginxauth_request+ njs), so nobody can rate as someone else.
Fixes
- Ultrawide monitors: library/home toolbar now hugs the screen edges (was squeezed into a centered band)
- HTML shell is served
Cache-Control: no-storeβ browsers can no longer keep running a stale inlined theme after an update - Ebook/Library Files row menus: no longer clipped by the rounded table panel, open upward when there's no room below, and the menu box fits its labels
- Mobile: hero carousel properly centered; card titles/authors keep a readable minimum size at small cover-size settings
- Hero carousel: build failures no longer retry forever (fixes home-page flicker + scroll jumps)
- Detects a leftover pre-proxy NanoHive userscript (Tampermonkey) and shows a warning banner instead of fighting it silently
- Theme API calls now mirror the auth token from ABS's own requests β immune to ABS store-layout changes
Full stamp: core3.29.9_enh6.65.3_book1.25.1_early1.3.0
v1.8.0 β OIDC behind an outer TLS proxy, edit-modal editor theming
Fixes
OIDC login broken behind an outer reverse proxy (all setups with TLS terminated in front of the theme container)
The theme proxy was overwriting X-Forwarded-Proto with its own scheme β plain http between your outer proxy (nginx / NPM / Traefik / Cloudflare tunnel) and the container β so Audiobookshelf computed the expected origin as http://β¦ and rejected https://β¦ OIDC callbacks with βInvalid callback URL - must be same-originβ. The proxy now passes the incoming X-Forwarded-Proto through untouched and only falls back to its own scheme when it is the edge proxy. This was broken from the first release through v1.7.4 β if OIDC failed for you behind an outer proxy, this release fixes it with no config changes on your side. Comma lists (http,https, as sent by Nginx Proxy Manager) pass through intact. Details in docs/OIDC_XFP_FIX.md.
Description editor (Trix) theming was dead CSS; toolbar icons near-invisible
The edit modalβs rich-text editor rules were scoped under .modal, which never matched β ABS lazy-loads Trixβs stylesheet with the modal chunk β so the editor kept its stock neutral-gray look and the black toolbar glyphs (bold/italic/link/lists/undo/redo) were barely visible on the dark surface. The rules are now un-scoped and the toolbar glyphs are brightened (warm-tinted, amber on hover/active, dimmed when disabled).
Versions
core.js v3.29.5 Β· enhancements.js v6.64.4 Β· book-details.js v1.22.0 Β· nh-early.js v1.3.0
π€ Generated with Claude Code
v1.7.4 β more player bottom clearance
Bumps the floating-player bottom clearance from 140px to 190px so page content has more breathing room above the player when it's open (applied to the real scrollers #bookshelf and #item-page-wrapper, only while the player is open).
File versions: core.js v3.29.4, enhancements.js v6.64.3.
v1.7.3 β player clearance without the dead "lip"
Fix
Follow-up to v1.7.2. That release padded .page.streaming, but on the home/library view the page wrapper is overflow-hidden + h-full and the real scroll container is #bookshelf (item pages scroll on #item-page-wrapper). Padding the wrapper only shrank the inner scroller and left a permanent empty band β the "lip".
The 140px bottom clearance now lives on the actual scroll containers, only while the player is open. Because it's inside the scroll flow, it's only ever seen once you scroll to the very bottom β no persistent gap.
File versions: core.js v3.29.3, enhancements.js v6.64.2.
v1.7.2 β floating player no longer hides page content
Fix
- Bottom of the page obstructed while the player is open. The floating frosted player is fixed at bottom:24px, but the scrolling page had its bottom padding zeroed, so the last content scrolled under the player with no room left to reveal it. Restored bottom clearance on
.page.streamingso the page scrolls fully clear of the floating player (desktop + mobile).
Housekeeping
- Sidebar version footer now reads NanoHive v1.7.2 (const was stale at v1.6.0).
File versions: core.js v3.29.2, enhancements.js v6.64.1.