<?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: Vahzryn</title>
    <description>The latest articles on DEV Community by Vahzryn (@vahzryn).</description>
    <link>https://dev.to/vahzryn</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%2F4046774%2Fd6461b82-5706-444d-b9c5-f3a0db4fab83.png</url>
      <title>DEV Community: Vahzryn</title>
      <link>https://dev.to/vahzryn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vahzryn"/>
    <language>en</language>
    <item>
      <title>Why I built a 100% private, client-side image converter in browser memory</title>
      <dc:creator>Vahzryn</dc:creator>
      <pubDate>Sat, 25 Jul 2026 11:36:29 +0000</pubDate>
      <link>https://dev.to/vahzryn/why-i-built-a-100-private-client-side-image-converter-in-browser-memory-ki4</link>
      <guid>https://dev.to/vahzryn/why-i-built-a-100-private-client-side-image-converter-in-browser-memory-ki4</guid>
      <description>&lt;p&gt;Hey everyone! 👋&lt;br&gt;
A few weeks ago, I was trying to batch convert a bunch of &lt;code&gt;.heic&lt;/code&gt; photos from my phone so I could use them in a project. Like usual, I searched for an online converter, picked the first result, and dragged my files in.&lt;br&gt;
Then it hit me: why am I uploading personal photos to a random server just to change a file format? &lt;br&gt;
Most converter sites upload your images to their backend, process them, and give you a download link. Beyond being a potential privacy nightmare, it's just slow—especially when you're dealing with dozens of high-res images on a spotty connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  I figured modern browsers are more than powerful enough to handle this locally, so I built &lt;strong&gt;&lt;a href="https://zapixal.com" rel="noopener noreferrer"&gt;Zapixal&lt;/a&gt;&lt;/strong&gt;.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  How it works (no servers involved)
&lt;/h2&gt;

&lt;p&gt;Zapixal processes everything right inside your browser memory. Once the page loads, you can literally turn off your Wi-Fi and it will still convert your files.&lt;br&gt;
Here’s a quick look under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web Workers:&lt;/strong&gt; Image processing takes some CPU heavy lifting. By offloading the conversion to background workers, the main UI stays smooth and doesn't freeze your tab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebAssembly (WASM):&lt;/strong&gt; For formats like HEIC that browsers can't natively decode easily, WASM lets us run fast, native-level parsing right in the browser.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canvas API:&lt;/strong&gt; Handles the actual scaling, format swaps, and lossy/lossless compression on your local machine.
Because no data leaves your computer, there are no upload queues, no file size limits imposed by network speeds, and zero risk of your photos sitting on someone else's server.
---
## What it can do right now&lt;/li&gt;
&lt;li&gt;Convert between HEIC, PNG, JPG, WEBP, and AVIF.&lt;/li&gt;
&lt;li&gt;Batch convert whole folders at once.&lt;/li&gt;
&lt;li&gt;Tweak compression settings to shrink file sizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  * Works offline as a PWA once loaded.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Give it a spin!
&lt;/h2&gt;

&lt;p&gt;I’d love for you to try it out and let me know what you think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main Tool:&lt;/strong&gt; &lt;a href="https://zapixal.com" rel="noopener noreferrer"&gt;zapixal.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Direct Routes:&lt;/strong&gt; Tools like &lt;a href="https://zapixal.com/heic-to-jpg" rel="noopener noreferrer"&gt;/heic-to-jpg&lt;/a&gt; or &lt;a href="https://zapixal.com/png-to-webp" rel="noopener noreferrer"&gt;/png-to-webp&lt;/a&gt; if you're looking for specific format pairs.
If you run into any bugs or have ideas on how to make the client-side processing even faster, drop a comment below!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
