Files
scrollsmith/README.md
2026-02-21 22:19:21 -05:00

115 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
---
## Project structure
- **`index.js`** Entry point: loads env, initializes the Ollama model, runs dungeon generation, image generation, and PDF output.
- **`src/`** Application modules:
- `dungeonGenerator.js` LLM-backed dungeon content generation and validation.
- `dungeonTemplate.js` HTML template and layout for the PDF.
- `ollamaClient.js` Ollama/Open WebUI API client and text cleaning.
- `imageGenerator.js` Map image generation (Ollama + optional ComfyUI).
- `generatePDF.js` Puppeteer-based PDF generation from the template.
- **`test/`** Unit tests (`test/unit/`) and integration tests (`test/integration/`).
---
## 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