#1 Add Plex-ready race + season poster endpoints

Zusammengeführt
jschoubben hat 1 Commits von feat/plex-posters nach master vor 2 Wochen zusammengeführt
jschoubben hat vor 2 Wochen kommentiert

Adds two endpoints that return Plex-poster-shaped (1000×1500) PNGs composed in-process:

URL Returns
GET /posters/race/{grand_prix_name}/{season}.png Race poster with checker strips, “FORMULA 1” wordmark, round/year ribbon, GP name, rasterised track outline, race date
GET /posters/season/{season}.png Season poster with “FORMULA 1” + giant year + “WORLD CHAMPIONSHIP”

Examples after deploy:

https://f1-circuits.zurag.be/posters/race/Monaco%20Grand%20Prix/2025.png
https://f1-circuits.zurag.be/posters/race/Mexico%20City%20Grand%20Prix/2023.png
https://f1-circuits.zurag.be/posters/season/2025.png

How it works:

  • posters_service.PostersService.render_race_poster() resolves the GP via existing ErgastService._fetch_season_schedule() + CircuitService.get_circuit_layout_by_ergast_data(), rasterises the SVG with cairosvg, recolours the stroke to white, composes onto a 1000×1500 Pillow canvas with text/strips.
  • Caches results to cache/posters/{season}-{round:02d}-{layout_slug}.png so subsequent hits are file reads.

Dockerfile changes:

  • Adds libcairo2 + fonts-dejavu-core system packages (~15 MB)
  • Adds pillow + cairosvg pip packages
  • Copies the new posters_service.py into the image

Consumer: the new endpoints become url_poster: entries in the Kometa F1 metadata file in the kometa module (separate PR).

Adds two endpoints that return Plex-poster-shaped (1000×1500) PNGs composed in-process: | URL | Returns | |---|---| | `GET /posters/race/{grand_prix_name}/{season}.png` | Race poster with checker strips, "FORMULA 1" wordmark, round/year ribbon, GP name, rasterised track outline, race date | | `GET /posters/season/{season}.png` | Season poster with "FORMULA 1" + giant year + "WORLD CHAMPIONSHIP" | **Examples after deploy:** ``` https://f1-circuits.zurag.be/posters/race/Monaco%20Grand%20Prix/2025.png https://f1-circuits.zurag.be/posters/race/Mexico%20City%20Grand%20Prix/2023.png https://f1-circuits.zurag.be/posters/season/2025.png ``` **How it works:** - `posters_service.PostersService.render_race_poster()` resolves the GP via existing `ErgastService._fetch_season_schedule()` + `CircuitService.get_circuit_layout_by_ergast_data()`, rasterises the SVG with `cairosvg`, recolours the stroke to white, composes onto a 1000×1500 Pillow canvas with text/strips. - Caches results to `cache/posters/{season}-{round:02d}-{layout_slug}.png` so subsequent hits are file reads. **Dockerfile changes:** - Adds `libcairo2` + `fonts-dejavu-core` system packages (~15 MB) - Adds `pillow` + `cairosvg` pip packages - Copies the new `posters_service.py` into the image **Consumer:** the new endpoints become `url_poster:` entries in the Kometa F1 metadata file in the kometa module (separate PR).
jschoubben hat vor 2 Wochen geschlossen
Der Pull Request wurde als f4c6a56d1c zusammengeführt.
Anmelden, um an der Diskussion teilzunehmen.
Kein Label
Kein Meilenstein
Niemand zuständig
1 Beteiligte
Fällig am

Kein Fälligkeitsdatum gesetzt.

Abhängigkeiten

Dieser Pull-Request hat momentan keine Abhängigkeiten.

Laden…
Abbrechen
Speichern
Hier gibt es bis jetzt noch keinen Inhalt.