Under the hood · TempestVLA STUDIO · November 2026

Characters played by AI, on a written story.

Tempest runs our games. Prospero holds the story written by an author; Ariel brings the characters to life, so they listen, understand and answer in their own voice.

In full developmentTempest is a passion project, built in spare time: the code gets written in the evenings and at weekends, when time allows, and the GPUs run overnight. It moves fast, major steps land at a steady pace and the limits keep receding. This article is a snapshot from November 2026.

A theatre stage opening onto a road at night, in the rain: an orange van, a soaked young woman, a CB microphone hanging from strings, and a glowing graph of nodes on the boards.
FIG. 1 Prospero’s theatre, opening onto the NightShift road. AI-generated illustration for this article.

A written story, living characters

Tempest is the studio’s AI game engine: it runs our games. Players talk to the characters with their own voice. The characters listen, understand, answer with a voice of their own, and act.

But they do not just say anything. An author wrote the story in advance: every choice, every branch, every ending. The AI plays the lines; it picks among what was written, and never makes up a branch.

Two engines share the work. Their names come from Shakespeare’s The Tempest: Prospero, the magician who stages it all, and Ariel, the spirit who carries out his orders. Same here.

The test game is called NightShift (code name): a maintenance truck at night, rain, the CB radio, and a passenger who does not tell everything.

Excerpt from a test teaser, not final (25 s, muted by default).

  • Rainy night: a car stopped on the hard shoulder, door open, lit by the driver’s torch.
  • Seen from the van’s cab: Rosie, red hair soaked, arms wrapped around herself, waits in the rain by the roadside.
  • Driver’s view: one hand on the wheel, the other holding the CB microphone, marked Dispatch.
  • An empty motorway rest area at night: empty booths, lit vending machines, a steaming cup.
FIG. 2 NightShift (code name), the test game. Stills from the trailer.

The path of a line

Prospero holds the story: the graph written by the author, what it remembers, and its rhythm. Ariel brings the characters to life, in four stages. Prospero plays no part himself: like a puppeteer, he holds the strings.

A line plays out in two beats. First Ariel understands what was said: who it is for, and which of the author’s outcomes the player is aiming at, if any. Prospero applies what that outcome changes: he records a fact, sends a command to the game, moves on to the next moment. Then Ariel makes the character speak, with only what Prospero gives it: what just happened, what it knows, what it feels, and its goal when the story pushes towards a choice.

NightShift · beat “At the window”

The path of a line through Tempest. The player says “Get in, quick, you’re soaked.” Listening turns it into text. The Decision understands they are talking to Rosie and aiming for the outcome “Let her in”, among those the author wrote. Prospero applies the outcome: a command to the game, Rosie gets in, and the story moves on to the beat “The door”. He gives Rosie what she needs to know. The agent makes her answer and shut the door; the voice speaks her line, relieved.

The graph of a story

In a classic narrative game editor, the author writes every line. In Prospero, they write situations: what each character wants, what the player can do, where each outcome leads.

Smart puppets, on rails. Players say what they want, in their own words; only an outcome written by the author moves the story on. And the story always moves on: a moment allows small talk, then pushes towards the choice, then forces it.

Beat
A moment where the story pauses and the player talks. It only ends through an outcome.
Outcome
A way out of the beat, written by the author: offered to the player, or hidden. One wins by default.
Fact, gauge
What the story remembers, to pick its path later on.
Soft push, hard push
The character steers the player towards the choice, then forces it.

Prospero · story editor

Scene The pick-up

Rosie knocks on the window. Take her or drive off, then to the coast or to the station. Dispatch sees the van leave its route.

Entry

  • Opens the sceneif destination = noneleads to “At the window”

At the window

Beat

Rosie

Opening :The van stops. She knocks on thewindow, soaked.

Rhythm
  1. Small talk ×0
  2. Soft push ×1
  3. Hard push

Outcomes

  • Offered · DefaultLet her inCommandRosie gets inleads to “The door”
  • OfferedDrive off without herleads to “Without her”

The door

Beat

Rosie

Opening :She climbs in, soaked, and shuts thedoor.

Rhythm
  1. Small talk ×4
  2. Soft push ×1
  3. Hard push

Outcomes

  • DiscoveryAsk what happened to her carDirectiondodge, but let slip itwas not really yoursstays in the beat
  • Offered · DefaultAsk where she is goingleads to “The ask”

The ask

Beat

Rosie

Opening :She looks at the road: she isheading to the coast, to an oldfriend.

