import "dotenv/config"; import { generateDungeon } from "./dungeonGenerator.js"; import { generateDungeonImages } from "./imageGenerator.js"; import { generatePDF } from "./generatePDF.js"; import { OLLAMA_MODEL } from "./ollamaClient.js"; // Utility to create a filesystem-safe filename from the dungeon title function slugify(text) { return text .toLowerCase() .replace(/[^a-z0-9]+/g, "-") // replace non-alphanumeric with hyphens .replace(/^-+|-+$/g, ""); // trim leading/trailing hyphens } (async () => { try { if (!process.env.OLLAMA_API_URL) { throw new Error("OLLAMA_API_URL environment variable is required"); } console.log("Using Ollama API URL:", process.env.OLLAMA_API_URL); console.log("Using Ollama model:", OLLAMA_MODEL); // Generate the dungeon data const dungeonData = await generateDungeon(); // Generate dungeon map image (uses dungeonData.flavor) const mapPath = await generateDungeonImages(dungeonData); dungeonData.map = mapPath; // Generate PDF filename based on the title const filename = `${slugify(dungeonData.title)}.pdf`; // Generate the PDF using full dungeon data (including map) await generatePDF(dungeonData, filename); console.log(`Dungeon PDF successfully generated: ${filename}`); } catch (err) { console.error("Error generating dungeon:", err); process.exit(1); } })();