Skip to main content
Glama

⚡ 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.


✂️ 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.


Related MCP server: whisper-mcp

🎛️ Review, restyle and brand your shorts

After Make my shorts, the browser app (shortsflow webui) shows every short as a card instead of a bare file list:

  • Review: a preview player, a strong / good / okay / weak label with the reason, and a title, description and hashtags ready to copy. Remove what you do not want, then Download all as .zip. Earlier runs can be reopened.

  • Edit one short: pick another caption style or change its start and end, and only that short is re-rendered (about a minute). Undo puts the previous version back.

  • Caption styles come with a preview, and your brand (logo, @handle, end card, accent colour) is saved once and added to every short.

Screenshots use sample clips made from the demo GIFs above.


⚡ 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\workspace are 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.

  1. Install (needs Python 3.12): pip install "shortsflow[clip]"

  2. Check your setup: shortsflow doctor lists what is ready and what to fix, in plain words.

  3. Make shorts from a file or a link: shortsflow clip my_video.mp4 (or shortsflow clip "https://youtube.com/watch?v=..."). Add --count 5 for more clips, --captions for animated captions (needs Node.js, then run shortsflow init once).

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)

Open in Colab

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, and MINIMAL spring 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

Add it to your AI tool

The MCP server runs from a checkout of this repo (it starts main.py next to it):

git clone --depth 1 https://github.com/ghost1412/shorts-generator.git
cd shorts-generator && pip install -r requirements.txt
claude mcp add shortsflow -- python /full/path/to/shorts-generator/mcp_server.py      # Claude Code

Claude Desktop / Cursor: add this under mcpServers in the tool's config JSON (use the full path):

