โš— The Lore Weaver's Cauldron LOCAL AI GUIDE
LOCAL AI ยท YOUR MACHINE SPEAKS

๐Ÿฎ Bring Your Own Breath

โœฆ

A guide to running the Dungeon Master on your own hardware. The server still thinks; your machine lends it a voice. Any model your Ollama can run is fully playable as the DM โ€” uncensored ones included: the house models answer to their providers' content policies, a model on your hardware answers to you. This page covers the setup, the gotchas that actually bite (almost all of them CORS), and the questions people ask before and after.


How It Works

1.The server thinks โ€” the Cauldron builds the DM prompt: your story so far, the world facts, the rules, what just happened 2.Your machine speaks โ€” your browser hands that prompt to your own Ollama, and the narration streams back token by token from your hardware 3.The house keeps the books โ€” dice, HP, combat and the world state stay server-side, so the numbers stay honest no matter what the local voice says

One honest note before anything else: the prompt your Ollama receives is the same prompt our house DMs get. It is deliberately not a secret โ€” you can watch exactly what your DM was asked. The DM step costs 0 turns; everything else at the table behaves as before.

And one honest difference: the house minds answer to their providers' content policies; a model on your own hardware answers only to you. Whatever your Ollama can run is fully playable โ€” the uncensored ones included. The server still builds every prompt and keeps dice, HP and the Lorekeeper honest, so a frank local DM never means drifting numbers. Images and voices are the exception: image generation and TTS stay on house engines.

Get Started

  1. Install Ollama on the machine at your table. Linux: curl -fsSL https://ollama.com/install.sh | sh โ€” Windows/macOS: the installer at ollama.com/download
  2. Pull a model: ollama pull qwen3:8b as a baseline. A 14B+ thinking model is the comfortable pick; anything under 8B will struggle to hold a long campaign, especially if you plan to run the Lorekeeper or Background roles on it too
  3. Open the game โ†’ Settings โš™ โ†’ the Dungeon Master picker. If your machine answers, a ๐Ÿฎ group appears at the bottom of the list with the models you pulled โ€” the row beside it shows a status dot
  4. Pick a ๐Ÿฎ model and play. Narration now streams from your own hardware.

Before you ask the first question, the checklist should read like this:

Troubleshooting

In order of how often they bite. The first one is the big trap; most "the guide didn't work" stories are actually this story.

๐ŸŸก Yellow dot โ€” "Ollama answered โ€” CORS-blocked" (or CORS errors in the browser console) symptom โ†’ cause โ†’ fix

Cause: your Ollama is running and answering, but it refuses to be read from this site because it wasn't told the site is allowed. The exact value it needs, plain, no @url: prefix and no quotes needed beyond your shell's habits:

OLLAMA_ORIGINS=https://dnd.rostad.cc

The trap: setting that variable in a terminal does not reach an Ollama that is already running โ€” on Linux that's a systemd service, on Windows the tray app, on macOS the menu-bar app. And if you then type OLLAMA_ORIGINS=https://dnd.rostad.cc ollama serve, it fails with bind: address already in use, which people read as the problem. It isn't โ€” it's proof a healthy instance is already running (see the next card). Fix: stop the real instance first, then start one with the variable โ€” or, better, set it permanently:

After that, hit โŸณ in the settings row. ๐ŸŸก โ†’ ๐ŸŸข is the success condition.

โšช Gray dot โ€” "Ollama not found on this machine"

Cause: nothing answered on the usual ports. Either Ollama isn't running at all, or it listens somewhere else.

Fix: start it โ€” ollama serve in a terminal, or launch the desktop app. Confirm it answers: open http://127.0.0.1:11434 in the browser โ€” it should print "Ollama is running". If it lives on a different port or a different machine, put that address in the base-URL field (e.g. http://127.0.0.1:11435) and press โŸณ. The field is empty by default โ€” leave it empty when everything runs on the same machine.

"address already in use" when I run ollama serve

Cause: an Ollama is already running and holding the port. This is good news, not an error to fight.

Fix: stop that instance first (systemd restart / tray Quit / quit the menu-bar app), then start it with the environment variable โ€” or skip the terminal entirely and set the variable permanently as in the first card. Restarting via systemd (sudo systemctl restart ollama) after systemctl edit is the least painful route on Linux.

Verify without the browser

Ask your Ollama directly whether it will honour this site. In bash (or fish โ€” the line is the same):

curl -s -D - -H "Origin: https://dnd.rostad.cc" http://127.0.0.1:11434/api/tags -o /dev/null | grep -i access-control

Expected: an Access-Control-Allow-Origin: https://dnd.rostad.cc header line. No output โ‡’ the origins variable isn't reaching the live process. In PowerShell:

curl.exe -s -D - -H "Origin: https://dnd.rostad.cc" http://127.0.0.1:11434/api/tags -o NUL | findstr /i access-control

Advanced (Linux): to see whether the variable actually reached the running process, read its environment: tr '\0' '\n' < /proc/$(pgrep -f ollama | head -1)/environ | grep -i origin

What goes in the base-URL field?

Nothing, if Ollama runs on the same machine as the browser โ€” the game auto-detects http://127.0.0.1:11434 (and tries a couple of neighbours). The field is only for a custom port or another host, e.g. http://127.0.0.1:11435.

Another box on your LAN: run Ollama with OLLAMA_HOST=0.0.0.0 plus the same OLLAMA_ORIGINS line, then paste the address into the field. One honest caveat: this page is served over HTTPS, and browsers refuse plain-HTTP calls to a LAN address from an HTTPS page (loopback to your own machine is exempt). Reaching another box therefore needs TLS on its address โ€” if both machines are on a tailnet, tailscale serve in front of Ollama does it in a minute.

