PROOF SELFTEST 8/8 · witnessed in Claude 2026-10-11 · 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 · C64642344B82297D74753A52
CITE THIS CARDTHE LIGHT CARD, Edition 1. Lund Studio LLC, Westminster, Colorado. https://lundr.tech/?view=light-card. Punch C64642344B82297D74753A52. Retrieved 2026-10-11.
What it is.
An offline photo-grading engine built on the standard library alone. grade applies a recipe (exposure in stops, white balance as temperature and tint, an S-curve contrast that keeps black and white, saturation about each pixel's own brightness, levels, and optional auto levels and auto white balance) to a PNG in linear light and writes the recipe into the file; cube exports the recipe as a 3D LUT in the .cube format other editors load, and measures how closely it matches; recipe says in plain words what each adjustment will do; crop finds the largest box of a ratio inside a frame around a focus point.
It carries a machine that shows its working: grade — the recipe, applied; cube — the look as a 3D LUT; recipe — what each adjustment will do; crop — the largest box of a ratio — 8 checks in its selftest, every command on the record. It will never invent a look the owner did not ask for; never grade video; never write over the photo it was given.
Six laws, written into the card.
They are in the card itself, so the AI follows them.
LINEAR LIGHTEvery adjustment is made in linear light, then encoded back: +1 EV doubles the light.
NOTHING BY DEFAULTA key left out does nothing; an empty recipe changes no pixel at all.
GREYS STAY GREYSaturation works about each pixel's own brightness, so a grey is never tinted.
THE EDIT TRAVELSThe recipe is written into every file the card makes.
A LOOK EXPORTED, MEASUREDA .cube carries the fixed part of a recipe, and the machine says how closely it matches.
ITS OWN FORMATSPNG only, read and written by the card itself; JPEG, HEIC and video are refused plainly.
What rides in the card.
In the card’s own voice, with a machine that shows its working.
THE GUIDEreferences/THE-LIGHT.md
THE MACHINElight.py · four commandsgrade — the recipe, applied; cube — the look as a 3D LUT; recipe — what each adjustment will do; crop — the largest box of a ratio. Every command prints its working and refuses a bad input; 8 checks in its selftest, every command on the record.
What it does once your AI has it.
grade The recipe, applied
cube The look as a 3D LUT
recipe What each adjustment will do
crop The largest box of a ratio
On the record PLAIN reads back in words and a recipe with an out-of-range exposure and an unknown key is refused; a 64 × 48 test photo is graded and the recipe written into it; the look is exported as a 17-point cube; a 4:5 box in 4000 × 3000 is 2400 × 3000; a JPEG is refused plainly.
What it will never do.
It will never invent a look the owner did not ask for; never grade video; never write over the photo it was given.
PNG only (8-bit grey, RGB, RGBA); JPEG, HEIC, 16-bit, interlaced PNG and video are refused. Pure Python is slow on large photos: seconds to read a 12-megapixel file. A .cube cannot carry the auto adjustments. 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-LIGHT.md — the guide in references/, in the card's own voice
scripts/light.py — the machine: grade · cube · recipe · crop, standard library only, selftest 8/8
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 8/8 · 4 COMMANDS ON THE RECORD · WITNESSED IN CLAUDE 2026-10-11 · EDITION 1 · PUNCH C64642344B82297D74753A52
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º 1160 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-11
light.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.
grade
the recipe, applied
cube
the look as a 3D LUT
recipe
what each adjustment will do
crop
the largest box of a ratio
selftest
8 checks that prove the machine; it must print 8/8
recipe · WHAT EACH ADJUSTMENT WILL DO
$ python3 scripts/light.py recipe plain.json
plain.json · 2 keys · checked
ev +0.15 · brighter by 0.15 stops: all light ×1.110; middle grey 118 becomes 124
contrast +8 · more: an S-curve about middle grey (18% light)
black, middle grey and white stay put; 64 becomes 61 and 192 becomes 195 (of 255)
the order, all in linear light: levels, white balance, exposure, contrast, saturation; light past white is clipped
cube can write it as a LUT
recipe · WHAT EACH ADJUSTMENT WILL DO
$ python3 scripts/light.py recipe bad.json
ev runs from -3 to 3 stops: 9 is out of range
grade · THE RECIPE, APPLIED
$ python3 scripts/light.py grade photo.png --recipe plain.json --out photo-plain.png
photo.png → photo-plain.png · 64 × 48 px (0.00 megapixels) · RGB · 0.00 s
read 0.00 s · grade 0.00 s · write 0.00 s · 6,307 bytes in, 6,367 bytes out (filter none)
the recipe applied, in linear light:
ev +0.15 · brighter by 0.15 stops: all light ×1.110; middle grey 118 becomes 124
contrast +8 · more: an S-curve about middle grey (18% light)
black, middle grey and white stay put; 64 becomes 61 and 192 becomes 195 (of 255)
written into the file as LightRecipe: {"contrast": 8, "ev": 0.15}
cube · THE LOOK AS A 3D LUT
$ python3 scripts/light.py cube plain.json --size 17 --out plain.cube
plain.json → plain.cube · TITLE "plain" · 17 × 17 × 17 = 4,913 points · 132,926 bytes
ev +0.15 · brighter by 0.15 stops: all light ×1.110; middle grey 118 becomes 124
contrast +8 · more: an S-curve about middle grey (18% light)
black, middle grey and white stay put; 64 becomes 61 and 192 becomes 195 (of 255)
auto_levels and auto_wb never go into a cube: they are measured on each photo, and a LUT is one fixed transform
read back as most editors read it (between its points, trilinear) on 13,824 test colours:
largest difference 2 of 255, average 0.12, against grade
crop · THE LARGEST BOX OF A RATIO
$ python3 scripts/light.py crop 4000 3000 --ratio 4:5
4000 × 3000 px · ratio 4:5 · focus at the centre
x 800 y 0 w 2400 h 3000
the box keeps 60% of the width and 100% of the height; its ratio is exactly 4:5
crop · THE LARGEST BOX OF A RATIO
$ python3 scripts/light.py crop 4000 3000 --ratio 4:5 --focus 3900,1500
4000 × 3000 px · ratio 4:5 · focus at 3900, 1500 px
x 1600 y 0 w 2400 h 3000
the box keeps 60% of the width and 100% of the height; its ratio is exactly 4:5
grade · THE RECIPE, APPLIED
$ python3 scripts/light.py grade photo.jpg --recipe plain.json --out x.png
this is a JPEG: convert it to PNG first; the machine cannot read JPEG without a library
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?
Write the recipe; read it back in words. It asks first for the photos as PNG (JPEG converted first), and the look in plain words or as a recipe.
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 (8/8) 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. PNG only (8-bit grey, RGB, RGBA); JPEG, HEIC, 16-bit, interlaced PNG and video are refused. Pure Python is slow on large photos: seconds to read a 12-megapixel file. A .cube cannot carry the auto adjustments.
What will it never do?
It will never invent a look the owner did not ask for; never grade video; never write over the photo it was given.