📺 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.