Building out the prop library
This is a working guide, not a spec. It exists because **the library is incomplete and the
system knows it**: the boards hold 787 prop images, the scripts require 179 distinct props,
and only 17 of them exist. Everything below is about closing that gap without the world
falling apart along the way.
1. The two axes
Every prop sits on two axes, and confusing them is the main way a prop library goes incoherent.
| axis | question | example | file |
|---|
| Category | what IS it? | weapon, tech, vehicle, carried | knowledge/categories/ |
| Design family | what does it LOOK like? | organic fleshy tech, sleek brushed metal | knowledge/families/ |
The families cut across the categories. An organic gun belongs with an organic device, not
with a brushed-metal gun. So:
**Style inherits from the FAMILY. The category only decides the look — scene block vs isolate
grade — and the framing conventions.**
This is why "the bio-engineering stuff should all look the same" works as a rule: it's one
family (organic_fleshy_tech, 257 images) spanning weapons, devices and vehicles.
The four families, induced from the prompts
| family | images | what marks it |
|---|
| Organic Fleshy Tech | 257 | translucent rubbery skin, sub-surface scattering, fish-spawn forms, bone-like structure |
| Sleek Brushed Metal | 171 | brushed metal/aluminium shells, ribbed rubber grips, seamless minimal forms |
| Viscose Medical Prosthetics | 78 | wet saggy latex, faint veins, visible hairs, gooey |
| Off-White Composite | 56 | matte off-white composite, simple rubber grips, lightly worn |
A fifth bucket, unclear (225 images), is not a family. Those are edit instructions —
"make it smaller", "change the grip to <R>" — that describe no material of their own and
inherit whatever their reference was. That is correct, not a gap.
2. The two looks
Separate from family. This is how it's photographed, and it splits by category with no
overlap at all:
- Look A — scene block. The appended cinematography JSON (ARRI Alexa 35, 27mm spherical
prime, Fujifilm 3513 bleach bypass, 35mm grain). For props shown in an environment.
Vehicles and carried items use it. Weapons never do — 0 of 264.
- Look B — isolate grade. `Neutral background. Low saturation with restrained dark yellow
and amber tones, subtle green-grey in shadows, balanced exposure.` For props shot alone.
Weapons and tech use it. Vehicles and carried items never do — 0 of 257.
If you are about to put a weapon in an environment, you are doing something the show has never
done. That may be right — but do it knowingly.
3. Where the world is actually established
The style matrix (live at /api/worklist-page) is the map of what a new prop can inherit:
| family | weapon | tech | vehicle | carried |
|---|
| Organic Fleshy Tech | 85 | 143 | 25 | 4 |
| Sleek Brushed Metal | 67 | — | 97 | 7 |
| Viscose Medical Prosthetics | — | 6 | 3 | 69 |
| Off-White Composite | 45 | — | 6 | 5 |
Read the zeros. Two of the four families have never produced a single piece of tech — and
24 of the 47 outstanding design jobs are tech. So most of the tech backlog has nothing to
inherit: each one carries a proposed family (§4) but the proposal is reasoning, not
precedent, and confirming it establishes a new corner of the world rather than extending an
old one. Those are the ones to look at hardest.
The novel narrows some of this — it calls the data pad an array, "small handheld", with a
"screen to unfurl" — but not most of it. See /api/canon-page.
The general shape: style is furthest ahead exactly where the object list is furthest behind.
| category | images we have | design jobs left |
|---|
| weapon | 264 | 5 |
| tech | 154 | 24 |
| vehicle | 145 | 11 |
| carried | 112 | 4 |
4. The loop for adding a prop
Work from /api/worklist-page. For each job:
① Confirm the family — before you generate anything.
Every job already carries a proposed family. You are reviewing, not inventing. The
confidence badge says how much to trust it:
book — the novel's own description points to it. Two jobs.
sibling — the show has already built similar objects there. Eighteen jobs.
function — reasoned only from what the object does. **Twenty-two jobs, and these are the
ones worth your attention** — they are the real art-direction calls wearing a default.
Touching the dropdown confirms it and moves the job to assigned. If the family × category
cell is empty you are establishing a new corner of the world: consider one deliberate "what
does an organic array look like" exploration before committing the rest of that category.
② Read the two files. The family file gives material and form. The category file gives the
look and the framing. Between them you have the whole style side of the prompt.
③ Write only what is specific to this object. Everything inherited should come from the
files, not be retyped. If you find yourself re-describing "rubbery fleshy translucent material"
by hand, that clause belongs in the family file instead.
④ Generate in Preview. Use the extension's panel to pull rules alongside the board.
⑤ Iterate mechanically, not verbally. Rotations, turnarounds, front/back splits and the
background switch are buttons. They use fixed proven phrasing and change one thing. Never
hand-write "now show me the back" — that is how you get a near-repeat instead of a rotation.
⑥ Lock it, and feed it back. A locked prop's prompt is evidence. If it introduced a clause
that should apply to the whole family, put it in the family file. **The files are the
deliverable, not the images** — images are what you get from good files.
5. When to write a new family
Only when a prop genuinely does not belong in any of the four. Symptoms of a real new family:
you are fighting the existing file rather than extending it, and you can name three other props
that would share the new language.
Otherwise extend an existing family. Four coherent families beat nine vague ones — the whole
value of the axis is that membership predicts appearance.
6. What is NOT a foundry job
The gap analysis found 129 missing props but only 47 need designing. The rest:
- 56 to source — beer glasses, wine bottles, a present-day Toyota pickup. Real objects that
exist. Don't generate them.
- 26 to dress — real objects needing light futurising.
Keeping these out of the design backlog is deliberate. A worklist that mixes "design the Eagle
II spaceship" with "get a beer glass" is a worklist nobody reads.
7. Honest limits of this system
State these to anyone using it, because each one can mislead:
- Script→prop mapping is a candidate set, not an assignment. A prompt mentioning "gun" maps
to every scene mentioning a gun. It narrows the field; it doesn't pick the scene.
- Aliases were merged by an LLM.
eagle ii spaceship / landing craft / spaceplane
became one job. If two of those really are different craft, split the job.
- Family assignment on the 225
unclear images is absent, not wrong. Those prompts describe
no material.
- Prop→faction is unsolved. It can't be inferred from the script — too noisy. Owner-naming
(whose gun is it) is the recommended route, and it needs a human.
- Coverage is measured against EP01 and EP02 only. 148 scenes. Later episodes will move the
numbers.
- Canon is mined, and thin in places. The novel was read for prop description — see
/api/canon-page. But it establishes far less than you would hope: of fifteen technologies
checked, only two gave enough to pick a design family. Where a family file says the novel
establishes nothing, that is a checked fact, not an unfilled box.
- Two families have no book canon at all (
organic_fleshy_tech,
viscose_medical_prosthetics). Those languages are the show's invention, not the novel's.
8. Where things live
| what | where |
|---|
| Rules & families, editable | /api/categories-page |
| Prop canon from the novel | /api/canon-page |
| Build-out worklist & style matrix | /api/worklist-page |
| Category rules | knowledge/categories/*.md |
| Family styles | knowledge/families/*.md |
| Mechanical button definitions | foundry/mechanical.py |
| Chrome extension | extension/ |
| Prop corpus | Postgres prompt_corpus (787 props, family + subject columns) |
| Design backlog | Postgres prop_worklist |