43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
import "dotenv/config";
|
|
import { generateDungeon } from "./dungeonGenerator.js";
|
|
import { generateDungeonImages } from "./imageGenerator.js";
|
|
import { generatePDF } from "./generatePDF.js";
|
|
import { DEFAULT_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:", DEFAULT_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);
|
|
}
|
|
})();
|