Skip to content
SUSHIL
← All work

2026 · Product

№09 — Tool

Shorts Studio

Paste a YouTube link, get a publish-ready Short: transcription, clip picking, framing, captions and scheduled uploads on one GPU.

Livetypescriptpythonwhisperxffmpeg
Role
Solo
Runs on
One consumer GPU
Stack
TypeScript · Python · ffmpeg
Source
Open on GitHub

// 1 min read

What it does

Paste a YouTube link and get a publish-ready Short. Shorts Studio takes a long video, finds the moments worth clipping, edits them into vertical 9:16 clips with layouts, animated captions and thumbnails, and can upload them to several YouTube channels on a schedule. It all runs from a local web UI on one consumer GPU.

The pipeline

  1. Download and transcribe: yt-dlp, then WhisperX for word-level timings.

  2. Find the cuts: clip edges snap to real scene changes and pauses, never mid-sentence.

  3. Pick the moments: a language model (Claude, GPT, Gemini or a local Ollama model) reads the transcript and proposes clips, titles and hooks.

  4. Frame the shot: active-speaker detection and a smooth camera path keep whoever is talking in frame.

  5. Render and publish: a Python worker with ffmpeg and OpenCV renders the clip and burns the captions; uploads go out on a staggered schedule.

Why it's built this way

6 GB of VRAM is a hard limit. Every stage runs as its own process and only one model is on the GPU at a time.

Rules own the facts, the model owns the taste. Which layouts are possible comes from measured signals, never from a model's guess. The model only chooses among options already proven possible, and a malformed reply always falls back to a valid render.

Stages only talk through files. Each stage writes a typed, versioned JSON artifact, so a crash or a restart resumes exactly where it stopped instead of re-running (and re-paying for) finished work.

// see it for yourself

Shorts Studio

View on GitHub
Next projectNamesteadFree identity subdomains on community-funded domains. Sign in, claim yourname.devportfolio.com and go live in seconds.Read the case study →