⚡ ShortsFlow AI Studio
The self-hosted Opus Clip alternative.
Paste a podcast or YouTube link, get captioned 9:16 Shorts that cut to whoever is talking. Free, local, no watermark, no credit caps.
Clip long videos with local Whisper, an LLM that scores the hooks, face-tracked 9:16 crops, a stacked two-speaker split or active-speaker switching, and Remotion spring captions. Or generate from an idea with 30+ formats (facts quizzes, explainers, top-5 lists, stories) and drive everything from a browser UI, the CLI, Docker, Colab or an MCP agent.
🎬 Running in production: the YouTube channel @spottheliee is generated and posted entirely by ShortsFlow - 6 "spot the lie" Shorts a day from one GitHub Actions workflow.
⭐ If ShortsFlow saves you an Opus Clip subscription, please star the repo - it helps more creators find it.
✂️ Clipping demo: the crop follows whoever is talking
The first GIF above is a real run of py main.py --source_video interview.mp4 --layout active --use_remotion on a 4:3, 480p two-person
interview: the shot cuts to the speaker, found by voice pitch plus face detection, and Whisper word captions are burned in.
Source footage: Aida Thomas Interviews Nancy Many - Part 1
by Aida Thomas, CC BY-SA 3.0; the demo GIF is a derivative and is shared under the same licence.
⚡ Quick Start - pick one
🪟 Windows: one-click install
⬇ Download ShortsFlow-Setup.exe (or see all releases), run it, then open ShortsFlow from your Desktop. A browser page opens where you paste a video link or upload a file and press one button. No Python, Node or API key to install first.
- The installer downloads roughly 2 GB the first time (about 5 GB with an NVIDIA card, because of the GPU libraries; it fetches its own private Python, the speech-recognition components and Node), so it needs an internet connection and a few minutes. It does not need admin rights.
- It is not code-signed yet, so Windows may show a blue "Windows protected your PC" box: click More info, then Run anyway.
- With an NVIDIA graphics card it uses the GPU (fast). Without one it still works on the CPU, but transcribing a long video takes much longer, and the first run also downloads the speech model.
- Uninstall from Windows Settings > Apps. Your videos and settings in
%LOCALAPPDATA%\ShortsFlow\workspaceare kept.
🚀 Your first shorts in 3 steps (no API key needed)
Clipping a long video into vertical shorts works without any account or API key. A key (or a free local Ollama) only adds AI titles and descriptions, and is needed for the idea-to-video modes.
- Install (needs Python 3.12):
pip install "shortsflow[clip]" - Check your setup:
shortsflow doctorlists what is ready and what to fix, in plain words. - Make shorts from a file or a link:
shortsflow clip my_video.mp4(orshortsflow clip "https://youtube.com/watch?v=..."). Add--count 5for more clips,--captionsfor animated captions (needs Node.js, then runshortsflow initonce).
Your shorts are saved in a shortsflow folder in your home directory (the command prints the exact path). Stuck? shortsflow doctor tells you the next step, and error messages say how to fix a bad key or a rate limit.
| Option | Command | Best for |
|---|---|---|
| ☁️ Google Colab (free GPU, zero install) | Trying it in 5 minutes | |
| 🐳 Docker (browser WebUI) | docker run -p 7860:7860 -e GEMINI_API_KEY=your_key ghcr.io/ghost1412/shorts-generator → open http://localhost:7860 |
Servers, Linux, no Python setup |
| 📦 pip | pip install shortsflow then shortsflow init and shortsflow doctor (clipping: pip install "shortsflow[clip]") |
Using it as a command from anywhere |
| 🌐 Browser WebUI | pip install -r requirements-full.txt && python webui.py |
Local use with a GPU |
| 🖥️ Desktop Studio GUI (Windows) | setup.bat && launch.bat |
Windows desktop |
| 🤖 AI agents | python mcp_server.py or point your agent at SKILL.md |
Claude Code, Cursor, n8n |
git clone --depth 1 https://github.com/ghost1412/shorts-generator.git
cd shorts-generator
🐧 Linux / macOS:
chmod +x setup.sh && ./setup.sh && python3 webui.py
⚡ ShortsFlow vs Opus Clip, Klap & Vizard
| ⚡ ShortsFlow | Paid clippers | |
|---|---|---|
| Price | Free (MIT). You pay only for the LLM key you choose, or $0 with Ollama | ~$19-49 / month with minute or credit caps |
| Where your video goes | Stays on your machine; Whisper runs locally | Uploaded to their cloud |
| Watermark / export limits | None | Watermark and caps on lower tiers |
| Face-tracked 9:16 reframing | ✅ | ✅ |
| Podcast layouts | ✅ single, stacked split, active-speaker switching | ✅ varies by tool |
| Word-level animated captions | ✅ Remotion (Hormozi, Glow Box, Bounce, Minimal) | ✅ |
| Virality / hook score per clip | ✅ in --output_json (WebUI view planned) |
✅ |
| Dubbing | ✅ | Often a paid add-on |
| Idea-to-video (facts, explainers, stories) | ✅ 30+ modes | ❌ clipping only |
| Automation | ✅ CLI, MCP server, Docker, GitHub Actions | API usually on higher tiers |
| Polished timeline editor | ❌ not yet | ✅ |
| Multi-platform scheduling | ✅ TikTok / Instagram / YouTube via Upload-Post (python -m engine.publish) |
✅ |
Honest take: the paid tools have a nicer editor and scheduling. ShortsFlow wins on cost, privacy, and being scriptable.
🖥️ Desktop Studio GUI (gui_app.py)
- 3-Column Single-Window Studio Layout: Live 9:16 vertical canvas preview, mode picker, preset cards, and 1-click render launcher.
- Interactive Remotion Presets: 1-click selection between
HORMOZI,GLOW_BOX,BOUNCE, andMINIMALspring captions.
🎬 Video Generator Modes
| Mode | Visual Format | Quick Command |
|---|---|---|
| ✂️ AI Clipping | Slices long YouTube/local videos into high-scoring vertical shorts | py main.py --source_video "URL" --smart_crop |
| 🔢 Top 5 Countdown | Numbered listicle countdown shorts (#5 ➔ #1) with rank badges | py main.py --mode TOP_5 --category "inventions" |
| 💬 Chat Story | Animated text message conversation shorts (iMessage format) | py main.py --mode CHAT_STORY --category "mystery" |
| 👥 Podcast (planned, not implemented yet) | 2-speaker debate shorts with alternating multi-voice synthesis | - |
| 🌐 Video Dubbing (planned, not implemented yet) | Multilingual video translation & voice re-synthesis | - |
| 🧮 Manim Explainer | Programmatic 2D/3D math, CS, and science animations | py main.py --mode EXPLAINER --prompt "Gravity" |
| 💡 AI Facts | High-energy trivia & mystery facts with scene stock loops | py main.py --mode FACTS --category "space" |
| 📖 AI Story | Narrative story voiceover with visual scene stitching | py main.py --mode STORY --category "sci-fi" |
| 🤔 This or That (WYR) | Split-screen dilemma challenge with VS central badge | py main.py --mode WYR --category "superpowers" |
| 🧩 Emoji Guess | Interactive emoji puzzle game with animated reveal | py main.py --mode EMOJI_GUESS --category "movies" |
| 📰 News Breakdown | RSS news headline summary with cartoon personas | py main.py --mode NEWS --cartoon --persona mafia_cat |
🎛️ Engine Power Capabilities
| Capability | Supported Technologies & Flags |
|---|---|
| 🎙️ Voice Synthesis & Cloning | Local Kokoro TTS (--tts_provider kokoro, no key), Zero-Shot Voice Cloning (--clone_voice "sample.wav"), VoiceStudio Local REST (--tts_provider voicestudio), ElevenLabs, EdgeTTS |
| 📐 Aspect Ratios | 9:16 (Vertical), 16:9 (Landscape), 1:1 (Square), 4:5 (Social Feed) via --aspect_ratio |
| 🔊 Audio Mastering & SFX | Auto SFX (whoosh, pop, riser, boom), Dynamic BGM Audio Ducking (--auto_ducking), Studio Master Filter (--enhance_audio) |
| 🎥 Motion & Visual Filters | Dynamic Camera Push-In Zoom (--enable_zoom), 12 Color Grade Presets (--video_filter cyberpunk, kurosawa, teal_orange) |
| 📦 Batch Automation | Automated queue execution from CSV / text lists (--batch_file "topics.txt") |
| 🤖 Multi-LLM Matrix | Google Gemini, Local Ollama (qwen3:8b), DeepSeek, Groq, Anthropic, OpenRouter (--llm_provider) |
🎨 Visual Color Grading Presets (--video_filter)
| Preset Name | Visual Atmosphere | Preset Name | Visual Atmosphere |
|---|---|---|---|
dynamic |
AI auto-switches color grade per scene beat | kurosawa |
Black & White high-contrast samurai |
cyberpunk |
Neon boosted purples/blues for night sci-fi | teal_orange |
Blockbuster movie cinematic color balance |
cinematic_warm |
Golden hour warmth for scenery & drama | vibrant_action |
Sharp contrast & saturation for sports/action |
vintage_vhs |
Analog retro tape scanlines & color shift | moody_dark |
Dark fantasy / horror shadow contrast |
🤖 Model Context Protocol (MCP) & AI Agent Server
ShortsFlow AI Studio provides a native MCP Server (mcp_server.py) allowing AI assistants (Claude Desktop, Cursor, Antigravity, n8n, AutoGPT) to create shorts autonomously:
# Launch MCP Server over standard I/O for AI IDEs & Workflow Engines
python mcp_server.py
Available MCP Tools:
generate_short: Create AI shorts from topics or prompts.extract_clips: Slice long YouTube videos into vertical shorts with face tracking, a stacked two-speaker split (layout: split) or active-speaker switching (layout: active).generate_social_package: Generate platform metadata (.meta.json) for YouTube Shorts, TikTok, and Reels.get_render_status: Query live rendering job progress.
🔌 REST API & Webhooks
pip install -r requirements-full.txt
SHORTSFLOW_API_KEY=change-me python -m shortsflow.api # http://127.0.0.1:8080/docs
curl -X POST localhost:8080/v1/clips -H "Authorization: Bearer change-me" -H "Content-Type: application/json" -d '{"source_video": "https://youtu.be/VIDEO_ID", "layout": "active", "clip_count": 3, "webhook_url": "https://example.com/hook"}'
# -> {"id": "a1b2c3", "status": "queued", "url": "/v1/jobs/a1b2c3"}
curl localhost:8080/v1/jobs/a1b2c3 -H "Authorization: Bearer change-me" # status + files[] download links
POST /v1/shorts generates from an idea (mode, category, prompt...). Webhooks are signed with
X-ShortsFlow-Signature: sha256=<HMAC of body> when SHORTSFLOW_WEBHOOK_SECRET is set. Jobs run one at a time by default
(SHORTSFLOW_MAX_CONCURRENT). With Docker: SHORTSFLOW_API_KEY=change-me docker compose --profile api up api (refuses to start without a key). A ready-made n8n flow lives in examples/n8n/.
📤 Publish & Schedule (TikTok, Instagram Reels, YouTube Shorts)
Clip extraction writes metadata.json (title, description, tags) and a badge thumbnail next to every clip. Post them with
Upload-Post, which holds the platform logins (set UPLOAD_POST_API_KEY and UPLOAD_POST_USER):
# preview what would be posted, then post now or stagger one clip every 3 hours
python -m engine.publish sessions/extraction_123/metadata.json --platforms tiktok,instagram,youtube --dry-run
python -m engine.publish sessions/extraction_123/metadata.json --platforms tiktok,instagram --start 2026-11-02T10:00 --every 180 --timezone Europe/Madrid
🏷️ Brand Kit
Burn your logo, @handle and a closing end card into every clip (placed clear of the Shorts/Reels UI):
py main.py --source_video "URL" --logo logo.png --handle @mychannel --end_card "Follow for more"
py main.py --source_video "URL" --brand examples/brand.json # same thing as a preset file
python -m engine.branding existing_clip.mp4 --logo logo.png --handle @mychannel # any finished video
💡 Top Command Recipes
# 1. Podcast Shorts that cut to whoever is talking (stacked split when unsure) + silence removal
py main.py --source_video "https://www.youtube.com/watch?v=VIDEO_ID" --extract_mode shorts --layout active --tighten --use_remotion
# 1b. Prompt-based clipping: only the moments that match your request (LLM search, keyword fallback offline)
py main.py --source_video "https://www.youtube.com/watch?v=VIDEO_ID" --find "where they discuss pricing" --clip_count 3 --use_remotion
# 1a. Cut the ums and uhs (and silences) out of clips
py main.py --source_video "URL" --tighten --remove_fillers --use_remotion
# 1e. Edit by transcript: cut phrases, or delete words from the transcript text file and re-run
py main.py --source_video "URL" --session_dir sessions/talk --cut "you know" --cut "so basically"
# -> writes sessions/talk/transcript.txt; delete words/lines in a copy, then:
py main.py --source_video "URL" --session_dir sessions/talk --edit_transcript my_edit.txt
# 1c. Emoji pop on keywords in HORMOZI/BOUNCE captions (needs an emoji font; included in the Docker image)
py main.py --source_video "URL" --use_remotion --caption_style HORMOZI --caption_emoji
# 1d. Fully local, zero-cost voice: Kokoro TTS (no API key; ~120 MB model downloads once)
py main.py --mode FACTS --category "space" --tts_provider kokoro --voice af_heart --use_remotion
# 2. High-Retention Short with Voice Cloning, Zoom Motion & Audio Ducking
py main.py --mode FACTS --category "cyberpunk AI" --tts_provider voicestudio --clone_voice "my_voice.wav" --enable_zoom --auto_ducking --use_remotion
# 3. Render Landscape 16:9 YouTube Video with SFX
py main.py --mode EXPLAINER --prompt "Quantum physics" --aspect_ratio 16:9 --sfx_preset whoosh
# 4. Translate and dub video: planned, not implemented yet (--mode DUB / --target_lang are ignored)
# 5. Process Batch Content Calendar Queue
py main.py --batch_file "topics.txt" --mode FACTS --aspect_ratio 9:16 --use_remotion
⚙️ Environment Configuration (.env)
Rename env.example to .env:
GEMINI_API_KEY=your_gemini_key_here
HF_API_KEY=your_huggingface_key_here
PEXELS_API_KEY=your_pexels_key_here
# Local Voice Studio & Production Defaults
VOICE_PROVIDER=auto
VOICE_STUDIO_URL=http://localhost:8000/v1/audio/speech
DEFAULT_ASPECT_RATIO=9:16
AUTO_DUCKING=true
🤖 AI Agent Onboarding
If you are an AI Coding Agent (Cursor, Antigravity, Claude Code, Copilot, AutoGPT) onboarding into this codebase, see AGENTS.md for structured architectural context, module maps, CLI skills, and execution rules, and ROADMAP.md for the open task board.
⭐ Star History
📄 License
ShortsFlow AI Studio is open-source software licensed under the MIT License.
Metadata
Release files for shortsflow 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| shortsflow-0.1.3.tar.gz | 11.0 MB | With provenance | Details for shortsflow-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| shortsflow-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for shortsflow-0.1.3-py3-none-any.whl |
Total release size: 22.1 MB
Release files / shortsflow-0.1.3.tar.gz
| Download URL | shortsflow-0.1.3.tar.gz |
|---|---|
| Size | 11.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a0c8126828780c94bd33a6cd3501dd1a45ecc2744b56b67ff639e7bf398462e
|
|
BLAKE2b-256 checksum How to use checksums |
8f003321f64c71268dee00a8e67d10af12ead57c0e59badf84f81376d97732b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logRelease files / shortsflow-0.1.3-py3-none-any.whl
| Download URL | shortsflow-0.1.3-py3-none-any.whl |
|---|---|
| Size | 11.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
278529ff462ff6ded0b91b481705c9dfb516404f6f1a08bc67d9953976fc7da1
|
|
BLAKE2b-256 checksum How to use checksums |
a96b09f7d496bcc5064aa6e4729481cddf888e710eafeb154a2ebeff237c70cc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logSecurity for shortsflow 0.1.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for shortsflow-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 3, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.