FrameForge
Provides ElevenLabs TTS integration for narration, including high-quality/voice-cloning voices and per-call provider selection via multi_voice_tts; also accessible through external_platform_call.
Provides an n8n webhook trigger tool to start asynchronous pipeline runs and return a job ID and status.
Supports local LLM inference through Ollama as an alternative LLM provider for research and scripting.
Uses OpenAI as both an LLM provider for research/script generation and a TTS provider for narration.
Delivers finished videos to Telegram through the publish_video tool.
Publishes or delivers finished videos to YouTube through the publish_video tool.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
⚡ FrameForge
AI Video Production Engine for Any Agentic IDE
Any IDE. Any topic. Any style. 1080p broadcast-quality videos from a single tool call.
Quickstart · Connect Your IDE · 13 MCP Tools · Architecture · Deploy
What is FrameForge?
FrameForge is a rendering execution engine. Your IDE is the intelligence.
Connect IBM Bob, Codex, opencode, Cursor, Windsurf, Claude Code, or any MCP-capable tool via the Cloudflare Remote MCP endpoint. The IDE agent writes the video script — FrameForge handles TTS synthesis, AI image generation, FFmpeg compositing, audio mastering, quality gating, and delivery.
No hardcoded topics, styles, or characters. Any format, any language, any visual aesthetic.
Your IDE agent writes this: FrameForge renders this:
────────────────────────── ─────────────────────────
scenes: [ final_video_1080p.mp4 ✓
{ narration: "...", short_1_vertical.mp4 ✓
caption: "OVERLAY", video_meta.json ✓
visual_description: "..." } → Telegram / YouTube
]Related MCP server: short-video-maker
Key Features
Feature | Detail | |
☁️ | Cloudflare Remote MCP | One HTTPS URL, every IDE. ~80% fewer context tokens vs local stdio. |
🤖 | Agent-first path |
|
🎙️ | Multi-platform voice | Switch between ElevenLabs, Azure, OpenAI TTS, and edge-tts per call — no |
🎬 | Bring your own media | Mix AI visuals with your own clips, images, and pre-recorded voiceovers per scene. |
🎚️ | Broadcast-grade audio | Voice compression, sidechain music ducking, EBU R128 −14 LUFS normalization. |
📱 | Vertical Shorts | Silence-detecting boundary clustering + focal-point-aware 9:16 crop. |
🛡️ | Hard quality gates | Resolution, codec, LUFS, black frames, frozen frames — broken output never ships. |
🔁 | Resume-safe pipeline | Content-addressed artifact manifest; re-runs skip already-rendered scenes. |
💰 | Cost tracking | NDJSON usage log with USD estimates per LLM / TTS / image call. |
60-Second Quickstart
1. Install prerequisites
node --version # need ≥ 18
ffmpeg -version # need ≥ 5.0 (brew install ffmpeg / apt install ffmpeg)
npm install -g edge-tts # free offline TTS — no account needed2. Clone and configure
git clone https://github.com/AMG555/FrameForge.git
cd FrameForge
npm run doctor # pre-flight check — tells you what's missing
npm run setup # interactive key wizard (~2 min)Minimum .env for a free, zero-cost run:
GROQ_API_KEY=gsk_... # free tier — console.groq.com
PROVIDER_LLM=groq
PROVIDER_TTS=edge-tts # free, offline — no key needed
PROVIDER_IMAGE=pollinations # free — no key needed3. Generate your first video
npm run make -- --topic "How does GPS actually work?"Output in .frameforge-files/:
final_video_<id>.mp4 1080p landscape master
short_1_<id>.mp4 auto-extracted 9:16 vertical Short
video_meta.json title, description, tags, chapter markers
usage.ndjson per-call cost logConnect Your IDE
☁️ Cloudflare Remote MCP (recommended)
One URL works everywhere. No local server process, no port forwarding, ~80% fewer context tokens than stdio.
Deploy once (< 2 minutes):
cd cloudflare-mcp
npm install
wrangler secret put WORKER_API_URL # https://your-render-app.onrender.com
wrangler secret put MCP_AUTH_TOKEN # any 32-byte hex string
wrangler secret put INTERNAL_API_TOKEN # different 32-byte hex string
wrangler deployAdd to any IDE:
{
"mcpServers": {
"frameforge": {
"url": "https://video-mcp.YOUR_SUBDOMAIN.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_MCP_AUTH_TOKEN" }
}
}
}Same block works in IBM Bob, Codex, opencode, Cursor, Windsurf, Claude Code, VS Code + Copilot, JetBrains AI, and any MCP-capable tool. See cloudflare-mcp/ for the full deployment guide.
💻 Local stdio (alternative — no cloud account needed)
{
"mcpServers": {
"frameforge": {
"command": "node",
"args": ["/absolute/path/to/FrameForge/src/mcp-server/stdio.js"],
"env": {
"GROQ_API_KEY": "gsk_...",
"PROVIDER_LLM": "groq",
"PROVIDER_TTS": "edge-tts",
"PROVIDER_IMAGE": "pollinations"
}
}
}
}Using FrameForge from Your IDE
Agent-first path (recommended)
Your IDE agent writes the scenes[] array. FrameForge renders it. No internal LLM needed.
create_video_from_script({
scenes: [
{
narration: "WiFi sends data as invisible radio waves at 2.4 or 5 GHz.",
caption: "RADIO WAVES",
visual_description: "router emitting concentric waves, flat design, bold colors"
},
{
narration: "Your laptop picks up the signal and decodes the packets instantly.",
caption: "YOUR DEVICE",
visual_description: "laptop with signal bars, white background, minimal illustration"
}
],
imageStyle: "flat design, white background, bold primary colors"
})
→ { masterPath: "/files/final_video_abc123.mp4", passed: true, sceneCount: 2 }Auto-research path
Let FrameForge handle research and scripting internally:
1. research_topic({ topic: "How GPS works", style: "educational", format: "YouTube short" })
2. write_script({ ...claims, persona: "tech explainer", language: "en", targetDuration: 60 })
3. render_from_scenes({ productionId, skipImages: false })Bring your own media
Pass per-scene paths to skip AI generation for any scene:
{
"narration": "Here is the sorting algorithm running step by step.",
"caption": "ALGORITHM",
"video_path": "/recordings/screen_capture.mp4",
"audio_path": "/recordings/my_voice.mp3"
}Any combination of image_path, video_path, audio_path works. FrameForge generates only what you don't supply.
MCP Tools Reference
# | Tool | Description |
1 |
| Research any topic. Extracts + fact-checks claims. Accepts |
2 |
| Generate a video script from claims. Any style, language, persona, duration, or visual aesthetic. |
3 |
| Generate one scene image using the configured image provider. |
4 |
| Synthesize narration audio for one scene using the configured TTS provider. |
5 |
| FFmpeg render + 7-point quality gate → master MP4. |
6 |
| Deliver finished video to Telegram and/or YouTube. |
7 |
| Import your own clips, images, and audio into a scenes manifest. |
8 |
| Read and patch an existing scenes manifest — update captions, swap files, append scenes. |
9 |
| Render directly from a scenes manifest, skipping research and scripting. |
10 |
| HTTP bridge to VoxForge, Runway, ElevenLabs, Remotion, or any external platform. |
11 |
| Agent-first. Your IDE writes the scenes, FrameForge renders. No internal LLM. |
12 |
| Call any TTS platform per-request (ElevenLabs / Azure / OpenAI / edge-tts / webhook) without touching |
13 |
| Trigger an n8n webhook to start an async pipeline run. Returns |
Providers
Switch any provider by setting the corresponding env var — no code changes.
LLM (10 providers)
| Default model | Key env var | Free tier |
|
|
| ✅ |
|
|
| ✅ |
|
|
| ✅ credits |
|
|
| — |
|
|
| ✅ |
|
|
| — |
|
|
| ✅ credits |
|
|
| — |
|
| — | ✅ local |
| any OpenAI-compat endpoint |
| depends |
Override model: LLM_MODEL=your-model-id · Override endpoint: LLM_BASE_URL=https://...
TTS (5 providers)
| Notes | Key |
| Free, offline, 300+ voices | — |
| Voice cloning, highest quality |
|
| Natural voices, multilingual |
|
| Fast, clean narration |
|
| Any HTTP TTS endpoint |
|
Use multi_voice_tts to override the provider per call without changing .env.
Image generation (5 providers)
| Notes | Key |
| Free, no account | — |
| Fast, high quality |
|
| 1000+ models |
|
| DALL-E 3 |
|
| Any HTTP image endpoint |
|
Architecture
YOUR IDE (IBM Bob / Codex / opencode / Cursor / Windsurf / Claude Code)
│
│ HTTPS + SSE (Cloudflare Remote MCP)
▼
[Cloudflare Workers] ← caches schemas, proxies tool calls, keeps IDE context lean
│
│ HTTP + INTERNAL_API_TOKEN
▼
[FrameForge Node] ← runs on Render free / VPS / Pi / your machine
│
├─ src/pipeline/
│ ├─ providers.js 10 LLM + 5 TTS + 5 Image providers
│ ├─ state-machine.js file + PostgreSQL production state
│ ├─ retry-policy.js exponential backoff, FATAL/NON_RETRYABLE/RETRYABLE
│ ├─ telemetry.js NDJSON cost tracking per provider
│ ├─ artifact-manifest.js content-addressed idempotency manifest
│ └─ artifact-retention.js permanent / 30-day / temp sweep
│
├─ src/workflows/
│ ├─ research.js research + fact extraction
│ ├─ script.js scene schema v2.0.0 generation + normalisation
│ ├─ assets.js parallel image gen + TTS (configurable concurrency)
│ ├─ render.js FFmpeg zoompan + captions + quality gate
│ ├─ shorts.js silence segmentation + focal-point 9:16 crop
│ ├─ packaging.js manifest + metadata JSON
│ └─ publishing.js Telegram + YouTube OAuth2
│
├─ src/mcp-server/
│ ├─ server.js HTTP MCP (port 3210) — 13 tools
│ └─ stdio.js stdio MCP — same 13 tools
│
└─ src/worker/
├─ server.js full worker (local / VPS)
└─ server-render-free.js Render.com free tier (api_only mode)
delegates FFmpeg to LOCAL_RENDER_URLQuality Gates
Every video passes 7 automated checks before delivery. Any failure blocks the output.
Gate | Requirement |
Resolution | 1920×1080 (landscape) or 1080×1920 (shorts) |
Video codec | H.264, high profile, level 4.1, yuv420p |
Integrated loudness | −14 LUFS ± 1.5 LU |
True peak | ≤ −0.5 dBTP |
Black frames | None longer than 0.5 s |
Frozen frames | None longer than 0.5 s |
File integrity | > 1 MB, valid video + audio streams |
Deployment
Render.com free tier + local render (recommended)
FrameForge has a split-worker design. Network-bound work (LLM, TTS, image APIs) runs on the Render free tier (512 MB RAM). FFmpeg render jobs are delegated to your local machine, Pi, or VPS.
Render free tier ← research, script, assets, packaging, publishing
Your local machine ← render, shorts (FFmpeg, ~800 MB RAM peak)See render.yaml for the Render deploy config and docs/deployment.md for the full step-by-step guide.
Environment variables
cp docs/env.template .env
# then edit .env — minimum:
GROQ_API_KEY=gsk_...
PROVIDER_LLM=groq
PROVIDER_TTS=edge-tts
PROVIDER_IMAGE=pollinationsFull reference: docs/env.template
systemd (Linux VPS / Pi)
[Unit]
Description=FrameForge MCP Server
After=network.target
[Service]
User=node
WorkingDirectory=/home/node/FrameForge
EnvironmentFile=/home/node/FrameForge/.env
ExecStart=/usr/bin/node src/mcp-server/server.js
Restart=on-failure
[Install]
WantedBy=multi-user.targetsudo systemctl enable frameforge
sudo systemctl start frameforge
sudo journalctl -fu frameforgeCLI Reference
Command | What it does |
| Pre-flight check — Node, FFmpeg, edge-tts, env vars |
| Interactive provider key wizard (writes |
| Validate an existing |
| Full pipeline: research → render → deliver |
| HTTP MCP server on port 3210 |
| stdio MCP server |
| Background queue worker |
| Render-optimised worker (api_only mode) |
| Local full-render worker (RENDER_MODE=full) |
| Deep structural validation (113 checks) |
| Unit test suite (272 tests, 47 suites) |
npm run make flags:
npm run make -- \
--topic "How GPS works" \
--style educational \ # educational | comedic | documentary | vlog | tutorial
--format "YouTube short" \ # YouTube video | YouTube short | Instagram reel | explainer
--language en \ # BCP-47 code
--no-publish \ # render only, skip delivery
--no-shorts \ # skip vertical crop
--channels telegram,youtubeTesting
272 tests across 11 modules — run with:
npm testModule | Tests | Covers |
| 30 | Error classification, retry/dead-letter/FATAL, backoff math |
| 15 |
|
| 22 | create/load/resume/overwrite, scene updates, idempotency checks |
| 21 | All 4 retention categories, tagging, sweep, dryRun |
| 23 |
|
| 34 |
|
| 40 | All 11 camera hints, MAX_ZOOM constraint, transitions, auto quadrant |
| 22 | All risk × status combos, |
| 30 | 14 credential patterns, nested object redaction, safe logger |
| 18 |
|
| 17 |
|
Security
Timing-safe auth — All token comparisons use
crypto.timingSafeEqual(no timing oracle)Body size limits — All three HTTP servers reject requests > 4 MB with HTTP 413
Path traversal guards —
productionIdandoutputPathvalidated before any file operationCredential redaction — 14 regex patterns strip keys from all logs at the source
No secrets in code — All keys via
.env;.gitignorecovers it
Report vulnerabilities: SECURITY.md
Contributing
See CONTRIBUTING.md for the full guide.
Quick checklist:
npm run doctorpasses on your OSnpm testpasses (272/272)npm run validatepasses (113/113 checks)FFmpeg commands keep
-nostdinand cross-platform font pathsCommit messages: plain imperative sentences — no
feat:/fix:prefixes
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
AI video producer: directs your idea or script into a finished, fact-checked video. MCP-native.
Give AI agents a creator's video pipeline: Shorts, thumbnails and YouTube publishing.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that turns a script into a Hyperplexed-style motion-graphics MP4. Plug the URL into Claude Desktop, Cursor, or any MCP-compatible agent and it gains a render_video tool.MIT
- AlicenseNot gradedqualityDmaintenanceAutomated short-form video creation from text prompts, combining text-to-speech, captions, background videos, and music, exposed as an MCP server for AI agents.76 npmMIT
- AlicenseBqualityCmaintenanceEnables any MCP-compatible AI agent to generate videos and images from text or reference frames, chain scenes into seamless multi-scene films with sound and speech, and download finished media with manifests and previews. It also exposes account status, plan limits, history and library management through confirm-gated, safe-by-default operations.2034MIT
- AlicenseNot gradedqualityBmaintenanceLets coding agents create and edit video through cloud rendering: animated captions, photo slideshows with voiceover, AI-generated shorts, and arbitrary ffmpeg commands, with finished files saved into the project.MIT