From 161464602e03e18538d13859d3c73c14b69417cf Mon Sep 17 00:00:00 2001 From: "Ezequiel C." Date: Wed, 2 Sep 2026 23:28:53 +0200 Subject: [PATCH] multistreaming: fix scene font paths for Alpine, add session state notes SCENE_FONT defaults in config.js point at Debian's font layout, which does not exist in the Alpine runtime image; drawtext only rendered via fontconfig fallback. Pin the Alpine paths in the Dockerfile env. Also add LAST_STATE.md (E2E test results + approved plan for the OBS-style panel rework) and the OBS reference screenshot for the redesign. Co-Authored-By: Claude Code --- LAST_STATE.md | 99 +++++++++++++++++++++++++++++ reference1.png | Bin 0 -> 67528 bytes services/multistreaming/Dockerfile | 7 +- 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 LAST_STATE.md create mode 100644 reference1.png diff --git a/LAST_STATE.md b/LAST_STATE.md new file mode 100644 index 0000000..cb51b4a --- /dev/null +++ b/LAST_STATE.md @@ -0,0 +1,99 @@ +# LAST_STATE — 2026-09-02 + +Session sign-off snapshot. Read this first when resuming the multistreaming work. + +## 1. Done: multistreaming E2E test (podman) — all passing + +Tested the whole app in rootless podman: built `multistreaming:test` from +`services/multistreaming/Dockerfile`, ran with `--network host`, `AUTH_MODE=local`, volume +`ms-test-data`. + +- HTTP API smoke: health, auth config, providers, register/login/session, `/api/me`, `/api/state`. +- RTMP ingest: published 12s `testsrc2` with host ffmpeg → feed went live in state, cleaned up on unpublish. +- Passthrough fanout: `-c copy` child pushed to a local `ffmpeg -listen 1` RTMP sink on :1936; + sink file probed as h264 1280×720, 12.004s — exact copy, 0 restarts. +- Scene composition: grid scene + text overlay activated → passthrough suspended, composed child + ran; sink file h264 1920×1080 + aac program audio; drawtext overlay confirmed rendered + (white-glyph pixel analysis; fanout log shows the correct filter graph). +- Persistence: accounts/rooms/feeds survived container recreation (volume). + +Scratch scripts: `/tmp/ms_test/` (passthrough.sh, scene.sh, verify-fix.sh, ids.txt…). +Test recipe in Claude memory: `memory/multistreaming-podman-test.md`. +Test container `ms-test` may still be running (panel :8080); teardown: +`podman rm -f ms-test && podman volume rm -f ms-test-data`. + +## 2. Done: Dockerfile font path fix (committed) + +`src/config.js` defaults `SCENE_FONT`/`SCENE_FONT_BOLD` to Debian's +`/usr/share/fonts/truetype/dejavu/`, which does not exist in the Alpine image (fonts live in +`/usr/share/fonts/dejavu/`). drawtext only worked via FFmpeg's fontconfig fallback. +Fixed by setting the Alpine paths as ENV in `services/multistreaming/Dockerfile`. Rebuilt, +re-verified (fanout log shows the correct fontfile, overlay still renders). + +## 3. In progress: OBS-style rework of the web panel (`services/multistreaming/web`) + +Reference image: `reference1.png` (repo root) — an OBS Studio screenshot: +left dock Scenes+Sources, center program canvas, right dock Audio Mixer + Scene Transitions + +Controls, bottom status bar. (Image viewing is broken in this environment; the layout was decoded +via OCR.) + +**User-approved target layout — variant B:** + +``` +┌──────────┬──────────────────────┬───────────────┐ +│ SCENES │ │ CONTROLS │ +│ │ PROGRAM PREVIEW │ Start/Stop │ +│ SOURCES │ (live feed) ├───────────────┤ +│ (media) │ │ Rooms/Vaults │ +│ ├──────────────────────┤ User/Members │ +│ │ MIXER │ TRANSITIONS│ │ +└──────────┴──────────────────────┴───────────────┘ +``` + +- **Left dock**: Scenes + Sources (media feeds) + Destinations (output routing) + Images. +- **Center**: simulated 16:9 program canvas; beneath it Audio Mixer + Scene Transitions panels; + OBS-style slim status bar at the bottom. +- **Right sidebar**: Streaming Controls + app nav (rooms/vaults/user, moved from the left) + + Members. The current left `AppSidebar` and right `RoomSidebar` are both absorbed into this one + right sidebar. +- **Simulated program canvas** (no real video pipeline): render from scene data — grid/PiP layout + math mirroring backend `src/compose.js` (grid cell = floor(W/cols) × floor(H/rows), single live + feed promoted fullscreen, PiP main fullscreen + 480×270 window top-right); slot boxes with feed + names + LIVE badges; text/image overlays at their real coordinates scaled to the canvas + (text: x,y,fontSize,color,bold; image: x,y,width,height,opacity, src `/api/images/:id/file`). + Passthrough mode (no active scene): live feeds in a simple grid. Scene activate crossfades the + canvas (CSS transition keyed on `activeSceneId`). + +**Design decisions already made:** + +1. **Mixer**: active scene → one channel per scene-output with functional audio-routing control + (Program/Silent/Feed via `api.updateSceneOutput`) + animated meter when `runtime.running`. + Passthrough → channels = live feeds, decorative animated meters only (no real levels exist). +2. **Transitions**: "Fade" + duration slider (localStorage, client-side only) controlling the CSS + crossfade of the simulated canvas on scene activate. Real video crossfade = future backend work. +3. **Controls**: Start Streaming (existing `GrantDialog` flow), **Stop Streaming** (wire the + currently unused `api.stopStream` — zero call sites today), per-account grant/live status. + No Studio Mode / Recording / Virtual Camera (no backend equivalents). +4. **Right sidebar**: Controls + NavVaults + NavRooms + NavUser + Members; renders vaults/rooms/user + even without a room open (Controls/Members room-only). +5. **HomeView** unchanged, just rendered in the center column without a left sidebar. +6. Keep prop-drilling + 3s `api.state()` polling (src/lib/use-app.ts); no state rewrite. +7. SceneEditorDialog / ImageUploader / PromptDialogs stay dialogs; only mounting points move. + +**Current codebase facts (from exploration):** + +- Shell: `src/App.tsx` (SidebarProvider > AppSidebar + SidebarInset{header+RoomView|HomeView} + + RoomSidebar; global dialogs at App level). No router; nav via useApp `screen/roomId`. +- Components: `app-sidebar.tsx`, `room-sidebar.tsx`, `room-view.tsx` (stacked cards), `scene-panel.tsx`, + `scene-editor.tsx` (606-line dialog), `dialogs.tsx` (GrantDialog 428-515), `image-upload.tsx`, + `home-view.tsx`, `nav-*.tsx`, `theme-provider.tsx` (`useTheme` unused in UI). +- shadcn ui/ has sidebar/card/dialog/select/switch/toggle-group/badge/tooltip etc. + **Missing: slider** (build `ui/slider.tsx` from the `radix-ui` unified package already in + dependencies — no new npm deps). +- `lib/api.ts` has every endpoint needed; `lib/types.ts` covers all state shapes. +- Dark theme tokens are neutral gray (`src/index.css`); OBS look is dark blue-gray — subtle token + tint planned. + +**What remains:** implement the layout (no code written yet). The full implementation plan +(component-by-component, canvas math, crossfade pattern, styling tokens, order, risks) is in +`~/.claude/plans/starry-tickling-grove.md`. diff --git a/reference1.png b/reference1.png new file mode 100644 index 0000000000000000000000000000000000000000..5e7dd7c83bbfaca322cc34069490e3acfd67e460 GIT binary patch literal 67528 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 N@BtuG{?7Qz{{gzLBLM&a literal 0 HcmV?d00001 diff --git a/services/multistreaming/Dockerfile b/services/multistreaming/Dockerfile index 47f9b12..c1ce9d9 100644 --- a/services/multistreaming/Dockerfile +++ b/services/multistreaming/Dockerfile @@ -35,9 +35,14 @@ COPY --from=web /web/dist ./web/dist # volume is writable without root. RUN mkdir -p /data && chown node:node /data VOLUME ["/data"] +# Font paths must match where Alpine's font-dejavu installs them (the config +# defaults use Debian's /usr/share/fonts/truetype/dejavu layout, which does not +# exist here; drawtext only worked via a fontconfig fallback). ENV DATA_DIR=/data \ RTMP_PORT=1935 \ - HTTP_PORT=8080 + HTTP_PORT=8080 \ + SCENE_FONT=/usr/share/fonts/dejavu/DejaVuSans.ttf \ + SCENE_FONT_BOLD=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf EXPOSE 1935 8080