Auto zoom
The camera zooms to the element each action targets, sized by the element itself, leading the move by a beat. Springs, not tweens — motion carries momentum through every retarget, with motion blur when it moves fast.
open source · runs on your machine
newsreel drives your real app in a browser, narrates it in a voice that never leaves your laptop, and cuts the whole thing together. A weekly report is only one of the things it makes. Change one line and the same shot list becomes a product demo, an ad, or a launch film.
Playwright signs in once and drives your app for real. Clicks, typing, scrolling — whatever the shot needs. Generated scenes record the same way.
Your script, spoken by a local model. Three voices ship with it, and a shot can be given to any of them, so two narrators can trade sections.
Styled frames, lower thirds, a music bed and hard cuts, with every scene cut to the length of its own narration so picture and voice land together.
Screen recorders guess what you did from raw footage. newsreel executes the script, so it knows every click before it happens — and films like an editor. All of it is one config block, none of it is keyframed by hand.
The camera zooms to the element each action targets, sized by the element itself, leading the move by a beat. Springs, not tweens — motion carries momentum through every retarget, with motion blur when it moves fast.
Headless captures have no cursor, so newsreel draws one — arrow, hand or I-beam picked from each element's own CSS — smoothed by a spring, with a squash on every click and a ripple where it landed.
Chords collapse into single badges (⇧⌘Z, in canonical order), and typing becomes one pill that fills at the real key cadence. Never per-letter spam.
Every zoom, spring and effect is config. One smoothness dial calms or
sharpens the whole camera; per-shot you can pin explicit segments, switch to a
cursor-follow mode, or opt out entirely.
// the whole feature, from a standing start
{
"video": { "kind": "demo", "camera": { "mode": "auto", "smoothness": 1.2 } },
"style": {
"cursor": { "style": "auto" },
"clicks": { "effect": "ripple" },
"keys": { "symbols": "mac" }
}
}
Watch it in the film above — the two sections touring this very page were shot by the camera, on this page, with these four lines.
What a video is for decides how it should look and move. Set
video.kind and the palette, accent, bed, pacing and title card follow.
The background is rolled from the family rather than fixed, so two ads come out
siblings instead of copies.
35 of 35 run live right here. Take the embed code for your site, the shot config for a video, or the build prompt to make your own variant.
No accounts, no API keys, nothing to download twice.
newsreel voices --install puts them in your local Voicebox.
A cloned voice is a real person's — use your own, with consent.
Pick one with music.track, or bring your own file.
The same module, in a video or in your page.
// one shot in newsreel.config.json
{
"id": "opener",
"type": "generated",
"scene": "swirl",
"props": { "word": "acme" },
"duration": 10,
"narrator": "Narrator Nova",
"narration": "This week we shipped the thing."
}
// the same visual, mounted in your page
import scene from "./visuals/primitives/swirl.js";
const handle = await scene.mount(el, {
word: "acme",
ink: ["#34d399", "#818cf8"],
});
handle.start();
// handle.destroy() when the element goes away
# sign in once; the session is saved
npx newsreel login
# capture, cards, narration, music, assemble
npx newsreel run
# backgrounds, music beds, voices
npx newsreel presets
npx newsreel voices --install
One command puts a self-contained brief on your clipboard: the config shape, the two kinds of shot, how to pick a scene, how to write narration that is worth listening to, and the traps that cost real time. Paste it into any coding agent and describe the video you want.
Every shot in this config is a scene newsreel draws itself, so there is no app to run, no login and no keys. Two commands from an empty directory to a finished mp4.
# a video that needs no app at all
npx newsreel init --generated
npx newsreel run
newsreel has no runtime dependencies of its own. Playwright is a peer dependency so you pin the browser; ffmpeg comes from your system.