youclip.ai
Turning long streams into clips people actually post
youclip.ai takes a one to three hour recording, finds the bits worth clipping, and hands back a batch of captioned shorts you can post the same day. I designed and built the whole thing on my own: the interface, the front end, the back end, and the part that finds the clips.
Visit youclip.ai ↗One long stream, a handful of clips worth posting
each scored 0 to 100 for how far it'll travel
Six good moments buried in three hours
Streamers and podcasters end up with hours of footage that maybe holds six good moments. Finding them is slow. You scrub, mark timestamps, cut, crop to vertical, add captions, export, then do it all again. So most people just don't bother, and the clips that would grow their channel never get made. Not because they're hard to make well, but because making them is annoying enough to skip.
That's the bet. People will clip regularly if clipping stops eating their evening.
Solo build. Product design, front end, the Python engine that renders, the web back end with login and billing, and the logic that finds the clips. One person, not much time, and a render pipeline that has to be right: a clip exported with the caption in the wrong spot is worse than no clip at all, because nobody posts that. So I set two rules for myself.
instead of building separate ones.
then catch it, instead of hoping it won't.
Find the clips from the words, not the loudness
The obvious way to find “the exciting bit” is the audio: loud spikes, laughter, big cuts. I chose not to build that as the main thing.
What makes a clip go off isn't how loud it is, it's what it means. A quiet, perfectly landed line beats thirty seconds of loud nothing. The real question is whether a moment stands on its own. Would it land for someone who just scrolled onto it with zero context? That's a judgement about meaning. A model reading the transcript can make that call. A loudness meter can't.
For each one it returns a score out of 100, a one-line reason, and a short title.
“…and that's when I realised I'd been muted the whole time.”
[crowd noise, overlapping shouting, 30s]
Trade-off: It's only as good as the transcript, it costs tokens, and it's blind to what's funny to watch but silent. Adding the audio back as a second opinion is the obvious next step.
Clips stay virtual, so there's only ever one pipeline
While you review, a clip is just a start time and an end time sitting on top of the original video. Nothing gets cut. Only when you export does it turn into a normal render job with a trim, run through the exact same pipeline the manual editor uses. Same captions, same templates, same sound effects.
For a one-person project this mattered a lot. A separate render path just for clips would have doubled the amount of code I had to keep correct, alone. Keeping clips virtual means a bug fix or a new caption style shows up everywhere at once, and “open this clip in the full editor” is basically free.
The one bit I'm quietly proud of. Captions and titles get drawn as normal web pages (HTML and CSS) in a hidden browser window, then FFmpeg lays that over the video. Most tools fight the old subtitle format to style captions. Because mine are just web design, I get rich per-language caption styles with the words lighting up in time, and the render code never turns into a mess.
Clean clip edges out of a three-hour transcript
This is the bit I'd point to if you asked what was actually hard. Asking a model for highlights is easy. Getting usable, exportable clip edges out of hours of transcript is the real work. You have to stay inside the model's limits, keep the token bill from killing the economics, and catch everything the model gets wrong.
A three-hour transcript doesn't fit in one go, and cramming too much in makes the answers worse anyway. The overlap is on purpose. A great moment sitting right on the line between two chunks would get cut in half and scored low by both, so the overlap gives it one clean shot inside a single chunk.
The value is in the work around the model, not in paying top dollar to read three hours of talk. Word-by-word transcripts are huge, so before scoring I bunch the words into short timed lines: roughly a dozen words, or eight seconds, or a natural pause. That's enough for the model to point at a line, at a fraction of the cost.
The model gives back rough numbers. Sometimes clips overlap, sometimes it hands you a two-second scrap or an end time past the end of the video. One function assumes none of it is safe:
- ✓Pull each clip back inside the real length of the video
- ✓Snap each edge to the nearest real word boundary within a second
- ✓Re-check the length after snapping, not before
- ✓Throw away anything under three seconds
- ✓Kill overlaps by keeping the higher-scored clip when two collide
Re-checking length after snapping rather than before was a real ordering bug I hit and fixed. All the knobs live in one file, so the quality settings sit in one place.
Covering captions already burned into the footage
Some footage already has captions burned into the picture, and youclip's own captions have to cover them or you get a double stack. I got this wrong twice. First I hunted sharp edges (fooled by a sweater collar), then bright text (fooled by a window or a face). The fix was to stop guessing what a caption looks like and find the actual letters with a proper text detector already bundled with the app, then confirm it with common-sense rules.
If the model file is ever missing, it skips the step instead of wrecking the frame.
- Ignore text near the top of the frame
- Ignore anything too narrow to be a caption
- Only count it if it shows up in at least a third of the frames
Clip cards sorted by score, a two-level timeline underneath. The fiddly controls (extend, trim, delete, add a missed moment) are there but out of the way, and anything needing frame-by-frame work is one click into the full editor.
A small queue runs two renders at a time and checks every clip has a price before it starts, so a batch can't get stuck halfway through.
Cut 20-plus always-on helper sentences and unified the three modes onto one set of design tokens, on the rule that the controls should speak for themselves.
Import → transcribe → cards fill in, sorted by score
How little a yes / no takes
The queue chewing through two at a time
A real, working AI app, built on my own. A desktop app with a web service behind it for login, token billing and the model calls, plus a Python engine that transcribes, scores, crops and captions.
Private beta, a handful of testersThe model call was the easy part. What makes an AI feature feel like a real product instead of a toy is everything protecting it: snapping the edges, killing overlaps, covering old captions, a batch that won't half-start.
Add the audio back as a second opinion, since reading only the words misses moments that are funny to watch but quiet. And merge the scoring logic that currently runs in both the engine and the web back end, kept in step by hand, which is a bug waiting to happen.