Cutter

YouTube to TikTok
and Instagram,
with your approval.

Give cutter a YouTube URL. It cuts the video into short vertical clips, writes platform-specific captions, sends each one to your WhatsApp for review, and posts the ones you approve.

$ cutter run --url "https://youtube.com/watch?v=..." --post both --approve

Pipeline

01
Download yt-dlp fetches the video and extracts the title, description, tags, and top comments. Cached after the first run.
02
Detect Two FFmpeg passes - one for scene changes, one for silence gaps. The results are merged into 25-55 second segments at the most natural cut points.
03
Reframe Each clip is reformatted to 9:16. The original content sits centred over a blurred, scaled-up version of itself as the background fill.
04
Caption Claude Haiku reads the video metadata and writes platform-specific captions with relevant hashtags for both TikTok and Instagram.
05
Approve Each clip is sent to your WhatsApp as a video. Reply yes, no, or no more today. Captions can be edited inline before anything gets posted.
06
Post Approved clips go to TikTok via the Content Posting API and to Instagram Reels via the Meta Graph API.

Details

Every stage writes its output to disk. Re-running the same URL resumes from wherever it left off - clips already cut, captioned, or posted are not repeated. A withheld clip stays withheld across runs.

The approval conversation runs over WhatsApp via Twilio, polling for replies every five seconds. Clips are temporarily hosted for preview and cleaned up automatically once a decision is made.

Posting credentials are loaded from .env and validated only when the platform is actually in use. TikTok tokens refresh automatically on expiry. Instagram requires an S3 bucket for staging uploads before the Meta Graph API can ingest them.

Commands

$ cutter run --url URL --post both --approve
$ cutter detect --url URL # preview cut points only
$ cutter withheld # list withheld clips
$ cutter auth tiktok
$ cutter auth instagram --refresh

Install

$ python3 -m venv .venv && source .venv/bin/activate
$ pip install -e .

Requires Python 3.11 or later and ffmpeg on PATH. Copy .env.example to .env and fill in your credentials before running.