The base URL lives only in your browser and is never sent to us.

Lemonade, llama.cpp server, LM Studio or another OpenAI-style server

Not supported โ€” by design, for now. The game speaks Ollama's native API (/api/tags, /api/chat), not the OpenAI-style /v1/chat/completions those other servers expose, so the picker won't find them and no setting will fix that.

Fix: run real Ollama instead โ€” it serves the same GGUF models, and on AMD hardware it builds against ROCm. An OpenAI-relay mode is on the roadmap; there is no date for it.

Replies are very slow, or the model "thinks" forever and never speaks

Cause: on CPU, a thinking model spends the whole budget on its internal reasoning before a single word of narration appears. Nothing is broken โ€” your hardware is simply slower than the prompt is long.

Fix: pick a smaller or faster model, or lower the ctx selector (8k answers sooner than 32k). If narration still never arrives, a house-DM fallback button appears automatically โ€” using it costs 1 turn, the same as a normal house message.

What about turns? (costs and caps)

The DM step itself costs 0 turns โ€” your hardware pays for it. If narration never arrives even though the dot is ๐ŸŸข, the house fallback offers to answer per turn. Voice narration (TTS) and images are not local features and always cost house turns. While any background role still runs on house models the cap is roughly 100 local messages a day; with both the Lorekeeper and the Background local, roughly 300.

FAQ

Which models can I use?

Anything you've ollama pull'ed shows up in the ๐Ÿฎ group automatically โ€” including custom tags like qwen3:14b-q4_K_M; quantized tags are fine. Thinking models also show their reasoning in a window before the narration, exactly as on the house models. Practical floor: 8B; comfortable: a 14B+ thinking model on a real GPU.

Does a local DM follow the house models' content policies?

No โ€” that's the point of your own hardware. The house minds (StepFun, Qwen, DeepSeek) are subject to their providers' content policies; a model running on your machine answers only to you. Whatever your Ollama can run is fully playable as the DM โ€” uncensored models included. Two honest boundaries: the server still builds every prompt and keeps dice, HP and the Lorekeeper honest, so narration can be as frank as it likes without the books drifting โ€” and image generation and TTS remain house engines, which stay under house policies.

What context size should I pick?

16k is the recommended default โ€” Ollama's own default of 4k is too small for a campaign prompt. The ctx selector (8k / 16k / 32k) in the settings row is applied per request; it does not change your Ollama globally. Go 32k only if your hardware swallows it without slowing the story to a crawl.

Does local play cost turns?

The DM step costs 0 turns โ€” that's the point of bringing your own breath. While any background role (Lorekeeper, extraction) still runs on house models, local play is capped at roughly 100 messages per account per day. Pick ๐Ÿฎ models for both of them and the cap lifts to roughly 300, because the house spends nearly nothing per turn then. TTS and images cost house turns as before.

Can I run more than the DM on my own machine?

Yes โ€” per role, with no mode to flip. The ๐Ÿฎ group appears in three dropdowns (in the in-game โš™ settings and in the new-adventure setup): Dungeon Master, Lorekeeper (the Guardian: rules, dice checks, HP/XP/items bookkeeping) and Background (extraction: facts, journal, memory). Pick your own Ollama model for as many of them as you like; roles you leave on house models keep running on the house exactly as before. One dependency: local background roles only take effect when the DM is local too โ€” the relay lives on that path. The bookkeeping roles ask a lot of instruction-following: their steps come back as JSON-like tasks, so use a 14B+ thinking model there; a tiny 3B model fumbles them. An earlier version had a separate on/off switch for this โ€” it is gone, and campaigns set up with it keep behaving the same.

What leaves my machine? What stays private?

The DM prompt travels to your machine โ€” your browser talks to your local Ollama directly; nothing of the story goes through it on the way. Your model list stays local. The base URL you type is stored in your browser only and never sent to the server. What does still live server-side, as always: your chat history, the ledger and the books โ€” the house keeps the world state. If you want the story itself off our machines too, that is a different product than this one.

Can I cheat by prompting my own model?

You can make your local DM say anything you like โ€” but dice, HP and combat are server-authoritative. Rolls come from real code, and the books only change through the Guardian. A fabricated sentence of narration cannot forge a nat 20 or conjure gold; it just makes a fiction the ledger will contradict.

Can I play local AI on my phone or tablet?

Not comfortably yet. The feature is built for a browser on the same machine as Ollama (loopback). A phone reaching Ollama on another box needs the LAN + TLS setup above, plus OLLAMA_HOST=0.0.0.0 โ€” it works on a tailnet with tailscale serve, but we can't call it a smooth experience yet.

My model is small. Will it hold up?

Honestly: under 8B, expect trouble. Long campaigns ask a model to juggle the transcript, the fact register and the rules in one breath โ€” small models drop threads, contradict the ledger, and on the Lorekeeper and Background roles they simply fumble the JSON bookkeeping. A sub-8B model is fine for a one-shot; for a saga, 14B+ is the road.

Where do I read more about the models and the machinery?

The Minds โ€” Local AI section for what runs where and the honest limitations. The Machinery for how the DM prompt and the Guardian work under the hood. How to Play for everything else at the table.


Powered by Qwen, DeepSeek & StepFun โ€” and, in this mode, by your own machine. Questions? [email protected]

To the Table How to Play