<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[parish]]></title><description><![CDATA[parish]]></description><link>https://parish.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 15 Nov 2026 18:53:08 GMT</lastBuildDate><atom:link href="https://parish.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Built a Free Caption Generator That Never Uploads Your Video]]></title><description><![CDATA[I built Karaoke Captions to add word-by-word captions without video uploads. Try free Classic and Lyrics MP4 exports, with no watermark or account.]]></description><link>https://parish.hashnode.dev/free-word-by-word-caption-generator-without-uploading-video</link><guid isPermaLink="true">https://parish.hashnode.dev/free-word-by-word-caption-generator-without-uploading-video</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[privacy]]></category><category><![CDATA[Indie Hacking]]></category><dc:creator><![CDATA[Parish Khan]]></dc:creator><pubDate>Sat, 14 Nov 2026 18:01:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/5f85a4d0f20ee7421c16fe57/0124c2f2-10bb-4eb7-8cd0-e5944676867e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The best thing my caption editor does happens before the first word appears: <strong>it keeps the video on your computer.</strong></p>
<p>I built <a href="https://karaokecaptions.com/?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=maker_story">Karaoke Captions</a> around that idea. It’s a free word-by-word caption generator that turns a clip into a finished, captioned MP4, using AI that runs inside your browser.</p>
<p>The footage stays on your device. You can use the free Classic and Lyrics styles without an account, a credit card, or a watermark.</p>
<p>I’m the maker, so this is a look at the choices behind it, along with a practical way to try it on your own video.</p>
<p><img src="https://cdn.hashnode.com/uploads/covers/5f85a4d0f20ee7421c16fe57/9f83721a-d933-456c-90f8-2daf94788277.png" alt="Karaoke Captions homepage showing the video picker and animated caption demo" /></p>
<p><em>The starting point: choose a local video and get to work.</em></p>
<h2>Why I built a caption generator without video uploads</h2>
<p>Adding captions sounds like a small task. The workflow can make it feel much bigger: move the footage into another tool, wait for processing, fix the text, choose a style, and work out what you can actually export.</p>
<p>I wanted a tool I could describe in one sentence: open a clip, make the words readable, and download the result.</p>
<p>Keeping the video local helped make that possible. It removes the upload step and means I don’t have to run a speech-recognition server for every minute someone captions. That matters for privacy, and it also helps me keep the free version useful.</p>
<p>An unpublished product demo, a client interview, a rough recording you’re still deciding whether to share: there are plenty of ordinary reasons to want your footage to stay with you.</p>
<p>My view is pretty simple: <strong>using AI shouldn’t automatically mean handing over the source material.</strong></p>
<h2>What word-by-word captions actually change</h2>
<p>Karaoke captions highlight words as they’re spoken. You’ve probably seen the effect in a tutorial, a podcast clip, or a talking-head Reel: a short phrase appears, and the emphasis moves with the speaker.</p>
<p>The detail I care about is the rhythm. A sentence doesn’t arrive all at once when someone speaks it. A well-timed caption lets the text follow that delivery.</p>
<p>I also want the video to make sense with the sound off. That’s a useful test for a demo, an explanation, or a clip someone opens on a quiet train.</p>
<p>For me, the useful question is whether the caption helps someone follow the thought. Sometimes that means a bright, punchy style. Sometimes it means two quiet words in the right place. I like having room for both.</p>
<h2>How to add word-by-word captions to your video</h2>
<p>Here’s the workflow I’d use for a first clip.</p>
<p><strong>1. Open a short video in desktop Chrome or Edge.</strong></p>
<p>Go to <a href="https://karaokecaptions.com/">karaokecaptions.com</a> and choose your video. MP4, MOV, and WebM are supported inputs. A short clip is a good way to get familiar with the editor before trying a longer project.</p>
<p>The first automatic transcription needs to download a speech model. That initial setup can take a little time; subsequent runs can reuse the cached model.</p>
<p><strong>2. Read the transcript while listening to the clip.</strong></p>
<p>Automatic captions give you a starting point. I’d still check names, product terms, numbers, and anything spoken over music. You can edit the transcript and use <strong>Fix timing</strong> when a word needs adjusting.</p>
<p>This is the pass I wouldn’t skip. A beautiful caption with the wrong word is still the wrong caption.</p>
<p><img src="https://cdn.hashnode.com/uploads/covers/5f85a4d0f20ee7421c16fe57/a58eebf3-f664-428d-9638-d6be122b494c.png" alt="Karaoke Captions editor with a vertical video, highlighted words, editable transcript and caption timeline" /></p>
<p><em>The actual editor: preview on the left, transcript on the right, timing below.</em></p>
<p><strong>3. Start with a readable style.</strong></p>
<p>Classic gives you a bold starting point. Lyrics offers another free option. You can adjust the font, colours, size, position, and how many words appear together.</p>
<p>My preference is to get contrast and placement right before adding more motion. Watch a few seconds at roughly the size someone will see on a phone. Can you read it comfortably? Does it cover the speaker’s mouth or a detail the viewer needs?</p>
<p>For Reels, Shorts, and TikTok, leave room for the platform’s buttons and bottom interface. I keep a <a href="https://karaokecaptions.com/caption-safe-zones/">caption safe-zone guide</a> on the site because those overlays are easy to forget while editing.</p>
<p><strong>4. Export the format you need.</strong></p>
<p>Choose <strong>MP4</strong> when you want the captions visibly burned into the video. That’s the file to use when you want every viewer to see the styled result.</p>
<p>Choose <strong>SRT or VTT</strong> when you need a separate subtitle file for another editor or publishing workflow. Those files contain text and timing; they don’t carry the animated caption design.</p>
<p><img src="https://cdn.hashnode.com/uploads/covers/5f85a4d0f20ee7421c16fe57/1e9e3a19-a258-4753-b7e8-45cf930b794d.png" alt="Export dialog offering a captioned MP4 and separate SRT and VTT subtitle files" /></p>
<p><em>The export options make the distinction explicit: finished video or timed text.</em></p>
<h2>Already have an SRT? Keep the work you’ve done</h2>
<p>I didn’t want someone with reviewed subtitles to have to transcribe the same clip again.</p>
<p>Choose <strong>Use my own SRT</strong> on the homepage, or <strong>Import SRT</strong> in the editor. You can review the subtitle preview, import it, and then style the captions.</p>
<p>There’s a timing detail worth understanding here: an SRT usually tells you when each caption starts and ends, rather than when every individual word was spoken. Karaoke Captions keeps the caption times and estimates the word highlights within them. You can fine-tune those with <strong>Fix timing</strong>.</p>
<p>That makes SRT import useful when you already have corrected copy or a subtitle file from another part of your workflow.</p>
<h2>The browser engineering behind it</h2>
<p>For the developers reading this, the stack is React and TypeScript, with a local media-processing pipeline:</p>
<pre><code class="language-text">Local video
  → audio decoding
  → Whisper transcription in a browser worker
  → words with timestamps
  → editable phrases and animated captions
  → MP4 encoding on your device
