Spaces:
Paused
Paused
Commit History
-
Add Deno Deploy control test to isolate Cloudflare-specific vs edge-network-general stall
FTA7700ed0e1f4 -
Add second control TLS test against cloudflare.com to isolate Cloudflare-network-wide vs Worker-specific stall
FTA7700e30f93c -
Add control-group TLS test against TMDB to isolate Cloudflare-specific vs platform-wide outbound TLS stall
FTA7700d9f32e7 -
Add raw TLS-only handshake diagnostic to isolate TLS layer from HTTP layer
FTA7700d6ae4e7 -
Add HTTP/1.1-forced variant to network diagnostics to isolate PMTU/fragmentation hypothesis
FTA7700fbe330c -
Add network diagnostics route: staged DNS/TCP/TLS timing to Cloudflare Worker + raw IPv6 connect test
FTA77009c5146c -
Surface Cloudflare edge-purge failures instead of silently reporting success; relabel poster-origin audit count to avoid confusion with settings-staleness
FTA77000e78008
-
Three-state Library status: Actual/Outdated/Not Rendered, matching frontend to backend status field
FTA77003ac16a9 -
Actually apply the timestamp-based staleness rewrite (previous attempt silently failed to anchor-match)
FTA77003f07709
-
Add Library staleness-check endpoint: compares expected cache_key per item against current settings
FTA77007a863ad
-
Per-item Library cache purge (all origins incl. OPDB), remove dead library_delete code
FTA77002037d0a
-
Rearrange buttons in purge, refresh stale/duplicate entries
FTA770013e3b99 -
Add Library Cleanup: audit poster origin, soft-delete stale/duplicate entries
FTA77009b2515d
-
Add Cloudflare edge-cache purge (Workers Cache + Cache-Tag)
FTA77001ecada6 -
Purge also clears available_ratings, closing the stale fast-path gap
FTA77008a970e7 -
Add live purge feature: catalogs + library, sourced from Stremio account API
FTA7700ef14e02
-
Add API alias column to admin image lists
FTA77006512c5c
-
Attribute CDN-redirect renders to the requesting API key
FTA77006948b18
-
Track api_key_id on cache entries; admin preview uses correct per-key settings
FTA7700bb0b9d3
-
Add real-content ID preview to settings render preview
FTA77001ef2319
-
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA7700831a088 -
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA77001a13633 -
Add live-generation fallback to admin image preview under EXTERNAL_CACHE_ONLY
FTA7700caefe59
-
feat: add distance-from-edge inset setting for backdrop ratings
PNRxACloses #7. Some media players (e.g. Nuvio on Mac) reposition/crop backdrops and clip the rating badges. Add two independent per-key/global settings that inset the backdrop ratings inward from the anchored edge: - backdrop_edge_inset_x — horizontal inset (% of width), applies only to left/right positions - backdrop_edge_inset_y — vertical inset (% of height), applies only to top/bottom positions Centered axes ignore their inset, so a top-right position exposes "space from top" and "space from right", while "right" exposes only "space from right". Surfaced in the settings UI as conditional, edge-aware inputs and as edge_inset_x / edge_inset_y query params on the backdrop image and preview endpoints. The cache token (.eh{x}/.ev{y}) is emitted only when the position-gated value is non-zero, mirroring the existing optional .x1 (split) and .blur tokens, so default backdrop cache keys are unchanged and no cache-key migration is needed (only the additive DB columns, default 0).70cc48f -
feat: normalize poster aspect ratio to 2:3 (#15)
PNRxANon-2:3 source posters were served at their native aspect ratio, so downstream apps (Stremio addons, aiometadata) that place posters in fixed 2:3 containers cropped them — cutting off the title/logo art baked into the poster (issue #15). Two complementary fixes: - Render-side: a new `poster_fit` setting normalizes every poster to an exact 2:3 frame (e.g. 580x870 / 1280x1920 / 2000x3000). Modes: `cover` (default, center-crop), `pad` (solid letterbox), `blur` (blurred-fill bars), and `native` (legacy source-ratio passthrough). - Selection-side: among TMDB posters, prefer art near 2:3 before falling back to highest vote, so the chosen source usually needs little cropping. Configurable per-key, globally, and via the `?fit=` query param. Threaded through RenderSettings, the cache key (native emits no token so existing poster cache stays valid; the new default emits one), the api_key_settings DB column + migration, OpenAPI, and the admin UI (with live preview). Tests: poster fit …5283e2c
-
Merge remote-tracking branch 'origin/main' into feat/badge-shape-background
PNRxA# Conflicts: # README.md # api/src/handlers/preview.rs # api/src/image/generate.rs # api/src/image/serve.rs # api/src/lib.rs # web/src/__tests__/components/RenderSettingsForm.spec.ts # web/src/components/RenderSettingsForm.vue # web/src/lib/api.tsc45d5f9
-
feat: split poster badges onto opposite sides (#18)
PNRxAAdd a per-poster `poster_badge_split` setting (query param `split`) that divides rating badges evenly across two opposite sides of the poster. The split axis follows the badge layout: a vertical column splits left/right, horizontal rows split top/bottom. With an odd number of badges the configured side keeps the extra one (4 -> 2+2, 3 -> 2+1); a single badge is never split. - Rendering: BadgePosition::split_anchors + overlay_poster_group on the poster render path; threaded through ImageParams/serve/preview. - Cache: the split contributes a key token only when enabled, so existing non-split cache keys and CDN settings hashes are unchanged. - Settings: new column + migration, per-key/global/free-key plumbing, `split` query-param override. - Web: settings-form checkbox with live preview, free-key "Try it out" control, API params, types, and README docs.6db0b76 -
feat: add pill-style badges and dark/transparent/no-background options (#19)
PNRxAAdd two orthogonal, per-image-type badge appearance settings: - badge_shape: rounded (default) | pill (fully rounded ends) - badge_background: default | dark | transparent | none These are plumbed through the full settings stack (per-key + global defaults, query-param overrides, cache keys) for posters, logos, backdrops, and episodes, and exposed in the admin/key settings forms and the public free-key "Try it out" form. Closes #19.c165e10 -
feat: reflect server defaults in the free-key "Try it out" form
PNRxAThe free API key serves with the instance's global render settings, but the "Try it out" card showed hardcoded frontend defaults — so the displayed rating priority and the implied curl output didn't match what the key actually produces. Add a public GET /api/free-key/settings endpoint (gated on the free key being enabled, served from the existing global_settings_cache so it adds no DB reads, and trimmed of the admin-only operational flags). The card fetches it once (memoized in the auth store) and now: - seeds the rating priority list from the server's order (only sending a ratings_order override once the user reorders away from it), - annotates each dropdown's "default" with the server's resolved per-image-type value (e.g. "Badge style: default (Vertical)"), - dims rating sources the server excludes, falling back to the built-in defaults if the fetch fails.7e7d412 -
feat: add MDBList score and Roger Ebert rating sources (#42, #35)
PNRxAAdd two new rating sources, both sourced from the existing MDBList integration: - mdblist: MDBList's own 0-100 aggregate score (top-level `score` field), rendered as a bare integer to match MDBList's presentation (#42) - ebert: Roger Ebert's classic 0-4 star rating (the `rogerebert` entry in MDBList's ratings array; only `value` is populated), rendered as a bare decimal like IMDb/Letterboxd (#35) Both are wired through every layer: the RatingSource enum (label/key/ color/cache_char/canonical order), badge + icon rendering, validation, the default ratings order, the web settings UI, the landing page, and docs. The per-image ratings limit cap is raised 8 -> 10 to fit all sources. The MDBList response->badge mapping is extracted into a pure `mdblist_badges` fn with serde-level tests covering int/null `score` deserialization and 0/null value suppression. Icons: MDBList uses its official mark from Simple Icons (CC0); Roger Ebert uses a generic filled thumbs-up from Phosphor Icons …79c9393
-
feat: add ratings_exclude setting to hide specific rating sources (#17)
PNRxAAdds a "ratings_exclude" setting (comma-separated rating source keys to drop from generated images) following the same global-default + per-API-key + query-override pattern as ratings_order. Closes #17. Exclusion is applied before ordering and limiting, so excluding a source you don't care about (e.g. Rotten Tomatoes critics) frees its badge slot for the next preferred source rather than leaving a gap. The exclusion list is folded into every cache-key suffix (ratings_cache_suffix, badges_suffix_from_available, and the CDN settings_hash), so two configurations differing only in their exclusions never collide in the cache. - Storage: new api_key_settings.ratings_exclude column via idempotent migration; empty default ("exclude nothing") keeps existing cache keys byte-identical. - API: ?ratings_exclude= query override (all image types) plus admin global, per-key admin, and self-service settings endpoints. - Web: "Exclude ratings" checkbox control in the settings form with live previe…f54670e
-
feat: add DISABLE_PUBLIC_PAGES to hide public routes on private instances
YagUber5cc036a
-
additional configuration options for backdrops
PNRxA41b3b51
-
add support for episode ratings, closes #5
PNRxA76b8a0b
-
large refactor to prioritise tmdb logos and backdrops, then fall back to
PNRxAfanart, fixes #10094c13f
-
expose all customisation through url params, fixes #3
PNRxA0b7bef2
-
refactor to use explicit enum types instead of strings
PNRxAb8d53ae -
added support for official icons and made it the default
PNRxAbc616c9
-
remove fallback placeholder behavior, accept param as no-op for rpdb
PNRxAcompatibility1464c42 -
fix api valid response
PNRxA0926d77
-
add badge size option, improve settings layout
PNRxA4b9bf53 -
fix openapi spec
PNRxA676a62f
-
dynamically generate openapi spec
PNRxA5203922
-
deduplicate image handlers and rename poster modules to image
PNRxA0c21886 -
separate poster handler logic from route definitions and extract
PNRxAbuild_app into routes moduleb309110
-
dynamic CDN cache TTL based on film age, add Caddyfile example and
PNRxACloudflare deployment docsa0c237e -
add FREE_KEY_ENABLED env var to override the free API key toggle from
PNRxAthe admin UIeb8ae7b -
add ?imageSize= parameter with scaled badges
PNRxA2774836
-
added default badge style, regenerate example images
PNRxA030ff87
-
shorten setting values, add cache docs
PNRxA58dc9a1