Render the ice as long videos and play them as wallpapers

render_wallpaper.py drives headless Firefox frame by frame (four at a time,
resuming where it stopped), then ffmpeg. Thirty seconds at 30 fps is exactly
one plasma cycle, so frame 900 meets frame 0 and the loop has no seam.

plasma-plugin/dev.emil.video is a minimal Plasma 6 video wallpaper: one file
per screen, filling the screen, looping. H.264 is encoded Baseline because
Qt here decodes through openh264, which rejects High profile and leaves a
frozen frame; a new source also has to be played explicitly.

The #shot hash learned info=0 to hide the on-screen hint for renders.
This commit is contained in:
emil28092005
2026-10-31 01:22:16 +03:00
parent 3f638a286a
commit 92e8b287a3
7 changed files with 193 additions and 0 deletions
+36
View File
@@ -54,6 +54,40 @@ python3 build_plasma.py 10_ice_fish.frag 11_ice_over_fish.frag ice_fish.html
`build_plasma.py` вставляет оба шейдера в шаблон страницы. После правки шейдеров страницу
надо пересобрать — HTML сам по себе не обновляется.
## Обои
Готовые рендеры с рыбами — по файлу на монитор (в репозиторий не входят, они тяжёлые):
| файл | экран | размер |
| --- | --- | --- |
| `~/Videos/wallpapers/ice_fish_2560x1080.mp4` | DP-2, ультравайд | 110 МБ |
| `~/Videos/wallpapers/ice_fish_2560x1440.mp4` | HDMI-A-1 | 112 МБ |
30 секунд, 30 fps, петля бесшовная: кадр 900 совпадает с кадром 0, потому что цикл
плазмы ровно 30 с. Профиль H.264 — **Baseline**: Qt на Fedora декодирует через openh264,
который отвергает High profile и молча оставляет замерший кадр.
Пересобрать:
```sh
python3 render_wallpaper.py ice_fish.html ~/Videos/wallpapers/ice_fish_2560x1440.mp4 2560 1440 30 30
```
Скрипт гонит кадры в headless Firefox по четыре за раз, кладёт их в `*.frames/`
(можно удалить) и кодирует через `h264_nvenc`. Повторный запуск продолжает с места
обрыва.
Обоями видео ставит плагин `dev.emil.video` (исходники — `plasma-plugin/dev.emil.video/`,
установленная копия — `~/.local/share/plasma/wallpapers/dev.emil.video/`). Он проигрывает
файл из своего конфига, заполняя экран, и зацикливает его:
```sh
kpackagetool6 --type Wallpaper -i plasma-plugin/dev.emil.video
```
Дальше — правый клик по рабочему столу → «Настроить рабочий стол…» → тип обоев
Video Wallpaper → путь к файлу. Настройки у каждого экрана свои.
## Проверка
```sh
@@ -73,5 +107,7 @@ python3 -m unittest test_ice
и преломления льда надо переносить во все три файла.
- `debug_fish.frag` + `debug_fish.html` — плоский рендер силуэтов рыб для отладки формы.
- `renders/*.jpg` — картинки для этого README, к сборке отношения не имеют.
- `render_wallpaper.py` — кадры + ffmpeg, длинное видео для обоев.
- `plasma-plugin/dev.emil.video` — минимальный видео-обои плагин для Plasma 6.
- `build.py` собирает `playground.html` со всеми `.frag` подряд, `render.py`/`shot.py` —
старые вспомогательные скрипты.