The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Openshorts listing page.
Open source AI video platform with 3 tools in one: Clip Generator, AI Shorts (UGC videos with AI actors), and YouTube Studio.

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.
Two ways to run it, same software either way:
| Self-hosted (this repo) | Hosted on openshorts.app | |
|---|---|---|
| Price | Free forever, MIT | Free plan, paid from $12/mo |
| Speed | 5 to 8 min per 8-min video on CPU | About 50s on our NVIDIA GPU |
| API keys | Bring your own Gemini, ElevenLabs, fal.ai | Gemini included, nothing to set up |
| Watermark / limits | None, ever | Watermark and 20 min/mo on the free plan, neither on paid |
| Setup | Docker, 8GB+ RAM, model downloads | Sign in and paste a link |
| MCP / API for agents | Same /mcp endpoint, but only while your machine is on | Always-on endpoint at mcp.openshorts.app, API keys in one click |
| Your data | Your server | Ours |
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.
https://github.com/user-attachments/assets/b45fa983-16b4-48b5-ac5b-a267836b9ad9
Click the image above to watch the full walkthrough.
Turn your long-form videos — podcasts, webinars, livestreams, vlogs, interviews — into viral-ready 9:16 shorts for TikTok, Instagram Reels, and YouTube Shorts.

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.

Complete free AI YouTube toolkit: thumbnails, titles, descriptions, and direct publishing.

All generated videos and avatars are saved to a public gallery with SEO pages for each video.

/gallery)/video/{id})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)Videos generated with OpenShorts AI Shorts — no camera, no studio, no actors:
![]() | ![]() | ![]() |
| Biohacking for Investors · LOW COST | Secret Weapon for Devs · LOW COST | El Secreto de los Agentes de IA · PREMIUM |
Browse all videos at openshorts.app/gallery
| Feature | OpenShorts | Opus Clip | CapCut | Vizard | Klap | Descript |
|---|---|---|---|---|---|---|
| Price | Free self-hosted from $12/mo hosted | $15-29/mo | $8/mo | $15-20/mo | $23-63/mo | $24-65/mo |
| Self-hosted | Yes | No | No | No | No | No |
| Open source | Yes | No | No | No | No | No |
| Watermark | Never self-hosted free plan only when hosted | Free tier | Some | Free tier | Free tier | Free tier |
| Upload limits | None self-hosted by plan when hosted | 10-30GB | Credit-based | 60min-10hr | 10-100 vids/mo | 60min-40hr |
| AI clip detection | Yes | Yes | Yes | Yes | Yes | Yes |
| Smart 9:16 reframing | Yes | Yes | Yes | Yes | Yes | No |
| Auto subtitles | Yes | Yes | Yes | Yes | Yes | Yes |
| Voice dubbing (30+ langs) | Yes | No | Pro only | No | Pro only | Business only |
| AI UGC actors | Yes | No | No | No | No | No |
| AI video effects | Yes | No | Yes | No | No | No |
| Hook text overlays | Yes | No | No | No | No | No |
| YouTube Studio (titles, thumbnails) | Yes | No | No | No | No | No |
| Social auto-publishing | Yes | Pro only | TikTok only | Paid only | Paid only | No |
| Schedule uploads | Yes | Pro only | No | Paid only | Paid only | No |
| Data privacy | Your server | Their cloud | Their cloud | Their cloud | Their cloud | Their cloud |
| Works with a local LLM (Ollama) | Yes | No | No | No | No | No |
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.
Navigate to http://localhost:5175
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.
Host: install the NVIDIA driver (nvidia-smi must work) and the NVIDIA Container Toolkit:
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.
.env:
Verify:
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.
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:
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:
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.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.You don't need the dashboard. The whole pipeline is callable by AI agents and scripts.
/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.
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.
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.
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:
With a secret, the body is signed: X-OpenShorts-Signature: sha256=<hmac-sha256(body)>.
The same API from the terminal, zero dependencies (cli/):
skills/openshorts/SKILL.md follows the open
Agent Skills standard, so it works in any
skill-capable agent:
An importable workflow (video URL in, published-ready clips out, no polling)
lives in examples/n8n/.
| Layer | Technology |
|---|---|
| Backend | Python 3.11, FastAPI, google-genai, faster-whisper, ultralytics (YOLOv8), mediapipe, opencv-python, yt-dlp, FFmpeg, httpx |
| Frontend | React 18, Vite 4, Tailwind CSS 3.4 |
| AI APIs | Google Gemini, fal.ai (Flux, Hailuo, VEED, Kling), ElevenLabs |
| Infrastructure | Docker + Docker Compose, AWS S3 |
| Publishing | Upload-Post API (TikTok, Instagram, YouTube) |
Server-side (.env):
| Variable | Description |
|---|---|
AWS_ACCESS_KEY_ID | AWS access key for S3 |
AWS_SECRET_ACCESS_KEY | AWS secret key |
AWS_REGION | AWS region (default: us-east-1) |
AWS_S3_BUCKET | Private bucket for clip backup |
AWS_S3_PUBLIC_BUCKET | Public bucket for gallery/avatars |
MAX_CONCURRENT_JOBS | Concurrent processing limit (default: 5) |
LLM_BASE_URL | OpenAI-compatible server for the moment picker (Ollama, vLLM, LM Studio...). Set it and the Gemini key becomes optional |
LLM_MODEL | Model name on that server (default llama3.1:8b) |
LLM_API_KEY | Bearer token for that server, if it checks one |
LLM_SCORE_BATCH | Transcript windows per scoring call (default 3 local, 8 Gemini) |
Client-side (encrypted in localStorage):
| Key | Description |
|---|---|
GEMINI_API_KEY | Google Gemini — required unless LLM_BASE_URL is set (then only for layout picking and silent videos) |
FAL_KEY | fal.ai — required for AI Shorts |
ELEVENLABS_API_KEY | ElevenLabs — required for voiceover/dubbing |
UPLOAD_POST_API_KEY | Upload-Post — required, for social posting |
appuserMAX_CONCURRENT_JOBS)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.
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.