Video Studio

OpenMarketing renders video with an agent-managed stack: Remotion, ffmpeg and whisper.cpp. You never run Remotion yourself. The video_* tools install the stack on first use under ~/.openmarketing/video-studio and re-sync the bundled Remotion components before each render.

Tools registered

ToolWhat it does
video_workspaceCreate references/, branding/ and outputs/ in the current folder (idempotent) and list reference videos waiting to be analysed. Called first in every video task
video_setupInstall or verify the stack (ffmpeg, whisper.cpp + model, Remotion with headless Chrome). video_render calls it automatically; use it to pre-warm or diagnose
video_analyze_referenceMeasure a reference video: cuts and shot lengths, pacing, hook frames (first 3 s), keyframes, contact sheets, luma/saturation, motion energy, loudness, BPM/onsets, cut-on-beat share, and a whisper transcript. Writes metrics.json and images to branding/analysis/<ref>/
video_transcribeTranscribe a voice-over with whisper.cpp into word-level caption JSON for the spec’s captions field
video_stillRender single frames of a spec as PNGs, much faster than a full render
video_renderRender an AdSpec JSON to MP4 (1080×1920, 30 fps). draft: true renders at half resolution for review. Default output: outputs/videos/<slug>/<slug>-master.mp4
video_finishTwo-pass loudness normalisation (−14 LUFS, −1 dBTP), H.264 platform encodes (pinterest, reels, tiktok, shorts, or all), a cover JPG, and the QA gate

Workspace folders

FolderOwnerContents
references/youReference videos (ads, Reels, TikToks, Pins). Read-only for agents
branding/agentbrand.html, analysis/<ref>/, storyboard-<slug>.md, specs/<slug>.json, assets/<slug>/, decisions-<slug>.json
outputs/agentvideos/<slug>/ (master, platform files, cover, QA) and latest.mp4 / latest-cover.jpg / latest.json

QA gate

video_finish measures the delivered file and returns PASS, PASS_WITH_WARNINGS, FAIL, or UNVERIFIED (no metrics). Only a result that is not FAIL is copied to outputs/latest.mp4.

CheckRuleSeverity
Resolution1080×1920fail
Frame rate30 fpsfail
CodecH.264fail
Integrated loudness−15 to −13 LUFSfail
True peak≤ −0.5 dBTPfail
Audio presentvoice-over and/or musicwarn
Loudness range≤ 6 LUwarn
Silence≤ 5% silentwarn
Hook motionsomething moves in the first secondwarn
Dead secondsevery second has motion (end card excepted)warn
Mean saturation≤ 20 (one accent hue)warn
Bitrate≥ 2000 kbpswarn

The verdict and every check are written to <base>-qa/verdict.json next to the master.

Configuration

VariableDescription
OPENMARKETING_VIDEO_STUDIOOverride the Remotion studio directory (default ~/.openmarketing/video-studio)
WHISPER_MODELPath to a whisper.cpp model file. Non-English transcription needs a multilingual model
WHISPER_MODEL_NAMEModel downloaded by setup (default base.en, saved under ~/.cache/whisper)

Setup installs ffmpeg and whisper.cpp with Homebrew, or ffmpeg with apt-get. Without Homebrew, install whisper.cpp yourself and put whisper-cli on PATH. Node.js 20 or newer is required.

Source

extensions/ads-tools/video.ts and the video-editing skill.