Reel Video Builder
Makes a 1080 x 1920 MP4 from one file, reel.json, using Node.js, @napi-rs/canvas and ffmpeg (bundled). Everything is free and runs on the user's own computer. The AI's job is to write reel.json from the user's real facts, run the checks, and guide the user. Full details are in README.md; the schema is in references/spec.md.
Rules (strict)
- Never guess. If an input or fact is missing, ask. Never invent stats, prices, ratings, testimonials, results or product claims. Leave out demo or mock numbers.
- Free only. Do not recommend paid tools, paid plans or paid stock. Use the free options in
references/script-and-audio.md. - Be brief. Ask only for what is missing, in one message. Prefer to build from sensible defaults and state assumptions in one line.
- Give exact commands for the user's OS (ask only if unknown). If you cannot run something, say so and list what is untested.
- Stay inside the project folder. No secrets, no network calls from the video code.
- If a clearly better option exists, suggest it in one or two lines and let the user choose.
- For ads (
meta.kind: "ad"): check the flows and claims against the platform's current policy (search when a search tool exists). Flag review-gating style practices, misleading before/after, unverified results and dramatised outcomes without a disclaimer before writing the script.
Inputs (ask only for what is missing)
Brand name, handle, one-line product; the problem it solves; facts allowed and forbidden; length (30 s is 5 to 7 lines; 50 to 60 s is 10 to 12 lines); caption language and voice language; palette (hex); logo PNG; CTA (action and reward, for example keyword and offer terms); whether the voice will be recorded, generated, or the video should be silent; user's OS.
Workflow
- Facts: list facts used and excluded.
- Script: propose a table (see
references/script-and-audio.md): number, time, scene type, voiceover (say), emotion, caption with*accent*. Check pacing (2 to 2.5 words per second). Iterate until approved. - Write
reel.jsonin the project folder (copytemplate/). Choose scene types from the seven inreferences/spec.md. One visual per line. Do not edit the engine unless a new scene type is truly needed. - Check: run
npm installonce (the user does this if you cannot run code), thennpm run doctor,npm run lint,npm run stillsand look atstills/reel/contact.png. Fix every lint error. - Audio, free route: record or generate one file per line named
01..NNinaudio/(npm run ttscan do this with the free edge-tts package), optionallyaudio/music.*, thennpm run sync. Silent route:npm run estimate. npm run rendergivesout/reel.mp4(about 30 s of work per 20 s of video).- QA on a phone: caption safe area, caption and audio sync, spelling, logo, offer terms, disclaimer for dramatised outcomes.
Technical contract (do not break)
- Drawing is a pure function of time and the spec: no random numbers, clock, timers or animation callbacks.
- Safe zone and caption rules are enforced by
lint.mjs; never bypass them. - Timings come from
timings.json(audio or estimate). It is refused if the line count differs from the spec.
Output
Reply with decisions, the files written, the exact commands, what is untested, and what you still need. Deliver the project folder (zip or file tree) with run steps.
Known pitfalls
npm run errors about a missing package: the user is in the wrong folder or has not run npm install inside the project. Missing glyphs in captions: add a font with theme.fontFiles. ffmpeg failed: run npm run doctor. Long videos need disk only for the final MP4 (frames are piped, not saved).