import fs from 'fs'; import path from 'path'; import puppeteer from 'puppeteer-core'; const BASE_DIR = '/Users/moritz/src/infrapuzzle/projects/sasch40'; const ARTIFACTS_DIR = '/Users/moritz/.gemini/antigravity/brain/26049ae8-3106-42e0-922f-356dbbfe162a'; // Helper to get base64 data URI function getBase64Image(filePath) { const fullPath = path.isAbsolute(filePath) ? filePath : path.join(BASE_DIR, filePath); if (!fs.existsSync(fullPath)) { console.warn(`File not found: ${fullPath}`); return ''; } const ext = path.extname(fullPath).toLowerCase(); let mime = 'image/jpeg'; if (ext === '.png') mime = 'image/png'; if (ext === '.svg') mime = 'image/svg+xml'; const data = fs.readFileSync(fullPath); return `data:${mime};base64,${data.toString('base64')}`; } async function generatePDF() { console.log('🎨 Generating printable Mittelalter Retro PDF for Saschas Kronkorken Kreuzzug...'); // 1. Assets const saschaPortrait = getBase64Image('frontend/public/assets/characters/sascha/portrait_v2.jpg'); const qrCode = getBase64Image('qrcode_game.png'); // Mini avatars for entourage strip const entourage = [ { name: 'Königin Verena', img: getBase64Image('frontend/public/assets/characters/verena/portrait_v2.jpg') }, { name: 'Saskia', img: getBase64Image('frontend/public/assets/characters/saskia/portrait_v2.jpg') }, { name: 'Maja', img: getBase64Image('frontend/public/assets/characters/maja/portrait_v2.jpg') }, { name: 'Miriam', img: getBase64Image('frontend/public/assets/characters/miriam/portrait_v2.jpg') }, { name: 'Markus (Vater)', img: getBase64Image('frontend/public/assets/characters/markus/portrait.jpg') }, { name: 'NAT (Josef)', img: getBase64Image('frontend/public/assets/characters/nat/portrait_v2.jpg') }, { name: 'Lutz (ZTUL)', img: getBase64Image('frontend/public/assets/characters/lutz/portrait_v2.jpg') }, { name: 'Armend', img: getBase64Image('frontend/public/assets/characters/armend/portrait_v2.jpg') }, { name: 'Amy', img: getBase64Image('frontend/public/assets/characters/amy/portrait.jpg') }, { name: 'Mane', img: getBase64Image('frontend/public/assets/characters/mane/portrait_v2.jpg') }, { name: 'Hansi', img: getBase64Image('frontend/public/assets/characters/hansi/portrait_v2.jpg') }, { name: 'Mario', img: getBase64Image('frontend/public/assets/characters/mario/portrait_v2.jpg') }, { name: 'Flo Maier', img: getBase64Image('frontend/public/assets/characters/flo_maier/portrait_v2.jpg') }, { name: 'Pü', img: getBase64Image('frontend/public/assets/characters/pue/portrait_v2.jpg') }, { name: 'Viktor', img: getBase64Image('frontend/public/assets/characters/viktor/portrait_v2.jpg') } ]; const htmlContent = `
Hört, hört, wertes Feiervolk und edle Zechkumpanen!
Seit nunmehr 40 stolzen Jahren regiert König Sascha I. das Herzogtum Haumdaucher mit unerschütterlicher Kraft, seiner legendären dunklen Sonnenbrille und wummernden 135-BPM-Techno-Bässen aus den Schlossmauern!
Doch kurz vor dem heutigen Thronjubiläum schlug das finstere Schicksal zu: Die königliche Schatzkammer wurde geplündert! Sämtliche 40 geheiligten Kronkorken des Reiches liegen über ganz Haumdaucher verstreut – und Saschas geliebte Schwestern sind in den Wolkentürmen verschollen!
Hüpfe im Arcade-Doodle-Jump von Wolke zu Wolke hinauf und befreie Saschas Schwestern Saskia, Maja & Miriam aus ihren Wolkentürmen!
Erkunde das Wirtshaus: Triff Königin Verena auf der Galerie, Lutz im Holzbottich, Armend am Schmiede-Amboss & öffne die geheime Luke zum VIP-Bunker!
Besiege Hof-Barde NAT im Wildschwein-Schnick-Schnack-Schnuck und bluffe Markus (Vater) beim taiwanesischen Liar's Dice (吹牛) ab!
Rocke an der Minnesänger-Laute (Mittelalter Guitar Hero) mit Ritter Hansi die Schlossbühne und erhalte deine persönliche Highscore-Thronurkunde!