The context graph for narrative production

Turn your screenplay
into a living story world.

Fabula connects the canon inside your script: every character, object, location, moment, and interaction mapped into a real knowledge graph, with every claim traced back to the line that proves it.

Connected canon for stories that don’t fit in a writer’s head anymore.

// Event extraction · Dracula S01E01 · "The Blood's Betrayal"

{
  "title": "The Blood's Betrayal: Reading the Soul's Ink",
  "description": "In the dim, candlelit confines of Jonathan Harker's
    convent room, Sister Agatha's relentless interrogation peels back
    the layers of his trauma, revealing a horror more intimate than
    physical violation. When Jonathan insists Dracula knew private
    details about Mina—her hair 'entangled in the sunlight'—a detail
    he'd never shared, even with her, Sister Agatha delivers the
    chilling revelation: 'Perhaps stories flow in our veins, if you
    know how to read them.' The implication is devastating: Dracula
    didn't just drink Jonathan's blood—he read it.",

  "key_dialogue": [
    "SISTER AGATHA: You are quite certain? He did not say blood is life
      —he said blood is lives.",
    "JONATHAN: I have held that thought in my heart. I have never
      shared it. Not even with Mina.",
    "SISTER AGATHA: Perhaps stories flow in our veins, if you know how
      to read them. Blood is lives."
  ],
  "confidence": 0.97
}

three acts

Parse · Resolve · Reason

First Fabula finds the dramatic units. Then it decides what stays the same across the chaos of names, ranks, aliases, and rewrites. Then it records what each moment means inside the story world.

Scripts are not clean data. They are scene headings, action lines, dialogue, parentheticals, formatting habits, production cruft, and occasionally a PDF that appears to have survived a small war. Fabula reads them as scripts, not as generic text.

The first unit it looks for is the beat: the smallest useful movement inside a scene. Someone enters. A request is made. A mood turns. A prop becomes important. Each beat comes back with the characters involved, the objects in play, the setting, and the emotional shift it produces. That is where the graph starts.

// Beat extraction · The Night Manager · Cairo · Nefertiti Hotel

[
  {
    "beat_uuid": "beat-1",
    "sequence_in_scene": 1,
    "action_description": "Jonathan Pine answers the phone and
      receives a request from Sophie Alekan to bring a scotch and
      soda to her room.",
    "involved_character_mentions": ["PINE", "SOPHIE"],
    "key_objects_mentioned": ["phone", "scotch and soda"],
    "setting_details": ["Nefertiti Hotel, Foyer, Night"],
    "emotional_shift": "neutral to attentive"
  },
  {
    "beat_uuid": "beat-2",
    "sequence_in_scene": 2,
    "action_description": "Sophie Alekan asserts her familiarity
      with the hotel and her preference for Jonathan Pine to
      personally bring the drink, establishing a direct and
      intimate request.",
    "involved_character_mentions": ["SOPHIE", "PINE"],
    "emotional_shift": "attentive to intrigued"
  }
]

A show does not use one clean name for one clean thing. Picard is “The Captain” until he is “Jean-Luc.” Worf changes rank, title, and context. The Brigadier returns across decades of Doctor Who with new uniforms, new writers, and new Doctors beside him. A spreadsheet sees drift. Fabula sees continuity.

Resolution is where messy mentions become canonical entities. Rank changes, aliases, absences, promotions, disguises, and role shifts do not fork the character; they become state changes on the same underlying person. When two things really are different — two ships called Enterprise, two similar props, two people with the same name — Fabula makes the split explicitly and records why.

Not vector similarity. Not “close enough.” Adjudication with receipts.

// Entity adjudication · Star Trek TNG · KEEP_SEPARATE

