OpenShorts

September 11, 2026 · View on GitHub

Copy in, video out. A local-first, open-source short-video production line: give it a topic and it writes the script, finds the footage, voices it, burns in subtitles, and hands you a finished video plus publish copy — the first video costs $0 by default, and it tells you cost and wait time before running.

Why cats squeeze into cardboard boxes
Why cats squeeze into boxes
English pipeline · 56s · script, voice and captions all English
Why do onions make you cry
Why do onions make you cry (zh)
60s · \$0, 0 paid keys · 2 of 6 shots painted on-device
A compass does not point north
A compass doesn't point north (zh)
43s · every stock candidate for 5 of 7 shots was rejected, then painted locally
Late-night convenience store, AI drama
Late-night convenience store
AI mini-drama · on-device sd.cpp draft tier · \$0

All four were actually produced by OpenShorts. Click a clip for its case study — the model's own words, footage credits, the quality check, and which shots fell short.

🌐 Website · watch real output · Download release · 中文文档

License Node Tests CI Format

git clone https://github.com/jnMetaCode/openshorts.git
cd openshorts && npm install
npm run openshorts      # opens the GUI at http://127.0.0.1:4174

Requires Node.js 20+ and FFmpeg (an npm package is coming; until then use the source checkout or a release bundle). Run openshorts doctor right after installing — it tells you what this machine can produce today and exactly what is missing.

Note: the GUI has an English toggle (the EN button top-right, or open with ?lang=en). With it on, the whole talking-head line runs in English — script, voice, word-aware captions, render log, errors, quality notes and the publish pack. The CLI speaks your system locale too — force it with OPENSHORTS_LANG=en (or zh). Still Chinese: live log lines coming from the AO engine subprocess, and the AI mini-drama line (it runs on a Chinese workflow, so its script is Chinese).

Two pipelines

Narrated explainers — script → free Edge TTS voice-over → CC stock footage → burned-in subtitles → itemized QC. Runs end-to-end on $0 and zero keys. When stock libraries have nothing for your topic, it paints a frame locally (FLUX.1-schnell, Apache-2.0, commercial use OK) instead of shrugging in unrelated footage.

AI mini-drama — a story → 3-shot screenplay → character sheet → image-to-video ×3 → vision-model acceptance → composite. Draft on the free local tier (MiniMax-H3 via stable-diffusion.cpp on your own machine), then re-render the same script on a cloud tier — per-second billing, quoted before you run. Unhappy with one shot? Redo just that shot with feedback; everything else is reused byte-for-byte.

What makes it different

You care aboutOpenShorts
First-video cost$0, zero keys: CC footage + Edge TTS + local ffmpeg. A free Pexels key upgrades you to real stock video
Stock has nothingPaints a frame on-device (free, offline) — onions and abstract concepts aren't in stock libraries anyway
Who reviews visualsA vision model scores every candidate 0–10 (≥6 leads, 4–5 fills, <4 rejected); unjudged footage never ships
Output qualityItemized QC — resolution, duration drift, audio, burned subtitles, loudness. A fail exits non-zero; a bad video never pretends to be good
Changing one lineFingerprint-level reuse: only the changed shot is redone — voice, footage and rendered segments are content-addressed
AttributionPer-shot source / author / license / URL, auto-appended to publish copy; AI-generated frames labeled
Knowing cost upfrontQuotes by provider / tier / seconds before running; the free path's estimate reports time, since money is always zero

What it looks like

Four steps to a video: Input → Sources & cost → Preview & adjust → Render & publish. A single row at the top answers "what can this machine do right now"; model configuration lives behind ⚙ Settings (the script model and the visual-check model — both are tested with a real request before they are saved).

