Launch video pipeline
Proof
I built Proof's render service, which turns a recorded take into a captioned video and checks the generated scenes for visual errors.
- used Proof
- 50 users
- 'Sup Build2026 · 300+ builders · S$5K+ in prizes
- 1st Runner-Up

A finished 61-second output with timed captions and graphics kept clear of the face.
- Rendered output: A finished 61-second output with timed captions and graphics kept clear of the face.
- Product walkthrough: The walkthrough shows repository analysis, the generated brief and the guided recording flow.
- 1st Runner-Up: Proof placed 1st Runner-Up at 'Sup Build2026 among more than 300 builders.
- Render pipeline: The pipeline analyses the repository, guides recording, times captions and checks each rendered scene.
Choosing the script
Proof generates several angles from the repository and the founder's answers, then scores them against that evidence. The scoring prompt explicitly forbids invented numbers.
The render service
Whisper's word timestamps tell the renderer where to cut dead air and place each caption.
I found two security holes in my first version: one let a job fetch unsafe URLs (SSRF), and another could expose another user's render (IDOR). I closed both, put the worker behind token authentication and added row-level security rules so users only see their own jobs.
Render jobs run in a persistent queue.
How the video checks itself
In an early render, the graphics covered my face and the checker rejected the scenes. We thought the checker was broken until we looked at the frames.
Proof samples five frames from each generated scene and checks for problems such as clipped words, garbled text and obstructed captions.
The generator receives the previous HTML and a list of specific fixes, edits the affected parts and renders the scene again. The new render goes through the same check.
What broke
In load tests with 15-second clips, two renders at once finished about 20% faster per video because one could use the worker while the other waited on transcription or upload. The measured render time moved from 34.4 seconds to 27.6 seconds. A third exhausted memory, so Proof runs two and queues the rest.