{
  "decision": "KEEP_SEPARATE",
  "confidence": 0.98,
  "reasoning": "The source entity ('Enterprise Crew's First Magma
    Pocket Lights') is a portable, artificial light source deployed
    inside the First Magma Pocket during a critical mission. The
    target entity ('Enterprise Engineering Emergency Lights') is a
    fixed, embedded lighting system in Engineering that activates
    during a warp core malfunction. These are distinct entities
    serving different functional and narrative roles in separate
    contexts.",
  "distinction_clarifications": [{
    "suggested_name_refinement":
      "Enterprise Crew's Portable Magma Pocket Illumination Lights",
    "key_distinguishing_features": [
      "Portable and manually deployed by the crew",
      "Used during a plasma infusion mission",
      "Symbolically isolates characters and heightens tension"
    ]
  }]
}

Once the graph knows what happened and who was involved, Fabula records what the moment means: what each character believed, wanted, intended, noticed, concealed, carried forward, or misunderstood at that point in the story.

This is the layer that makes the graph useful for more than recap. A transcript can tell you Pine photographed the documents. Fabula can tell you what he believed was at stake, what evidence he acted on, what objects changed state, and why the event matters later. The model is not freewheeling from memory; it is judging a purpose-built evidence packet assembled from the script, the resolved entities, and the prior state already in the graph.

// Step: event finalization · The Night Manager S01E03 · Pine in Roper's office
// INPUT — the precise evidence packet, assembled from prior pipeline steps

{
  "scene_text":
    "INT. MALLORCA. ROPER VILLA. ROPER'S PRIVATE OFFICE. DAY.
     The alarm test continues. PINE knows he has to move fast. ...
     He stares at some papers labelled 'Tradepass'. He takes each
     paper from the tray, and photographs them with Danny's camera,
     then replaces them precisely. ... Then he sees it. On the desk.
     A long blonde hair. A woman's. He carefully picks it up. ...
     JED (O.S): Take him to his room. I'll change and be straight there.",

  "candidate_event_description":
    "Under the guise of an alarm check, Pine exploits the villa's
     brief vulnerability to access Roper's private office. ...
     A single blonde hair on the desk raises his suspicions about
     an internal informant.",

  "resolved_entities_context": [
    "Jonathan Pine — undercover operative, masking trauma,
       infiltrating Roper's empire from the inside ...",
    "Jed Marshall — Roper's mistress, gilded prison, brittle charm",
    "Daniel Roper — Roper's compliant teenage son",
    "Tabby — Roper's head of security",
    "Tradepass Documents — names and figures linked to arms deals",
    "Roper's Private Office — quietly dangerous, criminal sanctum"
    // ... 6 more entities, each with the foundational description
    //     produced by upstream resolution + adjudication steps
  ]
}
// OUTPUT — the structured event, every claim grounded in the input above

{
  "title": "Pine photographs Tradepass documents under duress",
  "agent_participations": [{
    "agent": "Jonathan Pine",
    "observed_status":
      "Pine infiltrates Roper's private office under the guise of an
       alarm check, photographs incriminating Tradepass documents,
       pockets a blonde hair as evidence, then meticulously restores
       the scene to its original state.",
    "emotional_state_at_event":
      "Tense focus masking a rising unease; composed on the surface
       but internally strained by proximity to detection",
    "goals_at_event": [
      "Secure tangible evidence of Roper's illegal arms deals",
      "Evade detection and leave no trace of his intrusion"
    ],
    "beliefs_at_event": [
      "Roper's empire can only be dismantled from within by
       infiltrating its most secure spaces",
      "Each missed detail risks blowing his cover"
    ]
  } /* ...Jed, Daniel, Tabby */ ],
  "object_involvements": [{
    "object": "Tradepass Documents",
    "status_after_event":
      "Restored to original position; Pine concealed a blonde hair
       within their midst as a clue"
  } /* ...Danny's camera, the handkerchief, the peppermint tin */ ]
}

// "Tense focus masking a rising unease" reads from the script
// lines and Pine's prior context. Nothing is recalled from
// training data — the model never gets to.

the through-line

Most extraction stops at plot.

