OpenMontage: run a full AI video pipeline with zero paid APIs
Wire OpenMontage's scripting-to-composition pipeline using only free sources (Piper TTS for narration, Archive.org/NASA/Wikimedia for footage, Pexels for images) so you pay nothing for the orchestration layer, and validate the pipeline config before you run it.
Run this workflow
CI-verified, 2/2 fixtures passing.
Build this with your agent
One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.
Intended Use
Anyone replacing a stack of paid AI-video subscriptions with a self-hosted pipeline. CI validates the pipeline config: a name, at least one stage with a tool from the OpenMontage toolset, a composer block with FFmpeg or Remotion, and the tts provider is set to piper (free) or a named paid provider. The actual git clone, make setup, and video generation are fenced.
Not for
- Commercial products built on top without reading the AGPL-3.0 license, it requires source disclosure for distributed products
- High-quality AI video generation without a paid model API or a local GPU, free sources cap at documentary-style real footage and local TTS quality
The Stack
Tested Against
calesthio/OpenMontage (2026-06)ruby@3.x (YAML stdlib)Side effects & data flow
- Network
- none, local only
- Writes
- ./pipeline.yaml
- Credentials
- none required
Prerequisites
- Python 3.10+, FFmpeg, Node.js 18+ (for the actual run)
- git clone https://github.com/calesthio/OpenMontage && make setup
Steps
- 1
Author the pipeline config and validate it
Write pipeline.yaml: a name, one or more stages each with a tool from OpenMontage's toolset, a composer (ffmpeg or remotion), and a tts block. Using piper as the TTS provider costs nothing. CI checks the config shape; the actual clone, setup, and pipeline run are fenced.
cat > pipeline.yaml <<'YAML' name: documentary-zero-cost stages: - tool: script_writer source: prompt - tool: asset_fetcher sources: - archive_org - nasa - pexels - tool: editor transitions: crossfade composer: ffmpeg tts: provider: piper voice: en_US-lessac-medium YAML ruby -ryaml -e ' c = YAML.safe_load(File.read("pipeline.yaml")) || {} abort "BAD: name is required" if c["name"].to_s.empty? stages = c["stages"] abort "BAD: stages must be a non-empty list" unless stages.is_a?(Array) && !stages.empty? stages.each_with_index do |s, i| abort "BAD: stage " + i.to_s + " must have a tool" if s["tool"].to_s.empty? end allowed_composers = ["ffmpeg", "remotion"] abort "BAD: composer must be ffmpeg or remotion" unless allowed_composers.include?(c["composer"].to_s) tts = c["tts"] || {} abort "BAD: tts.provider is required" if tts["provider"].to_s.empty? free = tts["provider"] == "piper" puts "pipeline OK: " + stages.length.to_s + " stage(s), composer " + c["composer"].inspect + ", TTS " + tts["provider"].inspect + (free ? " (free/local)" : " (paid API)") ' - 2
Run the pipeline (fenced)
Clone the repo and run make setup, then point your coding assistant at the pipeline config. For zero-cost output use piper TTS and archive sources; swap in paid model APIs only if quality requires it. If distributing a product built on OpenMontage, read the AGPL-3.0 obligations before you ship. The setup and generation run are fenced.
Eval, 2 fixtures
Last passed: verified todaypipeline-okcontainstimeout 30s · max $0Expected:
pipeline OK:clean-exitexit_codetimeout 30s · max $0Expected:
0
Results
OpenMontage replaces the paid orchestration layer (the subscriptions you pay for video scripting, editing, and composition tooling), not the underlying model calls. With free-tier providers (Piper TTS, open media archives, Pexels), you can produce narrated documentary-style videos at zero API cost. Paid model APIs (video generation, premium voice) improve quality but are optional. AGPL-3.0 means all modifications must be disclosed if you distribute a product built on it.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Related workflows
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).