OpenMontage turns an AI coding assistant such as Claude Code, Cursor, Copilot, Windsurf or Codex into a video production team. You describe the video you want, or paste a YouTube Short, Reel or TikTok you like as a reference, and the agent researches the topic, writes the script, finds or generates the visuals, adds narration, music and captions, and renders a finished file. There is no separate app: the assistant reads the project's pipeline files and calls its Python tools.
It is built around checkpoints rather than one big prompt. Each pipeline (explainers, talking heads, trailers, documentary montages, character animation, dubbing and more) runs in stages, and a local board called Backlot shows progress and every dollar spent. Generation pauses on a scene-by-scene contact sheet so you can approve the visuals before the render. The project counts 12 pipelines, over 100 tools and over 60 provider integrations, and it has about 78,000 stars and 76 contributors since its March 2026 start.
It does not have to cost anything. With no paid keys it can narrate with Piper, a free offline voice, pull footage from Archive.org, NASA and Wikimedia Commons, and render with Remotion, HyperFrames and FFmpeg. Add keys for services like fal.ai, Google or ElevenLabs and it can generate new images and video clips. The project's published examples include a 60-second animated short with a stated total cost of $1.33.
- Repository: github.com/calesthio/OpenMontage
- Licence: AGPL-3.0 (GNU Affero General Public License v3.0)
- Language: Python. Stars: 77.9K. Forks: 10.4K. Last push: Nov 3, 2026.
- Scan: safe, Nov 7, 2026, commit d21f5d4
Who it is for
Creators and marketers who already use an AI coding assistant and want explainers, shorts or trailers without an editing suite, and developers who want a video pipeline they can read and change. You need to be comfortable installing Python, Node and FFmpeg.
Getting started
1. Install Python 3.10 or later, Node 18 or later and FFmpeg, then download the project and set it up
git clone https://github.com/calesthio/OpenMontage.git && cd OpenMontage && make setup2. Optional: add API keys to the .env file. Every key is optional; more keys unlock more tools
FAL_KEY=your-key3. Open the folder in your AI coding assistant and ask for a video
Make a 45-second animated explainer about why the sky is blueMake sure your budget suits you before adding paid keys: config.yaml starts at a $10 budget in warn mode, asks before any single action over $0.50, and warns rather than stops until you set the mode to cap. Your coding assistant's own usage is billed separately.
Safety scan
We cloned calesthio/OpenMontage at commit d21f5d4 on Nov 7, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.
- No secret hits and no pattern hits across 2,209 files and about 450,000 lines, mostly Python and Markdown. No binaries committed. The two scripts listed as installers are test fixtures inside one skill's test folder, with no sudo.
- remotion-composer/package-lock.json has 244 packages and 16 advisories: nine high, five moderate, two low. The highs are five in fast-uri (URL parsing), two in browserslist, one in source-map-js and one in zod, mostly crashes, memory exhaustion or URL confusion from hostile input. This is the renderer running on your own machine on your own project, so the risk is low; do not expose Remotion Studio to a network.
- The Python packages have no lockfile, so the advisory check could not cover them. make setup also fetches the latest hyperframes package from npm with npx rather than a pinned version. The HyperFrames docs bundled in the repo describe anonymous usage counters in its own CLI; set HYPERFRAMES_NO_TELEMETRY=1 to switch them off.
- We found no usage reporting in OpenMontage's own code. Network hosts are the AI services (fal.ai, BFL, MiniMax, HeyGen, ElevenLabs, Google and others) and stock and archive libraries. Backlot binds to 127.0.0.1 and refuses requests with any other Host header.
- It ships many skill files for the agent, so they got the extra pass: no hidden Unicode in the Markdown, YAML or JSON, no injection phrases and no agent hook files. One workflow with no third-party actions and no pull_request_target. A licence and contributing guide are present; no Dependabot or security policy.
What the scanner counted
| Check | Result |
|---|---|
| Secrets | None found. |
| Suspicious code | None found. |
| Install-time code | 2 installer scripts |
| Committed binaries | None. |
| CI workflows | 1 workflow. None use pull_request_target. No third-party actions. |
| Network hosts | 40 distinct hosts referenced from source; most often api.bfl.ai, huggingface.co, queue.fal.run, cdn.example. No URLs to bare IP addresses. |
| Known vulnerabilities | 16 advisories across 243 pinned packages: 0 critical, 9 high, 5 moderate, 2 low. remotion-composer/package-lock.json: 244 packages, 16 advisories. |
| Project hygiene | Has licence file, contributing guide. Missing security policy, automated dependency updates, CodeQL. |
| OpenSSF Scorecard | Not scored: the project is not in Scorecard's weekly index. |
The raw findings
Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.
Installer scripts (2)
Worst known vulnerabilities (16 of 16)
| Advisory | Severity | Package | Summary |
|---|---|---|---|
| GHSA-73wf-gq98-2v4g | high | browserslist@4.28.4 | Browserslist: Uncaught crash / prototype write via untrusted browserslist-stats.json custom stats (normalizeStats) |
| GHSA-c83g-rgw3-j3cx | high | browserslist@4.28.4 | Browserslist: Unbounded memory growth (no cache eviction) via distinct query results, leading to eventual OOM |
| GHSA-5jgf-p345-68v8 | high | fast-uri@3.1.5 | fast-uri vulnerable to host confusion via skipped IDN canonicalization on scheme-relative references |
| GHSA-f65p-4m7j-42xc | high | fast-uri@3.1.5 | fast-uri vulnerable to server-side request forgery via malformed IPv6 normalization |
| GHSA-fph4-wmhf-6fwf | high | fast-uri@3.1.5 | fast-uri vulnerable to server-side request forgery via repeated hostname percent-decoding |
| GHSA-jqff-g426-hqxp | high | fast-uri@3.1.5 | fast-uri vulnerable to host confusion via percent-encoded scheme normalization |
| GHSA-qw65-cvwx-89v3 | high | fast-uri@3.1.5 | fast-uri vulnerable to authority injection via an unvalidated port in serialize |
| GHSA-68fv-2mgg-jv7q | high | source-map-js@1.2.1 | source-map-js allows event-loop denial of service through indexed source-map section offsets |
| GHSA-mrhx-c7xc-m3w5 | high | zod@4.3.6 | Zod can exhaust memory while validating oversized constrained collections |
| GHSA-w5vr-8v7q-w6rv | moderate | baseline-browser-mapping@2.10.40 | baseline-browser-mapping process termination on invalid input causes denial of service |
| GHSA-hrr3-gc8f-f4qj | moderate | fast-uri@3.1.5 | fast-uri vulnerable to inconsistent host case normalization via percent-encoded octets |
| GHSA-w74x-v6f9-j3xg | moderate | fast-uri@3.1.5 | fast-uri vulnerable to URI scheme spoofing via percent-encoded scheme decoding |
| GHSA-wjr9-j795-jxcr | moderate | fast-uri@3.1.5 | fast-uri vulnerable to host confusion via unchecked WHATWG host canonicalization |
| GHSA-rj75-hqrm-r3gf | moderate | postcss-selector-parser@7.1.4 | PostCSS: Quadratic complexity in flat selector parsing allows CPU exhaustion |
| GHSA-333x-w4r6-6crp | low | fast-uri@3.1.5 | fast-uri vulnerable to scheme injection via an unescaped first-segment colon in suffix references |
| GHSA-xhq7-xmqj-769h | low | fast-uri@3.1.5 | fast-uri vulnerable to improper path equivalence in relative reference normalization |
By the numbers
| Stars | 77.9K |
|---|---|
| Forks | 10.4K |
| Contributors | 76 |
| Commits | 501 |
| Open issues | 118 |
| Open pull requests | 330 |
| Releases | 0 |
| Latest release | none tagged |
| Licence | AGPL-3.0 |
| Main language | Python |
| Project age | 7 months |
| Last push | Nov 3, 2026 |
| Tracked files | 2,209 |
| Lines of code | 450.3K |
| Checkout size | 89 MB |
Lines by language: Markdown 216.3K, Python 152.6K, HTML 41.1K, JSON 12.2K, TypeScript 12K, JavaScript 10.1K.
Questions
Is OpenMontage free?
The software is free under the AGPL-3.0 licence, and the zero-key path costs nothing beyond your coding assistant's usage. Generated images, video and premium voices are billed by each provider, for example about $0.03 an image on fal.ai by the project's own guide.
What does the AGPL licence mean for me?
Using it on your own machine to make videos is fine. If you change the code and let other people use your version, including over a network as a service, the AGPL requires you to offer them your modified source code. A company planning to build a product on it should have that checked first.
Which API keys do I need?
None to start. Free keys from Pexels, Pixabay and Unsplash widen the stock library. FAL_KEY is the broadest paid option, covering FLUX images and Veo, Kling and MiniMax video. OpenAI, Google, ElevenLabs, Runway, Suno and others are all optional. With a suitable graphics card, local video models can also run free.
Can I copy a video I found online?
It uses a reference video for its pacing, structure and tone, and proposes new concepts, using the yt-dlp tool to fetch it. That does not give you rights to the original, and each stock library and AI service has its own terms, so check them before publishing commercially.
This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.