</code></pre>
<p>I use Whisper through Transformers.js for speech recognition, with WebGPU where available and a WebAssembly fallback. Running transcription in a worker keeps that work off the main UI thread.</p>
<p>One design decision I care about a lot is <strong>sharing the drawing code between the preview and the export</strong>. The style gallery uses that renderer too. There are fewer opportunities for a caption to look one way in the editor and another way in the downloaded file.</p>
<p>MP4 export uses WebCodecs in the browser. I recommend desktop Chrome or Edge for that workflow; browser support and the device’s available resources matter.</p>
<p>Local processing also has practical limits. A long video asks more of your machine, and a slower device takes longer. For offline use, load the app and the speech model online first; the cached model enables subsequent local processing. I explain the approach on the <a href="https://karaokecaptions.com/offline-caption-generator/">private and offline captions page</a>.</p>
<h2>What’s free, and where Pro fits</h2>
<p>I want the free option to get someone all the way to a usable video.</p>
<table>
<thead>
<tr>
<th>What you want to do</th>
<th>What to use</th>
</tr>
</thead>
<tbody><tr>
<td>Create and customise word-by-word captions</td>
<td>Free Classic or Lyrics</td>
</tr>
<tr>
<td>Export those styles as an MP4 without a watermark</td>
<td>Free</td>
</tr>
<tr>
<td>Download SRT or VTT subtitles</td>
<td>Free</td>
</tr>
<tr>
<td>Explore the growing library of 100+ caption styles</td>
<td>Try them in the editor</td>
</tr>
<tr>
<td>Export a Pro style without its watermark</td>
<td>Pro</td>
</tr>
</tbody></table>
<p>You can try Pro styles on your own footage and export them free with a small watermark. Pro removes that watermark and adds tools such as auto emoji, smart highlights, and filler-word cleanup. The cleanup changes the captions; it doesn’t cut words out of your audio.</p>
<p><img src="https://cdn.hashnode.com/uploads/covers/5f85a4d0f20ee7421c16fe57/f6c956b7-b2e0-481d-a265-72703b955970.png" alt="Caption style library showing the free Classic and Lyrics styles alongside Pro looks" /></p>
<p><em>Free and Pro labels are visible while you browse the styles.</em></p>
<p>The <a href="https://karaokecaptions.com/pricing/">current pricing page</a> has the plan details. You can finish a watermark-free video with Classic or Lyrics before deciding whether you want anything else.</p>
<h2>Try it on the clip you already have</h2>
<p>If you make product demos, tutorials, podcast excerpts, or short videos for Reels, Shorts, and TikTok, that’s the kind of work I built this for.</p>
<p>Pick one short clip. Check the transcript. Choose a readable style. Export it and watch it on your phone with the sound off.</p>
<p>You’ll know far more from that one video than from another list of features.</p>
<p><strong><a href="https://karaokecaptions.com/?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=maker_story&amp;utm_content=closing_cta">Try Karaoke Captions free →</a></strong></p>
<p>And if you try it, I’d like to hear which part of captioning still takes you the most effort: getting the words right, fixing timing, or finding a style that fits. I’m building this as an independent maker, and that’s useful feedback for what I work on next.</p>
]]></content:encoded></item></channel></rss>