The engine · Poltergeist 1.2

The ghost thatdirects your video.

Every GhostViral video passes through Poltergeist, the engine we built for it. It cuts the footage on the voice, draws motion graphics over real stock clips, mixes the sound and renders the file, most of the time on the device you are holding. You never see it. You see what it leaves behind.

  • 30frames a second, each drawn from its number
  • ~5 sto render a 30 s Short on a laptop GPU, clips fetched
  • −14LUFS, the loudness platforms play at
frame 066

Drag to any frame. Poltergeist draws it from its number alone, the same way it draws your video.

Prologue

Thirty seconds about bees.

To show what the engine does, we will follow one video through it: a 30 second Short that opens on “Bees are dying faster than anyone admits.” Six stock clips, one voice, one script. Every picture on this page was drawn by Poltergeist from those clips, exactly as it draws them in a render.

01 · Timing

A sentence becomes a scene.

The voice comes first. Every word gets a timestamp, and the cuts fall where the sentences end, so the picture changes when the thought does. Titles, graphics and stickers are pinned to words, not to seconds: move the voice and everything moves with it.

Voice
Scenes
HookStat 90%MapListBarsOutro
Overlays
Hook titleheartfollow
The bee Short as the engine plans it: cuts on sentence ends, graphics and stickers on their words.

It reads the edit before anyone hears it.

Before a single word is voiced, Poltergeist reads the planned scenes and the clips behind them and scores the pacing from 0 (lively) to 10 (slideshow). Each finding comes with one fix. It never blocks: the director decides.

Pacing check
FindingWhat it catchesWhen
repeatThe same clip comes back later in the video.Any repeat
same_clip_cutA cut lands on the same clip, so it shows no new picture.Any
long_holdOne clip stays on screen too long.Over 8 s in a Short, 15 s in a long video
slow_hookThe opening shot outstays the hook.Over 4 s in a Short, 8 s in a long video
photo_hookThe video opens on a still photo.First scene
photo_heavyToo many stills for a moving picture.More than half the clips
loopsA clip shorter than its scene restarts on screen.Any
few_scenesToo few different clips for the length.About one every 5 s in a Short

02 · Frames

Every frame is a number.

Poltergeist has no timeline to play forward. Ask it for frame 40 and it draws frame 40, without drawing the 39 before it, and the same picture every time. That one rule is why the same plan renders the same video in your browser, on an AI agent's laptop and on our server.

Six frames of the 90% count-up: 35%, 75%, 86%, 89%, 90%, 90%
frame 111621263144 · settled
1

One thing moves at a time.

An element enters in about a third of a second, then holds still while you read it.

2

A number lands on its word.

The count-up ends on the frame the voice says it, never after. The picture leads the sound by one frame.

3

Same picture everywhere.

Measured on the Lottie library: 0.24% of pixels differ between a browser and a server render, all on antialiased edges.

03 · Graphics

Code draws. The footage stays.

Stock footage is the body of the video. Where a picture of the idea helps, the engine draws one over the clip, which keeps playing dimmed underneath, so the video still feels filmed. Maps and the paper theme get a ground of their own.

Agents connected over MCP can also write a canvas graphic: their own Canvas 2D code, run in an isolated sandbox with a built-in graphic as its fallback.

04 · Overlays

Thirteen ghosts, on cue.

Lower thirds, arrows, reactions and prompts, played over the footage without dimming it. Each one starts on the words it belongs to and sits inside the 9:16 safe area, clear of the top 13%, the bottom 35% and the icon strip on the right. These are playing live, through the engine's own Lottie player.

lowerThirdNames a person or place
arrowPoints at something
circleCircles a spot
underlineMarks a word
checkmarkRight, done, yes
crossWrong, a myth, no
fireA hot take
heartSomething to love
laughA punchline
subscribePointer clicks, bell rings
followA plus turns into a check
swipeUpWhat comes next
burstA beat, a reveal
A lower third reading Western honey bee over a bee on a stick
lowerThirdA name and a role, held as long as the voice needs.
A heart sticker over a bee on a daisy
heartA reaction on the line that earns it, never on the hook.
A follow prompt over a beekeeper at work
followYour handle in the pill; the plus turns into a check.

Why we wrote our own player.

The same animation has to look the same in a browser and on a server. We measured the two usual players against a small one of our own on the whole library, drawing into a 1080×1920 frame. Ours matches lottie-web in the browser on all but 0.49% of pixels, and the files stay standard Lottie.

Every animation in the library is GhostViral's own work, free to use in any video you make here, commercial use included.

