const puppeteer = require('puppeteer');
const fs = require('fs');
const html = `
LLM Documentary
LARGE LANGUAGE MODELS
`;
const TIME_SHIM = `
window.__VTIME_INSTALLED__ = true;
var vtime = 0;
var _origRaf = window.requestAnimationFrame;
var rafCallbacks = []; var rafId = 0;
window.requestAnimationFrame = function(cb){ rafId++; rafCallbacks.push({id: rafId, cb: cb}); return rafId; };
window.__advanceVTime = function(target){
var STEP = 8;
while (vtime < target) {
vtime = Math.min(vtime + STEP, target);
var cbs = rafCallbacks; rafCallbacks = [];
for (var j = 0; j < cbs.length; j++) { try { cbs[j].cb(vtime); } catch(e){} }
}
};
window.__renderFrame = function(target) {
return new Promise(function(resolve) {
window.__advanceVTime(target);
if (typeof _origRaf === 'function') {
_origRaf(function() { _origRaf(resolve); });
} else {
setTimeout(resolve, 0);
}
});
};
`;
(async () => {
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.setViewport({ width: 1920, height: 1080 });
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
const processedHtml = html.replace(/]*>/i, (m) => m + '');
await page.setContent(processedHtml, { waitUntil: 'networkidle0' });
await page.evaluate((t) => window.__renderFrame(t), 1000);
await new Promise(r => setTimeout(r, 100));
await page.screenshot({ path: 'test_canvas.jpg', type: 'jpeg', quality: 100 });
await browser.close();
console.log("Done");
})();