{ "mcpServers": { "shortsflow": { "command": "python", "args": ["/full/path/to/shorts-generator/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.

  • list_supported_modes: List the content modes, caption styles and options the server accepts.


🔌 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

Star History Chart


📄 License

ShortsFlow AI Studio is open-source software licensed under the MIT License.

The optional animated-caption renderer uses Remotion, which has its own source-available licence (free for individuals and small teams; see remotion.dev/license if you are a larger company). Without Node.js/Remotion you still get clips, just without the animated captions.

Available Tools

5 tools
extract_clipsA

Cut the best moments out of a long video (a local file path or a YouTube link) into captioned vertical shorts: it transcribes the speech with Whisper, scores the moments, crops to 9:16 with face tracking and burns in animated captions. It runs in the background: the call returns a job_id immediately and the work can take several minutes (longer on a computer without an NVIDIA GPU), so poll get_render_status until the job is 'completed' or 'failed'. Clipping works without any API key; an AI key only improves scoring and titles. Files are written under the ShortsFlow folder (sessions/...) and nothing is uploaded. Use generate_short instead to create a video from a topic.

NameRequiredDescriptionDefault
layoutNoFraming: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews.single
tightenNoCut out silences and dead air inside each short.
clip_countNoHow many shorts to cut out.
smart_cropNoFollow the speaker's face when cropping the wide video to vertical.
source_videoYesLocal video file path or a YouTube/other video URL to clip. Required.
use_remotionNoAnimated captions (needs Node.js). False renders without animated captions.
caption_styleNoAnimated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me.HORMOZI

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it discloses the asynchronous contract (returns job_id immediately, work takes minutes, slower without an NVIDIA GPU), the required polling loop, that files land under the ShortsFlow folder and nothing is uploaded, and the optional-API-key behavior. These are exactly the operational facts an agent needs and none of them are inferable from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but well ordered: what it does, how it runs, what it costs/requires, where output goes, and the alternative sibling, in that sequence. Every sentence carries information, though the single unbroken paragraph makes it slightly harder to scan than a short bulleted split would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, long-running, no-output-schema tool, the description covers the async return value, the polling path, runtime expectations, and side effects (local files, no uploads). The only thin spot is what the completed job actually yields beyond 'shorts' — number of files, naming, or format — which the agent must discover from get_render_status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the per-parameter enum and default meanings are already documented and the baseline is 3. The description still adds framing value by tying the parameters together — 'crops to 9:16 with face tracking' contextualizes smart_crop/layout, and 'burns in animated captions' plus the Whisper/scoring mention explains why clip_count and caption styling exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Cut the best moments out of a long video ... into captioned vertical shorts') and then enumerates the pipeline steps: Whisper transcription, moment scoring, 9:16 face-tracked crop, burned-in animated captions. It explicitly names the sibling generate_short as the tool for a different task, so the agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use this for clipping an existing video, use generate_short to create a video from a topic. It also tells the agent the follow-up workflow (poll get_render_status until 'completed' or 'failed') and states the prerequisite context that clipping works without an API key while an AI key only improves scoring and titles.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_shortA

Create an original vertical short video from an idea: an AI-written script, voice-over, stock footage, background music and animated captions, rendered locally by the ShortsFlow pipeline. It runs in the background: the call returns a job_id immediately and the render takes a few minutes, so poll get_render_status until the job is 'completed' or 'failed'. It uses the user's own LLM, voice and stock-footage keys from the ShortsFlow .env, writes files only inside the ShortsFlow folder, and never uploads or posts anything. Use this to make a new short from a topic; use extract_clips instead to cut shorts out of an existing video.

NameRequiredDescriptionDefault
modeNoContent format. FACTS = a 'spot the lie' quiz of three claims; STORY / HORROR / TRUE_CRIME = narrated stories; EXPLAINER = an animated explainer; WYR = 'would you rather'; TOP_5 = a ranked list; TRIVIA / RIDDLE / EMOJI_GUESS = quiz formats; NEWS = a news recap; others as named.FACTS
vibeNoMood of the background music.suspense
promptNoOptional extra instructions or context for the script writer, e.g. 'Explain how black holes bend light'.
scriptNoOptional finished script to narrate as written. When given, no AI script is generated.
categoryNoTopic or category the script should be about, e.g. 'space mysteries', 'ancient Rome', 'psychology'.space mysteries
sfx_presetNoSound effects on visual transitions; none turns them off.auto
aspect_ratioNoOutput shape: 9:16 vertical (Shorts, Reels, TikTok), 16:9, 1:1 or 4:5.9:16
auto_duckingNoLower the background music while the voice is speaking.
tts_providerNoVoice-over engine. auto picks the best available; edgetts is free; kokoro and local run fully offline; elevenlabs and voicestudio need their own setup.auto
use_remotionNoRender animated captions with the Remotion engine (needs Node.js). False uses simple captions.
caption_styleNoAnimated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me.HORMOZI

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it discloses that the tool is asynchronous, returns a job_id immediately, takes minutes, requires the user's own keys from the ShortsFlow .env, writes only inside the ShortsFlow folder, and never uploads or posts. Async semantics, credential sourcing and side-effect boundaries are exactly the facts an agent needs before firing an expensive render.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each load-bearing: purpose, async contract, side effects/credentials, then routing to the alternative. The most decision-critical facts (what it makes, that it is backgrounded) are front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, long-running generation tool with no output schema, the description covers the return contract (job_id plus polling), the operational constraints (local render, user keys, no upload), and the sibling alternative. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all 11 parameters and 6 enums documented inline, so the schema already does the heavy lifting. The description adds only the loose framing of topic/idea and does not explain how mode, vibe, or caption_style interact with the render; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Create an original vertical short video from an idea") and enumerates the pipeline components it produces: AI script, voice-over, stock footage, music, animated captions. It also explicitly distinguishes itself from the sibling extract_clips, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-to-use rule ("Use this to make a new short from a topic") paired with the alternative and its condition ("use extract_clips instead to cut shorts out of an existing video"). It also prescribes the follow-up workflow: poll get_render_status until 'completed' or 'failed'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_social_packageA

Write platform-ready text for a short: a title, description, hashtags and a short caption for YouTube Shorts, TikTok and Instagram Reels. It answers immediately (no job). It uses the configured AI model; if none is reachable it returns a generic template filled with the topic instead, so check the wording. It does not publish anything.

NameRequiredDescriptionDefault
modeNoFormat of the video, which shapes the tone of the text.FACTS
topicYesWhat the video is about, e.g. 'Why the sky is blue'. Required.
categoryNoBroad category used to pick hashtags, e.g. 'science' or 'history'.general

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses synchronous execution, that the configured AI model is used, and that an unreachable model yields a generic template that should be checked. It omits cost/rate characteristics, but the key failure mode an agent must know about is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the deliverable, then the synchronous behavior, the fallback, and the scope limit. Minimal waste; the fallback sentence is the only one that could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-param generation tool with no output schema, the description names the returned artifacts and the degraded-mode behavior, which is what an agent needs to call and trust the result. Missing only explicit contrast with generate_short and any note on how required topic interacts with mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so mode, topic and category are already documented in the schema. The description adds no meaning about how mode or category influence the generated text, leaving it at the baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and output set: writes title, description, hashtags and caption for YouTube Shorts, TikTok and Instagram Reels. This clearly separates it from a renderer like generate_short, though it never names that sibling, so the distinction is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'It does not publish anything' and 'answers immediately (no job)' implicitly scope usage against async/publishing siblings, but there is no explicit when-to-use or when-not guidance and no alternative is named. An agent must infer routing from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_render_statusA

Check a background job started by generate_short or extract_clips. Returns a JSON object with status ('processing', 'completed', 'failed' or 'not_found'), progress (0-100), the last log lines, and an error message (the last lines of the log) when the job failed. Jobs are remembered only while this server is running. Call it every 20-30 seconds until the status is no longer 'processing'. It changes nothing.

NameRequiredDescriptionDefault
job_idYesThe job_id returned by generate_short or extract_clips. Required.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations supplied, the description carries the full burden and does so: it declares the tool changes nothing, discloses the crucial lifetime constraint ("Jobs are remembered only while this server is running"), which explains how 'not_found' arises, and enumerates the exact return fields including that the error message is the tail of the log.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the sibling linkage are front-loaded, and every sentence contributes either scope, return shape, lifetime caveat, or polling cadence. It is slightly dense in one paragraph, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain returns, and it does so completely: status values, progress range, log lines, and error semantics. Combined with the polling guidance and job-lifetime caveat, nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already says it is the job_id returned by generate_short or extract_clips, which is essentially what the prose repeats. The description adds no format, validation, or edge-case detail (e.g. what a malformed or stale id yields) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Check a background job") and immediately ties it to the two sibling tools that create jobs, generate_short and extract_clips, so an agent can tell it apart from every generator in the set without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit polling contract: call every 20-30 seconds and stop when status is no longer 'processing'. Combined with the note that the job must have been started by generate_short or extract_clips, the when-to-use condition is fully specified rather than inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_supported_modesA

List the options the other tools accept: content modes for generate_short, caption styles, voice-over engines, aspect ratios and sound-effect presets. Instant, read-only, takes no input. Call it first if you are unsure which value to pass.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden and discloses that the tool is instant, read-only, and takes no input. These are meaningful traits beyond the empty input schema, though it does not describe pagination, authentication needs, or the exact return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the core purpose, and adds the usage suggestion without unnecessary wording. Every clause contributes either scope, behavior, or invocation guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only lookup tool with no output schema, the description is complete enough: it says what will be listed, which sibling's options are included, and when to call it. No additional detail is necessary for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are minimal by design. The description reinforces this by stating it takes no input, which aligns with the empty schema and gives the agent baseline clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('options the other tools accept'), then enumerates the option categories such as content modes, caption styles, voice-over engines, aspect ratios, and sound-effect presets. It also ties content modes to the sibling tool generate_short, making the tool's scope clear without needing to inspect any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to call it first when unsure which value to pass, which gives clear usage context and positions it as a prerequisite lookup tool. It does not state when not to use it or name every sibling that benefits from it, but the guidance is sufficient for the intended workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.1
    • Changedextract_clips10 fields changed
      • addedInput schema / properties / caption_style / description
        Added value: +"Animated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me."
      • addedInput schema / properties / caption_style / enum
        Added value: +[
        +  "HORMOZI",
        +  "GLOW_BOX",
        +  "BOUNCE",
        +  "MINIMAL",
        +  "AUTO",
        +  "RANDOM"
        +]
      • changedInput schema / properties / clip_count / description
        Previous value: -"Number of viral shorts to extract"New value: +"How many shorts to cut out."
      • addedInput schema / properties / clip_count / maximum
        Added value: +15
      • addedInput schema / properties / clip_count / minimum
        Added value: +1
      • changedInput schema / properties / layout / description
        Previous value: -"single: face-tracked crop; split: two speakers stacked; active: cut to whoever is talking (stacked when unsure) for podcasts/interviews"New value: +"Framing: single = face-tracked crop; split = two speakers stacked; active = cut to whoever is talking (stacked when unsure), best for podcasts and interviews."
      • changedInput schema / properties / smart_crop / description
        Previous value: -"Enable AI face and subject tracking crop for 9:16 vertical video"New value: +"Follow the speaker's face when cropping the wide video to vertical."
      • changedInput schema / properties / source_video / description
        Previous value: -"YouTube video URL or local video file path"New value: +"Local video file path or a YouTube/other video URL to clip. Required."
      • changedInput schema / properties / tighten / description
        Previous value: -"Automatically trim silence gaps for punchy high retention"New value: +"Cut out silences and dead air inside each short."
      • addedInput schema / properties / use_remotion / description
        Added value: +"Animated captions (needs Node.js). False renders without animated captions."
    • Changedgenerate_short18 fields changed
      • addedInput schema / properties / aspect_ratio / description
        Added value: +"Output shape: 9:16 vertical (Shorts, Reels, TikTok), 16:9, 1:1 or 4:5."
      • changedInput schema / properties / auto_ducking / description
        Previous value: -"Automatically duck background music when voice audio plays"New value: +"Lower the background music while the voice is speaking."
      • addedInput schema / properties / caption_style / description
        Added value: +"Animated caption look (needs use_remotion): HORMOZI = bold yellow single words, GLOW_BOX = words in boxes with a pink highlight, BOUNCE = bouncy gold single words, MINIMAL = clean dark boxes, AUTO/RANDOM = pick for me."
      • changedInput schema / properties / caption_style / enum
        Previous value: -[
        -  "HORMOZI",
        -  "GLOW_BOX",
        -  "BOUNCE",
        -  "MINIMAL"
        -]New value: +[
        +  "HORMOZI",
        +  "GLOW_BOX",
        +  "BOUNCE",
        +  "MINIMAL",
        +  "AUTO",
        +  "RANDOM"
        +]
      • changedInput schema / properties / category / description
        Previous value: -"Topic or category (e.g. 'space mysteries', 'quantum physics', 'psychology')"New value: +"Topic or category the script should be about, e.g. 'space mysteries', 'ancient Rome', 'psychology'."
      • changedInput schema / properties / mode / description
        Previous value: -"Content mode: FACTS, EXPLAINER, STORY, WYR, TOP_5, CHAT_STORY, HORROR, TRUE_CRIME, BIBLE, ARTICLE, UGC, EMOJI_GUESS, REDDIT, TRIVIA, QUOTE"New value: +"Content format. FACTS = a 'spot the lie' quiz of three claims; STORY / HORROR / TRUE_CRIME = narrated stories; EXPLAINER = an animated explainer; WYR = 'would you rather'; TOP_5 = a ranked list; TRIVIA / RIDDLE / EMOJI_GUESS = quiz formats; NEWS = a news recap; others as named."
      • addedInput schema / properties / mode / enum
        Added value: +[
        +  "FACTS",
        +  "EXPLAINER",
        +  "STORY",
        +  "WYR",
        +  "TOP_5",
        +  "CHAT_STORY",
        +  "HORROR",
        +  "TRUE_CRIME",
        +  "BIBLE",
        +  "ARTICLE",
        +  "UGC",
        +  "EMOJI_GUESS",
        +  "REDDIT",
        +  "TRIVIA",
        +  "QUOTE",
        +  "NEWS",
        +  "RIDDLE"
        +]
      • changedInput schema / properties / prompt / description
        Previous value: -"Detailed prompt or script context for AI generation"New value: +"Optional extra instructions or context for the script writer, e.g. 'Explain how black holes bend light'."
      • changedInput schema / properties / script / description
        Previous value: -"Custom manual script to use directly (skips LLM generation)"New value: +"Optional finished script to narrate as written. When given, no AI script is generated."
      • changedInput schema / properties / sfx_preset / default
        Previous value: -"whoosh"New value: +"auto"
      • addedInput schema / properties / sfx_preset / description
        Added value: +"Sound effects on visual transitions; none turns them off."
      • changedInput schema / properties / sfx_preset / enum
        Previous value: -[
        -  "none",
        -  "pop",
        -  "whoosh",
        -  "chime",
        -  "riser",
        -  "boom"
        -]New value: +[
        +  "auto",
        +  "whoosh",
        +  "pop",
        +  "riser",
        +  "boom",
        +  "none"
        +]
      • removedInput schema / properties / target_lang
        Removed value: -{
        -  "description": "Language code for translation/dubbing (e.g., 'es', 'fr', 'de', 'ja')",
        -  "type": "string"
        -}
      • changedInput schema / properties / tts_provider / default
        Previous value: -"edge-tts"New value: +"auto"
      • addedInput schema / properties / tts_provider / description
        Added value: +"Voice-over engine. auto picks the best available; edgetts is free; kokoro and local run fully offline; elevenlabs and voicestudio need their own setup."
      • changedInput schema / properties / tts_provider / enum
        Previous value: -[
        -  "edge-tts",
        -  "elevenlabs",
        -  "voicestudio",
        -  "gtts"
        -]New value: +[
        +  "auto",
        +  "edgetts",
        +  "elevenlabs",
        +  "voicestudio",
        +  "local",
        +  "kokoro"
        +]
      • changedInput schema / properties / use_remotion / description
        Previous value: -"Use React-based Remotion subtitle engine for dynamic spring animations"New value: +"Render animated captions with the Remotion engine (needs Node.js). False uses simple captions."
      • addedInput schema / properties / vibe / description
        Added value: +"Mood of the background music."
    • Changedgenerate_social_package4 fields changed
      • addedInput schema / properties / category / description
        Added value: +"Broad category used to pick hashtags, e.g. 'science' or 'history'."
      • addedInput schema / properties / mode / description
        Added value: +"Format of the video, which shapes the tone of the text."
      • addedInput schema / properties / mode / enum
        Added value: +[
        +  "FACTS",
        +  "EXPLAINER",
        +  "STORY",
        +  "WYR",
        +  "TOP_5",
        +  "CHAT_STORY",
        +  "HORROR",
        +  "TRUE_CRIME",
        +  "BIBLE",
        +  "ARTICLE",
        +  "UGC",
        +  "EMOJI_GUESS",
        +  "REDDIT",
        +  "TRIVIA",
        +  "QUOTE",
        +  "NEWS",
        +  "RIDDLE"
        +]
      • changedInput schema / properties / topic / description
        Previous value: -"Topic or title of the video"New value: +"What the video is about, e.g. 'Why the sky is blue'. Required."
    • Changedget_render_status1 field changed
      • changedInput schema / properties / job_id / description
        Previous value: -"The unique job ID returned by generate_short or extract_clips"New value: +"The job_id returned by generate_short or extract_clips. Required."
  2. 5 tool updatesv0.1.0
    • First observedextract_clips
    • First observedgenerate_short
    • First observedgenerate_social_package
    • First observedget_render_status
    • First observedlist_supported_modes

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: creating a short from a topic (generate_short), clipping an existing video (extract_clips), polling jobs (get_render_status), enumerating options (list_supported_modes) and writing social copy (generate_social_package). The descriptions explicitly contrast the two easily-confused generation paths ("use extract_clips instead"), eliminating the main ambiguity risk.

Naming Consistency5/5

All names are snake_case and verb-first (generate_*, get_*, list_*, extract_*), following a single predictable verb_noun convention. No mixing of styles or vague bare nouns.

Tool Count5/5

Five tools is tightly scoped to the server's purpose: two job-starting tools, one poller, one options lookup and one text generator. Nothing is redundant and no trivial tool is padded in.

Completeness4/5

The core lifecycle (start job → poll status → get options → produce metadata) is fully covered, and the async pattern is documented in each tool. Minor gaps remain: no job cancel/list, and get_render_status does not advertise returning the output file path, which agents would likely need to locate the finished video.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    AI-native timeline editor for short-form video. Your agent cuts, captions, adds motion graphics and renders against a real, editable timeline over MCP — not a render queue. Human-in-the-loop by design: it calls request_review and waits while you supervise in a browser. Local-first and AGPL; your footage never leaves your machine.
    2
    AGPL 3.0
  • F
    license
    Not graded
    quality
    A
    maintenance
    A local MCP server that lets chat-based coding agents turn a folder of raw clips into finished, beat-synced montage videos by handling shot selection, music matching, subtitles, transitions, and rendering through natural language. It returns a timeline digest and contact sheet for approval before any frame is rendered.
    -