'use strict'; // Assembles a self-contained interactive demo (demo.html) from the REAL renderer.js + params.js + // the shader library, so scrubbing it exercises the exact compositor the player will ship. Two // signage-like images are drawn procedurally (no network assets). `node shared/Transitions/build-demo.js`. const fs = require('fs'); const path = require('path'); const DIR = __dirname; const gen = require('./generate-manifest.js'); const rendererSrc = fs.readFileSync(path.join(DIR, 'renderer.js'), 'utf8'); const paramsSrc = fs.readFileSync(path.join(DIR, 'params.js'), 'utf8'); const shaders = gen.build().map((e) => ({ id: e.id, name: e.name, blurb: e.blurb, params: e.params, src: fs.readFileSync(path.join(DIR, e.file), 'utf8'), })); const DATA = JSON.stringify(shaders); const html = `
The actual WebGL compositor the player will ship — running in your browser (real GPU). Two local images, one shader, scrub progress 0 → 1.
progress 0 = pure A, 1 = pure B. A stays live in uFrom the whole time — no blank seam. Shader source, params, and this compositor are the exact files under shared/Transitions/.