<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Baljeet Singh</title>
    <description>The latest articles on DEV Community by Baljeet Singh (@printivelle).</description>
    <link>https://dev.to/printivelle</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4209227%2F06783938-58fa-4357-b7f1-1dbd66a867f5.png</url>
      <title>DEV Community: Baljeet Singh</title>
      <link>https://dev.to/printivelle</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/printivelle"/>
    <language>en</language>
    <item>
      <title>What I Learned Building an AI Video Clipper for Hinglish Creators</title>
      <dc:creator>Baljeet Singh</dc:creator>
      <pubDate>Mon, 26 Oct 2026 16:42:50 +0000</pubDate>
      <link>https://dev.to/printivelle/what-i-learned-building-an-ai-video-clipper-for-hinglish-creators-npn</link>
      <guid>https://dev.to/printivelle/what-i-learned-building-an-ai-video-clipper-for-hinglish-creators-npn</guid>
      <description>&lt;p&gt;Most AI clipping tools I tried were clearly built for English first. They did fine on a US podcast, but when I fed them a typical Indian creator video, where someone says "Yeh setup bahut simple hai, bas ek good mic le lo", the captions fell apart. That gap is why I started building &lt;a href="https://printivelle.com/" rel="noopener noreferrer"&gt;Printivelle&lt;/a&gt;, an AI tool that turns long videos into Shorts and Reels with Hindi, Hinglish or English captions.&lt;/p&gt;

&lt;p&gt;This post isn't a launch announcement. It's the set of problems I didn't expect, and what I'd tell another developer building anything around Indian-language audio or a single-page app that needs to rank on Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Hinglish is not one language, and it isn't one script either
&lt;/h2&gt;

&lt;p&gt;The first surprise was that "Hindi captions" means at least three different things to creators:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Devanagari Hindi:&lt;/strong&gt; "यह गलती मत करना"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hinglish in Roman script:&lt;/strong&gt; "Yeh galti mat karna"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code-mixed speech:&lt;/strong&gt; a sentence that switches between Hindi and English mid-way, often several times&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A speech-to-text model will usually pick one script per segment. So the same speaker can come out as Devanagari in one line and Roman letters in the next, and English words sometimes get transliterated into Devanagari ("सेटअप") when the creator wanted them left as "setup".&lt;/p&gt;

&lt;p&gt;What I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't try to be clever about the "right" script.&lt;/strong&gt; The audience decides. News, devotional and educational creators often want Devanagari. Lifestyle and tech creators often want Roman Hinglish. I generate in the spoken language and make every line editable, and the transcript tool can convert Hindi to Hinglish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spelling consistency matters more than spelling correctness.&lt;/strong&gt; In Roman Hinglish there's no standard for "hai" vs "h" or "nahi" vs "nahin". Viewers stumble when it changes between lines, not when it differs from a dictionary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Names and brand words will be wrong.&lt;/strong&gt; Channel names, slang and product names are where the model fails most. A fast editing UI does more for caption quality than any prompt trick.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Fonts are a real bug source with Indic scripts
&lt;/h2&gt;

&lt;p&gt;Devanagari has matras and conjuncts that break in fonts that don't fully support the script. On a phone screen, a broken conjunct looks like a typo, and creators blame your tool.&lt;/p&gt;

&lt;p&gt;Two rules I ended up following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ship proper fonts per script.&lt;/strong&gt; I added Devanagari, Punjabi, Bengali, Tamil, Telugu, Gujarati, Kannada and Malayalam fonts instead of relying on system fallbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The preview must use the same fonts, line breaks and timing as the final render.&lt;/strong&gt; If the browser preview wraps a line differently from the rendered MP4, users lose trust fast. "What you see is what you get" turned out to be a feature in itself.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Caption timing and SRT: the boring part that takes the longest
&lt;/h2&gt;

&lt;p&gt;Generating text is the easy bit. Getting it to appear at the right moment is harder.&lt;/p&gt;

&lt;p&gt;A few things I learned about timing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Short lines read better on mobile.&lt;/strong&gt; Two to five words per line works for vertical video. Long subtitle-style lines that are fine on a laptop are unreadable in a Reel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Word-level effects need trustworthy word timestamps.&lt;/strong&gt; I have a karaoke style where each word lights up as it's spoken. If the word timings for a video don't pass sanity checks, I switch karaoke off and fall back to line-by-line styles. A highlight that runs half a second ahead of the speech looks worse than no highlight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate every timestamp against the real media duration.&lt;/strong&gt; AI output can drift or invent times past the end of the file. Clamping and checking against the actual video length saved me from a whole class of render errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SRT is still the format people need.&lt;/strong&gt; Burned-in captions are right for Reels and Shorts, but long YouTube uploads want a separate SRT file. SRT is simple (index, &lt;code&gt;HH:MM:SS,mmm --&amp;gt; HH:MM:SS,mmm&lt;/code&gt;, text, blank line), but watch the comma before the milliseconds and keep UTF-8 output so Devanagari survives the trip into YouTube Studio.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Picking clips and reframing to vertical
&lt;/h2&gt;

