open source · runs on your machine

Videos your repo
knows how to build.

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.

Browse the collection
This ad was made by newsreel. Every scene is a bundled visual, and all three narration voices ship with it.

Three steps, one config file

  1. 01

    Capture

    Playwright signs in once and drives your app for real. Clicks, typing, scrolling — whatever the shot needs. Generated scenes record the same way.

  2. 02

    Narrate

    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.

  3. 03

    Assemble

    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.

Four kinds of video, one shot list

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.

The collection

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.

The studio ships with it

No accounts, no API keys, nothing to download twice.

Voices

Narrator Georgewarm British male · preset
Narrator Novaclear female · preset
Karoa cloned voice · example

newsreel voices --install puts them in your local Voicebox. A cloned voice is a real person's — use your own, with consent.

Music

calm~90 BPM · reports, walkthroughs
upbeat~124 BPM · ads, launches
driving~104 BPM · demos, product tours

Pick one with music.track, or bring your own file.

Two ways to use a visual

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

Or let an agent drive it

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.

Read the brief

Nothing to set up first

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

What you need

newsreel has no runtime dependencies of its own. Playwright is a peer dependency so you pin the browser; ffmpeg comes from your system.

copied