<?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: Khangsar Gajewski</title>
    <description>The latest articles on DEV Community by Khangsar Gajewski (@khangsar_gajewski_90b88c2).</description>
    <link>https://dev.to/khangsar_gajewski_90b88c2</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%2F4065537%2F0f1f2d5f-158b-4ffb-82d7-f486f429f0cc.png</url>
      <title>DEV Community: Khangsar Gajewski</title>
      <link>https://dev.to/khangsar_gajewski_90b88c2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khangsar_gajewski_90b88c2"/>
    <language>en</language>
    <item>
      <title>Browser-based transcription: where it breaks and how to check the output</title>
      <dc:creator>Khangsar Gajewski</dc:creator>
      <pubDate>Sat, 24 Oct 2026 11:21:05 +0000</pubDate>
      <link>https://dev.to/khangsar_gajewski_90b88c2/browser-based-transcription-where-it-breaks-and-how-to-check-the-output-la4</link>
      <guid>https://dev.to/khangsar_gajewski_90b88c2/browser-based-transcription-where-it-breaks-and-how-to-check-the-output-la4</guid>
      <description>&lt;p&gt;Automatic transcription has become good enough that people trust it too early. The transcript looks clean, the sentences are grammatical, and then a number or a name turns out to be wrong in a way that changes the meaning. Spotting those failures is a skill worth building, and it is easier when you know where the model is likely to slip.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it slips
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Numbers and units.&lt;/strong&gt; "Fifteen" and "fifty", "two point five" and "two to five". Any figure that matters should be checked by ear against the audio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Proper nouns.&lt;/strong&gt; Names, product names and place names get normalised to something more common. A person called Kasia becomes "cashier" surprisingly often.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speaker changes.&lt;/strong&gt; Diarisation is the weakest part of most pipelines. In a two-person interview the transcript will frequently attribute a whole paragraph to the wrong speaker, and it is rarely obviously wrong from the text alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain vocabulary.&lt;/strong&gt; A medical or legal call is full of words the model has seen rarely in that combination. The output stays fluent, which is exactly the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checking pass that takes ten minutes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Read the transcript once without the audio. Mark anything that feels oddly specific or oddly generic.&lt;/li&gt;
&lt;li&gt;Play the audio at the marked points and fix them.&lt;/li&gt;
&lt;li&gt;Check every number, every name, and every negation. A dropped "not" is the most expensive error in the whole file.&lt;/li&gt;
&lt;li&gt;Check who is speaking at each section boundary, not every line.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is enough for meeting notes and interviews. For anything published, a full read against the audio is the only honest option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it without a workflow
&lt;/h2&gt;

&lt;p&gt;For a single file, the fastest path is a browser tool rather than a local pipeline. &lt;a href="https://freescribe.app/" rel="noopener noreferrer"&gt;FreeScribe&lt;/a&gt; accepts common formats such as MP3, WAV, M4A and MP4, produces an editable transcript, and adds subtitles and a summary. No account is needed, which is convenient for one-off files.&lt;/p&gt;

&lt;p&gt;What it does not do is remove the checking step. Transcription gets you to a draft in minutes; the ten-minute pass is what makes the draft usable.&lt;/p&gt;

</description>
      <category>audio</category>
    </item>
    <item>
      <title>Diffing two lists when a real diff tool is overkill</title>
      <dc:creator>Khangsar Gajewski</dc:creator>
      <pubDate>Sat, 24 Oct 2026 11:20:34 +0000</pubDate>
      <link>https://dev.to/khangsar_gajewski_90b88c2/diffing-two-lists-when-a-real-diff-tool-is-overkill-nc</link>
      <guid>https://dev.to/khangsar_gajewski_90b88c2/diffing-two-lists-when-a-real-diff-tool-is-overkill-nc</guid>
      <description>&lt;p&gt;Half the "compare these" tasks in day-to-day work are not code diffs. They are two columns of names, two exports from the same dashboard, or the followers list and the following list of an Instagram account. A real diff tool gives you a wall of plus and minus lines; what you usually want is three short answers: what is only here, what is only there, what is in both.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape of the problem
&lt;/h2&gt;

