Spaces:
Paused
Paused
Commit History
-
Add cache restart-persistence and 7-day cleanup job
FTA77001ad3b12
-
Add live purge feature: catalogs + library, sourced from Stremio account API
FTA7700ef14e02
-
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
-
Update lib.rs
FTA77008e0d072
-
test+docs: query-param coverage, cache-key suffixes, migration/env notes
PNRxAAdd HTTP-level accept/reject tests for ?badge_shape/?badge_background/?split/ ?fit/?edge_inset. Document the new ratings cache-chars (d/e), the .x1/.fc/.fp/ .fb/.eh/.ev suffixes, and the 9-source MDBList count. Note the v003 FS subdir list must track the DB step, and that the ratings_order ADD COLUMN default is a frozen historical value.e976a94
-
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 -
change default poster fit to native (legacy passthrough)
PNRxAMake `native` (keep the source aspect ratio) the default for poster_fit instead of `cover`, so out-of-the-box rendering matches the prior behavior and 2:3 normalization (cover/pad/blur) is opt-in. The selection-side preference for ~2:3 source posters still applies by default. Because native emits an empty cache-key token, the default now reuses existing poster cache entries with no re-render. - db: default_poster_fit() -> Native; api_key_settings column default 'native' - web: form fallback + dropdown order (native first) - README: native is the default fit; restore source-ratio poster dimensions - tests updated for the new default1fdea6e -
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: 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
-
initial trakt implementation
PNRxA7f22b24
-
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
-
show newest items first, fixes #8
PNRxAf5ef4f9 -
expose all customisation through url params, fixes #3
PNRxA0b7bef2
-
remove fallback placeholder behavior, accept param as no-op for rpdb
PNRxAcompatibility1464c42
-
add badge size option, improve settings layout
PNRxA4b9bf53 -
fix openapi spec
PNRxA676a62f
-
dynamically generate openapi spec
PNRxA5203922
-
remove poster to image migration
PNRxA36277f4 -
deduplicate image handlers and rename poster modules to image
PNRxA0c21886 -
separate poster handler logic from route definitions and extract
PNRxAbuild_app into routes moduleb309110 -
add api docs
PNRxA3ceddb3
-
add available_ratings SQLite fast path to avoid external API calls on
PNRxAcache hits84c880b -
add FREE_KEY_ENABLED env var to override the free API key toggle from
PNRxAthe admin UIeb8ae7b
-
optional cdn redirects to allow caching of requests across paid users
PNRxA331eded -
add /{api_key}/isValid endpoint and ?lang= query parameter
PNRxA2695380 -
add cross-ID cache writes and normalize cache key separators from colons
PNRxAto underscoresa8a0f13 -
add render semaphore to bound concurrent image generation
PNRxAd41428b
-
shorten poster_source values, compact ratings cache suffix, skip no-op
PNRxAicon resize4fcb46a -
shorten setting values, add cache docs
PNRxA58dc9a1 -
add security headers, input length limits, and hardening tests
PNRxAad9e5dd -
add poster support for corner placement, custom directions
PNRxA8762688 -
icon support for all endpoints
PNRxA7f36b83 -
add per-type badge style, poster position, and per-type ratings limit
PNRxAsettingsf0e0245
-
add service request retries
PNRxA65c3047 -
logo and backdrop tabs, cache refactor
PNRxA5d84fe3 -
add logo and backdrop api endpoints
PNRxAa5bc115 -
add optional free api key
PNRxAcb0280f -
serve json error responses for api endpoints
PNRxAbbe973e -
preview endpoint auth, poster serving refactor, and race condition fix
PNRxAin PostersViewf4003d6 -
added poster preview to settings, fetch poster manually
PNRxAc63b398 -
add support for ordering and limiting ratings
PNRxA02c8c3c -
allow logging in with api key to manage individual settings
PNRxA6c38a8d -
added support for fanart posters, added per api and global settings
PNRxAfbc8659