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 066Drag 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.
Hook
Stat 90%
Map
List
Bars
OutroIt 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.
| Finding | What it catches | When |
|---|---|---|
repeat | The same clip comes back later in the video. | Any repeat |
same_clip_cut | A cut lands on the same clip, so it shows no new picture. | Any |
long_hold | One clip stays on screen too long. | Over 8 s in a Short, 15 s in a long video |
slow_hook | The opening shot outstays the hook. | Over 4 s in a Short, 8 s in a long video |
photo_hook | The video opens on a still photo. | First scene |
photo_heavy | Too many stills for a moving picture. | More than half the clips |
loops | A clip shorter than its scene restarts on screen. | Any |
few_scenes | Too 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.

One thing moves at a time.
An element enters in about a third of a second, then holds still while you read it.
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.
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.

stat
map
list
bars
typeAgents 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 placearrowPoints at somethingcircleCircles a spotunderlineMarks a wordcheckmarkRight, done, yescrossWrong, a myth, nofireA hot takeheartSomething to lovelaughA punchlinesubscribePointer clicks, bell ringsfollowA plus turns into a checkswipeUpWhat comes nextburstA beat, a reveal


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.
| Renderer | Size | Per frame | Browser vs server | Verdict |
|---|---|---|---|---|
| Poltergeist player | 17 KB | ≈ 1.5 ms | 0.24% | Chosen |
| lottie-web (canvas) | 266 KB | ≈ 2.9 ms | 2.21% | Strokes after fills drew 1 px black in Node |
| Skottie (canvaskit-wasm) | 7.8 MB | ≈ 19 ms | n/a | Cannot 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.
pulsePrecise and quiet. Plain cuts, a dip every fourth boundary, no flash and no plate.
signalWarm and unhurried. A sand accent, dips instead of wipes.
shadowDark and cinematic. A light accent, one dip at the turn, no yellow plate.
typeLoud hook. Plate title, punch-ins, one wipe or flash per four cuts.
driftFigures and charts. Cool accent, footage held still so the numbers read.
cutpunchflashdipswipeCameraholdpushpullTextrisepopstamp06 · 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.
- VoiceLong pauses tightened, captions follow
- Music bedDucked under the voice by a sidechain
- EffectsWhooshes and hits placed on the cuts
- 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 | How | Time | Extra cost |
|---|---|---|---|
| Your browser, GPU | WebCodecs, hardware H.264 | About 5 s with the clips already fetched; about 23 s from cold on a 20 Mbit/s line | Included |
| Your browser, fallback | FFmpeg in WebAssembly, multi-threaded | About 36 s | Included |
| Your AI agent's machine | Native FFmpeg, one command | About 100 s, downloads and final check included | Included |
| GhostViral's server | One FFmpeg pass, Node canvas | For Shorts up to 60 s when no device can render | Included |
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 docsset_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.
The file runs as long as the plan said.
The picture is the planned 1080×1920 or 1920×1080.
Near −14 LUFS, the level platforms play at; no silent or clipping track.
No stretch of black 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 rate | 30 fps, every frame a pure function of its number |
|---|---|
| Formats | 1080×1920 Shorts (15, 30, 45, 60 s) · 1920×1080 videos (5, 8, 12 min) |
| Directions | 5: pulse, signal, shadow, type, drift |
| Looks | 5: auto, punch, depth (3D type), clean, off |
| Cuts | 5: cut, punch, flash, dip, swipe |
| Camera | hold, push, pull |
| Text animation | rise, pop, stamp |
| Graphic scenes | map, stat, bars, type, list, and canvas (an agent's own code in a sandbox) |
| Lottie overlays | 13 built-in, 2–7 KB each, placed on a spoken cue |
| Captions | Word-synced, 32 languages |
| Sound | Pauses tightened, music ducked under the voice, −14 LUFS, −1 dBTP |
| Checks | Pacing 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.