All posts

, 1 min read

I got tired of cutting my own videos, so I built Vedit

Juan Fact a Day needed a Reel every day. Editing them by hand wasn't going to last, so I wrote the editor I wanted: one command, and every cut written down.

  • Open source
  • Python
  • AI

Juan Fact a Day started small: one fact about the Philippines, every day, hosted by Juan, a mascot I drew as inline SVG in nine poses. The website was the easy part. The hard part was the Reels.

A short video sounds quick until you do it daily. Record, trim the pauses, cut the take where I stumbled, add captions, reframe it for 9:16, fix the loudness so it isn't quieter than the video before it. Every day, the same twenty minutes of dragging clips on a timeline.

The rule I gave myself

I didn't want a black box that spits out a finished video. I wanted to see every decision. So Vedit writes its edits down first, as a JSON edit decision list, and only then renders. If a cut looks wrong, I open the file, read why it happened, and change one line.

The transcript does most of the work. faster-whisper gives word-level timing, so Vedit can remove pauses, filler words and flubbed takes at the exact word, not at a guess. OpenCV finds the face so the 9:16, 1:1 and 4:5 crops follow the speaker. FFmpeg does the cutting, the animated captions and EBU R128 loudness normalization.

Then the Reels started making themselves

Once the editor worked on talking-head footage, I added a story mode: photos plus a script become a voiced, captioned video, with edge-tts giving each character a different voice. That's the Fact Reels kit, and it's how Juan's Reels are made now.

It runs as a CLI, and as a Claude Code skill so I can ask for an edit in plain words. It's MIT licensed, tested with pytest, and every push runs through GitHub Actions.

The best tool I've built is the one I use every single day.