#1 Add Plex-ready race + season poster endpoints

已合并
jschoubben 2 周前 将 1 次代码提交从 feat/plex-posters合并至 master
jschoubben 评论于 2 周前

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).
jschoubben2 周前 关闭
该合并请求已作为 f4c6a56d1c 被合并。
登陆 并参与到对话中。
未选择标签
未选择里程碑
未指派成员
1 名参与者
到期时间

未设置到期时间。

依赖工单

此合并请求当前没有任何依赖。

正在加载...
取消
保存
这个人很懒,什么都没留下。