Tusk's Tomes

Free · Open source · Runs on your own machine

Your campaign, written up properly

Point it at a recording of your D&D, Pathfinder or Call of Cthulhu game — or at a transcript you already have — and get back a narrative account of what actually happened. Spelled the way your table spells things, because it reads your campaign's own lore before it writes a word.

Install it Read what it writes

  • MIT licensed
  • No account
  • No subscription
  • Zero telemetry
  • v2.5.0

What the microphone heard

Kaz eel swears on the crimson cathedral and draws the sun blaid

What Tomes wrote down

Kaziel swears on the Crimson Cathedral and draws the Sun Blade

Every name in your campaign, corrected before a single sentence of prose is written.
I

Why this exists

Everyone says they'll write it up. Almost nobody does.

I wanted a record of my campaign. Not minutes — the actual story. The bit where the plan fell apart in an interesting way, the joke that had everyone crying, the line the DM delivered that made the table go quiet for a second.

The obvious tools didn't fit. They're built for meetings, and they have no idea who your characters are — they hear an invented fantasy name, guess a spelling, and then use that guess with total confidence for four hours straight.

And a session isn't minutes. What you want back is the story: something you would actually read again, the lines worth quoting, and a recap short enough that whoever missed the last one can catch up before they sit down. That is as much use to a player as it is to whoever runs the game.

So I wrote this instead.

Jump to a section

It's a niche tool for a niche group of people, and I'm fine with that. If you're one of them, hello.

II

What comes back

One evening in, five things out

A single run produces everything below. You choose which of them you actually want; nothing is mandatory except the chronicle itself.

One session — three or four hours of six people talking

  1. The chronicle

    A chapter of your campaign's book rather than a summary of it — continuous narrative prose, about 16,000 words for a full session.

  2. A short recap

    One paragraph and catch-up bullets. What you send whoever missed last week, so they sit down already knowing.

  3. Lines worth keeping

    Quotes, jests and the gorier highlights as their own lists. The stupid thing someone said in hour three, still there in a year.

  4. Questions for the DM

    Everything it could not resolve, asked rather than guessed at.

  5. The clean transcript

    The raw text with every name corrected — and the end of “I definitely never agreed to that”.

Saved as .docx and Markdown, into a folder you choose.

And this is how it reads

Roused to their duties, the two clerics ascended to the top deck, their shared darkvision piercing the pitch-black harbour. To pass the hours, Grendal conjured a Leomund's Tiny Hut, projecting bright, magical cartoons across the interior of the dome. Ostyn added minor illusion hand puppets, turning the cold watch into a bizarre, domestic pillow-fort cinema.
From the chronicle of a real session — two clerics, a night watch, and nothing much happening.

That is one paragraph of one scene. Read a full session, the recap and the quotes →

III

How it compares

Why not use something that already exists?

Often you should. Most people find this page having already tried a meeting transcriber — good software, built for standups, where nobody is called Vellichor the Pale, nobody needs the joke from hour two written down, and “the group discussed next steps” is a useful sentence.

There is also a set of tools built specifically for tabletop — Tabletop Scribe, DnD Scrybe, Kazkar, SessionKeeper, Saga20 and more arriving. They are made by people who play, several handle speaker attribution well, and they will take a recording without asking you to install anything. If one of them suits your table, use it.

These are the things worth checking first, including the one where this project comes off worse.

What a table actually needs from a session recorder
Capability Tusk’s Tomes Tabletop services Tabletop Scribe, Kazkar, Saga20 Meeting transcribers Otter, Read.ai General AI assistants NotebookLM, ChatGPT Writing it up yourself the benchmark, not a rival
Spells your characters, places and items the way your table does Yes Yes No Partly Yes
Keeps every line attached to the character who said it Yes Partly Partly No Yes
Reads your own lore documents before it writes Yes Partly No Partly Yes
Writes continuous narrative prose, not bullet points Yes Yes No Yes Yes
Collects the quotes, the jokes and the grisly bits as their own lists Yes Partly No Partly Yes
Produces a catch-up recap for whoever missed the session Yes Yes Partly Yes Yes
The recording never leaves your machine Yes No No No Yes
You choose the model — or run the whole thing offline Yes No No No Not applicable
Change one part later without redoing the rest Yes Partly No Partly Yes
Runs unattended while you do something else Yes Yes Yes No No
Yours to read, change and fork Yes No No No Not applicable
Works from a browser, with nothing to install No Yes Yes Yes Not applicable
What it costs you Cloud credit by the session, or nothing at all on a local model. No subscription, no account. A subscription, or credit by the session, depending which. A monthly fee, whether or not you played that week. A free tier, then a monthly fee. An evening. And you would probably do it better.

