Skip to content

Releases: elfhosted/PostersPlus

v1.1.0-elf.7

11 Jun 00:33
47defa8

Choose a tag to compare

1.1.0-elf.7 (2026-06-11)

Bug Fixes

  • stop release-please aborting auto-tag (empty component) (8e17cd0)
  • stop release-please aborting auto-tag (empty component) (310a2ea)

v1.1.0-elf.6

11 Jun 00:09
d327f27

Choose a tag to compare

1.1.0-elf.6 (2026-06-11)

Bug Fixes

  • align public lock banner width with layout (v1.1.0-elf.6) (7695ba6)
  • align public lock banner width with the layout (0d8e87d)

v1.1.0-elf.5

10 Jun 23:59
262876d

Choose a tag to compare

1.1.0-elf.5 (2026-06-10)

Features

  • read-only showcase for public lock view (v1.1.0-elf.5) (986d05b)
  • read-only showcase for the public lock view (d38de4f)

v1.1.0-elf.4

10 Jun 23:37
92cf1b6

Choose a tag to compare

1.1.0-elf.4 (2026-06-10)

Bug Fixes

  • clean preset-only public lock view (edfc9a4)
  • clean preset-only public lock view (v1.1.0-elf.4) (942ecaf)

v1.1.0-elf.3

10 Jun 23:26
22fe546

Choose a tag to compare

1.1.0-elf.3 (2026-06-10)

Bug Fixes

  • real version in header What's-New chip (v1.1.0-elf.3) (a02eb7a)
  • show real version in the header What's-New chip (66bbbcf)

v1.1.0-elf.2

10 Jun 23:02
d02bfdf

Choose a tag to compare

1.1.0-elf.2 (2026-06-10)

Bug Fixes

  • discoverable preset picker in public lock mode (b353080)
  • public-tier version footer + discoverable preset picker (v1.1.0-elf.2) (6262990)
  • surface app version in /server-caps for the build footer (45797ba)

v1.1.0-elf.1

10 Jun 10:59
46db24d

Choose a tag to compare

1.1.0-elf.1 (2026-06-10)

Features

  • add fake textless review report (446dbb7)
  • fleet-wide MDBList 429 cooldown over upstream key rotation (7fac294)
  • observability, render limits, rate limiting, leader-elected jobs (2a968bc)
  • pluggable storage/coordination/blobstore backends on v1.1.0 (b040a1d)
  • PRESET_MDBLIST_FETCH — opt-in MDBlist fallback for /p endpoint (#30) (55469b7)
  • public-tier lock UI, ElfHosted branding, SEO on tabbed configurator (4f0e04b)
  • static-preset overload moat — anonymous /p route on v1.1.0 (5170828)

Bug Fixes

  • address codex pre-merge review (CDN 302 on /poster, compose volume) (f5c233b)
  • derive preset genre from TMDB when rating is uncached (#28) (9d1b242)

Miscellaneous Chores

  • align fork release line to upstream v1.1.0 (a31bfeb)

v1.0.3-elf.4 — opt-in MDBlist fetch for /p endpoint

27 May 00:37
f4ba29f

Choose a tag to compare

Fork-only patch on top of upstream v1.0.3.

What changed

Features

  • PRESET_MDBLIST_FETCH env (default false) opts /p into a live MDBlist fetch on cache miss. The /p preset endpoint historically never called MDBlist — anonymous traffic was assumed to need protection from burning the operator's quota. With elf.2's fleet-wide cooldown the worst-case quota burn is now bounded (~120s of paused traffic per 429), so it's safe to enable. Required for preset-only instances (where /poster is gated by PRESET_ENABLED + no ACCESS_KEY → nothing else warms the rating cache → every preset render was permanent-N/A). (#30)

Behaviour when enabled:

  • Same gating as /poster — global cooldown + per-title back-off.
  • Coalesced via the shared _rating_fetch_inflight dict so a burst of concurrent /p requests for the same imdb_id fans out into exactly one MDBlist call.
  • Fetch joins the existing image/logo/trending gather so added wall-time is bounded by max(), not sum().
  • _RateLimited(retry_after) → honour Retry-After (cap 1h) for per-title back-off.
  • FETCH_FAILED → set 1h per-title back-off.
  • Success → cache the rating row (full awards/festival/cult parsing) and flip will_persist so the composite gets the long preset TTL on first hit.

Relationship to upstream

The /p/ preset endpoint is fork-only, so this feature isn't applicable upstream.

v1.0.3-elf.3 — preset endpoint genre fix

26 May 23:53
5cb6e50

Choose a tag to compare

Fork-only patch on top of upstream v1.0.3.

What changed

Bug Fixes

  • Preset endpoint (/p/...) was rendering literal "Genre: Unknown" for any title that hadn't been rating-cached by a paid /poster call. The preset path deliberately never calls MDBlist (so anonymous traffic can't burn the operator's quota), and its standalone genre-resolution block had no fallback when cached rating data was absent. Now derives the genre label from TMDB's genre_ids — same logic /poster has used since elf.1. (#28)

Relationship to upstream

The /p/ preset endpoint is fork-only — upstream UmbraProjects/PostersPlus has no equivalent route, so this bug and fix are not applicable there.

v1.0.3-elf.2 — MDBlist Retry-After + fleet-wide 429 cooldown

26 May 23:22
c23a356

Choose a tag to compare

Fork-only patch on top of upstream v1.0.3. The -elf.N suffix is a semver pre-release tag so this sorts strictly between v1.0.3 and the next upstream v1.0.4.

What changed

Bug Fixes

  • MDBlist 429 handling now honours Retry-After and applies a fleet-wide cooldown. When MDBlist returned an HTTP 429, the fork was discarding the Retry-After header, applying a flat 1-hour per-title back-off, and continuing to fan out concurrent requests so every queued title individually tripped its own 429. Now: the Retry-After value is parsed and used (capped at 1h) for the per-title back-off, and a short global cooldown (capped at 120s) is set on any 429 and checked before every MDBlist call. With the Redis coordinator this cooldown is fleet-wide; with the in-process coordinator it's per-worker. Logs match upstream's format. (#26)

  • Rating-display-mode=2 no longer renders literal "Genre ★ None" when no rating is available (e.g. no MDBlist key configured, per-title back-off active, or global cooldown active). Falls back to "N/A" at the source. (#26)

Relationship to upstream

Backport of MDBlist 429 hardening that landed in upstream UmbraProjects/PostersPlus around v1.0.0. Our fork branched off pre-v1.0.0 and missed it.