thought Experiment on thought Experiments
Films are thought experiments. Critics review them as art; I wanted to read them as physics. So I built Movie Substrate — a tool that runs ten thousand films through the emergence framework and asks each one two questions: where did you hide consciousness, and which rule of reality did you change?
It turns out cinema has been running a massive, uncoordinated research program on reality for a century. Zootopia moves minds onto animals so it can talk about prejudice without triggering anyone’s defenses. Children of Men changes exactly one number — human fertility, set to zero — and traces the collapse upward through institutions and states. Nobody planned this corpus. But once you tag every film consistently, the patterns are right there: a diagonal plane running from the substrate a story wears to the rung of reality it actually fights on.
The Two Lenses
Every film gets read twice, against the same E0–E14 ladder from The Arena — spacetime at the bottom, minds in the middle, civilizations at the top.
The transposition lens asks who carries consciousness. Some films move minds onto substrates that don’t have them in reality — animals, machines, toys, the dead — and use that displaced universe to examine one or two aspects of our world at a distance. The lens records the substrate (the disguise), the story levels (where the subject never left), and the abstracted plane: which aspects of reality the storyteller kept at full resolution, compressed into single-word keywords so they aggregate across films. Toy Story wears E3 plastic but fights at E8/E9 — identity and obsolescence. That’s the payload; the toys are the trojan carrier.
The parameter-shift lens asks which dial of reality the film turns. A certain kind of film is best understood as a controlled experiment: freeze one parameter at a non-actual value, hold everything else constant, run the machine forward. Groundhog Day breaks time at E0 and spends its whole runtime at E8, inside one mind under infinite repetition. The Ring installs a standing rule — watch the tape, die in seven days — and rigorously traces life under it. The lens records the shifted level, the parameter, the scope, and a rigor grade: did the world re-emerge lawfully from the shift, or bend for plot?
The interesting measurement is the gap between where the dial sits and where the consequences land. Turn a dial at E0, watch ripples at E10. That transmission is what the film is actually about.
Architecture: A System That Runs Itself
A weekly cloud job discovers films from TMDB, fetches Wikipedia plots, analyzes them
through two lenses with an LLM, and publishes static files to shared hosting. Films without a plot enter a
retry queue that is re-checked weekly. The browser reads a columnar Parquet file over HTTP range requests.
A scheduled cloud job runs the whole chain every Monday — discover, enrich, analyze, render, publish, report — and the pieces that fail are designed to fail softly and try again. A film with no Wikipedia plot is not dropped; it goes into a queue that is re-checked every week. Last week that queue noticed thirty-four films the encyclopedia had caught up on since it last looked, and read them without being asked. That is the dashed loop in the diagram, and it is the closest thing here to behaviour I did not explicitly design — persistence plus patience, producing a catalog that grows while I am asleep.
The catalog ships as a single columnar Parquet file, and the browser reads it as a tiny embedded reader issuing HTTP range requests for exactly the columns the current view needs. First paint pulls the analytic columns — levels, substrates, keywords, years — and the heavy display columns (cast lists, poster URLs) stream in behind it. The old JSON file stays on as a fallback, so a reader failure degrades to a slower load instead of a broken page.
The Analysis Pipeline
Each film is one LLM call per lens against a fixed system prompt that encodes the framework: the fifteen-level ladder, the substrate taxonomy, a controlled vocabulary of about forty keywords, and — this is the part that took real work — the calibration rules. The model must answer in structured JSON; prose is rejected.
I piloted each lens on a handful of hand-picked films before scaling, and every pilot round produced a rule the prompt needed. Transformation is not transposition (a cursed prince is still a human mind). An event is not a parameter — unless it installs a new standing rule the world must run on, which is why A Quiet Place counts and a comet strike doesn’t. Allegory is not an experiment: Zootopia’s talking animals belong to the transposition lens, not the counterfactual one. Ghosts as atmosphere don’t count; an afterlife whose citizens persist only while the living remember them does, because the film derived a system from the rule.
Quality: No Wikipedia Plot, No Analysis
Early batches analyzed films from whatever text was available, including two-sentence marketing synopses. That invites the model to invent plot details — confident, plausible, wrong. The fix became a hard rule across every pipeline: a film without a substantive Wikipedia plot does not get analyzed. Skipped films go into a retry queue and get re-checked weekly; the week Wikipedia gains the plot, the film joins the catalog.
The other quality instrument is an audit loop. I ran an adversarial second pass over 629 films classified as “reality unaltered” — a prompt whose only job is to refute the classification. It flagged 169. Adversarial prompts want to find things, so most of that was noise (it flagged Hereditary because demons aren’t real, which is precisely the exclusion rule working as intended on the first pass). Every flag then went to the calibrated standard prompt as arbiter. Final score: 19 genuine corrections, about a 3% miss rate — Doctor Strange’s time loop, The Ring’s tape rule, Spider-Verse’s collapsing multiverse. The pattern in the misses: genre films whose one load-bearing rule hides among decorative wonders.
A Weekly Radar That Feeds Itself
New releases arrives automatically. A scheduled cloud job wakes every Monday, discovers the week’s films from TMDB, pulls Wikipedia plots, runs the analysis, renders the film pages, publishes them to the live site over SFTP, pushes a fresh version of the public Kaggle dataset, and send me notifications. It’s stateless — the live data file is its only memory — and idempotent, so a re-run never duplicates anything. Films that lack a Wikipedia plot are remembered and retried for up to fifteen weeks. When something breaks, I get an alarm with the traceback; when nothing qualifies, I get one quiet line.
Plugging Into Prometheus
This is where the chat I wrote about last time pays compound interest. Every analyzed film is embedded into the same Firestore vector store that holds my essays, so Prometheus can answer “recommend films about grief where consciousness hides in machines” with grounded picks — and the frontend renders them as poster cards with ratings and substrate chips linking back to the film pages.
The starter questions are context-aware in both directions. Arrive at the chat from a page and the suggestions are about films. Arrive from a filtered atlas view — say, substrate=machines, keyword=grief — and the starters are templated from your exact drill-down. The tool and the chat form a loop: explore, drill, ask, get recommendations, land on a film page, click back into the atlas filtered to that director.
Shares That Carry the Thesis
Each film page emits a generated 1200×630 share card: the poster, plus the reading itself — the level chips in the site’s colors, cyan for where the story fights, mint for where reality got altered, the substrate line. A share of The Matrix shows E0 in mint next to E9/E10 in cyan: the whole thesis of the film, legible in a feed before anyone clicks.
Cost Breakdown
| Item | Cost |
|---|---|
| Analysis, per film per lens (gpt-oss-120b via OpenRouter) | ~$0.001 |
| Entire corpus to date — pilots, 10k backfill, audits, re-runs | under $50, one-time |
| Hosting | $0 marginal (rides the blog’s shared plan + CDN) |
| Cloud (weekly radar, secrets, scheduler, usage metrics) | < $2/month |
| Weekly radar run | ~$0.03 |
| Wikipedia plots, TMDB metadata, Kaggle hosting, Telegram | $0 |
Built with Claude Code
The entire system — both analysis lenses and their calibration rounds, the atlas, the exporter, the cloud radar, the Prometheus integration, the share cards, the audit loop — was built with Claude Code. The workflow that worked: pilot small, inspect results together, name the failure modes, encode them as rules, then scale. (lookback at what works, fix what’s not)- repeat indefinitely.
What’s Next
The parameter-shift data enables a second heatmap the atlas doesn’t have yet: shift level against traced level — turn a dial low, watch where the ripples land. That diagonal is the reason the second lens exists, and the data is finally in place to draw it. Beyond that: the full 38k-film catalog is one config change away, the columnar data layer is already sized for per-episode television — I want to watch a series drift up the ladder across seasons, the way Breaking Bad migrates from one mind’s chemistry to an organization’s logic — and the corpus itself is on Kaggle for anyone who wants to find patterns I haven’t.
Explore it at emergencemachine.com/tools/movie-substrate, read the methodology for the honest caveats, or just ask Prometheus what to watch.
The experiment is running. Interact and give attention to its progress.

