# Scrollsmith [![status-badge](https://ci.keligrubb.com/api/badges/2/status.svg)](https://ci.keligrubb.com/repos/2) Scrollsmith is a Node.js tool for generating Dungeons & Dragons one-page dungeon PDFs automatically. It uses an Ollama LLM server to create dungeon content, proofreads and refines it, then formats it into a structured PDF with maps, rooms, encounters, treasure, and NPCs. --- ## Features - **Three-pass dungeon generation**: 1. Draft: initial dungeon ideas 2. Refine: proofread, add flavor, fill in vague details 3. JSON conversion: output strictly valid JSON for PDF generation - Automatically generates a PDF named after the dungeon title - PDF layout includes three columns: map & hooks, rooms, encounters & treasure & NPCs - Easy to integrate with a local Ollama server --- ## Requirements - Node.js 22+ - Ollama server running and accessible - Gitea Releases (optional) for PDF uploads - `.env` file with: ```env OLLAMA_API_URL=http://localhost:3000/api/chat/completions OLLAMA_API_KEY=your_api_key_here COMFYUI_URL=http://192.168.1.124:8188 ``` --- ## Installation ```bash git clone https://github.com/yourusername/scrollsmith.git cd scrollsmith npm install ``` --- ## API Configuration The client automatically infers the API type from the endpoint URL, making it flexible for different deployment scenarios. ### Direct Ollama API For direct Ollama API calls, set: ```env OLLAMA_API_URL=http://localhost:11434/api/generate ``` ### Open WebUI API For Open WebUI API calls, set: ```env OLLAMA_API_URL=http://localhost:3000/api/chat/completions OLLAMA_API_KEY=your_open_webui_api_key ``` > Note: The API type is automatically inferred from the endpoint URL. If the URL contains `/api/chat/completions`, it uses Open WebUI API. If it contains `/api/generate`, it uses direct Ollama API. No `OLLAMA_API_TYPE` environment variable is required. --- ## Usage 1. Make sure your Ollama server is running and `.env` is configured. 2. Run: ```bash npm start ``` 3. A PDF will be generated automatically. The filename matches the dungeon title. Optional: update the map path in `index.js` if you have a local dungeon map. --- ## Example Output * `the-tomb-of-shadows.pdf` * Three-column layout: * Column 1: Map, Adventure Hooks, Rumors * Column 2: Rooms * Column 3: Encounters, Treasure, NPCs --- ## Notes * Make sure your Ollama server is accessible and API key is valid. * Dungeon generation can take a few minutes depending on your LLM response time. --- ## License PROPRIETARY