A hand-drawn book about AI and religion — Joseph the Jesuit, the Scientists of the Soul, the world's faiths racing to convert an emerging mind. It began as 113 sketchbook drawings and a question. The system that turns them into a book was stood up incrementally, one tested piece at a time, in conversation with Claude.
Not a repo. Not a spec. A sketchbook — 113 iPhone photos of ink drawings — and a premise: what happens to the soul when intelligence stops being ours alone?
The first decision was the most important one, and it wasn't technical: the drawings are
the source of truth. Everything downstream — style, pipeline, book — exists to serve them,
never to replace them. source/ is read-only. The pipeline may look; it may never touch.
The second decision: build no apparatus before the work demands it. No app, no framework, no GUI. A directory, a few Python scripts, and a running conversation where the actual intelligence lives.
No skills, no slash-commands, no agents. Directory conventions, a few command-line scripts, and one loop. The files are the memory; the conversation is where the loop turns.
your words (content) + style.py (the look, injected) + references/ (anchors) → gpt-image-1 → base.vN # appends — never overwrites
stylize.py — your drawing in, the house look out (the main path)generate.py — content-only prompt for the beats never drawn (the gaps)element.py — regenerate one surface inside a page, zero drift to the rest
art.png; every loser stays a live alternate.
style.py; a bug → code fixed + a ⚠ warning
atop the wave log. The loop closes tighter than it opened.
Before locking any style, the same source drawings went through a matrix of candidate looks — run-01. Not descriptions of styles: actual rendered images, reviewed side by side. The decision that shaped the whole book (a unified core with per-image gravities) was made by looking, not by speculating.
The style bible began loose: prose principles extracted from exemplars — Klimt's gold, woodblock flatness, Secession structure — plus a palette file and reference anchors. It was allowed to stay unlocked until the work proved what it should be.
Then the first full build taught a hard lesson. Thirty-nine beats rendered as a patchwork — each gravity had been fed a different style family, and the Mignola anchors bled literal Hellboy into Joseph's face. The fix became Recipe v2: one fused blend fed to every image, Mignola dropped entirely (his mood survives in prose only), gold made structural — circuit-traces and keylines, the swirls cut in half — and the palette locked to four values.
mignola-*.png as image refs —
likeness leaks. Every hard-won generation gotcha goes straight into the style bible's AVOID list
and CLAUDE.md, so the system can't relearn it the expensive way.









The story starts as a telling — voice-dictated, freeform, typos and all —
captured immediately into book/narration.md, so the source of truth is a versioned
file, never a chat scrollback.
From the telling, beats.yaml: 39 beats under 8 movements. Each beat carries its
story slice, its source sketches, and a gap note. That one file makes the central
production decision, per beat: a sketch exists → stylize it; a gap → generate.
By ch02b the boards had evolved into JSON with the collaboration protocol built in:
the director's words ride along verbatim in a matt field; Claude's proposals are
flagged "proposed": "claude" — strike or edit freely; and every row names 2–3
compositional variations (framing, camera, count) — never style variations, because
the recipe owns the style.
- id: b01 movement: 'A: The charge' story: Open on J and an off-camera interlocutor — breakfast table or office, minimal. The conversation begins. images: [IMG_7066.JPEG] # a sketch exists → STYLIZE it - id: b02 story: 'Galileo, ostracized: heliocentrism decenters man…' images: [] # no sketch → the gap says GENERATE gap: 'need: Galileo / heliocentric decentering'
{ "n": "s01", "moment": "The trio, walking",
"image": "Wide: Joseph + humanoid robot + Great Pyrenees on a
park path, golden hour — long shadows, big negative-
space sky, the dog a white mass against spot-blacks…",
"register": "scene",
"matt": "or have we made a companion on this journey…", // the director, verbatim
"note": "THE anchor scene… SCENE-FAMILY: the whole spine IS
s01's family — generate s01 first, feed the winner
into every other spine row.",
"variations": [ "profile frieze, strict side-view procession",
"trailing 3/4 view, path curving into dusk",
"high wide — trio small, park huge" ] } // compositional, never style
If a beat has a sketch, the pipeline stylizes the sketch. It never generates a substitute from scratch. The composition, the gesture, the idea — those stay yours; the recipe supplies surface, palette, and light. Generation-from-nothing is the exception, reserved for the handful of beats that were never drawn.
Once hundreds of candidates existed, the bottleneck moved: not making images but arranging them. So the system grew a composition canvas — a zoomable board per chapter where candidates from the pool get placed, compared, sequenced into the scroll.
Every feature below was added the day a real compositional need surfaced it — never speculatively. That's the whole ergonomics method: compose until it hurts, then build exactly the relief.
All 39 beats of chapter one have art. Chapters two, the ch02b interlude, and three have full
candidate pools — roughly 800 generated images across the book, every one versioned, none
overwriting another. Below: the sea → snap reader — the whole book drifts as a
churning sea of fragments behind one fixed page-frame; turn the page and the panels fly out of
the sea and settle into composition, then dissolve back. It reads the same
canvases/ch01/canvas.json the composition board produces — arrange the canvas,
and the book turns.
Now comes the text layer — and it was designed to come last. Dialogue is written
after images are composed, in Markdown, placed by normalized coordinates in
page.yaml. The art never carries a word; re-cutting the book means editing YAML,
never touching a PNG.
art: art.png # text-free, always text: - md: "But what of our *souls*?" at: [0.62, 0.18] # normalized 0–1 — resolution-independent style: whisper enter: bloom # earned move, progressive enhancement
The book doesn't answer its question — it's an act of attention. The system was built the same way: look first, then decide, then lock.