ProjectRidicule
The premise writes itself: upload a video, and software detects every pause in the speech — the hesitations, the dramatic beats, the moments where someone lost their train of thought — then fills each one with a laugh track scaled to the silence. Half-second stumble? Single chuckle. Three-second stare into the middle distance? Full studio audience losing their minds.
Comedy is timing. This automates the timing.
How it hears
Voice Activity Detection finds the pauses. Not silence detection — VAD, which understands the difference between a quiet room and a speaker who stopped talking. The pipeline maps every gap in speech, measures its duration, and classifies it into one of four tiers: tiny, short, medium, and long. Each tier has its own bank of real recorded laugh samples — actual audience reactions captured as WAV files, not synthesized. The match is proportional. A hesitation gets a polite acknowledgment. A dramatic pause gets the response it deserves.
How it builds
Once the pauses are mapped and the laughs are selected, ffmpeg does the surgery. The original audio track gets the laugh samples mixed in at the right timestamps, then the whole thing gets remuxed back into the video container. The original video stream is never re-encoded — just the audio gets touched. This matters because re-encoding video is slow and lossy, and nobody uploaded their clip to get it back at a lower bitrate.
The preview system lets you hear what the laughs will sound like before committing to a full render. Audio-only preview, fast turnaround. If the algorithm put a belly laugh where you wanted a snicker, the edit endpoint lets you tweak individual insertions — move them, swap tiers, delete the ones that don’t land. Then render the final video with the adjustments baked in.
The stack
FastAPI on the backend. Nuxt 4 on the frontend. SQLite through SQLAlchemy async for job tracking and user state. The upload-to-download flow is: upload → VAD analysis → pause classification → laugh selection → preview → optional edits → final render → download. Each step is a job state transition, pollable from the frontend.
Authentication is JWT with magic links sent through Resend. No passwords to manage, no OAuth providers to trust with your data. You get an email, you click it, you’re in. Videos under fifteen seconds are free — long enough to prove the concept, short enough to keep the compute bill from getting existential. Longer videos cost credits, purchased through Stripe.
Why this exists
Because the world has enough serious software. Because the gap between “that’s a stupid idea” and “wait, that actually works” is where the interesting things live. Because somewhere out there is a conference talk, a wedding toast, a quarterly earnings call that would be improved — objectively, measurably improved — by a well-timed laugh track.
The joke writes itself. We just automated it.