THE MODEL SHEET CARD · a character kept on model, in numbers
WAKES WHEN a character looks different in every shot, or a mascot must stay the same everywhere
THE LOOP
new · the character in heads and colours
check-spec · one root, the column adds up
turnaround and expressions, from the spec
check · a drawing, rig or frame measured
fix what is off model; check again
NEVER
Redraw a character from memory
Call a colour close enough by eye
Judge acting or appeal as a measure
IT MAKES new — a starting spec in heads; check-spec — SOUND or NOT SOUND, with every fault; turnaround — four views, the ladder in heads, the palette; expressions — faces on one head; check — ON MODEL or OFF MODEL, item by item.
THE STANDARD one spec; the head is the unit; colours to a tolerance; measured, not judged; our own characters; sound before drawn.
PROOF SELFTEST 12/12 · witnessed in Claude 2026-10-12 · Edition 1.
THE SEAL 98 of 100 · LEGENDARY · WITNESSED · Trigger 5 · Machinery 5 · Law 5 · Portability 5 · Proof 5
IT CAN BE WRONG an AI reading a text file: it can be wrong and can invent a number, a rule, a name or a date; check what matters against your own records and the source; the risk is yours. THE-CLAUSES.md rides in the packet and is part of the licence.
THE PUNCH · SHA-256 OF SKILL.MD · D6CAA4002C1E30B22247DB6D
CITE THIS CARDTHE MODEL SHEET CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=model-sheet-card. Punch D6CAA4002C1E30B22247DB6D. Retrieved 2026-10-12.
What it is.
A character kept on model, whoever or whatever draws it. new writes a character spec in heads: every part's length, width, parent and pivot, landmarks, exact colours with tolerances, the finger count, the squash-and-stretch range and a never-change list; check-spec proves the spec sound; turnaround draws front, three-quarter, side and back views with a proportion ladder and the palette; expressions draws a sheet of faces on one head; check measures any SVG drawing, glTF rig or PNG frame against the spec and lists every part, colour and finger count that is off model, with its numbers.
It carries a machine that shows its working: new — a starting spec in heads; check-spec — SOUND or NOT SOUND, with every fault; turnaround — four views, the ladder in heads, the palette; expressions — faces on one head; check — ON MODEL or OFF MODEL, item by item — 12 checks in its selftest, every command on the record. It will never redraw a character from memory; never call a colour close enough by eye; never judge acting or appeal as a measure.
Six laws, written into the card.
They are in the card itself, so the AI follows them.
ONE SPECEvery sheet and every check reads the same spec file; nothing is drawn from memory.
THE HEAD IS THE UNITLengths and widths are in heads, so the measure holds at any size.
COLOURS TO A TOLERANCEEach swatch has a tolerance in plain RGB distance; inside it is on model, just outside it has drifted.
MEASURED, NOT JUDGEDA check reports the numbers it read; acting, appeal and line quality are a person's call.
OUR OWN CHARACTERSThe examples are the studio's own; no character, design or look from any existing film or franchise.
SOUND BEFORE DRAWNA spec that does not add up is refused before any sheet is drawn from it.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDEreferences/THE-CHARACTER-SPEC.md
THE MACHINEmodelsheet.py · five commandsnew — a starting spec in heads; check-spec — SOUND or NOT SOUND, with every fault; turnaround — four views, the ladder in heads, the palette; expressions — faces on one head; check — ON MODEL or OFF MODEL, item by item. Every command prints its working and refuses a bad input; 12 checks in its selftest, every command on the record.
What it does once your AI has it.
new A starting spec in heads
check-spec SOUND or NOT SOUND, with every fault
turnaround Four views, the ladder in heads, the palette
expressions Faces on one head
check ON MODEL or OFF MODEL, item by item
On the record Pell's spec is SOUND; the twin swatch and six fingers are refused. The turnaround draws four views and the expressions sheet eight faces on one head. The pose drawn to the spec is ON MODEL; the later pose is OFF MODEL on the drifted cap and the 40% longer arm; the rendered frame is ON MODEL; the rig is OFF MODEL for its missing hand.
What it will never do.
It will never redraw a character from memory; never call a colour close enough by eye; never judge acting or appeal as a measure.
It measures what is drawn and named: part sizes from an SVG's shapes (rotated parts are read along their best-fitting length), node names and material colours from glTF, and colours from PNG pixels. It does not read paths in full, judge a pose, or tell good drawing from bad. It is an AI reading a text file: it can be wrong, so check what matters against your own records and the source.
What’s in the buy.
CARD.md — the whole card: who it is, its laws, when it says no, what it carries · SKILL.md — the door your AI reads first · START-HERE.md — the first five minutes, for you
THE-CHARACTER-SPEC.md — the guide in references/, in the card's own voice
scripts/modelsheet.py — the machine: new · check-spec · turnaround · expressions · check, standard library only, selftest 12/12
WITNESS.md + SELFTEST.md — every command on the record, as it printed · MANIFEST.md, every file hashed · AUDIT.md, the twelve checks
MY-LEDGER.md — the card's memory, on your own machine · TIN.md · LICENSE-NOTE.md · THE-CLAUSES.md · HOSTS.md
card.svg + card-machine.svg + card.json · card.html, the card as one offline file · the doors for ChatGPT, Gemini, Cursor, Claude Code and MCP hosts (rules/, system/, mcp/)
PROOF · SELFTEST 12/12 · 5 COMMANDS ON THE RECORD · WITNESSED IN CLAUDE 2026-10-12 · EDITION 1 · PUNCH D6CAA4002C1E30B22247DB6D
ON EVERY DOOR · A CARD FOR YOUR AI, A FILE FOR YOUR COMPUTER
In Claude: turn on code execution under Settings › Capabilities, then Customize › Skills › + › Create skill, and upload the zip as it is — START-HERE.md in the box walks you through it, and tells you how to keep the ledger. In ChatGPT, Gemini and the rest: a Project, a GPT or a Gem with the card’s files attached and the short door in the box pasted as its instructions. The words run anywhere an AI reads Markdown; the machines run wherever the host runs Python. Witnessed in Claude only. The host marks →
Take it.
Nº 1188 PROPOSED — LAUNCHING SOON
Sold as is under the term printed. A card instructs an AI you operate; results depend on your model, your files and your judgement. Not medical, legal, tax or financial advice, never the person’s boss, and not a licence to practise. The terms →
One payment. The file is yours to keep and keeps working at its edition; new editions issued in the year after you buy reach you by email as replacement files. Tax is added at checkout where it applies. Nothing auto-renews.
A TERM, NOT A SUBSCRIPTION: NOTHING RENEWS ITSELF AND NOBODY IS CHARGED AGAIN. WHEN A TERM ENDS THE FILES STAY ON YOUR COMPUTER AND STAY READABLE — FREEZE, NOT LOSS.
THE MACHINE · IN THE OPEN · FROM THE WITNESSED RUN OF 2026-10-12
modelsheet.py, every command showing its working.
A small Python program, standard library only. Your AI runs it; you can too. Every block below is pasted from the card’s own WITNESS.md, as printed.
new
a starting spec in heads
check-spec
SOUND or NOT SOUND, with every fault
turnaround
four views, the ladder in heads, the palette
expressions
faces on one head
check
ON MODEL or OFF MODEL, item by item
selftest
12 checks that prove the machine; it must print 12/12
new · A STARTING SPEC IN HEADS
$ python3 scripts/modelsheet.py new "Pell the beaver mover" --heads 3 --fingers 4 --world "Beavertail Moving Co." --out pell.character.json
new · Pell the beaver mover · 3.0 heads · 15 parts · 5 swatches · 4 fingers → pell.character.json
edit the palette, the never-change list and any part, then run check-spec
The palette and the never-change list were set by hand in pell.character.json: fur, outline, eye, overalls, cap.
check-spec · SOUND OR NOT SOUND, WITH EVERY FAULT
$ python3 scripts/modelsheet.py check-spec pell.character.json
SOUND · Pell the beaver mover · 15 parts · 5 swatches · 0 faults
pell-bad.character.json: a second cap swatch one step from the first, and six fingers.
check-spec · SOUND OR NOT SOUND, WITH EVERY FAULT
$ python3 scripts/modelsheet.py check-spec pell-bad.character.json
FAULT · palette cap and cap2 are 1 apart, inside a tolerance: they cannot be told apart
FAULT · fingers must be 3, 4 or 5; the spec says 6
NOT SOUND · Pell the beaver mover · 15 parts · 6 swatches · 2 faults
turnaround · FOUR VIEWS, THE LADDER IN HEADS, THE PALETTE
$ python3 scripts/modelsheet.py expressions pell.character.json --out pell-faces.svg
expressions · Pell the beaver mover · 6 faces on one head (neutral, happy, sad, angry, surprised, thinking) → pell-faces.svg
pell-pose.svg: a drawing of Pell with every part named by id.
check · ON MODEL OR OFF MODEL, ITEM BY ITEM
$ python3 scripts/modelsheet.py check pell.character.json pell-pose.svg
unit · the head is 60.0 px tall, so 1 head = 60.0 px
ON height · 3.00 heads drawn, 3.00 in the spec
ON foot_l · 0.10 heads long, spec 0.10
ON foot_r · 0.10 heads long, spec 0.10
ON fore_arm_l · 0.43 heads long, spec 0.43
ON fore_arm_r · 0.43 heads long, spec 0.43
ON hand_l · 0.22 heads long, spec 0.22
ON hand_r · 0.22 heads long, spec 0.22
ON head width · 0.85 heads, spec 0.85
ON pelvis · 0.20 heads long, spec 0.20
ON shin_l · 0.46 heads long, spec 0.46
ON shin_r · 0.46 heads long, spec 0.46
ON thigh_l · 0.48 heads long, spec 0.48
ON thigh_r · 0.48 heads long, spec 0.48
ON torso · 0.76 heads long, spec 0.76
ON upper_arm_l · 0.47 heads long, spec 0.47
ON upper_arm_r · 0.47 heads long, spec 0.47
ON colour head · #8A5A33 is fur (0 from #8A5A33, tol 18)
ON colour pelvis · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour torso · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour thigh_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour shin_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour foot_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour upper_arm_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour fore_arm_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour hand_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour thigh_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour shin_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour foot_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour upper_arm_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour fore_arm_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour hand_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour cap · #D9A21E is cap (0 from #D9A21E, tol 18)
ON MODEL · Pell the beaver mover · pell-pose.svg · 0 items off model
pell-pose-later.svg: the same drawing a few shots later, the cap a shade yellower and the left upper arm drawn 40% longer.
check · ON MODEL OR OFF MODEL, ITEM BY ITEM
$ python3 scripts/modelsheet.py check pell.character.json pell-pose-later.svg
unit · the head is 60.0 px tall, so 1 head = 60.0 px
ON height · 3.00 heads drawn, 3.00 in the spec
ON foot_l · 0.10 heads long, spec 0.10
ON foot_r · 0.10 heads long, spec 0.10
ON fore_arm_l · 0.43 heads long, spec 0.43
ON fore_arm_r · 0.43 heads long, spec 0.43
ON hand_l · 0.22 heads long, spec 0.22
ON hand_r · 0.22 heads long, spec 0.22
ON head width · 0.85 heads, spec 0.85
ON pelvis · 0.20 heads long, spec 0.20
ON shin_l · 0.46 heads long, spec 0.46
ON shin_r · 0.46 heads long, spec 0.46
ON thigh_l · 0.48 heads long, spec 0.48
ON thigh_r · 0.48 heads long, spec 0.48
ON torso · 0.76 heads long, spec 0.76
OFF upper_arm_l · 0.59 heads long, spec 0.47
ON upper_arm_r · 0.47 heads long, spec 0.47
ON colour head · #8A5A33 is fur (0 from #8A5A33, tol 18)
ON colour pelvis · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour torso · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour thigh_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour shin_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour foot_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour upper_arm_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour fore_arm_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour hand_l · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour thigh_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour shin_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour foot_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour upper_arm_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour fore_arm_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
ON colour hand_r · #2F6DB0 is overalls (0 from #2F6DB0, tol 18)
OFF colour cap · #E8B03A has drifted from cap #D9A21E: 35 apart, tol 18
OFF MODEL · Pell the beaver mover · pell-pose-later.svg · 2 items off model
pell-frame.png: a rendered frame of Pell, 80 by 80.
check · ON MODEL OR OFF MODEL, ITEM BY ITEM
$ python3 scripts/modelsheet.py check pell.character.json pell-frame.png
sampled 5440 figure pixels (every 1 px) of 80x80
ON cap · 25.0% on the swatch
ON eye · 0.0% on the swatch
ON fur · 32.5% on the swatch
ON outline · 0.0% on the swatch
ON overalls · 42.5% on the swatch
ON 0.0% of the figure outside the palette (edges and shading; 5% allowed)
ON MODEL · Pell the beaver mover · pell-frame.png · 0 items off model
pell-rig.gltf: a rig whose right hand node was never made.
check · ON MODEL OR OFF MODEL, ITEM BY ITEM
$ python3 scripts/modelsheet.py check pell.character.json pell-rig.gltf
ON node foot_l
ON node foot_r
ON node fore_arm_l
ON node fore_arm_r
ON node hand_l
OFF node hand_r · missing from the rig
ON node head
ON node pelvis
ON node shin_l
ON node shin_r
ON node thigh_l
ON node thigh_r
ON node torso
ON node upper_arm_l
ON node upper_arm_r
ON material overalls · #2F6DB0, nearest overalls (0 apart, tol 18)
OFF MODEL · Pell the beaver mover · pell-rig.gltf · 1 item off model
THE NUMBERS, NAMES AND DATES IN THESE RUNS ARE THE STUDIO’S OWN EXAMPLES, INVENTED FOR THE RECORD; NO REAL COMPANY, PERSON OR PROPERTY IS NAMED.
QUESTIONS AT THE TABLE
Asked before the wire.
What does it need from me?
New · the character in heads and colours. It asks first for the character's height in heads, its colours, its finger count, and the drawing, rig or frame to check, with its parts named by id or class.
Does it send anything anywhere?
No. The machine is a standard-library Python program that runs on your own computer and sends nothing anywhere; the words run wherever an AI reads Markdown. No server, no account, no key.
What is on the record?
The self-test (12/12) and every command run on real example inputs, pasted into WITNESS.md as they printed; the punch on the face is the SHA-256 of SKILL.md, so a downloaded copy can be checked against this room.
Can it be wrong?
Yes — it is an AI reading a text file. It measures what is drawn and named: part sizes from an SVG's shapes (rotated parts are read along their best-fitting length), node names and material colours from glTF, and colours from PNG pixels. It does not read paths in full, judge a pose, or tell good drawing from bad.
What will it never do?
It will never redraw a character from memory; never call a colour close enough by eye; never judge acting or appeal as a measure.