Rhythm
  1. Small talk ×0
  2. Soft push ×2
  3. Hard push

Outcomes

  • DiscoveryAsk why the coastDirectionit is the only placeleft for youstays in the beat
  • OfferedDrive her to the coastFactdestination = coastleads to “The detour”
  • Offered · DefaultDrop her at the next stationFactdestination = stationleads to “Back on the road”

The detour

Beat

Dispatch

Opening :On the CB: the unit is leaving itsroute.

Rhythm
  1. Small talk ×0
  2. Soft push ×1
  3. Hard push

Outcomes

  • OfferedLie to himSecretRosie knows he lied for herGaugetrust + 1leads to “Back on the road”
  • Offered · DefaultOwn up to the passengerFactreported = yesGaugetrust − 1leads to “Back on the road”

Back on the road

Exit

The scene closes, controlgoes back to the game.

Without her

Exit

The scene closes, controlgoes back to the game.

  • Flow
  • Offered outcome
  • Hidden outcome
  • Stays in the beat
  • Condition holds
  • Otherwise
  • Drag to explore the graph

The path, step by step

Step 1 of 12

Prospero

The game opens the scene: Rosie has never been picked up.

Beat rhythm

  1. Small talk
  2. Soft push
  3. Hard push

What the story remembers

destination
none
reported
no
trust
0
The whole path, as text
  1. ProsperoThe game opens the scene: Rosie has never been picked up.
  2. RosiePlease… my car gave out. Will you let me in?No small talk: she asks right away.
  3. The playerGet in, quick.Choice clicked. Command to the game: Rosie gets in.
  4. RosieThanks. I’m dripping all over your seat, sorry.
  5. The playerWhat happened to your car?A discovery question: we stay in the beat, and Rosie gets a direction.
  6. RosieIt… wasn’t really mine. It’s complicated.
  7. The playerSo where are you headed?
  8. RosieThe coast. An old friend’s place. Could you take me there?
  9. The playerFine. I’ll take the detour.Said in their own words: the Decision recognises the outcome.
  10. DispatchUnit 7, you’re off your route. What’s going on?
  11. The playerRoad’s closed. I’m going round.Rosie learns he lied for her.
  12. ProsperoExit “Back on the road”: the scene closes, the van drives on.

Sample playthrough: lines written for this article, not a recorded session.

Scene The road

Rosie says her car broke down. If the player saw the engine running, and if she trusts him, she confesses.

Entry

  • Opens the sceneif destination ≠ noneleads to “The breakdown”

The breakdown

Beat

Rosie

Opening :The van drives on, in the rain.

Rhythm
  1. Small talk ×2
  2. Soft push ×1
  3. Hard push

Outcomes

  • Offered · DefaultKeep drivingleads to “Arrival”
  • OfferedPull overGaugetrust − 1leads to “Arrival”
  • HiddenReassures herGaugetrust + 1stays in the beat
  • HiddenSays her car never broke downleads to “The engine”

The engine

Condition

Branches

  • Ifsaw_engine_running = yes andtrust ≥ 1Directionhalf-confessSecret“I ran off with thecar.”leads to “The confession”
  • Otherwiseno branch holdsDirectionhe is bluffing, holdfirmGaugetrust − 1leads to “Arrival”

The confession

Beat

Rosie

Rhythm
  1. Small talk ×0
  2. Soft push ×1
  3. Hard push

Outcomes

  • Offered · DefaultKeep herleads to “Arrival”
  • OfferedTurn her inFactreported = yesleads to “Turned in”

Arrival

Condition

Branches

  • Ifdestination = coastleads to “At the coast”
  • Otherwiseno branch holdsleads to “At the station”

Turned in

Exit

The scene closes, controlgoes back to the game.

At the coast

Exit

The scene closes, controlgoes back to the game.

At the station

Exit

The scene closes, controlgoes back to the game.

  • Flow
  • Offered outcome
  • Hidden outcome
  • Stays in the beat
  • Condition holds
  • Otherwise
  • Drag to explore the graph

The path, step by step

Step 1 of 10

Prospero

The van is back on the road. Rosie keeps only what she knows from the last scene.

Beat rhythm

  1. Small talk
  2. Soft push
  3. Hard push

What the story remembers

