<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lumi.git/routers/tmdb.py, branch master</title>
<subtitle>Personal film diary</subtitle>
<id>https://git.tylerhoang.xyz/lumi.git/atom?h=master</id>
<link rel='self' href='https://git.tylerhoang.xyz/lumi.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/lumi.git/'/>
<updated>2026-05-07T01:05:07Z</updated>
<entry>
<title>Add genre tracking and year-in-review improvements</title>
<updated>2026-05-07T01:05:07Z</updated>
<author>
<name>Tyler Hoang</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-05-07T01:05:07Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/lumi.git/commit/?id=ead38fdb13abb406065cef0743d7e411cb27eaf3'/>
<id>urn:sha1:ead38fdb13abb406065cef0743d7e411cb27eaf3</id>
<content type='text'>
Adds genre field to Film model with TMDB enrichment. Genres populate from
TMDB detail fetch during add/edit and bulk enrichment. Genre metadata displays
on film cards, detail page (Production section), stats page (top genres panel),
and year-in-review (by decade and genre breakdowns).

Auto-detects rewatches when adding films via TMDB autocomplete - if a film with
the same TMDB ID already exists in diary, pre-fills rewatch checkbox and count.
Rewatch count now displays on film cards as "Rewatch #N".

Stats page now shows:
- Top genres (most watched)
- Film decades (sorted chronologically)
- Already shows: directors, companions, star distribution, rewatch rate

Year-in-review shows decades and genres alongside monthly activity and companions.

Bulk enrichment endpoint (/data/enrich-posters) now fetches missing genre
metadata along with posters and TMDB IDs.

Co-Authored-By: Claude Haiku 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add TMDB poster picker to film detail page</title>
<updated>2026-05-07T00:20:35Z</updated>
<author>
<name>Tyler Hoang</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-05-07T00:20:35Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/lumi.git/commit/?id=2d298f982408f222ad344b2aa9c18bbe7dc70f12'/>
<id>urn:sha1:2d298f982408f222ad344b2aa9c18bbe7dc70f12</id>
<content type='text'>
- New movie_images() async function in services/tmdb.py fetches poster
  URLs from TMDB /movie/{id}/images endpoint, filtering for English
  and no-text posters only
- New GET /tmdb/posters endpoint returns list of available posters for
  a TMDB ID
- New POST /films/{film_id}/poster endpoint to save selected poster
  (mirrors the stars endpoint pattern)
- Add "Change Poster" button on detail page (only shown if film has a
  TMDB ID) that opens a 3-column grid of posters
- Selected poster gets accent border, main image updates instantly, no
  page reload needed
- Posters are cached per load to avoid refetching on re-open

Co-Authored-By: Claude Haiku 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>init: lumiere film diary</title>
<updated>2026-05-06T19:21:26Z</updated>
<author>
<name>Tyler Hoang</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-05-06T19:21:26Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/lumi.git/commit/?id=e708bec6cd76c2686de4158dde4d04f72a3c300d'/>
<id>urn:sha1:e708bec6cd76c2686de4158dde4d04f72a3c300d</id>
<content type='text'>
</content>
</entry>
</feed>
