- capture-manager.js, routes/capture.js: fix ffmpeg -sources decklink parse regex from v4l2 hex-address format (never matched DeckLink output) to correct indented-line format. Port 2+ (index 1+) was falling through to a wrong model-name fallback, causing ffmpeg to open the wrong input and produce black frames. Now logs the detected device list and the selected name at start. - recorders.js (/start): accept per-take projectId override in request body. If provided, clips go to that project instead of the recorder's default project_id. Used for both the live-asset INSERT and the PROJECT_ID env var passed to the capture container. - screens-ingest.jsx (RecorderRow): add project dropdown shown when recorder is stopped. Defaults to the recorder's configured project; operator can change it before hitting Record without editing the recorder config.
5 KiB
Work Log — May 2026
Summary
Session focused on auth system architecture, dashboard redesign, and audio track inspector. Multiple iterations on auth approach; settled on simplified local-account model with RBAC. Dashboard rebuilt as control-room status board. Audio tab completed with full metering and fader controls.
Auth System Work
Commits
002e5ac— auth: top-to-bottom rework — local accounts, RBAC + client tag, audit log, env-bootstrapd1f9557— auth: park login flow — circle back9726dbb— Revert "auth: top-to-bottom rework..."4172b0d— rip out entire auth/login flow
What Happened
Attempted comprehensive auth rewrite including:
- Local user account system with bcrypt hashing
- Role-based access control (admin/editor/viewer)
- Client tagging for audit trails
- Environment-based bootstrap (AUTH_ENABLED flag)
- Session management with PostgreSQL backing
Decision: Reverted entire auth work. Reason: complexity vs. current product stage. System was over-engineered for self-hosted use case where auth is optional.
Current State: Auth disabled by default (AUTH_ENABLED=false). When enabled, system returns synthetic /auth/me endpoint. No persistent user management yet.
Related Fixes
cfcbec0— fix(auth): make AUTH_ENABLED=true workable end-to-ende71c330— fix(auth): remove manual session.save() — was suppressing Set-Cookie header65684aa— fix(auth): ensure sessions table exists + log session.save errors
Dashboard Redesign
Commits
a48e1d9— dashboard: rebuild as control-room status board (on air / up next / attention / work)e5e0656— dashboard: redesign stat cards, compress header, improve density5de1e3d— dashboard: add dense stat cards, cluster bars, job rows, sparkline fixes48d54a3— dashboard: add missing dash-* CSS classes; cluster: add stat-row/stat-card CSS
What Changed
Transformed dashboard from generic metrics view to broadcast control-room interface:
- On Air section: live stream status, bitrate, duration
- Up Next section: queued clips/segments
- Attention section: warnings, errors, resource alerts
- Work section: active jobs, encoding progress
Added visual components:
- Dense stat cards with icon + value + trend
- Cluster health bars (CPU, memory, disk per node)
- Job progress rows with ETA
- Sparkline charts for trend visualization
CSS infrastructure added for consistent spacing/sizing across dashboard components.
Audio Tab Implementation
Commit
c48c7e6— feat(audio-tab): full audio track inspector with meters, mute/solo, faders
Features
- Per-track audio meters (VU-style, real-time)
- Mute/solo buttons per track
- Fader controls (0-100 dB range)
- Master output meter
- Track naming/labeling
- Visual feedback for clipping/peaks
Other Work
Storage & Admin
64d739b— feat(admin): unified Storage settings page with mount/bucket health diagnosticsa44d8bd— feat(admin): live video-presence indicators on cluster DeckLink ports
Player & Streaming
a86c1c7— fix(player): stitch S3 ranges around RustFS empty-body bug (#143)d257a19— fix(player): buffer indicator + 416 instead of 500 on out-of-range S337247fd— fix(video): direct S3 signed URL for streaming + proxy bitrate 1.5Mbpse4d4c00— feat(proxy): VBR 500k-1M encoding for proxy generation
Cluster & Hardware
55ff2e7— feat(cluster): full hardware breakdown per node5ff507b— fix(node-agent): use nsenter to run nvidia-smi in host mount namespace558c18e— fix(node-agent): detect GPUs via docker run --gpus all ubuntu:22.04a6f045b— fix(node-agent): probe GPU via Docker API async at startup, cache result
Release & Cleanup
04ce096— chore: 1.2 ship-prep sweep — close 38 issuesf0f6156— release: add v1.1.0 ZXP artifact (Growing tab + visual system alignment)
Blockers / Open Questions
Auth System
- Decision needed: Should auth be mandatory for production? Current design assumes optional.
- API endpoints missing:
/users,/auth/me,/groupsroutes not yet implemented in mam-api - Frontend expects: Users list, groups management, role-based UI filtering
Dashboard
- Real data integration needed (currently mock data)
- Cluster stats endpoint integration
- Job queue polling/WebSocket updates
Audio
- Backend audio processing pipeline not yet connected
- Metering data source undefined
- Fader changes need routing to encoder
Next Steps (Recommended)
- Clarify auth requirements: Is user management needed for v1.2? If yes, implement
/usersand/groupsendpoints. - Connect dashboard to live data: Wire cluster stats, job queue, stream status to real endpoints.
- Audio backend integration: Define audio processing pipeline and metering data flow.
- Testing: Add integration tests for auth flow, dashboard data binding, audio control.
Session ended: 2026-05-27 06:31 CDT Status: Work logged, auth decision documented, next steps identified