-
Notifications
You must be signed in to change notification settings - Fork 0
Comparing changes
Open a pull request
base repository: splitbrain/ndemo
base: cdp
head repository: splitbrain/ndemo
compare: main
- 7 commits
- 16 files changed
- 3 contributors
Commits on Mar 29, 2026
-
Generate SRT subtitles during render and as standalone command
Add SRT subtitle generation that splits narration into readable cues (~80 chars) and times them proportionally across audio duration. Includes `ndemo subtitles` CLI command for generating SRT files from existing playbooks without re-rendering. Also saves videoDuration to playbooks for accurate standalone subtitle timing.
Configuration menu - View commit details
-
Copy full SHA for 5eb383d - Browse repository at this point
Copy the full SHA 5eb383dView commit details
Commits on Mar 30, 2026
-
Remove playbooks directory from git tracking
Add playbooks/ to .gitignore and untrack existing playbook files.
Configuration menu - View commit details
-
Copy full SHA for 30b8b94 - Browse repository at this point
Copy the full SHA 30b8b94View commit details -
Add video title card support for better browser/Slack previews
Renders an HTML title card as the first frames of the video so browsers and Slack show a meaningful preview instead of a blank frame. The card respects the playbook's colorScheme (light/dark), plays no audio, and is configured via an optional titleCard section in the playbook YAML. https://claude.ai/code/session_011gwGxEt5qXnwcEciRe7HwD
Configuration menu - View commit details
-
Copy full SHA for 6025668 - Browse repository at this point
Copy the full SHA 6025668View commit details -
Configuration menu - View commit details
-
Copy full SHA for b314f7a - Browse repository at this point
Copy the full SHA b314f7aView commit details -
Fix title card not visible in rendered video
Three issues prevented the title card from displaying correctly: 1. The addInitScript zoom (compensating for the scaled viewport) was applied to the title card's body which used 100vw/100vh, causing it to overflow the viewport. Fixed by sizing the body to calc(100vw / zoom) so it fills exactly the viewport after zoom. 2. The screencast started while the app page was displayed, making the app the first captured frame instead of the title card. Fixed by deferring the app navigation to after the title card. 3. The ffmpeg concat encoder produced a VFR stream with a single frame for the 3-second title card, which most players couldn't seek or display correctly. Fixed by adding -r fps to force constant frame rate output.
Configuration menu - View commit details
-
Copy full SHA for ac5e687 - Browse repository at this point
Copy the full SHA ac5e687View commit details -
Fix rendered video truncating segments with static content
Two issues caused segments to be cut short or missing in rendered videos: 1. The audio track only accounted for title card duration, not the navigation time to the app URL. Since ffmpeg uses -shortest, the video was truncated by however long navigation took. Fix: measure actual wall-clock pre-segment time (title card + navigation) and use that for the audio silence gap. 2. CDP screencast only emits frames on visual changes. Static segments (e.g. wait actions) produced no frames, so the last frame was held for only 1/30s instead of the remaining video duration. Fix: compute expected total duration and hold the last frame accordingly. Co-Authored-By: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 3e4db9c - Browse repository at this point
Copy the full SHA 3e4db9cView commit details -
Replace CSS zoom with real browser zoom via playwright-zoom extension
CSS zoom (body.style.zoom) breaks viewport units — 100vh resolves to the full viewport height before zoom is applied, then gets scaled and overflows. This required workarounds like calc(100vh / renderZoom) for the title card and dividing cursor positions by zoom. Instead, use chrome.tabs.setZoom() through the playwright-zoom Chrome extension, which behaves like Ctrl+/- browser zoom: the logical viewport shrinks, vh/vw units adjust correctly, and CDP screencast still captures at full physical resolution. Key changes: - Add playwright-zoom dependency for the bundled Chrome extension - Add src/zoom.ts helper to locate the extension and set zoom - Switch renderer and daemon to launchPersistentContext (required for extensions) with --headless=new for headless rendering - Remove all CSS zoom: init scripts, body.style.zoom assignments, title card calc() hack, and cursor position zoom division - Simplify setup in renderer to use single context instead of separate setup + recording contexts with storageState transfer
Configuration menu - View commit details
-
Copy full SHA for d60e17e - Browse repository at this point
Copy the full SHA d60e17eView commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff cdp...main