Inspiration
i run the fort worth dao's socials by myself. i also work at a restaurant and do standup 3 to 4 nights a week. there's no editor, no agency and no budget for either. there's me.
so i built the editor i couldn't afford to hire. the boring parts are gone. my job is shooting the thing and deciding what's good.
this isn't a weekend build. first commit was may 30. the hackathon is where i finally show it to people.
What it does
it makes real marketing for a real organization, and it posts it.
the sizzle reel. the dao paid an editor $750 to cut the hackfw kickoff. i ran the same footage through this. 4 hours 16 minutes after all 65 files were checked, it had a rough timeline. about 22 hours in, i had the first full proof. that was 21 hours before his first deadline. then it made 9 more pieces from the same footage.
kali milli. a promo for a dao member. storyboard to 3 approved reels in about 31 hours. each reel posted to 5 networks.
the demo day promos. one camera, talking heads, shot at a dao meeting. the first time through, the system hit a shoot shape it didn't know, one camera only, and refused instead of faking it. the fix landed the same day, and it went from verified footage to three cut promos in 5 hours 44 minutes. i gave notes that night: nobody on screen more than 7 seconds straight, and end on a real closing line. by the next morning that was one command. it builds the promo, refuses if a run goes over 7 seconds or the last line isn't a closer, and pins the color look and the end card so every promo matches. all three posted to 5 networks on october 29.
that's not a one off. from july 2 to october 28, 602 posts went out across 893 network slots, on 116 different days, for two brands.
nothing posts without my yes. it learns my taste instead of shipping with someone else's. every time something comes out wrong i say why once and it becomes a rule. 16 of my rulings run as gates on every gameshow build, each one quoted in my own words with the date i said it. the same clip never goes to the same network twice, and that's enforced in code.
the console is the cockpit, and this week it started flying the plane. from the laptop i can:
- start an ingest. the confirm box says in plain words that the card gets copied, checked, then wiped.
- start a render, confirm it, and watch its log.
- approve a post with the exact caption that will go out, in full, on screen.
- add a new item.
- see the next post, the ledger and real views and followers.
the rig's key never leaves the server side. the laptop asks a relay, the relay adds the token, and the browser never sees it. if the staging side can't prove a write is safe, approve and reject lock. a badge on every screen says live, replay or fixture, and it never fakes green. the last piece, declaring a one camera setup from the console, shipped this week.
the night before demo day i ran a fresh clip through the console start to finish: ingest and audio prep in 2 minutes 29 seconds, i told it which camera was which, picked the lines, and it built the finished promo in 1 minute 43 seconds. it didn't post. that part stays my call.
the bonus: burning questions. this is the hard one. a weekly gameshow with three cameras, question cards, a reveal and bleeps. it cuts it the way i would. once an episode is done, one command shipped 8 clips, made 8 covers and checked 8 uploads in 550 seconds. a gameshow is a weird shape. if it can make this, it can make yours.
and you can run a piece of it yourself. the public repo is the same pipeline cut down to fit on a laptop, plus the console to read your run back. the sample is my own 33 second clip. it comes out as a 32 second cut in about 15 seconds on cpu, offline after one model download. every step timed and hashed. no accounts, no cloud.
How we built it
it's me and claude. i'm the operator and the one making the calls. the AI writes most of the code, out in the open, through a process with gates i set: tests first, a security check on every release, review before anything lands.
the numbers from git: 772 merged pull requests and 22,968 tests since may 30. pull requests per month went 5, 25, 22, 161, 194, 365, may through october. it learned the hard way, same as me. every rule in there is something that went wrong once.
the pipeline is python on top of ffmpeg, with faster-whisper doing transcription on the machine. every camera card gets copied and checked with sha256 on both ends. one byte off and it stops and names the file. it hands the cut to premiere, the editing app, so i can still edit by hand when i want to. the edit side follows 46 written rules for how a cut gets made and handed off.
a new shape is data, not new code. the demo day promo is one row in a table: the 7 second limit, the closing lines, the look, the music bed, the end card. a second kind of promo is a second row.
when it doesn't have what it needs, it doesn't guess. it stops and says why. tony's episode stopped at round2 because nobody had told it which mic was who. it asked me. i answered in about ten seconds.
the console is typescript and vite with plain css and gsap. a small python server sits behind it on each machine. the writes only go through one guarded path, and every fixture is bundled in so replay works with the wifi off.
the public slice is four stages: capture, transcribe, decide, act. capture copies the clip and stamps it. transcribe runs faster-whisper small on cpu. decide picks a cut that never chops a sentence in half. act renders the mp4 and writes an fcp7 xml you can open in an editor. each stage goes into a run record with its wall time and its sha256. on a fresh clone on my desktop (ryzen 5 3600, cpu only) the whole run took 14.8 seconds: capture 0.06, transcribe 9.16, decide 0.20, act 5.37. the console's local run tab reads those same numbers back.
Challenges we ran into
audio. three cameras, clip-on mics, guests who sit in different chairs every time. the build used to assume which mic was who. now it doesn't. it refuses until i tell it, and i tell it by ear.
shapes it hadn't seen. the promos were shot on one camera, and the event format assumed more than one. the system wouldn't pretend. it stopped, a fix went in through the same tests and review as everything else, and then it cut them.
letting the console touch real things. a status screen is easy. buttons that start renders, wipe cards and approve posts are not. every one of them got a confirm box that says exactly what will happen, the key stays off the browser, and approve locks itself if it can't prove it's safe. the security check blocked releases until each control couldn't be hit from another website or another machine. annoying. also exactly what it's for.
honesty on screen. a demo wants everything green. so the badge says live, replay or fixture, and each color means one thing. if a post is late the tile says so. it never fakes it.
and time. i built this between restaurant shifts and standup sets. the system is not fast yet. that's why i show receipts instead of a race.
Accomplishments that we're proud of
- a sizzle reel, a promo and a set of demo day promos for a real organization
- the sizzle's first full proof 21 hours before the paid editor's first deadline, plus 9 more pieces from the same footage
- 602 posts across 893 network slots on 116 days, july 2 to october 28
- a note i gave at night running as a build rule by the next morning
- a console that runs the real work, with the key kept off the browser and approve that locks itself when it can't prove it's safe
- a gameshow with three cameras that it cuts by my rules, and its social package shipped in 550 seconds
- 16 of my rulings running as gates on every build, quoted back in my own words
- refusals that say exactly what's missing instead of guessing
- a public repo a stranger can clone and run with no account, offline after one model download, in about 15 seconds
What we learned
it doesn't come with taste. it learns mine. the trick was writing every correction down once so i never have to say it twice.
refusing beats guessing. every time the system guessed, i paid for it later in the edit. every time it stopped and asked, it took me about ten seconds to answer.
a gate that can't fail isn't a gate. if i didn't watch it go red at least once, i don't trust it.
and a dashboard isn't a platform. the week the console got real buttons is the week it started being the thing i actually use.
What's next for kai-studio
after friday i keep running it, same as before friday. the gameshow backlog gets edited through the console, then back to two episodes a week. next up is reading guest names off the tape at ingest, more contrast and a real timeline on the home screen, and parity and analytics on live data across every network.
operator: kevin. i built it, i run it every day, and i'll be the one running it after today.
Built With
- adobe-premiere-pro
- claude
- eslint
- faster-whisper
- fcp7-xml
- ffmpeg
- ffprobe
- fraunces
- gsap
- instagram-graph-api
- jetbrains-mono
- jsonschema
- numpy
- opencv
- opentimelineio
- pillow
- playwright
- pyscenedetect
- pytest
- python
- ruff
- typescript
- vite
- vitest
Log in or sign up for Devpost to join the conversation.