10 ms·
Show HN: What 180k words look like as a temporal knowledge graph (Oz series)
The graph is free to explore and requires no registration.
SynapTale builds a model of a story as a temporal graph made up of nodes (entities) and edges (their actions and relationships).
The graph is not a visualization of the wiki. The wiki, timelines, relationship histories, and analytics are projections of the graph.
The current demo contains 232 entities, 1,852 edges, and a snapshot of the story’s state at every chapter. By chapter 100, it still remembers a promise made in chapter 8 and turns the story into a set of source-verifiable facts.
The most interesting things can be found in the graph itself and in the Analytics tab. A few things I found:
1. The character with the highest kill count is the Tin Woodman—the same character who cries over a beetle he accidentally crushed. Dorothy comes second, with three killing events.
2. Dorothy never deceives anyone during the first 100 chapters of the series.
3. The Scarecrow’s debt to the stork has remained active for 92 chapters, starting in chapter 8.
4. The Cowardly Lion ranks third by number of threats.
5. The first 100 chapters contain 60 secrets and 254 dialogue events.
Technical details
1. Five different multi-agent pipelines combining LLMs and NLP: a prescan, ontology construction, chapter-by-chapter graph extraction, retrospective validation over spans of dozens of chapters, and a linguistic prescan for speech profiles and linguistic edges.
2. A living story needs a living graph. It has to account for time, because entities and the relationships between them evolve. A simple is_active field is not enough.
I ended up with three types of edges:
event: an instantaneous action;
identity: a fact;
state: a persistent action whose termination requires justification and a supporting quote from the text.
The vast majority of edges are events and end in the same chapter in which they began. This allows the system to scale well, since only a minority of state and identity edges remain continuously active.
3. Ontology. You cannot simply ask an LLM to extract entities and relationships into a graph. With every chapter, even the smartest model will keep inventing unimportant fields, creating new aliases for existing fields, and representing the same fields inconsistently.
Before extracting the graph, the system therefore performs an ontology scan across the entire story. It captures story-specific entity and edge types, along with their fields and descriptions.
4. Epistemics. Events are only one part of a story. It is also important to understand how information is distributed, which is difficult to represent using event edges alone.
I addressed this by introducing a new node type: epistemic nodes, which capture different entities’ perspectives on the same fact. Subtle hints can still be missed, the system is not yet perfect in this area.
- popalchemist 2mo agoFor what purpose did you make this?
- ald0r 2mo agoPrimarily it's a way to build a model of a story's world, and two things fall out of that. 1. A wiki for the story. For the author and for readers, so you don't forget what happened 300 chapters ago, which promises are still active, and so you can explore a story you love structurally. 2. Translation. The system scales to millions of words, so when it translates chapter 100 it has the full, precise context of what happened in chapter 1, including speech registers, relationships between entities, and a synopsis of the world. I read very long web serials myself, and I kept losing the thread of stories I loved. So primarily it's a way to build a model of a story's world, and two things fall out of that.
- tunesmith 2mo agoI like the idea of using something like this as a writing aid, as if to "compile" a story to shake out what contradictions or open plot lines or implications are yet to resolve.
- ald0r 2mo agoThat's right! The system quickly updates the plot chart as new chapters are released, and the author doesn't have to create and maintain the wiki themselves.
- tunesmith 2mo agoHonestly I'd like to run it on a novel I've written and haven't released yet. I've been having conversations with Codex about how to write a story "compiler" that tracks static "states" of each character and then how plot events change those states, but haven't started anything yet.
- ald0r 2mo ago