8602c70eea
Capture pipeline (Playwright recordVideo + injected synthetic cursor + ffmpeg webm->mp4) and a Remotion LiveFilm composition driven by a 20-clip manifest with caption/zoom overlays and a music bed. Includes the capture orchestrator, storm-intel reference scene, pre-render smoke check, and VO script. Pure logic is unit-tested (28 passing). Remaining scene scripts are authored during live capture.
22 lines
676 B
JavaScript
22 lines
676 B
JavaScript
import { readFile, access } from "node:fs/promises";
|
|
import { fileURLToPath } from "node:url";
|
|
import { dirname, join } from "node:path";
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const ROOT = join(__dirname, "..");
|
|
|
|
const manifest = JSON.parse(await readFile(join(ROOT, "src/clips.manifest.json"), "utf8"));
|
|
const missing = [];
|
|
for (const c of manifest.clips) {
|
|
try {
|
|
await access(join(ROOT, "public", c.file));
|
|
} catch {
|
|
missing.push(c.file);
|
|
}
|
|
}
|
|
if (missing.length) {
|
|
console.error(`Missing ${missing.length} clip file(s):\n ${missing.join("\n ")}`);
|
|
process.exit(1);
|
|
}
|
|
console.log(`All ${manifest.clips.length} clip files present.`);
|