&lt;p&gt;Every list comparison reduces to set operations. If the two lists are clean, the answer is trivial. The work is in the cleaning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whitespace.&lt;/strong&gt; &lt;code&gt;"anna "&lt;/code&gt; and &lt;code&gt;"anna"&lt;/code&gt; are the same person and two different strings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Case.&lt;/strong&gt; Usernames and emails are usually case-insensitive; tags often are not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order.&lt;/strong&gt; A list sorted by date and a list sorted by name contain the same items and compare as completely different.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicates.&lt;/strong&gt; If one side has a name twice, most naive comparisons count it twice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty lines.&lt;/strong&gt; Export files are full of them, and they quietly become a "difference".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instagram exports are the standard example
&lt;/h2&gt;

&lt;p&gt;The follower/following export workflow is a good test, because the files are messy in predictable ways. The export contains header lines, the usernames are not sorted, and the two files are not even in the same format. Before comparing anything, you need to extract just the usernames and normalise them.&lt;/p&gt;

&lt;p&gt;Once normalised, the interesting set is the one people actually want: accounts you follow that do not follow back, and the reverse. Both are simple set differences, and both are useless if the normalisation step was sloppy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it in the browser
&lt;/h2&gt;

&lt;p&gt;For a one-off comparison, a small browser tool is enough and keeps the data local. &lt;a href="https://comparelists.net/" rel="noopener noreferrer"&gt;CompareLists&lt;/a&gt; is built around exactly this: paste two lists into two panels, get unique items, overlaps and the combined set, with switches for case sensitivity, whitespace handling, leading zeros and sorting. The comparison runs client-side, which matters when the lists are made of usernames or emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  A rule worth keeping
&lt;/h2&gt;

&lt;p&gt;Normalise first, compare second, and only then look at the result. Almost every "the tool got it wrong" complaint I have seen about list comparison was really a whitespace or case problem upstream. If the counts look wrong, sort both sides, dedupe both sides, and compare again before blaming the algorithm.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Fixing blurry photos in the browser: what actually works</title>
      <dc:creator>Khangsar Gajewski</dc:creator>
      <pubDate>Sat, 24 Oct 2026 11:20:00 +0000</pubDate>
      <link>https://dev.to/khangsar_gajewski_90b88c2/fixing-blurry-photos-in-the-browser-what-actually-works-307m</link>
      <guid>https://dev.to/khangsar_gajewski_90b88c2/fixing-blurry-photos-in-the-browser-what-actually-works-307m</guid>
      <description>&lt;p&gt;Most blurry photos are not a lost cause, and they are also not all the same problem. Before reaching for any tool, it helps to know which kind of blur you are looking at, because each one recovers differently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three kinds of blur
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Motion blur&lt;/strong&gt; happens when the camera or the subject moved during the exposure. It looks like a smear in one direction. It is the most recoverable kind, because the missing information is directional and regular.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Out-of-focus blur&lt;/strong&gt; comes from missed focus, and it spreads detail evenly in every direction. Small misses recover well. A portrait focused on the background instead of the face is much harder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Low-resolution or compression blur&lt;/strong&gt; is not really blur at all. It is missing detail, and no amount of sharpening invents it back. Upscaling can make it look smoother, but the detail will not appear.&lt;/p&gt;

&lt;h2&gt;
  
  
  A workflow that respects the original
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Work on a copy. Always.&lt;/li&gt;
&lt;li&gt;Fix the exposure and colour first. Sharpening a badly exposed image just amplifies noise.&lt;/li&gt;
&lt;li&gt;Apply the smallest amount of sharpening that produces a visible improvement at 100% zoom.&lt;/li&gt;
&lt;li&gt;Compare side by side. If you cannot tell the difference at 100%, you have gone too far or not far enough.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The mistake almost everyone makes is over-sharpening. Edges get a bright halo, skin turns plastic, and text develops a crunchy outline. Recovery looks best when it is subtle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Doing it without installing anything
&lt;/h2&gt;

&lt;p&gt;For a handful of images, a desktop application is a lot of installation for very little use. Browser tools handle this fine now, because the work is small and the results are easy to judge on screen. &lt;a href="https://unblurx.com/" rel="noopener noreferrer"&gt;UnblurX&lt;/a&gt; is one of them: you upload the image, compare the preview against the original, and export when it looks right.&lt;/p&gt;

&lt;p&gt;The honest limitation is worth repeating: restoration improves detail that is still in the file. It does not rebuild a face from a photo where the face is a smear of six pixels. Knowing that up front saves a lot of disappointment.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to give up on the photo
&lt;/h2&gt;

