Turn long videos into viral vertical shorts and publish them to TikTok, Instagram and YouTube.
This MCP server (slug: io-github-mutonby-openshorts, name: io.github.mutonby/openshorts) is described as a system to turn long videos into viral vertical shorts and publish them to TikTok, Instagram, and YouTube. The repository is associated with video clipping and generation capabilities, including AI clip generation.
🛠️ Key Features
Video short generation (“shorts” / “clip-generator”)
Open source AI video platform with 3 tools in one: Clip Generator, AI Shorts (UGC videos with AI actors), and YouTube Studio.
Your podcast, and the vertical clip OpenShorts makes of it: both speakers stacked, captions on the seam
Two people on camera? OpenShorts stacks them instead of shrinking the wide shot, puts the captions on the seam where they cover nobody, and switches back to a face-tracked crop when the cut goes to one person. The AI picks the layout per video; nothing to configure.
Self-hosting is genuinely free and always will be. It costs you a machine, your own API keys and the time to keep it running. The hosted plans exist to cover that hardware and those keys, not to unlock features.
Click the image above to watch the full walkthrough.
3 Tools in 1 Platform
1. Clip Generator
Turn your long-form videos — podcasts, webinars, livestreams, vlogs, interviews — into viral-ready 9:16 shorts for TikTok, Instagram Reels, and YouTube Shorts.
2. AI Shorts (UGC Video Creator)
Generate marketing videos with AI actors for any product or business. No camera, no studio, no influencer budget. Just describe your product or paste a URL.
Two cost modes: Low Cost ($0.65/video) and Premium ($2/video)
Works for any business: SaaS, restaurants, e-commerce, coaching, local businesses
AI-generated actors with lip-sync, voiceover, b-roll, and TikTok-style subtitles
Choose from a shared avatar gallery or upload your own photo
Publish directly to TikTok, Instagram, and YouTube
3. YouTube Studio
Complete free AI YouTube toolkit: thumbnails, titles, descriptions, and direct publishing.
AI thumbnail generator with face overlay
10 viral title suggestions with refinement chat
Auto-generated descriptions with chapter timestamps
One-click publish to YouTube
UGC Video Gallery
All generated videos and avatars are saved to a public gallery with SEO pages for each video.
UGC Gallery
Public gallery page with hover-to-play (/gallery)
Individual SEO video pages with og:video meta tags (/video/{id})
JSON-LD structured data for search engines
Avatar gallery with prompt history
Key Features
Clip Generator
Viral Moment Detection: Google Gemini 3.1 Flash-Lite analyzes transcripts and scene boundaries to detect 3-15 high-potential moments
Runs fully local if you want: point LLM_BASE_URL at Ollama, LM Studio, vLLM or any OpenAI-compatible server and the moment picker runs on your own model, no Google key needed (see Run without a Google key)
Smart 9:16 Cropping: AI reframing per scene — TRACK mode (MediaPipe + YOLOv8 face tracking), GENERAL mode (blurred background), SPLIT mode (two speakers stacked, captions on the seam) and SCREENCAST mode (screen over presenter); the layout is picked per video by Gemini or forced from the dashboard
Auto Subtitles: faster-whisper with word-level timestamps, styled and burned into clips
AI Voice Dubbing: ElevenLabs integration for 30+ languages with voice cloning
Hook Text Overlays: AI-generated attention-grabbing text overlays
AI Video Effects: Gemini-generated FFmpeg filters for professional effects
AI Shorts Pipeline
Analyze: Scrape website URL + web research, or generate from manual description
Script: AI writes viral scripts (hook - problem - solution - CTA format)
Actor: Generate AI actors with Flux 2 Pro or select from shared gallery
Self-hosting OpenShorts is free. You provide the machine and you only pay for the AI APIs you use, and most have generous free tiers:
Service
Free Tier
Paid Cost
Used For
Google Gemini
Free trial with generous limits
< $0.01 per 10-min video
Viral moment detection, script generation, web research
Local LLM (Ollama, LM Studio, vLLM...)
Free, your hardware
$0
Viral moment detection instead of Gemini (LLM_BASE_URL)
fal.ai
Pay-per-use
~$0.50-1.50 per AI Short
Actor generation, talking head video, lip-sync
ElevenLabs
Free tier available
Pay-per-use
Voiceover, voice dubbing
Upload-Post
10 free uploads/month to all networks (no credit card)
Pay-per-use
Auto-publishing to TikTok, Instagram, YouTube
AWS S3
Optional
~$0.023/GB
Cloud backup for clips and gallery
Bottom line: You can clip videos for practically free with Gemini, and publish 10 videos/month to all social networks at zero cost with Upload-Post.
Don't want to run any of that?openshorts.app is the same software on our hardware: our NVIDIA GPU clips an 8-minute video in about 50 seconds instead of the 5 to 8 minutes it takes on a typical CPU, the Gemini key is included, and auto-publishing is already wired up. Free plan is 20 minutes a month with a watermark and no credit card; paid plans start at $12/mo for 100 minutes without watermark.
Requirements
Docker & Docker Compose
Google Gemini API Key (Free — get it here) — required for all AI features
fal.ai API Key (Pay-per-use) — required for AI Shorts (actor generation, video, lip-sync)
ElevenLabs API Key (Free tier) — required for voiceover/dubbing
Upload-Post API Key (free tier) — required for direct social posting
Getting Started
1. Clone
bash
git clone https://github.com/mutonby/openshorts.git
cd OpenShorts
2. Configure (optional)
bash
cp .env.example .env# Edit .env with your AWS keys for S3 backup
3. Launch
bash
docker compose up --build
4. Open Dashboard
Navigate to http://localhost:5175
Go to Settings and enter your API keys (Gemini, fal.ai, ElevenLabs, Upload-Post)
Clip Generator: Upload a long-form video to generate viral shorts
AI Shorts: Describe your product or paste a URL to generate UGC marketing videos
YouTube Studio: Generate thumbnails, titles, and descriptions for YouTube
UGC Gallery: Browse all generated videos and avatars
5. GPU acceleration (optional, NVIDIA)
The default image is CPU-only. With an NVIDIA card (any card with NVENC, e.g. RTX 4060) an 8-minute video clips in about a minute instead of 5 to 8. Nothing is passed through in the VM sense — the container just gets access to the host GPU.
sudo nvidia-ctk runtime configure --runtime=docker && sudo systemctl restart docker
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi # sanity check
On Windows use Docker Desktop with the WSL2 backend and the Windows NVIDIA driver; no driver inside WSL.
Compose: create docker-compose.override.yml next to docker-compose.yml (picked up automatically). GPU: "1" adds cuBLAS/cuDNN and onnxruntime-gpu to the image (~2 GB); video is required for NVENC.
WHISPER_MODEL=large-v3-turbo
WHISPER_DEVICE=cuda
WHISPER_COMPUTE=float16
FFMPEG_ENCODER=auto # probes h264_nvenc at startup, falls back to x264
TRANSCRIBE_BACKEND=parakeet # optional: ~2x faster than whisper, 25 European languages, auto-falls back to whisper
ASR_GPU_CONCURRENCY=1
The backend log on the first job reports the chosen encoder and transcription device. A CUDA error in whisper (e.g. VRAM exhausted) retries once on CPU automatically. 8 GB of VRAM is enough for large-v3-turbo fp16 plus the detection models.
6. Run without a Google key (local LLM, optional)
The only cloud call in the clip pipeline is the moment picker: it sends the
transcript (never the video) to Gemini. Point it at any OpenAI-compatible
server instead and the whole pipeline stays on your box:
bash
# .env
LLM_BASE_URL=http://host.docker.internal:11434/v1 # Ollama on the host
LLM_MODEL=qwen2.5:14b # any chat model that follows instructions# LLM_API_KEY=... # only if your server checks one (vLLM --api-key, OpenRouter)
Works with Ollama, LM Studio, vLLM, llama.cpp server, LocalAI and OpenRouter.
The dashboard stops asking for a Gemini key when this is set. Two things to
know:
Context length. A scoring call carries three transcript windows
(~2-3k tokens) and the detail call up to ten (~5k on a long podcast).
Ollama defaults to a 4096-token context and truncates silently, so run it
with OLLAMA_CONTEXT_LENGTH=16384 (or set num_ctx in a Modelfile); raise
LLM_SCORE_BATCH above 3 only if your context allows it. 7-8B models
return valid JSON reliably, 3B ones do not.
What still needs Gemini. Anything that has to look at frames: the
automatic layout picker (AUTO_LAYOUT), the on-screen content detector
and silent videos (no speech to clip by). Without a Gemini key those fall
back to the plain face-tracking crop, and a silent video fails with a
message that says so. Add a key alongside LLM_BASE_URL and you get both.
Technical Pipeline
Clip Generator
Ingest — Local video upload (or self-hosted URL ingest via yt-dlp)
Transcribe — faster-whisper with word-level timestamps
Reframe — AI vertical cropping with subject tracking
Effects — Subtitles, hooks, AI video effects
Publish — S3 backup + Upload-Post social distribution
AI Shorts
Analyze — Website scraping + Gemini web research (or manual description)
Script — Gemini generates viral scripts with segments
Actor — Flux 2 Pro portrait generation (or gallery/upload)
Voice — ElevenLabs TTS voiceover
Video — Hailuo 2.3 Fast img2video + VEED Lipsync (Low Cost) or Kling Avatar v2 (Premium)
B-roll — Flux 2 Pro image generation + Ken Burns effect
Composite — FFmpeg assembly with ASS subtitles and hook overlays
Gallery — Upload to public S3 with metadata for SEO pages
Publish — Upload-Post to TikTok, Instagram, YouTube
Automate It: MCP Server, REST API and Webhooks
You don't need the dashboard. The whole pipeline is callable by AI agents and scripts.
MCP server (/mcp)
OpenShorts ships a built-in MCP server, so Claude, ChatGPT, Cursor or any MCP client can clip and publish videos for you:
claude.ai and ChatGPT: paste https://mcp.openshorts.app/mcp as a custom connector (Settings → Connectors) and approve the access on openshorts.app. The server does OAuth 2.1 with dynamic client registration, so there is no key to copy; the connection shows up under Account → API keys, where revoking it disconnects the app.
bash
# Claude Code / Cursor / n8n (hosted): create an API key in your account page
claude mcp add --transport http openshorts https://mcp.openshorts.app/mcp \
--header "Authorization: Bearer osk_..."# Self-hosted (no key needed, BYOK rules apply):
claude mcp add --transport http openshorts http://localhost:8000/mcp
# Self-hosted without running the web server: same tools over stdio
claude mcp add openshorts -- python mcp_stdio.py
Tools: process_video (URL or upload_id; captions: false when the source already has subtitles, auto_hook: false to skip the hook line, burned by default like the dashboard), create_upload (hand the agent a local file: PUT the bytes, then process), get_job_status, list_clips, get_quota, add_subtitles, recut_clip, publish_clip. A prompt like "clip this podcast and schedule the best 3 to TikTok" is now a one-liner in your agent of choice.
REST API + API keys
Hosted accounts can mint osk_... API keys (account page). A key authenticates as you everywhere — same plan, same minutes, same job ownership:
Interactive docs at /docs (OpenAPI) on any instance.
Completion webhooks
Pass webhook_url (and optionally webhook_secret) to POST /api/process and you get exactly one POST when the job reaches a terminal state — no polling loops in your n8n / Zapier / cron pipelines:
skills/openshorts/SKILL.md follows the open
Agent Skills standard, so it works in any
skill-capable agent:
bash
# Claude Code (and most agents): copy the folder into the skills directorycp -r skills/openshorts ~/.claude/skills/
# Hermes Agent: install straight from this repo
hermes skills install mutonby/openshorts/skills/openshorts
# OpenClaw: from ClawHub
openclaw skills install @mutonby/openshorts
n8n
An importable workflow (video URL in, published-ready clips out, no polling)
lives in examples/n8n/.
Contributions are welcome! Whether it's adding new AI models, improving the lip-sync pipeline, or building new features — feel free to open a PR.
License
MIT License for the core application — OpenShorts is yours to use, modify, and scale.
Exception: the cloud/ directory (billing, managed keys, and the hosted-service infrastructure behind the optional BILLING_ENABLED flag) is source-available under the OpenShorts Commercial License. You can read it, modify it, and self-host it for personal or internal use, but you can't offer it to third parties as a paid/hosted service. Self-hosting the core app never requires this directory.
Install
Remote endpoint
Streamable HTTP
Hosted server - connect over the network, no local install.