📺 TRMNL – Meme dnia
====================
Cel
----
Automatyczne pobieranie najpopularniejszego mema z memy.pl, przygotowanie
go w formatach zgodnych z ekranami TRMNL i publikacja przez Tailscale Funnel.
Skrypty i lokalizacja
---------------------
- repozytorium: `/home/gg83/trmnl_screens`
- katalog wyjściowy: `/home/gg83/trmnl_out/meme`
- skrypt uruchamiający: `update_meme.sh`
(wywołuje `scripts/fetch_memy_pl.sh` z repozytorium)
- zależności: `ffmpeg`, `jq`, dostęp do Tailscale Funnel
Uruchomienie ręczne
-------------------
```
cd ~/trmnl_out/meme
PUBLIC_BASE_URL=https://debian.tail64eed3.ts.net/meme ./update_meme.sh
```
Skrypt:
1. pobiera stronę główną memy.pl i iteruje po kafelkach,
2. odrzuca memy o zbyt małej rozdzielczości (<600×500) lub zbyt pionowe,
3. zapisuje oryginał `meme_YYYY-MM-DD.jpg` oraz metadane `meme_today.json`,
4. generuje trzy formaty wyjściowe:
- `meme_latest.jpg` – podgląd kolorowy 1200×900 (letterbox),
- `meme_latest.png` – docelowy obraz 800×480, skala szarości (8-bit),
- `meme_latest.bmp` – wariant 1-bit z ditheringiem (opcjonalny).
Dodatkowo zachowuje kopię oryginału: `meme_source.jpg`.
5. Aktualizuje `meme_today.json`, dopisując adresy publiczne (preview, PNG, BMP).
Pliki i URL-e
-------------
Po każdorazowym uruchomieniu dostępne są:
- `https://debian.tail64eed3.ts.net/meme/meme_latest.jpg`
- `https://debian.tail64eed3.ts.net/meme/meme_latest.png`
- `https://debian.tail64eed3.ts.net/meme/meme_latest.bmp`
- `https://debian.tail64eed3.ts.net/meme/meme_today.json`
Rekomendacja TRMNL
-------------------
- **Najlepsza jakość**: użyj oficjalnego pluginu **Image Display** i wskaż
`https://debian.tail64eed3.ts.net/meme/meme_latest.png` (grayscale 8-bit).
PNG zachowuje więcej tonów niż BMP 1-bit i minimalizuje „siatki”.
- Jeśli chcesz porównać wygląd 1-bit: podaj URL `meme_latest.bmp`.
- Własny layout (`meme.html` w repo) działa tak samo – `
` pobiera PNG,
brak stopki w HTML (wszystko jest w obrazie).
Automatyzacja
-------------
- Jednostki systemd znajdują się w `~/.config/systemd/user/trmnl-meme.service`
oraz `~/.config/systemd/user/trmnl-meme.timer`. Timer ma `OnCalendar=*-*-* 05:00`
i `Persistent=true`, dzięki czemu nadrobi pominięte przebiegi po przerwie.
- Aktywacja: `systemctl --user enable --now trmnl-meme.timer`. Jednorazowy test:
`systemctl --user start trmnl-meme.service`.
- Weryfikacja logów: `journalctl --user-unit=trmnl-meme.service --since "today 05:00"`.
Wnioski / zalecenia z dokumentacji TRMNL
----------------------------------------
- TRMNL przy Image Display redukuje obraz do 1-bit – stąd charakterystyczny dithering.
- Lepiej sprowadzić obraz do docelowej rozdzielczości przed wysłaniem (tu: 800×480).
- Dithering Floyd–Steinberg powoduje wzory „kratek”; wariant 8-bit (PNG) wygląda lepiej,
choć urządzenie wciąż wykona własną redukcję.
- W prywatnych layoutach TRMNL obrazy `
`
zachowują oryginalne barwy – plugin JSON + layout to alternatywa dla Image Display.
Uwagi
-----
- `meme_today.json` w polach `image_*` przechowuje ścieżki lokalne i URL-e
(preview/PNG/BMP) – można je wykorzystać w innych integracjach.
- Skrypt odrzuca memy, które nie spełniają wymagań (np. pionowe). Jeśli przez kilka prób
żaden mem nie przejdzie filtrów, nie generuje nowych plików.
- W razie potrzeby dodaj rozmycie/kontrast w pipeline (sekcja ffmpeg) i ponownie
uruchom skrypt.