Lottie renderers, measured on the library
RendererSizePer frameBrowser vs serverVerdict
Poltergeist player17 KB≈ 1.5 ms0.24%Chosen
lottie-web (canvas)266 KB≈ 2.9 ms2.21%Strokes after fills drew 1 px black in Node
Skottie (canvaskit-wasm)7.8 MB≈ 19 msn/aCannot draw into a 2D context; pixel round trip

05 · Direction

Five ways to haunt a video.

A direction is a whole style in one word: the palette, the cuts, the camera, how loud the title is. Pick one and leave the rest to the engine, or override any single decision.

pulse

Precise and quiet. Plain cuts, a dip every fourth boundary, no flash and no plate.

signal

Warm and unhurried. A sand accent, dips instead of wipes.

shadow

Dark and cinematic. A light accent, one dip at the turn, no yellow plate.

type

Loud hook. Plate title, punch-ins, one wipe or flash per four cuts.

drift

Figures and charts. Cool accent, footage held still so the numbers read.

CutscutpunchflashdipswipeCameraholdpushpullTextrisepopstamp

06 · Sound

Music that knows when to step back.

The voice is the lead. Long pauses are tightened, the music bed ducks under every word and comes back in the gaps, transition effects sit on the cuts, and the whole mix is measured and brought to the level the platforms play at.

The bee Short's mix: the bed drops under every sentence in a fiftieth of a second and takes a third of a second to come back.
  1. VoiceLong pauses tightened, captions follow
  2. Music bedDucked under the voice by a sidechain
  3. EffectsWhooshes and hits placed on the cuts
  4. LoudnessTwo-pass: −14 LUFS, −1 dBTP

07 · Render

It renders where you are.

There is no render farm to wait for. The same engine runs on the graphics chip of your computer, on your AI agent's machine with one command, and on our server only when no device can. Measured on a 2019 laptop (i5-9300H, GTX 1650).

Where a 30 s 1080×1920 Short renders
WhereHowTimeExtra cost
Your browser, GPUWebCodecs, hardware H.264About 5 s with the clips already fetched; about 23 s from cold on a 20 Mbit/s lineIncluded
Your browser, fallbackFFmpeg in WebAssembly, multi-threadedAbout 36 sIncluded
Your AI agent's machineNative FFmpeg, one commandAbout 100 s, downloads and final check includedIncluded
GhostViral's serverOne FFmpeg pass, Node canvasFor Shorts up to 60 s when no device can renderIncluded

Agents direct it in numbers.

Over MCP, Claude, ChatGPT or any agent can direct Poltergeist itself: pick a direction, pin a graphic to a phrase, drop a lower third on a name. The engine places everything on the right frame, refuses what it cannot show honestly and says why.

Read the MCP docs
set_motion({
  projectId,
  direction: "type",
  graphics: [
    { type: "stat", value: "90%",
      cue: "ninety percent of wild hives" },
    { type: "lottie", name: "lowerThird",
      cue: "the western honey bee",
      text: "Western honey bee",
      subtext: "Apis mellifera" },
    { type: "lottie", name: "heart",
      cue: "keep the hive dry" }
  ]
})

08 · Checks

It watches its own work.

When an agent renders a video, Poltergeist measures the finished file the way a viewer would notice it and reports back before anyone posts it.

Length

The file runs as long as the plan said.

Size

The picture is the planned 1080×1920 or 1920×1080.

Loudness

Near −14 LUFS, the level platforms play at; no silent or clipping track.

Black frames

No stretch of black picture.

Frozen picture

No stretch where the picture stands still (graphic scenes that are meant to hold are exempt).

Spec sheet

Poltergeist 1.2, at a glance.

Frame rate30 fps, every frame a pure function of its number
Formats1080×1920 Shorts (15, 30, 45, 60 s) · 1920×1080 videos (5, 8, 12 min)
Directions5: pulse, signal, shadow, type, drift
Looks5: auto, punch, depth (3D type), clean, off
Cuts5: cut, punch, flash, dip, swipe
Camerahold, push, pull
Text animationrise, pop, stamp
Graphic scenesmap, stat, bars, type, list, and canvas (an agent's own code in a sandbox)
Lottie overlays13 built-in, 2–7 KB each, placed on a spoken cue
CaptionsWord-synced, 32 languages
SoundPauses tightened, music ducked under the voice, −14 LUFS, −1 dBTP
ChecksPacing before the voice is made, a final check after the render

Epilogue

Let the ghost direct your next one.

Type a topic or paste a script. Poltergeist finds the scenes, times them to the voice, draws what helps and renders the file while you watch.

Footage on this page: Pexels. Every frame shown was drawn by Poltergeist over it. Render times are from our own benchmarks on the laptop named above; yours depend on your device and your connection.