&lt;p&gt;If the subject is smaller than a few dozen pixels, or the motion blur is longer than the subject is wide, the information is gone. A reshoot, or a different photo from the same session, is the better answer.&lt;/p&gt;

&lt;p&gt;That rule of thumb has served me better than any slider.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>How to Clone Any Voice for Free: AI Voiceovers for Videos and Podcasts with MinaVoice</title>
      <dc:creator>Khangsar Gajewski</dc:creator>
      <pubDate>Mon, 12 Oct 2026 16:32:07 +0000</pubDate>
      <link>https://dev.to/khangsar_gajewski_90b88c2/how-to-clone-any-voice-for-free-ai-voiceovers-for-videos-and-podcasts-with-minavoice-2bmn</link>
      <guid>https://dev.to/khangsar_gajewski_90b88c2/how-to-clone-any-voice-for-free-ai-voiceovers-for-videos-and-podcasts-with-minavoice-2bmn</guid>
      <description>&lt;p&gt;Recording a voiceover used to mean booking studio time. I have been using &lt;a href="https://minavoice.com" rel="noopener noreferrer"&gt;MinaVoice&lt;/a&gt;, a free online AI voice cloning and text-to-speech platform, to narrate videos and podcasts without a microphone.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Upload a short 3-15 second reference clip of any voice.&lt;/li&gt;
&lt;li&gt;Pick a mode: &lt;strong&gt;Quick Clone&lt;/strong&gt; for daily voiceovers, &lt;strong&gt;Studio Clone&lt;/strong&gt; for production-ready content with emotion control, or &lt;strong&gt;Multilingual Clone&lt;/strong&gt; for 10+ languages (English, Spanish, Chinese, Japanese, and more).&lt;/li&gt;
&lt;li&gt;Type or paste your script, generate, and download the audio.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where it fits a developer workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;YouTube narration and podcast production without recording gear.&lt;/li&gt;
&lt;li&gt;E-learning courses that need consistent narration across modules.&lt;/li&gt;
&lt;li&gt;Multilingual localization with cross-lingual synthesis and accent adaptation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The tool is free to start at &lt;a href="https://minavoice.com" rel="noopener noreferrer"&gt;https://minavoice.com&lt;/a&gt; — paste a script, clone a voice, and export the voiceover for your next video or episode.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I am sharing a tool I work with. The link above is the tool homepage.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Remove Text and Watermarks from Images in Seconds with AI</title>
      <dc:creator>Khangsar Gajewski</dc:creator>
      <pubDate>Thu, 06 Aug 2026 08:54:51 +0000</pubDate>
      <link>https://dev.to/khangsar_gajewski_90b88c2/how-to-remove-text-and-watermarks-from-images-in-seconds-with-ai-1e4m</link>
      <guid>https://dev.to/khangsar_gajewski_90b88c2/how-to-remove-text-and-watermarks-from-images-in-seconds-with-ai-1e4m</guid>
      <description>&lt;h1&gt;
  
  
  How to Remove Text and Watermarks from Images in Seconds with AI
&lt;/h1&gt;

&lt;p&gt;Removing text overlays, watermarks, or unwanted objects from screenshots and photos used to mean opening Photoshop and spending minutes on clone stamping. With modern AI image models, the same cleanup takes seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Upload your image to an AI photo cleanup tool&lt;/li&gt;
&lt;li&gt;Brush over the area you want removed (text, watermark, logo, person)&lt;/li&gt;
&lt;li&gt;The AI reconstructs the background automatically&lt;/li&gt;
&lt;li&gt;Download the cleaned image&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tools that do this well
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://anyremover.com/" rel="noopener noreferrer"&gt;AnyRemover&lt;/a&gt; is a browser-based AI photo cleanup tool that removes text, watermarks, people, logos, and date stamps from images. It supports multiple AI processing modes including Smart AI, Flux Fill, and Nano Banana, and reconstructs the cleaned area so it looks completely natural. No install or registration required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common use cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Marketers&lt;/strong&gt;: Remove text overlays from product screenshots before publishing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Designers&lt;/strong&gt;: Clean up mockups without destroying the original layers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Photographers&lt;/strong&gt;: Remove tourists, power lines, or blemishes from travel photos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content creators&lt;/strong&gt;: Erase watermarks from stock images and memes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A quick tip
&lt;/h2&gt;

&lt;p&gt;For best results, use the largest brush stroke that covers the unwanted element, then let the model rebuild the area. Small patchy strokes can leave artifacts that the reconstruction model has to guess around.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
