shorts-autopilot

Autonomous daily YouTube Shorts + Instagram content pipeline for the MyProposer brand — topic in, published Short out, no hands on keyboard.

Architecture map

Interactive, pannable version: open the architecture map

What it is

A Python + Remotion pipeline that runs on a schedule and publishes finished vertical videos for MyProposer (my AI proposal-software product). One run takes a topic through script generation, voiceover, music, render, mux, and a headless YouTube Data API upload with a real custom thumbnail. A companion job reposts the best-performing Short to Instagram Reels. Status: automated and posting on schedule — YouTube Shorts autopilot live, Instagram repost automation live (first Reel published July 2026).

Why I built it

MyProposer needed a steady top-of-funnel content presence, and I make videos for a living — but hand-producing 2–3 Shorts a day is a full-time job that competes with building the actual product. So I built the producer: a pipeline that writes, voices, scores, cuts, renders, and publishes on its own, and only asks for a human when a step genuinely can’t run headless.

Architecture

cron (3x/day) -> schedule guard -> run_short.py
  topic + style rotation
    -> staged story director (5x headless `claude -p`)  [AI-image story path]
       or style writer (motion / editorial / punchy)
    -> ElevenLabs TTS (char-aligned timing) + music bed
    -> Remotion render (AutoShort | EditorialJourney | PunchyType | PhotoStory)
    -> ffmpeg sidechain-ducked mux, -14 LUFS
    -> YouTube Data API upload + custom thumbnail
run_instagram.py -> performance ranker -> Upload-Post API -> Instagram Reels
Layer What happens
Entry points run_short.py, run_story.py, run_instagram.py, run_scheduled.py, cron wrapper
Scheduling Fixed cron entries + a config-file schedule guard (pause/resume/slots without touching crontab)
Creative 5-stage story director over headless Claude Code CLI, plus per-style script writers
Audio ElevenLabs TTS with character-level alignment, ElevenLabs Music bed (graceful degrade)
Render Remotion compositions sized from measured voiceover duration; ffmpeg ducked mux
Publish YouTube Data API v3 (resumable, cached refresh token), thumbnail set separately
Distribution Views + 20×likes ranker picks the repost; Upload-Post API posts to Instagram
State Per-run output/<run-id>/ (resumable stages), FIFO story queue, small JSON state files

Every stage writes an artifact and is skipped on rerun, so a failed run resumes with the same run-id instead of re-spending TTS quota.

Engineering highlights

Stack

Layer Tech
Pipeline Python 3 (content_pipeline/ package)
Script generation Claude Code CLI, headless claude -p
Voice + music ElevenLabs TTS (with timestamps) + ElevenLabs Music
Video Remotion (React/TypeScript compositions), 1080×1920
Audio finishing ffmpeg (sidechaincompress, loudnorm)
Publishing YouTube Data API v3 (OAuth, resumable uploads)
Instagram Upload-Post API
Scheduling cron + config-file guard, launchd fallback

Status & roadmap

Running: scheduled Shorts posting with custom thumbnails, and Instagram reposts ranked by engagement. The AI-image story format is the primary creative direction; keeping its queue filled is the main operational task (image generation still requires an interactive session). Next: automating queue refill further and widening the topic/deck rotation.

About this repo

This is a public architecture showcase of a private production codebase. The source stays private; this repo documents how it’s built.

— Godfred Aidoo · godfredaidoo.com · LinkedIn · more projects