feat(video-cover): add VideoCoverService + node-webpmux (animated WebP / video -> muted loop MP4)
Foundation for Safari-smooth animated covers. node-webpmux (pure JS/WASM, NO native deps ->
installs everywhere, never breaks npm ci) decodes an animated WebP into RGBA frames; the bundled
ffmpeg-static encodes a muted H.264 loop MP4 + JPG poster. A real uploaded video goes straight
through ffmpeg. Best-effort: returns null -> caller keeps the still image. Pipeline verified
(animated webp -> valid 240x240 H.264 mp4 + poster).
- package.json / package-lock.json — node-webpmux 3.2.1
- src/services/VideoCoverService.js — isAnimatedWebp / animatedWebpToVideo / videoToLoop
Co-Authored-By: Claude <noreply@…>