Changeset ecbfa41 in Klonkt


Ignore:
Timestamp:
06/30/2026 05:23:54 PM (2 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
1d6f9a2
Parents:
28f797d
Message:

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@…>

Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • package-lock.json

    r28f797d recbfa41  
    11{
    22  "name": "klonkt",
    3   "version": "1.0.0-beta.3",
     3  "version": "1.0.0",
    44  "lockfileVersion": 3,
    55  "requires": true,
     
    77    "": {
    88      "name": "klonkt",
    9       "version": "1.0.0-beta.3",
     9      "version": "1.0.0",
    1010      "license": "AGPL-3.0-or-later",
    1111      "dependencies": {
     
    2525        "marked": "^11.1.1",
    2626        "multer": "^1.4.5-lts.1",
     27        "node-webpmux": "^3.2.1",
    2728        "nodemailer": "^6.9.15",
    2829        "sanitize-html": "^2.17.3",
    29         "uuid": "^9.0.1",
    30         "ws": "^8.18.0"
     30        "uuid": "^9.0.1"
    3131      },
    3232      "engines": {
     
    15851585      }
    15861586    },
     1587    "node_modules/node-webpmux": {
     1588      "version": "3.2.1",
     1589      "resolved": "https://registry.npmjs.org/node-webpmux/-/node-webpmux-3.2.1.tgz",
     1590      "integrity": "sha512-MKgpq9nFgo44pIVNx/umD3nkqb2E8oqQTfmstVsfNdx9uV4cX7a4LqA+d8AZd3v5tgJXwENKUFsXNP3bRLP8nQ==",
     1591      "license": "LGPL-3.0-or-later"
     1592    },
    15871593    "node_modules/nodemailer": {
    15881594      "version": "6.10.1",
     
    22552261      "license": "ISC"
    22562262    },
    2257     "node_modules/ws": {
    2258       "version": "8.20.0",
    2259       "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
    2260       "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
    2261       "license": "MIT",
    2262       "engines": {
    2263         "node": ">=10.0.0"
    2264       },
    2265       "peerDependencies": {
    2266         "bufferutil": "^4.0.1",
    2267         "utf-8-validate": ">=5.0.2"
    2268       },
    2269       "peerDependenciesMeta": {
    2270         "bufferutil": {
    2271           "optional": true
    2272         },
    2273         "utf-8-validate": {
    2274           "optional": true
    2275         }
    2276       }
    2277     },
    22782263    "node_modules/xtend": {
    22792264      "version": "4.0.2",
  • package.json

    r28f797d recbfa41  
    3030    "marked": "^11.1.1",
    3131    "multer": "^1.4.5-lts.1",
     32    "node-webpmux": "^3.2.1",
    3233    "nodemailer": "^6.9.15",
    3334    "sanitize-html": "^2.17.3",
Note: See TracChangeset for help on using the changeset viewer.