website: the laptop screen moves - six real apps behind the cut-out frame
gates / gates (push) Failing after 7m17s

The operator recorded the six scenes and ruled on their length: use them whole,
"they had been cut as I liked them". Jellyfin, Tandoor, OnlyOffice, Immich,
RomM, Paperless, 0.6s crossfades, 36.6s looping at 904x556.

- hero-clip.mp4 (1 134 KB) + hero-clip.webm (1 295 KB) + hero-poster.webp
  (53 KB), one set for both languages: the recordings are the same on / and /en/.
- The hero <video> sits in the frame's cut-out hole at z-index 1, the frame above
  it at 2. No autoplay attribute: the page's script starts it when the hero is on
  screen, pauses it when it leaves, and never starts it under
  prefers-reduced-motion. With JS off the poster stays.
- make_hero_clip.py reads each scene's own length (ffprobe) instead of cutting
  every one to a fixed window, and the xfade offsets count from the running sum
  minus one fade per transition already made.
- site.css ?v=26 on all 22 pages.

NOT verified: playback in this workstation's Chrome, whose media pipeline loads
nothing at all today (a 1 KB generated WAV blob stalls the same way, with no
error) - which rules the clip out as the cause. Geometry, layering and the
poster frame were verified in the browser.

Jellyfin, Paperless and RomM were filmed on those projects' own public demo
sites; the films in the Jellyfin scene are public-domain prints.
This commit is contained in:
2026-10-12 12:39:31 +02:00
parent 7733d7b754
commit b0ef27e914
32 changed files with 216 additions and 52 deletions
+16
View File
@@ -1,3 +1,19 @@
## 2026-10-12 (night) — make_hero_clip.py: scenes keep their own length
- **`--seconds` is no longer a fixed window.** Each scene now plays its full recorded length, read
per file with `ffprobe` (operator ruling 2026-10-12: *„use the full length for all of them, they
had been cut as I liked them”* — the raw file IS the edit). `--seconds N` stays as a cap, for
trying a shorter loop; `0` (the default) means full length.
- The xfade offsets are computed from the running sum of the scenes so far **minus one fade per
transition already made** — xfade measures its offset on the chain it is handed, which is
shorter than the raw sum. With equal-length scenes the old `i * (seconds - FADE)` was the same
number; with unequal ones it is not.
- **Output is `hero-clip.mp4` / `.webm` / `hero-poster.webp`** — no language suffix, because the
same recordings serve `/` and `/en/`. `--lang hu` puts `-hu` back if the two ever differ.
- Six real scenes, 36.6s after the fades: **mp4 1 134 KB, webm 1 295 KB, poster 53 KB.** Three
times the 11.4s trial, as expected — the hero is the only page that loads it, and only once it
is on screen.
## 2026-10-12 (evening) — make_hero_clip.py: the home page's laptop clip
- `scripts/make_hero_clip.py` assembles the hero clip from the operator's raw app recordings: