the front door shows you what it feels like. this page shows you the machine.
everything here traces to a version tag, a decision record (an ADR), or a line of running
code.
every world is an append-only log of events. everything you see — the town, the
grudges, your dog — is a fold over that log. that one decision buys the rest:
the dice are code, not vibes. a deterministic core resolves every fact, roll,
and outcome. the AI narrates what happened; it never decides what happened.
nothing is retconned. generated prose and art are persisted forever; replaying
a world reproduces it exactly.
worlds are data. campaigns are YAML — history, cast, foes, quests. the engine
is genre-blind; strata deep (terminal-noir sci-fi) and sorrowmoor cove (a coastal folk
tale) run on the same physics. four campaigns ship today.
everything is world-scoped. one host runs many worlds.
it all runs on one machine. the narrator, the painter, the dice — all
local, all yours. section 6 makes that specific.
2 · the dice are real
every game with an AI in it has to answer one question: who decides what happens?
here, it is never the AI. a deterministic core resolves every fact, every roll, every
outcome — first, in code — and the dice land on your screen with the math showing:
1d20+3 [15] = 18 vs AC 14 — hit. then, and only then, the
narrator speaks — canon-locked to the entities and facts it's handed. the narrator
cannot cheat. neither can the house. (which model holds that seat was decided the same
way everything here is decided — on a bench, in the open.)
underneath the living world is a fair little RPG. a natural 20 crits: the weapon
dice double and the modifier counts once (the RAW-5e rule, straight from the engine's
decision records). a natural 1 fumbles, no matter who you are. and you don't fight
alone: jo (another human, the one from the letter),
kestrel (an AI guildmate with a soul and opinions of her own), and
your dog — who doesn't fight, but holds the line anyway.
pick a setting. each one keeps its own kind of trouble. these are real dice:
▮ ▮ ▮ BRAWL
pick a world above, then press ▶. flat d20s, spells, edge, taunts — and no mercy.>
the roll grammar mirrors the game's own log format.
edge is the game's advantage currency — spend it, and you roll two d20s and keep the better,
both shown. if you drop, that's a soft ko — the engine's actual death physics — and the foe
remembers; section 4 is why. every bit of this is shipped physics. the dice are real and
rolled fresh every time; the chatter is the demo's script — in the game, those voices
are alive.
3 · your dog can walk into the world
point a camera at something real, and it enters the game. photograph your dog and
he's minted into the world as a companion: follows you room to room, sits for a
portrait in every world's own paint, sees everything you see. the cat, the ugly vacuum, the
houseplant with opinions — the world will have them too. this is the part you
screenshot for a friend.
and the trick is a pipeline, not a filter:
moderation first. a vision model classifies the photo before anything reads it
for content. text written inside an image is scene content, never instructions —
the pipeline is built assuming attackers send pixels.
then describe. the model emits typed fields — species, colors, markings,
accessories, pose — never free prose into the engine.
then defang, then mint. the fields are sanitized at a structural boundary and
your companion is born as events, like everything else. from that moment the photo's
dog and an authored dog are indistinguishable to every system in the game.
receipts: this is the actual describe output for the dog on the front page, from the
vision model we measured and picked for this seam (minicpm-v4.5 — 5/5 on the typed-field
contract in the head-to-head), with the game's own prompt. the engine ships no default
vision model: the setting is blank out of the box, and a deploy names one explicitly or the
seam stays dark.
{"kind": "animal", "species_or_type": "dog", "size": "large",
"colors": ["black", "white"],
"markings": ["curly fur", "white chest patch"],
"accessories": ["red collar"],
"notable_features": ["floppy ears", "tongue out"],
"pose_or_energy": "standing, happy",
"art_phrase": "a black and white curly-haired dog with a red collar"}
and the barking? pets bark meaningfully all the time — the engine knows what
they mean, you don't. the tonguelet tonic opens a bounded window (until dawn, enforced by
the world clock) where the meaning renders as words. it's consumable, owner-only, and the
only thing in the game that produces fluency.
and the vacuum: same intake, other exit. objects mint as foes with stats drawn
from the engine's real difficulty bands — declared, never improvised.
status, plainly: all of this is built and lives in the engine (ADR-0131 — the
vision seam, the moderation gate, the upload budget, the photo-foe difficulty bands). it is a
per-deploy choice: the intake endpoint stays dark unless your deploy switches it on and names
a vision model. the receipt above is real output from a real run.
4 · the world remembers
the log is append-only and never thrown away — and that's not a storage detail,
it's the personality of the whole thing. nothing here is scripted, and nothing is
forgotten:
knowledge is derived, never placed. we never hand-place "NPC X knows fact
Y." we seed a world's past — years of history, a cast with ages and home
regions — and what an elder recalls is a pure function of where and when they stood.
a coast kid and a mountain elder genuinely diverge about the same war.
news travels like news. gossip when people share a room; news that walks
region to region. letters are two systems, honestly: your crew's mail is held at the
keel and lands on a short, configurable window — the default is a minute. the world's
own post is slower on purpose: NPC letters ride carriers at about a day per region hop,
so far news arrives days later, the way it should. the crew lane is separate by
design (ADR-0202): sealed, defanged, capped and crew-only. the server half ships; the
client has a read panel and no compose screen yet — so a crew letter is something you
receive today, not something you write.
every world keeps a wall of firsts. the first one down the stair, the
first grudge settled — public, permanent, and each entry tracing to the exact event
that earned it. history with receipts.
foes have pasts, and grudges. old toll — the bull rat who keeps the
cellar — sits in a vault he's chalk-tallied himself. fights have witnesses;
witnesses talk; the foe that fells you remembers it. reputation is a fold over
deeds, not a meter we set.
memory has two planes — episodic (what happened between you two) and semantic
(shared lore) — retrieved by relevance, recency, and reinforcement, consolidated over
time. NPCs forget the way people forget: gradually, and unevenly.
the world clock is wall-clock: it keeps moving when you log off. that's why
the letter on the front page took four days.
5 · every world hires its own painter
art is part of a world's physics. each campaign pins a checkpoint (its "painter"), a
style bible, and a seed discipline; renders happen in tiers — the rare permanent stuff
gets the slow expensive pass, in-play scenes go faster, sketches faster still.
persisted forever, like the prose.
this site runs on that same machinery: the bloomvale scene and both dogs
on the front page came off the game's own render graphs — photo checkpoint in, painter
checkpoint out, seeds locked, every one reproducible.
pick a setting, then tap a style — or hit ⟳ random. every render has receipts — prompts, seeds, steps,
timings, and which painter held the brush: the diffusion research →
strata deep · the sealed return door · painterly
● placeholder
choose a world
show me this in…
and the portraits that have been greeting
visitors here since day one — style studies, one per painter. of the five, strata deep is the
one that is also a campaign you can play today:
the bloomvalethe sunken choirstrata deepperdition flatsthe bronze heaven
and the painter doesn't sit idle between commissions — art here is a running
commentary on your own story, painted locally, while you play:
every drop paints. when loot hits the ground it gets its own piece, minted
on the spot in the world's own style — and the card in your pack shows the piece.
your inventory ends up a gallery of things that happened to you.
every item knows its worth. the catalog wears real rarity now — 162 items
ranked and priced — and the rarity door carried those laws into worlds already lived
in without rewriting a byte of their history. add-only, like everything else.
the limner rides along. the little sketch-artist draws moments as they
happen — fights included now — and the fight plane mints too: pull an eel out of a
gutter at midnight, and before it's beaten the world has painted its portrait.
your eel, your gutter, your midnight.
relics know their bearer. a ceremony relic carries art scoped to its owner
on every plane — the piece is provably yours, not a stock image with your name on it.
and every image is kept exactly as first painted — replay the world,
get the same gallery.
realkeep ships with zero AI models. not one. the narrator's brain (a chat model, via
ollama) and every world's painter (a diffusion model, via comfyui) are yours to choose
and download — on your machine, under each model's own license. the first-run picker
we're building shows you each license in plain language before a single byte arrives:
no silent defaults, no fine print sprung later.
why: model licenses bind whoever runs the model. some excellent models are free for
you at home and not free for a company selling access — so we don't resell anyone's
weights. we hand you the choice, the license, and the download button. your machine,
your agreement, your models. (it also keeps the game itself small enough to carry.)
we read the licenses so you don't have to. our own art pipeline changed when
we read one closely: flux-dev paints beautifully, but its license grants its outputs
in one clause and restricts them in another, so our worlds' painter of record moved
on — and on a second, closer read of that output clause, we're re-painting the
commercial art too, because when a license cuts both ways we take the conservative
road. that's the reading every model gets before it goes on our blessed list.
the licence reading lives on its own page now — the
licence ledger on our research hub: every model we run or benched, its licence read
first-hand, each row stamped with the date of its last read, re-read as models and licences
move. one page holds the law so every other page can cite it instead of restating it.
the head-to-heads themselves live on the research bench — the
diffusion research, receipts under every image — and some of our chat-model research is
published too: the voice trials, how the narrator earned its voice. today's credits,
gladly given: our worlds speak through gemma4 (apache 2.0 — read first-hand from the
license file the weights ship with; yes, we checked, because earlier gemma generations
carried custom terms), see through qwen-vl (apache 2.0), remember with nomic-embed
(apache 2.0), and their painter of record is albedobase xl, by albedobond (an SDXL merge whose
CreativeML Open RAIL++-M base and civitai terms permit commercial use but ask for
credit — and this is it, with the full reading in the
licence ledger).
7 · plays anywhere the tide takes you
the whole thing runs on one machine, and we mean it specifically: the narrator is
a local model on a GPU — sized to the card you have, not to someone's cloud — the art
is a local diffusion pipeline on the same box, and the world itself is an append-only
event log you can open and read. no cloud AI service, no api meter, no phone-home, no
analytics — the browser client is fenced by a build test that fails if anything it
serves reaches an outside origin, so there is no third party between you and your world.
which machine "local" means is the one thing worth being exact about: your world runs on
your hardware, and it's yours — never a cloud vendor's, and never a tracker's.
and the floor is measured where it says measured. 24GB is the card this game is
built and playtested on, daily — gemma4:12b speaking, nomic-embed remembering, the vision
model watching and the painter's diffusion weights all co-resident on one card, no swapping —
and every loaded size we quote is read off that run. that fit is the whole reason
the voice trials ran
so deep: the best voice on the bench lost the seat twice to residency, and the seat that ships
is the one that holds its voice and leaves the painter room to breathe. the smaller rungs are
derived from those same measured loads — same model tags, not re-probed per card —
and at 16GB the locked default chat model still fits, with the painter sharing what's left.
above 24GB the extra room buys a bigger mind and a finer painter — the research bench has
measured that rung on a 96G workstation (a 26B narrator at 0.75s warm; the render ladders
on the diffusion
bench) — but we haven't measured the cards in between, so we don't print a rung table
for them. that buys three things most games can't have at once:
it goes where you go. the world has been played live from an iPad on
airplane wifi at 35,000 feet — the deterministic core keeps the words fast on a
link that can barely carry them.
one world, one table, any screens. the same world serves a keyboard
player at a desk and a partner on an iPad at the same moment — a live two-human
party, AI companions rolling beside both of you. the ledger below has the date.
walk in like it's a game, not a bank. no account at the door — you're
handed a living character in under a minute, and you claim a permanent seat only
when you decide you care.
the code is closed for now — that choice gets made deliberately, once the
path is clear. your worlds are yours regardless: one host runs many worlds, each one
scoped, replayable, and portable — because a world is just its log, on your disk.
8 · where it actually is — the ledger
this is a real, running thing, and this section is its odometer. numbers below are
read from the repository, not from optimism.
engine v0.815.1 · 922 version tags ·
228 decision records · 45 event-log consumers (4 still stubs) ·
M0–M1 shipped · M2 largely complete ·
M3 mostly live · M4 well underway
thirty-four landings · v0.793 → v0.815— four days, and the game grew a face
the party learned to move as one — companions wade into your fights, the marching order holds below deck, and a unique lost in the ruin stays exactly where it fell (v0.795–v0.801 · ADR-0223/0224/0225).
the anchor watch: the whole game re-staged as one calm, fixed instrument panel for a hand-held screen — a panel registry, a director's band, a five-slot dock, the narrator finally owning the system's voice — and the entire device fleet measured to fit with zero pixels over (v0.802–v0.810 · ADR-0226).
twenty-five review agents and two real-device passes ground on it; every confirmed finding landed before the arc closed (v0.809–v0.813).
the drowned tiers opened: the dive remembers its door, every boss waits on its own terminal, ten layers and six mouths of authored dark (v0.811–v0.813 · ADR-0227).
a floor may be somebody's home — the denizen axis, and dorrie callow's lamp at the first landing (v0.814–v0.815 · ADR-0228).
and the instruments stopped lying: the fences that guard all of it grew fences of their own (v0.815.1).
thirty-eight landings · v0.740 → v0.792— seven days in august
the cove learned to talk back. every soul now deals you a small hand of
questions, an opener that knows whether you have met, and a follow-up chip built
from the sentence they just said to you, so a conversation goes somewhere instead
of ending (v0.762–v0.777 · ADR-0213/0214/0218/0219).
combat learned to breathe. the server keeps one clock now: turns land
at a paced beat, the fight opens on its own stinger before the model says a word,
and the round summary — switched off entirely in party fights — now closes every
round, with the dice still on screen
(v0.749–v0.779 · ADR-0210/0211).
the town found its tongue. the ferry casting off, a carrier coming up
off the causeway, your own story overheard in someone else's mouth across the
room — all of it derived from movement and gossip that were already happening,
adding not one row to the log (v0.780).
the dungeon got hand-sized. floors re-cut for a thumb on an iPad — a
39-step traverse down to 24 — denser encounters to match, and foes that pick their
target from everyone still standing instead of always the human
(v0.768–v0.769 · ADR-0215/0216).
then we stopped adding and got it ready to be played. a week of audits
found — and fixed — a claim door that checked your password but never counted the
guesses, text on a stock iPad rendering at 1.31:1 contrast against a 4.5:1 floor,
a reconnect that showed you a town screen while your fight was still running, and
one curious look that could quietly wall three quests forever. the database now
reads 98% fewer rows to answer a repeat of the same question, and the frame
it answers with is byte-identical to the one before
(v0.781–v0.792 · ADR-0220/0222).
the summer ledger · v0.653 → v0.739— the season in five strokes
companions became party members in full. AI guildmates and pets follow
you room to room, take visible combat turns on their own dice, and speak when
it's earned (v0.678–v0.737).
the world learned mail. sealed, defanged, capped letters between real
players' characters — server-side end to end, crew-only, and on their own near-instant
lane rather than the npc carrier's slow roads; the compose screen is still owed
(v0.701 · ADR-0202).
every item wears its own art and knows its worth. per-drop painting,
a 162-item rarity economy, and a wall of firsts every world keeps — each entry
tracing to the event that earned it (v0.717–v0.735 · ADR-0205/0206).
the game grew a touch language. selection chips, tap-to-play verbs,
honest movement — the iPad half of the household plays full-handed, and
everything still types (v0.736–v0.739 · ADR-0207).
two humans, one world, proven live. a desktop and an iPad in one
party at one table, AI companions rolling beside both
(31 jul 2026).
M0–M1 · the foundation + the first minute— shipped
the gate that shipped it: a stranger reaches a living world in under 60 seconds.
M2 · the vertical slice— largely complete
combat with an effect-VM, visible dice, multi-foe fights, boss phases (ADR-0024/0025).
walked dungeons with fog-of-war (ADR-0030); loot, equipment, economy —
and now every item wears its own art and knows its worth (ADR-0047/0205/0206).
death that means something: the foe that fells you remembers it (ADR-0040).
trust-gated reveals (ADR-0022), faction standing (ADR-0046), scene galleries.
open: full moderation pass, dream consolidation.
M3 · the living world— mostly live
a wall-clock world driver — days, phases, seasons (ADR-0011/0012/0014).
NPC letters that spend real days on roads (ADR-0072/0073); crew mail between players on its own near-instant lane, read-only in the client so far (ADR-0202); news that walks (ADR-0071).
an NPC relations web, ambient region chatter (the engine calls these "barks" — not the dog kind), and fights the whole town hears about (ADR-0104/0121/0125).
AI guildmates with souls and voices of their own — fighting beside you as
themselves, on their own visible dice (ADR-0116/0126 · v0.737).
open: the director brain, guilds.
M4 · multiplayer + the tools— well underway
parties, /join, shared brawls — two humans in one coherent world, proven
across devices at one table (ADR-0091/0103/0109 · 31 jul 2026).
the keeper's console (operator surface) and the campaign editor's CLI kit, pulled
forward from the roadmap because building worlds should not require the repo (ADR-0114/0119).
the beta gate: invite codes, an account join flow, and packaged deploy — the
machinery that turns a hello into a seat.
open: many-worlds-at-scale, moderation hardening.
and the household arc— the reason the front page exists
photo pets, the voice-and-mask system, the tonguelet tonic (ADR-0132/0138).
the vision seam: moderate → describe → defang → mint (ADR-0131).
photo foes with band-honest stats; render tiers; the ambient sketch limner (ADR-0139/0140).