&lt;p&gt;The clipping logic looks for self-contained moments of roughly 15 to 60 seconds: a hook, a tip, something funny or emotional. The biggest quality gain came from one rule: &lt;strong&gt;start and end on full sentences.&lt;/strong&gt; A clip that starts mid-word feels broken no matter how good the moment is.&lt;/p&gt;

&lt;p&gt;I also stopped forcing a fixed number of clips per video. Some videos have three good moments, some have fifteen. Padding the list with weak clips only makes users trust the good ones less.&lt;/p&gt;

&lt;p&gt;For formats, I support 9:16, 1:1 and the original aspect ratio, with reposition and zoom per clip. With two people in a podcast frame, no automatic crop is right every time, so letting the user nudge the frame is worth more than chasing a perfect auto-crop. Re-editing and re-rendering don't use any of the user's minutes, so people actually take the time to fix things.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. My Vite SPA was invisible to search, until I prerendered it
&lt;/h2&gt;

&lt;p&gt;This one is for web devs. Printivelle's frontend is a Vite single-page app served by Caddy on a VPS. It worked great for users, but every route shipped the same near-empty HTML shell with one generic title. Social previews were identical for every page, and I had no confidence about what search engines were indexing.&lt;/p&gt;

&lt;p&gt;The fix was prerendering. Each public route now ships as real HTML with its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; and meta description&lt;/li&gt;
&lt;li&gt;canonical URL&lt;/li&gt;
&lt;li&gt;Open Graph tags (with &lt;code&gt;og:locale&lt;/code&gt; set to &lt;code&gt;en_IN&lt;/code&gt; or &lt;code&gt;hi_IN&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;JSON-LD structured data where it fits (software and pricing info plus an FAQ on the homepage, BlogPosting on articles, FAQs on tool pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app still behaves like an SPA once it loads, so nothing changed for users.&lt;/p&gt;

&lt;p&gt;Lessons from that migration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bilingual routes need clear canonicals.&lt;/strong&gt; I have English pages, a Hindi homepage, and &lt;code&gt;?lang=hi&lt;/code&gt; variants. The &lt;code&gt;?lang=hi&lt;/code&gt; copies point their canonical to the English URL and are &lt;code&gt;noindex&lt;/code&gt;. Running an SEO crawler on my own site later found one route where I'd forgotten the &lt;code&gt;noindex&lt;/code&gt;. Audit your own site, it's humbling.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The H1 matters as much as the title.&lt;/strong&gt; I had keyword-first titles but slogan H1s like "Long video. Short clips. Ready to share." That's nice copy, but it gives search engines no signal. The slogan belongs in the sub-line.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Old routes need redirects, not empty shells.&lt;/strong&gt; An old URL kept serving the bare SPA shell instead of real content. A proper 301 and a real 404 for unknown paths cleaned that up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blog as Markdown files.&lt;/strong&gt; Posts are plain Markdown with front matter (title, date, description, tags), rendered to HTML with BlogPosting schema, and the sitemap updates on its own. No CMS, and writing a post is just adding a file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you run a Vite or React SPA and wonder why Google shows the wrong title or no description, check what your server actually returns with &lt;code&gt;curl&lt;/code&gt; before you blame anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell myself at the start
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build for the messy real input (code-mixed speech, bad mics, fast talkers), not the clean demo.&lt;/li&gt;
&lt;li&gt;Make editing fast and free. AI output is a first draft.&lt;/li&gt;
&lt;li&gt;Be honest about limits in the UI. Turning off a feature that would look wrong is better than shipping it broken.&lt;/li&gt;
&lt;li&gt;Treat SEO as part of the architecture on day one, not a fix after launch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building for Indian-language audio, or you've fought with SPA SEO yourself, I'd love to hear what worked for you in the comments.&lt;/p&gt;

&lt;p&gt;You can try what I built at &lt;a href="https://printivelle.com/" rel="noopener noreferrer"&gt;printivelle.com&lt;/a&gt;. There are 20 free minutes, no card needed, and I'm happy to answer questions about the stack here.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
