dragonflight/services/mam-api/src/routes
Claude a2790601c9 feat(library): first-frame poster thumbnail for live recordings
Replace the HLS 'connecting…' player in the library with a real frame grabbed
from the start of the recording, while the recording is still live.

Flow:
- recorders.js already pre-creates the asset as status='live' + ASSET_ID env
- capture-manager.start() fires _publishLiveThumbnail() (non-blocking): polls
  /live/<id> for the first seg-*.ts, extracts frame 0 via ffmpeg (scaled JPEG,
  yuvj420p), uploads to S3 thumbnails/<id>.jpg, then POSTs the key to mam-api
- new mam-api POST /assets/:id/live-thumbnail sets thumbnail_s3_key on the still
  -live row (status untouched); idempotent no-op once finalized
- visuals.jsx AssetThumb: for live assets, show the static poster once the key /
  signed URL is available, else fall back to the live HLS preview. Pulsing LIVE
  border kept either way
- POST /assets gains an optional status param (default 'processing'); 'live'
  skips the proxy/thumbnail queue
- capture /stop route now finalizes the pre-created asset by id (guarded) instead
  of POSTing a duplicate

🤖 Generated with Claude Code
2026-06-02 15:21:05 +00:00
..
ampp.js feat: AMPP folder sync integration — pre-create folder hierarchy on upload, expose lookup endpoint for Script Task: ampp.js 2026-04-18 13:42:08 -04:00
assets.js feat(library): first-frame poster thumbnail for live recordings 2026-06-02 15:21:05 +00:00
auth.js fix(mam-api): harden TOTP login flow + tighten Google domain check 2026-05-30 12:52:53 +00:00
bins.js fix(mam-api): close cross-project authz gaps in assets/bins/jobs/upload 2026-05-30 12:52:29 +00:00
capture.js feat(mam-api): finish per-project authz on the deferred routers 2026-05-30 03:48:02 +00:00
cluster.js fix/feat: recorder finalize-grace + codec validation, cluster mem/version, library download 2026-05-31 18:34:36 -04:00
comments.js feat(mam-api): finish per-project authz on the deferred routers 2026-05-30 03:48:02 +00:00
groups.js rip out entire auth/login flow 2026-05-27 03:39:58 +00:00
imports.js feat(mam-api): finish per-project authz on the deferred routers 2026-05-30 03:48:02 +00:00
jobs.js feat(jobs): surface playout-stage queue in Jobs screen 2026-05-31 12:06:08 -04:00
metrics.js rip out entire auth/login flow 2026-05-27 03:39:58 +00:00
playout.js feat(playout): redesigned MCR screen + SCTE-35 end-to-end 2026-05-31 19:58:02 -04:00
projects.js feat(mam-api,web-ui): per-project RBAC (v2 auth layer) 2026-05-30 02:37:36 +00:00
recorders.js fix(deltacast-bridge): call VHD_SetBiDirCfg before board open + set channel SDI mode 2026-06-02 11:23:39 +00:00
schedules.js rip out entire auth/login flow 2026-05-27 03:39:58 +00:00
sdk.js rip out entire auth/login flow 2026-05-27 03:39:58 +00:00
sequences.js feat(mam-api): finish per-project authz on the deferred routers 2026-05-30 03:48:02 +00:00
settings.js feat(settings/growing): storage warning, SMB auth + CIFS mount, per-recorder growing 2026-05-31 14:50:36 -04:00
storage.js feat(settings/growing): storage warning, SMB auth + CIFS mount, per-recorder growing 2026-05-31 14:50:36 -04:00
system.js rip out entire auth/login flow 2026-05-27 03:39:58 +00:00
tokens.js feat(auth): bound-hostname tokens for node-agent + return role from /me 2026-05-27 19:27:59 -04:00
upload.js fix(mam-api): close cross-project authz gaps in assets/bins/jobs/upload 2026-05-30 12:52:29 +00:00
users.js feat(auth-ui): interactive permissions matrix, admin 2FA reset, Downloads button 2026-05-30 15:59:27 +00:00