← back to Consulting Rentv Com
RENTV audit walkthrough video: portal screen-capture + Steve HeyGen avatar PIP pipeline
35e7e99d5b93d7e4c97c65ccf7c84211ac9b6573 · 2026-07-20 11:15:42 -0700 · Steve Abrams
- capture.mjs: absolute-timeline portal recorder (isolated Chromium, map-resize fix, crash-resilient)
- compose.py: portal A-roll + gold-framed avatar PIP + per-tab lower-third chips + title/outro
- narration.json (16 tabs) + timing.json (whisper-aligned per-tab timestamps)
- untrack heavy working media from git (kept on disk); deliverable at public/videos/rentv-full-audit-walkthrough.mp4
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Files touched
M .gitignoreD data/audit-video/315fa21edf3048048ba7aa24de23a7c4.mp4M data/audit-video/capture.mjsD data/audit-video/final.mp4D data/audit-video/main.mp4D data/audit-video/outro.mp4D data/audit-video/steve-narration.mp4D data/audit-video/title.mp4
Diff
commit 35e7e99d5b93d7e4c97c65ccf7c84211ac9b6573
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Mon Jul 20 11:15:42 2026 -0700
RENTV audit walkthrough video: portal screen-capture + Steve HeyGen avatar PIP pipeline
- capture.mjs: absolute-timeline portal recorder (isolated Chromium, map-resize fix, crash-resilient)
- compose.py: portal A-roll + gold-framed avatar PIP + per-tab lower-third chips + title/outro
- narration.json (16 tabs) + timing.json (whisper-aligned per-tab timestamps)
- untrack heavy working media from git (kept on disk); deliverable at public/videos/rentv-full-audit-walkthrough.mp4
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
.gitignore | 11 ++++++
.../315fa21edf3048048ba7aa24de23a7c4.mp4 | Bin 91661470 -> 0 bytes
data/audit-video/capture.mjs | 41 +++++++++++++--------
data/audit-video/final.mp4 | Bin 97789623 -> 0 bytes
data/audit-video/main.mp4 | Bin 97659822 -> 0 bytes
data/audit-video/outro.mp4 | Bin 64993 -> 0 bytes
data/audit-video/steve-narration.mp4 | Bin 91661470 -> 0 bytes
data/audit-video/title.mp4 | Bin 65798 -> 0 bytes
8 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/.gitignore b/.gitignore
index 3bebb33..f2516f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,14 @@ dist/
build/
.next/
reports/
+
+# audit-video pipeline — heavy media stays on disk, not in git
+data/audit-video/*.mp4
+data/audit-video/*.webm
+data/audit-video/*.wav
+data/audit-video/rec/
+data/audit-video/shots/
+data/audit-video/verify/
+data/audit-video/chips/
+data/audit-video/315*.mp4
+public/videos/rentv-full-audit-walkthrough.mp4
diff --git a/data/audit-video/315fa21edf3048048ba7aa24de23a7c4.mp4 b/data/audit-video/315fa21edf3048048ba7aa24de23a7c4.mp4
deleted file mode 100644
index ddf239a..0000000
Binary files a/data/audit-video/315fa21edf3048048ba7aa24de23a7c4.mp4 and /dev/null differ
diff --git a/data/audit-video/capture.mjs b/data/audit-video/capture.mjs
index 00618d9..b05be9b 100644
--- a/data/audit-video/capture.mjs
+++ b/data/audit-video/capture.mjs
@@ -61,7 +61,8 @@ async function main() {
const shotsDir = path.join(HERE, 'shots');
fs.mkdirSync(record ? recDir : shotsDir, { recursive: true });
- const browser = await chromium.launch({ channel: 'chrome', headless: false });
+ // bundled Chromium (isolated from system/OpenClaw Chrome); headless is stable for recordVideo
+ const browser = await chromium.launch({ headless: true, args: ['--disable-dev-shm-usage'] });
const ctx = await browser.newContext({
viewport: { width: 1920, height: 1080 },
deviceScaleFactor: 1,
@@ -92,21 +93,29 @@ async function main() {
await openOnly(page, SEGS[0].id); // summary already on screen at t=0
await sleep(300);
const T0 = Date.now();
- for (let i = 0; i < SEGS.length; i++) {
- const id = SEGS[i].id;
- const offset = (i === 0 ? 0 : starts[id]) * 1000;
- const nextOffset = (i + 1 < SEGS.length ? starts[SEGS[i + 1].id] * 1000 : audioEnd * 1000);
- while (Date.now() - T0 < offset) await sleep(50);
- if (i !== 0) await openOnly(page, id);
- await readScroll(page, id, T0 + nextOffset);
- console.log(`tab ${id}: ${(offset / 1000).toFixed(1)}s -> ${(nextOffset / 1000).toFixed(1)}s`);
- }
const video = page.video();
- await ctx.close();
- const vp = await video.path();
- const dest = path.join(recDir, 'portal-walk.webm');
- fs.renameSync(vp, dest);
- console.log('VIDEO', dest);
- await browser.close();
+ try {
+ for (let i = 0; i < SEGS.length; i++) {
+ const id = SEGS[i].id;
+ const offset = (i === 0 ? 0 : starts[id]) * 1000;
+ const nextOffset = (i + 1 < SEGS.length ? starts[SEGS[i + 1].id] * 1000 : audioEnd * 1000);
+ while (Date.now() - T0 < offset) await sleep(50);
+ try {
+ if (i !== 0) await openOnly(page, id);
+ await readScroll(page, id, T0 + nextOffset);
+ } catch (e) {
+ console.log(`tab ${id}: recovered from error (${e.message.slice(0, 40)}) — holding`);
+ while (Date.now() - T0 < nextOffset) await sleep(100);
+ }
+ console.log(`tab ${id}: ${(offset / 1000).toFixed(1)}s -> ${(nextOffset / 1000).toFixed(1)}s`);
+ }
+ } finally {
+ await ctx.close();
+ const vp = await video.path();
+ const dest = path.join(recDir, 'portal-walk.webm');
+ fs.renameSync(vp, dest);
+ console.log('VIDEO', dest);
+ await browser.close();
+ }
}
main().catch((e) => { console.error(e); process.exit(1); });
diff --git a/data/audit-video/final.mp4 b/data/audit-video/final.mp4
deleted file mode 100644
index c7948fe..0000000
Binary files a/data/audit-video/final.mp4 and /dev/null differ
diff --git a/data/audit-video/main.mp4 b/data/audit-video/main.mp4
deleted file mode 100644
index 525085f..0000000
Binary files a/data/audit-video/main.mp4 and /dev/null differ
diff --git a/data/audit-video/outro.mp4 b/data/audit-video/outro.mp4
deleted file mode 100644
index 0c5fc55..0000000
Binary files a/data/audit-video/outro.mp4 and /dev/null differ
diff --git a/data/audit-video/steve-narration.mp4 b/data/audit-video/steve-narration.mp4
deleted file mode 100644
index ddf239a..0000000
Binary files a/data/audit-video/steve-narration.mp4 and /dev/null differ
diff --git a/data/audit-video/title.mp4 b/data/audit-video/title.mp4
deleted file mode 100644
index 8d1aa7e..0000000
Binary files a/data/audit-video/title.mp4 and /dev/null differ
← 06e256f auto-save: 2026-07-20T11:01:36 (1 files) — data/audit-video/
·
back to Consulting Rentv Com
·
auto-save: 2026-07-20T11:31:52 (8 files) — data/audit-video/ e24fb26 →