all notes

7 min read devtoolsprivacy

I shipped a super fast bulk image converter that never uploads anything

Every image converter I tried wanted my files first and gave me a download link second. The rest of the experience was worse: slow queues, confusing UX, features gated behind logins and subscriptions, daily conversion limits, dark patterns pushing the paid tier, random ads between steps.

The itch got specific. My phone keeps filling with screenshots, memes, saved posts and camera clicks, and every backup pushes me closer to the end of a free cloud tier or a full SSD. I wanted the GBs back. So I built PicToWebP, and the source lives on GitHub.

Here is the number that matters: 10,000 images converted in under 100 seconds in a test run. The fastest bulk converter I know, 100% open source and free without any limits. No accounts, no quotas, no watermarks.

Why WebP, specifically

Deleting photos was never the answer, and neither was paying every month to store them. Most of my photos were saved as JPEGs and PNGs, which take up far more space than they need to. WebP keeps the exact same photo in a much smaller file: around 80% smaller, looking identical. Smaller files were the whole answer.

The intuition: conversion never needed a server

Converting an image means decoding pixels and re-encoding them in a tighter format. Both halves run on ordinary hardware in milliseconds. The server in most converters exists for the business model, not the math. Remove it and the whole product collapses into something beautifully boring: drop files in, get WebP out, nothing leaves the machine.

  • Privacy by construction: personal photos never touch a network
  • Batch economics: a thousand images cost the same as one, which is nothing
  • Offline by default: it works on planes, in locked-down networks, behind a VPN

Built for thousands, not one

The question I kept circling: what if I want to convert thousands of images quickly, with a single click? At that scale, per-file friction is a design failure, so bulk is the default, not a mode. Select an entire folder, hit convert once, and the whole tree runs: subfolders come back in place, and the savings report per file until the total reads like a typo. A backup that exceeded my free tier came back under it in one sitting.

Three editions, one idea

PicToWebP ships three ways, and all three keep every byte local. The browser edition needs no install and is the fastest way to try it. The Python CLI adds wider format support and a local web UI. The Rust CLI is the workhorse: in one real run it cut 2,598 images by 85.79% in 46 seconds.

Try the browser version to see what kind of savings your images get. For large image folders, the Rust CLI performs best: setup instructions are in the readme.

written by

I'm Aditya Vivek Thota (XQ), staff SWE at Visa and LinkedIn Top Voice 2020. I write about AI and engineering.