Long videos → ready-to-post shorts for TikTok, Instagram Reels and YouTube Shorts. Found, cut, captioned, reframed and scheduled — fully on your PC. Open-source.
Drop a long video → it transcribes, finds the best moments, cuts them, writes the copy, reframes to vertical → review the grid → publish or schedule the whole week.
Shortcast has two modes:
Drop a podcast, talk, stream or any long recording. Shortcast transcribes it locally, finds the best 3–6 viral moments, cuts each one, and writes the full post copy for all three platforms — all in one pass. Horizontal (16:9) footage is reframed to vertical 9:16, tracking the speaker's face. You get a grid of finished shorts you can play with sound, edit, download, publish, or schedule one-per-day across the week.
Already have a short vertical clip? Drop it and Shortcast watches the frames and hears the audio (local multimodal model) and writes the three platform captions directly, rendered as editable phone-style previews.
What's different about Shortcast:
- 🛰️ Nothing leaves your PC during processing. No cloud model, no upload. Your video is only sent to a network when you choose to publish it.
- 🧠 One model does the thinking. A single on-device LLM reads the whole transcript, picks the moments and writes every caption in the same pass.
- 🎯 Tuned per platform. TikTok gets punchy. Instagram gets storytelling and 20–30 hashtags. YouTube gets short, search-friendly titles — in the language spoken in the video.
- 📐 Auto vertical reframe. On-device face tracking (MediaPipe) turns 16:9 into 9:16, panning to keep the speaker centred, with a blurred-background fallback when there's no clear face.
- 🗓️ Schedule the week in one click. Distribute approved shorts one per day, pick the time, and Upload-Post publishes them automatically.
- 🪶 No Electron. No Swift. Just Python and FFmpeg.
┌──────────────────────────────────────────────────────────────────────┐
│ YOUR PC — nothing leaves until you press Publish │
│ │
│ drop a long video │
│ │ │
│ ▼ │
│ ┌──────────────┐ ┌────────────────────┐ ┌───────────────────┐ │
│ │ Whisper │──►│ Director LLM │──►│ FFmpeg │ │
│ │ (CPU/GPU) │ │ Ollama (local) │ │ cut each clip │ │
│ │ transcribe │ │ finds moments + │ │ + reframe 9:16 │ │
│ └──────────────┘ │ writes 3 captions │ │ (MediaPipe) │ │
│ └────────────────────┘ │ + hook overlay │ │
│ └───────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────┐ │
│ │ grid of shorts: │ │
│ │ play w/ sound, │ │
│ │ edit, download, │ │
│ │ approve │ │
│ └───────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘
│ Publish now / Schedule the week
▼
┌─────────────────┐
│ Upload-Post │ TikTok · Instagram · YouTube
│ API │ (now, or scheduled per day)
└─────────────────┘
Concretely:
- Transcribe. If the video has a
.srt/.vttsidecar, it's used instantly. Otherwise Whisper transcribes on the CPU/GPU. The transcript's language is detected from the text, so captions stay in the spoken language. - Find the moments + write the copy. The Director — a local LLM — reads the whole transcript and returns a single JSON: the best clips (start/end, why, hook, a short on-screen overlay) and the full TikTok / Instagram / YouTube caption package for each, in one pass. A tolerant parser strips fences/thinking and validates clip durations.
- Cut. FFmpeg cuts each moment to its own file.
- Reframe (optional, automatic for horizontal clips). MediaPipe samples faces across the clip; if the speaker is found, FFmpeg pans a 9:16 crop to follow them. No clear face → a blurred-background letterbox. A short text hook can be burned over the top.
- Review. A grid of phone-style tiles — loop each short, play it with sound, edit the
captions, download the rendered
.mp4, or approve it. - Publish or schedule. Publish now, or schedule the week: approved shorts go out
one per day at a times you choose, via Upload-Post's
scheduled_date. TikTok lands as a draft by default so you can finish in-app.
Settings → Caption writer picks the local model:
| Model | Role | Notes |
|---|---|---|
| Llama 3.2 3B (default) | Director + inline captions | Fast, good writing, one pass. Runs via Ollama. |
| Qwen 2.5 7B | Director + inline captions | Stronger writing, one pass. |
| Phi-3.5 Mini | Director + inline captions | Lightweight, fast on modest hardware. |
-
FFmpeg — needed for video cutting and reframing.
winget install FFmpeg
Or download from https://ffmpeg.org/download.html and add to PATH.
-
Ollama — for running the local LLM.
winget install Ollama
Or download from https://ollama.com
-
Python 3.10+ — for the Shortcast app.
winget install Python.Python.3.12
# Clone and install git clone https://github.com/YOUR-USER/shortcast-windows.git cd shortcast-windows python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt # Pull the default model ollama pull llama3.2:3b # Run the app python -m shortcast
The app opens in your browser at http://127.0.0.1:8501
git clone https://github.com/YOUR-USER/shortcast-windows.git cd shortcast-windows python -m venv .venv .venv\Scripts\activate pip install -r requirements.txt python -m shortcast
| Layer | Used |
|---|---|
| UI | Streamlit (web app) |
| Transcription | whisper large-v3 (CPU/GPU) |
| Director model | Llama 3.2 3B or Qwen 2.5 7B, runs via Ollama (local) |
| Face tracking | MediaPipe face detection |
| Video processing | FFmpeg (cut, reframe, export) |
| Publishing | Upload-Post API (publish + schedule) |
| Build | pip, FFmpeg, Ollama |
Transcription, moment-finding, captioning, cutting and reframing all run locally on your PC. The only outbound traffic before you publish is:
- First use only: one-time download of the model weights from Ollama's registry.
- On Publish / Schedule: an upload to Upload-Post with the rendered short and the copy you approved (immediately, or at the scheduled time).
Your Upload-Post API key is stored locally and is only ever sent to Upload-Post over HTTPS when you publish. It is never written into the repository.
- The Director runs a local LLM. On a modest PC, a ~2-minute video takes a few minutes end-to-end (transcription + generation). Faster PCs are quicker.
- The app runs as a local web server — open it in any browser on the same machine.
- One video at a time — no history, no batch processing. By design, for now.
- Upload-Post free tier limits monthly uploads. One publish to three networks counts as three.
Apache License 2.0 — see LICENSE.