destination
coast
saw_engine_running · held by the game
yes
reported
no
trust
1
The whole path, as text
  1. ProsperoThe van is back on the road. Rosie keeps only what she knows from the last scene.
  2. RosieIt just stalled. Halfway up a hill. Nothing I could do.
  3. The playerWe’ll be there before dawn, I promise.Hidden outcome: never offered, only speech reaches it.
  4. Rosie… Thanks. Really.
  5. The playerYour engine was running when I drove past.The game knows the player looked at the car: saw_engine_running = yes.
  6. ProsperoThe condition holds: Rosie’s secret is unlocked.
  7. RosieOkay. I took it. I had to get away.
  8. The playerI’m still taking you.
  9. Prosperodestination = coast, set in the previous scene.
  10. ProsperoExit “At the coast”: control goes back to the game.

Sample playthrough: lines written for this article, not a recorded session.

Scene Silence is a choice

The player does not answer. Each silence counts as a turn, Rosie presses, then insists; on the last turn, the default outcome decides.

Entry

  • Opens the sceneAlwaysleads to “The ask”

The ask

Beat

Rosie

Opening :She looks at the road: she isheading to the coast, to an oldfriend.

Rhythm
  1. Small talk ×0
  2. Soft push ×2
  3. Hard push

Outcomes

  • OfferedDrive her to the coastFactdestination = coastleads to “The detour”
  • Offered · DefaultDrop her at the next stationFactdestination = stationleads to “Back on the road”
  • SilenceSay nothing: a turn that countsstays in the beat
  • RefusalRefuse to answer, from the softpushleads to “Back on the road”

The detour

Beat

Dispatch

Opening :On the CB: the unit is leaving itsroute.

Rhythm
  1. Small talk ×0
  2. Soft push ×1
  3. Hard push

Outcomes

  • OfferedLie to himleads to “Back on the road”
  • Offered · DefaultOwn up to the passengerleads to “Back on the road”

Back on the road

Exit

The scene closes, controlgoes back to the game.

  • Flow
  • Offered outcome
  • Hidden outcome
  • Stays in the beat
  • Condition holds
  • Otherwise
  • Drag to explore the graph

The path, step by step

Step 1 of 8

Prospero

Rosie has just said where she is going.

Beat rhythm

  1. Small talk
  2. Soft push
  3. Hard push

What the story remembers

destination
none
trust
0
The whole path, as text
  1. ProsperoRosie has just said where she is going.
  2. RosieWill you take me to the coast? Just tell me yes or no.Soft push: Rosie has her goal and steers the player towards the choice.
  3. The player…Silence: the game reports it, Prospero counts it as a turn.
  4. RosieDid you hear me? It matters to me.
  5. The player…Second silence: the soft push quota is reached.
  6. RosieRight. Answer me now, or I get off at the next station.Hard push: the last turn. Whatever the player does closes the beat.
  7. The player…Silence is a choice: the default outcome wins.
  8. RosieFine. The station, then.Rosie answers the turn that closes the beat; the scene exits “Back on the road”.

Sample playthrough: lines written for this article, not a recorded session.

Latency, on the clock

For a conversation to feel alive, the reply has to come fast. We measure the time from the end of the player’s line to the character’s voice.

Everything runs on the player’s machine, on a consumer graphics card, with the game running alongside. Here are our two measurements from 13 November, with and without the game, slowed down and on the same axis.

Latency race: from the end of the player’s line to the reply

Short trial, to be confirmed
  1. TempestGame running alongside

    median · end to end · on the player’s machine · worst turn 1.75 s

    1.12 s
    • Listen 50 ms
    • Decision 190 ms · the extra stage
    • Agent 500 ms
    • Voice 320 ms
    • gap 60 ms
  2. TempestMachine alone, best case

    median · end to end · on the player’s machine · worst turn 1.55 s

    0.97 s
    • Listen 40 ms
    • Decision 170 ms · the extra stage
    • Agent 430 ms
    • Voice 300 ms
    • gap 30 ms

Method

An end-to-end median: from the moment the player stops speaking to the reply they hear. Tempest runs on a consumer graphics card, next to the game. Our clock stops when 0.3 s of voice is ready to play.

Good to know

  • A short trial, not yet conclusive: 10 to 12 turns per series, warm-up excluded.
  • Ariel’s voice is not wired into the game yet: Unreal runs alongside and loads the machine, but the measure counts neither audio playback nor the face. With an animated face on top: 1.41 s.
  • The agent does not stream its reply yet: known room for improvement.
  • Per-stage medians and the median total do not add up exactly: the hatched part is the gap.
  • Target budget from the October bench, adding up stages measured one by one: about 0.65 s.

Ariel in four stages