Fabula tracks the causality underneath it. For every event in the show it records the connections to other events — typed, not just inferred from proximity. A connection is causal, or it carries a character forward, or it parallels a different event thematically, or it reverses one. Each connection is its own claim, with its own justification.

A transcript tells you what happened; a graph tells you why — and shows patterns across the season, with each connection backed by the script.

# Typed narrative connections · Star Trek TNG

- connection_type: CAUSAL
  strength: 0.91
  description: "Q's abrupt appearance and assertion of authority on the
    bridge leads directly to his ultimatum commanding humanity's
    retreat, provoking Picard's demand for Q's identity and Conn's
    readiness to fight."

- connection_type: CHARACTER_CONTINUITY
  strength: 0.88
  description: "Picard's immediate reaction to Conn being frozen
    — administering orders for medical aid and confronting Q —
    reflects his steadfast leadership and moral resolve."

- connection_type: THEMATIC_PARALLEL
  strength: 0.74
  description: "Both events stage a confrontation between institutional
    authority and individual moral conviction, with the bridge serving
    as contested ground."

Each connection has a type, a strength, and a supporting sentence — automatically extracted and scored. Low-confidence links go to human review. The graph lets you ask the deeper questions.

pick your department

One graph. Four payoffs.

The same canonical record serves different jobs: protecting continuity, grounding AI, feeding game pipelines, and proving a new infrastructure layer for scripted worlds.

script room

Production teams

“Did we already say this, and does the new version break it?” Fabula turns continuity from institutional memory into evidence. Characters, relationships, events, and contradictions can be queried before they become expensive.

production →
AI stack

AI builders

“Can the agent cite the story world it is reasoning over?” Fabula gives agents structured retrieval over entities, events, beliefs, goals, and causal links — not a long prompt stuffed with scripts and hope.

engine →
engine ready

Game studios

“Can canon become production data?” Characters, objects, locations, factions, relationships, and timelines export as graph data your pipeline can ingest — ready to map into Unity, Unreal, quest tools, asset systems, or narrative logic.

exports →
market thesis

Investors

“Why does this layer not exist already?” LLMs can improvise scenes. Long-form narrative requires memory, continuity, causality, and identity persistence. That infrastructure layer barely exists. Fabula demonstrates this at scale.

thesis →

running order

A self-correcting harness that runs unattended for days.

Fabula checkpoints after every episode and resumes exactly where it left off — no reprocessing needed. Failed model calls retry, switch models, or flag the output. The run keeps going.

================================================================================
BATCH PROCESSING COMPLETE
================================================================================
Batch: Star Trek TNG S06
Series: Star Trek: The Next Generation - Season 6

Episodes Processed: 26
  Completed: 26
  Failed:    0
  Partial:   0
  Skipped:   0

Total Processing Time: 59.60 hours
Average Episode Duration: 137.5 minutes
================================================================================
Batch completed successfully!

wrap & deliver

Not a dashboard. A deliverable.

Fabula ships the story world as portable graph data: nodes, edges, properties, layout, metadata, and provenance. Take it into Neo4j, DuckDB, Unity, Unreal, search, analytics, agent memory, or the weird internal tool nobody wants to admit still runs the show.

dataset_export/the_west_wing_s4/
├── nodes.parquet      # All graph nodes (id, label, name, description, properties)
├── edges.parquet      # All relationships (source, target, type, properties)
├── positions.parquet  # 3D layout coordinates with sizing and RGB colors
├── meta.json          # Dataset metadata: series info, entity counts
└── README.md          # HuggingFace dataset card (auto-generated)

Fifty-six datasets are already public on the brandburner org on Hugging Face — including the full Doctor Who megagraph, the TNG megagraph, the West Wing megagraph, plus Wolf Hall, Happy Valley, Indiana Jones, Dracula, Knives Out, and I, Claudius. Go kick the tyres.

STAY TUNED

That's the pitch.
The proof is in the graph.

Don't take our word for it. Pick a story you know. See what the graph remembers. Then ask yourself what you'll build with data this good.

Next episode: your project.