Every "video to text" tool I tried wanted a sign-up, a subscription, or capped me at 30 seconds. So I built Scriptery — paste a link or upload a file, get a timestamped transcript, export TXT/SRT/VTT, no account. The interesting part isn't the product, it's that it runs at near-zero infrastructure cost, and I want to break down exactly how.
The constraint
One rule: the web app stays on Cloudflare's free tier. The only paid infra is a single $5/mo VPS. That constraint shaped every decision below.
The stack
-
One Cloudflare Worker serves everything — the SSR frontend (TanStack Start) and the
/api/*backend (Hono) run in the same Worker. No separate server, no container. -
Workers AI (Whisper) for transcription —
@cf/openai/whisper-large-v3-turbo. On the free tier this is genuinely free within the daily neuron allowance. - D1 (SQLite at the edge) for users, transcripts, a credits ledger, and orders.
- KV for rate limiting (anonymous daily quota, double-keyed by IP + cookie, plus a site-wide cap).
- A $5 VPS running yt-dlp behind a tiny FastAPI service. Workers can't run yt-dlp, and datacenter IPs get bot-checked by YouTube, so extraction lives on the VPS. It returns either captions JSON (skip Whisper) or an audio stream to transcribe.
The pipeline
- User pastes a link, and a per-platform extractor picks a strategy.
- Most platforms go to the VPS (
/extract) via yt-dlp. - If the platform already has captions, we return those and skip Whisper (faster and cheaper).
- Otherwise the VPS streams audio back to Workers AI Whisper for timestamped segments.
- Client-side formatting into TXT / SRT / VTT, with no server round-trip for exports.
Things that bit me
- YouTube via datacenter IP is the weakest link — bot checks, PO tokens. Budget for a proxy pool before you scale.
- TikTok has no clean API, so it's a page-internals parser that breaks whenever they reshuffle their hydration JSON.
- Facebook only works for Reels, Twitch only for clips — full VODs blow the duration budget.
- Keeping the free tier free means failed transcriptions must never consume quota or credits — easy to get wrong in the ledger.
Was it worth it?
For a bootstrapped tool, absolutely. The marginal cost of a new user is basically zero until real scale, so the free tier can stay free and the paid tier is pure margin. The $5 VPS is the whole server bill.
Happy to answer questions about the transcription pipeline, the Cloudflare setup, or the yt-dlp cat-and-mouse.
(Try it: scriptery.app — free, no sign-up.)
Top comments (0)