In the measurement above, everything runs on the player’s machine, with no server. The two stages that understand and that act are our own models, which we train ourselves: the Decision is an in-house model, already trained by us; the agent is an in-house agent, which we are training for this role. Each stage remains a swappable module: we can change one without touching the rest.

  1. Listen

    Transcribes what the player says.

    Local speech recognition

    0.05 smedian, game running

    4.4% word error rate in French, on real voices.

  2. Decision

    Works out who the player is talking to and which outcome they are going for, offered or hidden. Stops forbidden lines.

    An in-house decision model, trained by us

    0.19 smedian, game running

    On the bench: 99% of forbidden lines stopped, 0.3% blocked by mistake.

  3. Agent

    Plays the persona: it replies, and acts through the gestures the game allows.

    An in-house agent, which we are training for this role

    0.50 smedian, game running

  4. Voice

    Gives the persona its voice, with the emotion of each line, streamed.

    Cloned voice, with emotion

    0.32 smedian, game running

    First chunk of voice in 58 ms, from a voice cloned on a short clip.

Time of each stage within a full turn, measured end to end on the studio gaming PC with the game running alongside (13 November 2026). The other figures come from the October bench.

What comes next

Tempest moves forward step by step, and each step ends with something playable. NightShift is the test bench: each step makes one more of its scenes playable.

All of this is still in full development, in spare time: the code gets written in the evenings and at weekends, for the joy of learning, and the GPUs train and measure the models overnight while everyone sleeps. The engine changes fast: every step cleared pushes back a limit we thought was fixed. The figures and diagrams in this article are a snapshot from November 2026, not a finish line.

Step 5 of 10

  1. 01Prospero starts and sees ArielDone
  2. 02Talking to dispatch, through ProsperoDone
  3. 03A directed character: goal, follow-up, choicesDone
  4. 04“The door”: a beat played in fullDone
  5. 05“The detour”: the story drives the gameIn progress
  6. 06“The road”: a secret drawn outComing up
  7. 07Refusal, saving and resuming a gameComing up
  8. 08Seeing the graph while playingComing up
  9. 09A real game plugs inComing up
  10. 10The author writes without touching a fileComing up

For reference: a published measurement

In July, Iconic published the latency of Pressure Point, its digital actor demo: from the end of the player’s line to the reply they hear, as a median: an end-to-end measurement, like ours. Here it is next to ours, with what sets them apart.

Latency race: from the end of the player’s line to the reply

Short trial, to be confirmed
  1. TempestGame running alongside

    median · end to end · on the player’s machine · worst turn 1.75 s

    1.12 s
    • Listen 50 ms
    • Decision 190 ms · the extra stage
    • Agent 500 ms
    • Voice 320 ms
    • gap 60 ms
  2. Pressure PointIconic’s demo, live version

    median · end to end · in the cloud

    1.2 s
    • Transcription 100 ms
    • Generation 700 ms
    • Voice 300 ms
    • gap 100 ms

Measured the same way, Tempest replies slightly faster: 1.12 s, against 1.2 s for Pressure Point.

Both measurements, side by side
TempestPressure Point
Measuremedian end to end, 1.12 smedian end to end, 1.2 s
StagesListen → Decision → Agent → VoiceTranscription → Generation → Voice
The clock stops at0.3 s of voice ready to play (stricter than a first sound)until the player hears the reply (their definition)
MachineStudio gaming PC: AMD RX 6800 16 GB, Ryzen 5 5600, 32 GB, Windows 11. Unreal game at 60 frames per second alongside.Cloud GPU (AWS), game streamed to the browser.
Date13 November 202614 July 2026
SourceInternal measurement log, 13 Nov 2026Iconic, “Pressure Point: A Digital Actor Showcase”, 14 July 2026

Method

Both are end-to-end medians: from the moment the player stops speaking to the reply they hear. The two measurements are not taken on the same machine nor with the same end point: the table above details them.

Good to know

  • End point: our clock stops when 0.3 s of voice is ready to play; Pressure Point’s when the player hears the reply (their definition).
  • Machine: Pressure Point runs on a cloud GPU, the game streamed to the browser; Tempest on a consumer card, with the game running alongside.
  • Stages: Tempest has one more, the Decision, counted in its time.
  • Our measurement is a short trial, not yet conclusive (10 to 12 turns per series). The gap between the two totals is small.
  • Per-stage medians and the median total do not add up exactly: the hatched part is the gap, on both sides.

Follow the projects

An occasional letter: what comes out of the building site. Double opt-in, one-click unsubscribe.