Three rows carry the whole argument: where the recording goes, whether attribution is known or guessed, and who decides how it gets written. Everywhere else the tabletop services are genuinely competitive, and the browser row is one they simply win. That is the trade, and it is worth being plain about why it exists — no software can attribute dialogue to the right player unless it is handed something that already knows who was speaking. The only way to know rather than guess is to record each person separately, and that means Discord, a bot and an afternoon of setup you would not otherwise spend.

The last column is the benchmark, not a rival. Someone who actually sits down and writes their session up produces the best version of it there is — the catch is the evening it takes, and that almost nobody does it twice. The middle columns get a fairer hearing than a grid can give them in the full comparison, including the case for using one of them instead.

None of this is about price. It is about the recording staying yours, the names staying right, and you deciding how the story comes out. That is the whole pitch.

IV

How it works

Six passes, each doing one job

A transcript goes in one end. Each pass hands off to the next, so a failure is recoverable and a long run can be paused and picked up tomorrow.

  1. Ground the names

    Your glossary and lore are applied to the raw transcript first, so everything downstream is working from your canon instead of the model's guesses.

    The reason this exists

  2. Audit

    Compares raw against grounded and hands you a list of what it couldn't resolve, rather than guessing quietly.

  3. Write the chronicle

    The narrative pass. Player dialogue stays dialogue; the DM's narration reads as narration.

  4. Pull the extras

    Quotes, jests and the gorier highlights, extracted as separate lists.

  5. Polish

    A final review pass, used when you're running the pipeline on a model on your own machine.

  6. Condense

    Optional. Boils the chronicle down to the short version for posting to the group.

You can send different passes to different models — the cheap ones do the mechanical work, the good one writes the prose. How per-phase routing works →

V

See it run

What it looks like to actually use

Everything above is what comes out. This is the part in the middle: importing a session, pointing it at your campaign's lore, and watching six passes go by.

Being recorded

A video walkthrough is on the way

One real session, start to finish — a recording going in, a chronicle coming out.

Until it lands, the quickstart walks the same path in writing.

What it will cover

  1. Install and first launch Node, one command, first run in the browser
  2. Add a provider key Encrypted at rest and machine-bound
  3. Import a Craig recording Multi-track Discord audio, transcribed locally
  4. Map speakers to characters Set once per campaign; persists across sessions
  5. Run the pipeline Six phases, with pause and resume
  6. The finished chronicle Chronicle, recap and quote lists
VI

Getting a session in

Two roads, depending on your hardware

The hard part was never the writing — it's getting four hours of six people talking over each other into text at all. Both roads end at the same grounding pass.

Session audioWhisper, on your PCChronicle

Record it and transcribe it yourself

A Discord multitrack, a Zoom export, or a phone on the table. Whisper runs locally, so the audio never goes anywhere. Record each player to their own track and every line in the finished chronicle stays attached to the right character — one track means one person, and nothing has to guess. It also transcribes what was actually said, swearing included.

Wants an NVIDIA GPU, and one module installed.

The audio route

Session videoYouTube captionsChronicle

Let YouTube do the transcribing

Upload the recording unlisted, wait for the automatic captions, bring the transcript back. The transcription happens on Google's hardware instead of yours. Captions carry no speaker labels and censor swearing, so the audit pass asks more questions and the language comes back tamer than your table — but it needs nothing you do not already have.

Wants nothing. No GPU, no Python, nothing to install.

The YouTube route

Already have a transcript from somewhere else? Paste it in and skip both. Compare every way in →

VII

What it costs

