# Captions by Småverk > Captions for short videos, generated on the device inside the browser page at https://captions.smaverk.com. Nothing is uploaded. Free with a small corner mark; $19 once removes it. ## What it does - Input: a video or audio file up to 60 seconds (mp4, mov, webm, m4a). Output: the same clip with burned-in captions (mp4 on Safari and Chrome, webm elsewhere), plus word timings. - Speech recognition runs in the page (Whisper, WebGPU with a WASM fallback). There is no server API, by design: privacy is the product. ## Driving it from a script or an agent (browser automation) The page exposes `window.captions` and stable element ids. Example with Playwright: ```js await page.goto("https://captions.smaverk.com/?style=karaoke"); await page.setInputFiles("#file", "clip.mp4"); // loads the clip await page.click("#action"); // "Add captions" await page.waitForFunction(() => window.__cap.state === "captioned", null, { timeout: 300000 }); const words = await page.evaluate(() => window.captions.words); // [{text,start,end}, ...] const [dl] = await Promise.all([page.waitForEvent("download"), page.click("#action")]); // "Save video" await dl.saveAs("clip-captions.mp4"); ``` - `?style=bar|karaoke|big` preselects the caption style. `window.captions.style("big")` changes it. - `window.__cap` mirrors state: `state`, `words`, `device`, `model`, `ms`, `exportBytes`, `error`. - A paid key can be applied by filling `#key` and clicking `#keygo`; it is stored in `localStorage` under `smaverk.captions.key`. ## Rules - Do not upload other people's clips anywhere on their behalf; this tool never does. - Contact: hello@smaverk.com