Spaces:
Paused
Paused
Commit History
-
Fix tests/upgrade.rs: convert from SQLite to Postgres, drop dead common:: import
FTA7700a0d6389
-
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 -
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
-
feat: migrate existing cache keys for badge shape/background (v003)
PNRxAAdding the shape/background suffixes orphaned every previously cached image. Add a v003 data upgrade that rewrites existing image_meta cache keys and cache filenames, inserting the defaults (.shr.bgd — rounded, default background) immediately after the badge size token, so existing renders stay valid instead of being regenerated. - Reorder the poster suffix so shape/background always sit right after the badge size (before the optional split token), giving the migration a single uniform anchor across all image types. - DB + filesystem steps mirror v001/v002; idempotent via an '.bg' guard and the upgrades table. Covered by unit tests (filename rewriting) and integration tests (DB + filesystem across all image types). - Update v002's full-pipeline test expectations, which now also run v003.1367f50 -
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
-
merge main
PNRxA5fac6c0
-
initial trakt implementation
PNRxA7f22b24 -
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
-
redact api keys in logs, limit image decode size, fix ip extraction, add
PNRxAreferrer-policy headerbe73249
-
large refactor to prioritise tmdb logos and backdrops, then fall back to
PNRxAfanart, fixes #10094c13f -
change 0 ratings to return no ratings instead of max ratings, fixes #11
PNRxA3a59cbc
-
expose all customisation through url params, fixes #3
PNRxA0b7bef2
-
refactor to use explicit enum types instead of strings
PNRxAb8d53ae
-
remove fallback placeholder behavior, accept param as no-op for rpdb
PNRxAcompatibility1464c42 -
update isvalid test
PNRxAa74a2f3
-
add badge size option, improve settings layout
PNRxA4b9bf53
-
deduplicate image handlers and rename poster modules to image
PNRxA0c21886
-
return 404 instead of 500 when no poster/logo/backdrop image is
PNRxAavailable9b49abe -
set cache headers on error
PNRxAd753965 -
update cache redirect test
PNRxA5829665 -
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 -
add EXTERNAL_CACHE_ONLY env var to skip most disk writes when behind a
PNRxACDN4256175 -
add ?imageSize= parameter with scaled badges
PNRxA2774836
-
optional cdn redirects to allow caching of requests across paid users
PNRxA331eded -
add /{api_key}/isValid endpoint and ?lang= query parameter
PNRxA2695380 -
added default badge style, regenerate example images
PNRxA030ff87 -
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 -
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