Input
① Input
Give it a topic, paste a whole script, or drop in an article link and let it fetch the text. Target length and tone are optional.
Render & publish
④ Render & publish
Video, SRT and cover in one go; click a title to copy it; every clip's author and licence is listed (CC BY-SA requires the credit). The quality check states facts only — resolution, length drift, loudness, whether subtitles were burned in, the AI label, how many shots were generated locally and how many were vetted by the visual check. Then it builds a publish pack per platform — it never auto-posts.

The interface has an English toggle (EN in the top bar, or open with ?lang=en). Open an English project while the interface is Chinese and it offers to switch for you.

Real output

VideoPipelineLengthCase study
Why do onions make you cryNarrated · CC stock + local FLUX frames · vision gatekeeping · $0, 0 keys60sdocs/cases/koubo-onion
Why cats squeeze into boxesNarrated · the English pipeline — script, voice, word-aware captions and publish pack all English56sdocs/cases/koubo-en-cat-box
A compass does not point north (zh)Narrated · 5 of 7 shots had every stock candidate rejected by the visual check → painted locally · $0, 0 keys43sdocs/cases/koubo-compass
Why cats love boxesNarrated · keyless stock · Edge TTS (earlier build, kept for contrast)37sdocs/cases/koubo-cat-box
Late-night convenience store (local draft)AI drama · on-device sd.cpp · MiniMax-H3 Q2 · $07sdocs/cases/drama-convenience-store
Late-night convenience store (cloud final)AI drama · Agnes agnes-video-2.5-flash13ssame case — draft vs. final, one script

Every sample was actually generated by OpenShorts; the case pages honestly note which shots fell short and why.

CLI cheatsheet

openshorts doctor                    # health check: ffmpeg / libass / fonts / every visual source
openshorts install-ffmpeg            # ffmpeg with libass — required to burn subtitles (Homebrew's no longer has it)
openshorts new --lang en --topic "Why is the sky blue"   # English script, English voice, word-aware captions
openshorts run    ~/OpenShorts/<project>/project.json            # \$0 path: TTS + stock/local + ffmpeg
openshorts run    ~/OpenShorts/<project>/project.json --only s2  # redo shot 2 only; the rest is reused
openshorts install-image             # local text-to-image (FLUX.1-schnell) for when stock has nothing
openshorts estimate <project.json>   # cost (always \$0 on the free path) and expected wait
openshorts export  <project.json> --platform douyin   # publish pack: mp4 + cover + SRT + copy; never auto-posts
openshorts drama --plan -i story="…" -i video_provider=local-sdcpp -i video_model=minimax-h3-q2

Script writing needs one text-model key (DeepSeek / Kimi / GLM / … — configured once, shared with the engine's ~/.ao). Visuals and voice-over are free on the default path. No shared keys ship with the product.

Desktop app (Electron, no Node install needed)

cd desktop && npm install && npm run dist:mac   # or dist:win; output in desktop/release/

The packaged app ships its own Node runtime: double-click and the local engine starts (port 4174, auto-incrementing if taken). v1 editor data lives in the OS app-data directory (OPENSHORTS_V1_DATA); your videos stay in ~/OpenShorts as always.

Or just download one: desktop-v0.1.0 ships mac (arm64 / x64 dmg), Windows (exe) and Linux (AppImage) installers plus SHA256 sums, built automatically from a desktop-v* tag. The installers are unsigned — on macOS you have to allow the app once under System Settings → Privacy & Security.

How far these were verified, honestly: the mac arm64 build was downloaded, installed and run by us (checksum OK, codesign --verify --deep --strict passes, UI and API respond); the win / linux installers have only been through CI and the "UI landed in the package" gate — nobody has actually installed them.

Sister projects

Part of the「AI不止语」open-source ecosystem — independent tools that compose well:

Docs & internals

  • v2 product/architecture/decision docs: docs/v2/ (Chinese)
  • Orchestration engine: agency-orchestrator (v0.19.2+, on npm)
  • v1 layered paper-cut animation editor lives on at /editor — see the Chinese README for its workflow

MIT © contributors. Every generated video carries an AI-content label; footage attribution is written into the publish copy.