Plottomatic: rewriting a 1928 plot machine
I have a new project called Plottomatic that publishes plot hooks to a Bluesky account. The hooks look like this:
Zubeyda faked her death to escape the underworld, but now someone's using her name to pull jobs across the city.
I’ll show you the complete plot synopsis later. The point is, these plots aren’t written by me. They are created by a tool based on Plotto, a 98-year-old book.
Stick with this—I promise it will all make sense soon.
First, a word about Plotto and its author
Plotto, the 98-year-old book, contains a strange, ingenious, and deeply flawed plot-generation system. It was first published by William Wallace Cook in 1928, and was famously read by Alfred Hitchcock and Erle Stanley Gardner.
Cook was a prolific writer (said to have worn out over twenty-five typewriters), and he designed Plotto first as a tool for himself and later for authors everywhere.
To create a plot using Plotto, you pick a protagonist, a conflict, and a resolution from the lists in the book, then trace the numerous possible connections between the conflict entries to assemble a complete story structure. The book catalogs and cross-references 1,462 dramatic conflicts.
If you think all this sounds like a fantastic machine straight out of science fiction, you’re not wrong. It works like a clunky mechanical device, and as Paul Collins noted in his foreword to Plotto’s 2011 reissue, the system has a machinelike logic. In practice, it’s an analog story machine packaged in the form of a book.
And to those like me interested in code, design, and writing, this machinelike logic makes Plotto irresistible: it’s a physical object asking for a digital solution.
Plottomatic is a demonstration of this solution. It’s a daily execution of the machinelike logic detailed in Plotto—with the exception that it uses a completely rewritten version of the text.
Why not use the original text? Because everyone who attempts this runs into the same problem.
The problem with Plotto
Plotto’s language is breathtakingly discriminatory. It is sexist, with claustrophobic and confining gender stereotypes, and it is racist, with disparaging, nauseating references to alien blood and inferior race. (For examples, see Gary Kacmarcik’s hyperlinked edition of the original text.)
This puts us in a difficult situation. No matter how interesting and valuable a contemporary reader may find Cook's dramatic structures, his language often renders them unusable. (The 2011 Tin House reissue appears to tone down some of the most explicit racial wording, but the underlying conflict structures remain unchanged.)
Let’s examine this more closely:
- Gender is hard-coded into the system, and as reflected in the original Plotto character symbol list, many entries assume a fixed social order.
- Racism is also hard-coded. At first glance, this looks like a dealbreaker. The entries that use race to drive the plot appear impossible to preserve or use.
One more thing—even where the content appears salvageable, Plotto’s prose can sound terse and abstract. It reads like someone penciling notes on index cards. A complete solution would need to address that as well.
So far this doesn’t look good, but…let’s do this!
Building the source
To begin with, I needed a clean source. Gary Kacmarcik created the original digitized version of Plotto. David Eyk built an XML version from this, and in doing so corrected a number of broken cross-reference links.
I started with Eyk’s XML as the source file. Then I parsed it into a dataset containing entries, permutations, categories, and links between conflicts. Meanwhile, Pankaj Agarwal’s Flutter implementation showed me how I could shape this data model and think about it as application data.
Now that I had the basic source and the data model structure, I began to consider how to address Plotto’s inherent problems.
Lynn Cherny wrote an extensive article about her work with Plotto and documented the numerous gender and race-related issues she encountered—she ultimately chose not to publish her work. I can empathize.
At this point, things were looking a little better as the shape of the project grew clearer to me. Paul Collins noted the machinelike logic that makes Plotto so compelling in the first place. Lynn Cherny, approaching from the other direction, showed why this plot system could not simply be digitized and released unchanged.
Plottomatic exists between those two insights. It keeps the engine Collins admired, but rewrites the manuscript Cherny found unusable.
Working through the source also revealed one more insight that allowed this project to succeed: the sexism and racism in Plotto come from Cook's implementation of the plot conflicts, not the structural cores of those conflicts. Removing these unnecessary details would reveal the basic, universal versions of these conflicts.
In other words, the structural core of every entry proved salvageable. Suddenly the project looked simple again, or at least achievable. Probably.
Fixing the sexism and racism
I counted 822 entries that contained gendered dynamics. This included everything from the use of the word suitor to power issues like tyrannical wife. This led to the first big decision: get rid of gender completely, and start by cutting the character codes.
Cook's character codes (A, B, A-2, B-3) may appear neutral. They are not.
A is always male, and most often the protagonist who acts. B is always female, and is defined in relation to A. A-3 is the male rival. B-3 is the female rival, but in practice she's almost always a designing woman competing for A's attention. The character codes assign dramatic agency by gender and establish an inflexible, antiquated view of society.
Fortunately, they can be easily replaced with role labels: Protagonist, Rival, Ally, Love Interest. Why restrict the possibilities? Let’s allow anyone to be anything, regardless of gender, and let the writer add the gender and character type themselves after the conflicts are established.
Among the 45 entries I counted that contained racial content, 38 use race directly as a plot mechanism. Early on, these looked like an insurmountable challenge. What can we possibly get from a white man stranded among savages? Stripped back to its core, however, the conflict here is actually a person alone in a hostile community—a universal problem any character can relate to.
Now that I understood this, the replacement solutions started to flow: suitors became admirers, tyrannical wives became tyrannical spouses, and racial tension stripped to its core revealed hidden identities, class differences, and cultural collisions.
Here’s the thing—the drama remains the same when you remove the premise that some people are worth less than others.
If only it were this simple everywhere.
AI for batch rewrites
With this strategy, I brought out my ace card: AI as an editorial transformation tool.
Rewriting the hundreds of conflict entries by hand was possible…but not fun. I tried it once. The entries are all terse, compact instructions that contain a lot of repetition. However, this makes them the perfect target for an AI model set up as a strict editor—that is, a model that isn’t allowed to get creative and crazy.
I wrote a batch script that sent each entry to Claude with a rewrite prompt. This reworked each entry according to a fixed set of rules, validated and repaired the JSON response, recorded content flags, and wrote the cleaned dataset.
This is the essence of the rewrite prompt:
- Replace Cook’s gendered character codes with neutral role labels.
- Flag other gendered content.
- Flag and remove racist framing while leaving the dramatic tension untouched.
- Leave anachronisms and other dated vocabulary intact.
- Retain the compressed style that makes Plotto feel like Plotto.
The model also flagged all entries it wasn’t sure about as uncertain.
The first pass took half a day of processing and handled the bulk of the work. In practice, most of the entries were decent. Some were less successful. The model tended to weaken language that should have stayed sharp—for example, unworthy, changed to of questionable character—and it seemed adept at flattening vivid situations into generic, throwaway scenes. And, of course, there was the usual collection of minor misses.
But all in all, this was a huge timesaver. Now the only thing left was the human editorial work: I reviewed 1,852 entries by hand, in sequence, comparing their original texts side by side with the cleaned versions and making hundreds of corrections over a few very long days of review.
AI continued to be a boon here, scanning the 149,000-line document in seconds. It did everything from answering questions about phrasing consistency within related items to tracking conflict patterns such as How many entries contain wax figures used as fake people? (Answer: 3—including placing a wax figure in bed to fool burglars while sleeping in a locked closet.)
By the end of the process, the source was better than cleaned. It had become a reconstructed edition of the Plotto system.
What the machine produced then vs now
Plottomatic has two main tasks. The first walks through the updated version of Plotto and builds the structural outline of a plot. The second passes the structural outline to an LLM that synthesizes it into a finished demo plot with characters, theme, setting, and other details.
The Zubeyda plot comes from the same four structural points Cook would have used in 1928. Here’s what that process looked like using his original text.
Step 1: Choose your framework from the clause wheels
Open to the front matter. Pick one from each column:
- A Clause (Person): 10. A Resentful Person
- B Clause (Action): (42) Encountering a would-be transgressor and seeking to prevent a transgression
- C Clause (Outcome): (8) Foils a guilty plotter and defeats a subtle plot.
Step 2: Find your starting conflict
B Clause 42 points you to conflict 1275. Turn to that page.
Step 3: Read and follow the conflicts
1275:
A, supposed to be dead, assumes a fictitious name * A, supposed dead, discovers an imposter, A-5, using his name and pretending that he is A
The conflicts listed below entry 1275 include 658. Turn to that page.
658:
A, a man of high standing in his community, fears that through unusual conditions his character will be discredited * A seeks to safeguard his reputation, which is threatened by unusual conditions
The conflicts include 1233 -*. The notation -* means: use the clause after the first asterisk, i.e. permutation 2. Turn to that page.
1233:
A finds himself in danger because he has innocently undertaken the custodianship of a mysterious package, X * A, in danger because he is the custodian of a mysterious package, X, contrives a dummy package, X2, exactly counterfeiting X in appearance
The conflicts include 980 -*. Again, permutation 2. Turn to that page.
I know, that’s a lot of page-turning. You’re almost done.
980:
A, by undertaking an obligation finds himself threatened by misfortune * A, by concealment and stratagem, transfers a dangerous obligation to A-8, a stranger
No further conflicts selected. The chain ends. Time for a snack.
Step 4: Assemble your masterplot
A resentful man, supposed to be dead, has assumed a fictitious name. He discovers a criminal using his name and impersonating him. A man of high standing in his community, he fears that under these unusual conditions his character will be discredited, and seeks to safeguard his reputation. He finds himself in danger when he innocently undertakes custody of a mysterious package, and contrives a dummy package that exactly counterfeits the original in appearance. By concealment and stratagem, he transfers the dangerous obligation to a stranger. He foils the guilty plotter and defeats the subtle plot.
This is what Cook's system produced in 1928: a gender-specific, structurally sound paragraph that feels flat and difficult to read.
Here’s the cleaned, raw material Plottomatic worked with for the Zubeyda hook from above:
Framework:
- Person: A Resentful Person
- Action: Encountering a would-be transgressor and seeking to prevent a transgression
- Outcome: Foils a guilty plotter and defeats a subtle plot.
Chain (from the cleaned version of Plotto):
-
1275 — The protagonist, supposed to be dead, assumes a fictitious name. The protagonist, supposed dead, discovers a criminal using the protagonist's name and pretending to be the protagonist.
-
658 — The protagonist, a person of high standing in their community, fears that through unusual conditions their character will be discredited. The protagonist seeks to safeguard their reputation, which is threatened by unusual conditions.
-
1233 — The protagonist finds themselves in danger because they have innocently undertaken the custodianship of a mysterious package, X. The protagonist, in danger because they are the custodian of a mysterious package, X, contrives a dummy package, X2, exactly counterfeiting X in appearance.
-
980 — The protagonist, by undertaking an obligation, finds themselves threatened by misfortune. The protagonist, by concealment and stratagem, transfers a dangerous obligation to a stranger.
Plottomatic takes these four entries and produces this plot:
Presumed dead after a warehouse fire, Zubeyda Okafor lives under an alias in the shadows of Detroit. When she discovers Thabo impersonating her to run cons using her notorious reputation, she realizes her carefully constructed new life is crumbling. The stakes escalate when she's forced to guard a briefcase containing stolen bearer bonds—the same bonds Thabo's been promising to fence. Creating a perfect decoy case, she orchestrates an elaborate switch that dumps the deadly obligation onto unsuspecting courier Riku, clearing her name while Thabo takes the fall for the original theft.
Plottomatic today and tomorrow
Why make the daily site Plottomatic? Partly because it’s fun, but mainly because it’s the easiest way to show the rewritten version of Plotto in action.
It’s not the only possible form. The rewritten manuscript could also support a much better print edition, which I would love to design. Not to mention an accompanying app—but that’s a story for tomorrow.
Cook built a remarkable machine, or at least the plan for one. I like to think he would appreciate the new version, where what survives from Plotto is not the antiquated language of its moment, but the shape and vigor of its dramas—the stuff that makes it all worthwhile.