[object Object]

← 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

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 →