A session, not a month

Tusk's Tomes is free. The only money involved is whatever your chosen AI provider charges for the tokens, and you pay it on the weeks you actually play.

On a Claude or ChatGPT plan you already pay for

$0

On a model running on your own machine

$0

Through one OpenRouter key, cheapest measured routing

~$0.44

Every pass on the strongest Gemini model

~$5

A meeting transcriber, per month, forever, whether you play or not

$15+

Figures are for a three-hour session, priced against the live model catalogue each time this site is published. The full breakdown, per routing →

VIII

What leaves your machine

You're handing this a recording of your friends

So it's worth being exact about where everything goes. Almost all of it stays on the machine you installed it on.

Your machine

  • The recording
  • Whisper, transcribing it
  • Your lore and glossary
  • Every chronicle it writes
  • Your API keys, encrypted

The model you chose

  • Reads the text
  • Writes the prose
  • Keeps nothing afterwards
Choose a model that runs on your own machine and the right-hand side disappears entirely — nothing leaves at all.
  • No account, no sign-up, no licence check.
  • No telemetry, no analytics, nothing phoning home. Ever.
  • Keys encrypted at rest and tied to the machine — copying the file elsewhere gains nothing.
  • MIT licensed, every line readable, including the setup scripts.

And the honest part: this is one person's project, built and tested on one Windows PC. It is not a company and there is no support desk. The unvarnished version is here.

IX

Questions

The ones people actually ask

Why would I choose Tusk’s Tomes?
Because of where it runs, and what it is fed. There are good tools built for tabletop now — several ground names against your lore much as this does, and if one of them suits your table you should use it. What none of them do is leave the recording on your own machine. Tusk’s Tomes transcribes locally and corrects the transcript against your own glossary before any prose is written, so the write-up spells your world the way your table spells it. It takes per-speaker Craig tracks, so who said what is known rather than inferred from one mixed recording. And you choose the model, the narrator and the prompts — it is MIT-licensed, so if the answer you want is not in the settings, it is in the source.
I’m new to this. Where do I start?
Install Node and Git, clone the repository, and run the setup script — that is the whole of it, and the installation guide walks through each step. If you have never used a terminal, there is a version of the same setup written for you that assumes nothing. Start by pasting in a transcript you already have; audio can wait until you have seen what it produces.
How much better is the Craig and Whisper route?
Two ways, and the second one surprises people. Attribution: Craig records each player to a separate track, so Whisper transcribes one voice at a time and every line stays attached to the right character with nothing having to guess. A YouTube caption file is one undifferentiated stream with no speaker labels at all, so the pipeline reconstructs who spoke from context and asks you a good many more questions before it can. Language: YouTube’s automatic captions censor swearing — profanity comes back as [ __ ], already gone by the time you download the file, and nothing downstream can put it back. Whisper transcribes what was actually said. If your table swears, and the way people really talk is part of what you want on the record, the multitrack route is the only one that keeps it.
I don’t have an NVIDIA GPU. Can I still transcribe audio?
Today, in two ways: let YouTube transcribe the recording on Google’s hardware and bring the text back, or compile a whisper.cpp build, which can use an AMD, Intel or Apple GPU. Cloud transcription is also in progress and will remove the requirement entirely — it is measured at roughly $0.20 for a three-hour, five-speaker session, and will need only an OpenRouter key. See the roadmap for where that has got to.
What is OpenRouter, and why does Tusk’s Tomes use it?
OpenRouter is a single API that fronts most of the commercial model landscape — around 400 models, including every Anthropic and OpenAI model, at the same prices the vendors charge directly. One key reaches all of them. Tusk’s Tomes used to carry separate integrations for each vendor, each with its own key to manage and its own model list to keep current; one OpenRouter key replaced all of that and opened several hundred models that were never reachable before. Gemini stays available as a direct connection because it is measurably cheaper that way.
How do I choose which model to use through OpenRouter?
The picker does the narrowing for you. It offers three orderings — by measured performance, by what that particular phase would cost, and by the maintainer’s own ranking, which weighs speed and reliability that no grade captures — and they deliberately disagree. Two filters cut the catalogue down: tested only restricts it to models actually graded on real session material, and handles mature content to models measured relaying graphic violence and crude dialogue without softening them. If you would rather not choose at all, the guided routing presets are complete recipes you can apply in one click.
Is it actually better than a paid app, or just cheaper?
Cheaper is not the argument, and against the tabletop-native services it is not reliably true either — several sell credit by the session much as this spends your own API credit. Against a meeting transcriber it is doing a different job: those produce a transcript and bullet points about what was discussed, with no mechanism for knowing your characters’ names. Against the tools built for tabletop, the differences are narrower and worth stating plainly — your audio never leaves your machine, per-speaker Craig tracks mean attribution is known rather than inferred, and you pick which model writes each phase. On chronicle quality specifically, the honest answer is that it depends on which model you route to: the strongest routings tested — a subscription CLI on the mechanical passes with Gemini Pro writing the prose — produce the best output measured so far, while the OpenRouter catalogue ranges from noticeably worse to better than Gemini on individual phases. The project deliberately does not publish a single quality score, because chronicle quality is not one number and any tool that claims otherwise is flattering itself.
What actually gets put on my PC?
The repository itself, plus node_modules inside it. Outside that folder it writes one configuration directory in the standard place for your operating system, holding your glossary, routing choices and encrypted keys, and a data directory for sessions if you transcribe audio. That is all, unless you install the transcription module — which adds a Python environment of about 1.5 GB, inside the repository folder. No PATH changes, no registry entries, no system-wide packages, and nothing installed as administrator. The full list, file by file.
How can I keep track of what it changes on my machine?
Everything it writes outside its own folder is documented in one place, and there is an uninstall script that removes it. The design rule is that installing something must never change anything outside the repository working directory, and uninstalling must remove every byte the install wrote — your system Python, Node, PATH and registry are left alone. That is written down as a contract rather than a promise: see module isolation for what a module may and may not touch, and what it installs for the complete inventory.
How can I support the project?
Use it and tell me what broke — that is genuinely the most useful thing, and the feedback form is the fastest route. Starring the repository helps other people find it, bug reports and pull requests are welcome, and if you would like to put money towards it there is Buy Me a Coffee. None of it unlocks anything — there is no paid tier and there will not be one.
X

