// Prova locale di un copione del trailer, senza la VM: un finto «d» col solo necessario, una schermata per battuta. // OUT=/tmp/prova COPIONE=./trailer-extended.mjs node video/prova-locale.mjs import { chromium } from 'playwright'; import { staticServer } from '../tests/helpers.mjs'; const server = await staticServer(); const browser = await chromium.launch({ args: ['--autoplay-policy=no-user-gesture-required', '--use-gl=angle', '--use-angle=swiftshader', '--enable-unsafe-swiftshader'] }); const out = process.env.OUT; try { const page = await browser.newPage({ viewport: { width: 1600, height: 900 } }); page.on('pageerror', e => console.log('ERR', e.message)); const orig = page.goto.bind(page); page.goto = url => orig(url.replace('http://127.0.0.1:8000/', `http://127.0.0.1:${server.port}/`)); const mod = await import(process.env.COPIONE ?? './trailer.mjs'); const t0 = Date.now(); let n = 0; const d = { page, vm: () => {}, cue: async id => { console.log(((Date.now() - t0) / 1000).toFixed(1), id); setTimeout(() => page.screenshot({ path: `${out}/tr-${String(++n).padStart(2, '0')}-${id}.png` }), id === 'buio' ? 5000 : Number(process.env.SCATTO ?? 3000)); } }; await mod.setup(d); await mod.run(d); console.log('fine', ((Date.now() - t0) / 1000).toFixed(1)); } finally { await browser.close(); server.kill(); }