Start

Two things, then one command

You need Node 20 or newer and Git. That is the whole requirement. Python and a graphics card matter only if you later want the machine to transcribe audio for you, and you can add them whenever.

Install it I've never used a terminal

Getting started 4

  • InstallationThis page gets you from a fresh git clone to a running app, in about five minutes on a clean machine…
  • RequirementsRead this before you clone anything. It's the page I wish I'd written first — three tiers, so you can see at…
  • Setting up without a terminalIf you've never opened a terminal, never used GitHub, and never installed a Node.js project, this is the page…
  • Your first chronicleA complete first-time walkthrough from "I have a session to chronicle" through "I have a polished chronicle…

Bringing a session in 4

  • Bringing a session inThe hard part was never writing the chronicle. It's getting four hours of six people talking over each other…
  • Import a transcriptThe simplest route in: you already have the text, and Tomes turns it into a chronicle. Nothing to install, no…
  • Import session audioStart with a recording of your game — a Discord multitrack, a Zoom export, a phone on the table — and end…
  • Import YouTube captionsUpload the session recording to YouTube as unlisted, let Google's automatic captions transcribe it, and bring…

Writing the chronicle 3

  • How the phases workA transparent, phase-by-phase account of what Tusk's Tomes actually sends to a model, what it asks for, and…
  • Recommended settingsThis doc tells you which settings to keep on their defaults, which ones to tweak for cost or speed, and which…
  • Reforging a chronicleReforge takes a chronicle you've already generated and re-runs the downstream pipeline phases on a provider…

Models & cost 3

  • Choosing a providerTusk's Tomes needs at least one LLM to run the pipeline. There are three routes to that, and you can mix them…
  • Per-phase routingThe question this page answers: can a mix of cheaper models match a single strong one, and if so, how do you…
  • What it costsNothing goes to me. This is MIT-licensed and it always will be — there's no paid tier, no upsell, and no…

Extras & integrations 10

  • Audio TranscriptionThis is the add-on that turns recordings into text, using faster-whisper running on your own machine. It adds…
  • Chronicle PersonasSwap the Chronicle narrator out of the default bardic voice. Ships six presets and lets you author your own —…
  • Claude CodeIf you already pay for Claude Code (Pro or Max), this lets the chronicle pipeline use that allowance instead…
  • CodexUse your own locally-installed OpenAI Codex CLI as the pipeline's LLM — no API key, no per-token billing…
  • Extras & integrationsThe core app does one thing: you give it a transcript, it gives you a chronicle. Everything heavier —…
  • Local LLMsOptional add-on that adds Ollama, LM Studio, and Unsloth Studio routing to Tusk's Tomes. Out of the box the…
  • Module isolation← Back to add-on README · Also lives at the same path in Tusk's Vault so both repos enforce the same contract.
  • Obsidian vault lorePlenty of GMs already keep their campaign in Obsidian — characters, factions, locations, the lot — and asking…
  • Tusk's VaultOnce you've got a couple of years of chronicles saved, a new problem appears: you have a genuinely good…
  • whisper.cpp bridgeThis is the route for AMD, Intel and Apple GPUs. It's more involved than the other add-ons, and I want to be…

Settings & files 1

  • ConfigurationTwo sources of config, in priority order: In-app Settings tab. Encrypted keystore, per-phase model routing…

Privacy & safety 2

  • Security and privacyA plain-English primer for users, not developers. It tells you what's safe by default, what you can change…
  • What it installsShort version: I'm a GM who got fed up and wrote this for my own table. This page is me telling you exactly…

Troubleshooting 3

  • Diagnostic bundlesA single structured markdown file at .diagnose/latest.md that Claude Code reads with one Read call to get…
  • Known issuesTusk's Tomes is open-source software in active development. This page tracks two things separately:
  • Questions I get askedMost of these came up either from someone trying it or from me staring at something at midnight wondering why…

About Tusk's Tomes 8

  • ChangelogWhat changed between versions. The rest of the documentation describes how the current version works and does…
  • Everything it doesThe full list. Most of these exist because something annoyed me once and I fixed it — which is why the set is…
  • How it comparesI tried most of the meeting tools before writing my own, so that part is a fair account rather than a sales…
  • How it's builtA local-first D&D session chronicler. The core install handles paste-a-transcript chronicling through a cloud…
  • RoadmapA running list of what's shipped, what's coming next, what the community has suggested, and what's been…
  • Security policyTusk's Tomes is a local-first application — it runs on your machine, binds only to 127.0.0.1 by default, has…
  • Tuskers' Code of ConductTusk's Tomes is built for kitchen-table tabletop groups, and the community around it should feel like one…
  • Who it's forI built this because I wanted a record of my own campaign and couldn't find anything that did the job. So the…

Developer tooling 1

  • Graphifysafishamsi/graphify is a Claude Code skill that reads the project's source files and builds a queryable…

About Tusk's Tomes 8

  • ChangelogWhat changed between versions. The rest of the documentation describes how the current version works and does…
  • Everything it doesThe full list. Most of these exist because something annoyed me once and I fixed it — which is why the set is…
  • How it comparesI tried most of the meeting tools before writing my own, so that part is a fair account rather than a sales…
  • How it's builtA local-first D&D session chronicler. The core install handles paste-a-transcript chronicling through a cloud…
  • RoadmapA running list of what's shipped, what's coming next, what the community has suggested, and what's been…
  • Security policyTusk's Tomes is a local-first application — it runs on your machine, binds only to 127.0.0.1 by default, has…
  • Tuskers' Code of ConductTusk's Tomes is built for kitchen-table tabletop groups, and the community around it should feel like one…
  • Who it's forI built this because I wanted a record of my own campaign and couldn't find anything that did the job. So the…

Docs 2

  • Contributing to Tusk's TomesWelcome — and thank you for even reading this far. Tusk's Tomes is a small project with a small but growing…
  • DocumentationEverything in detail, so the README doesn't have to carry it all. This is the contents page.