The Problem with Cloud Converters
We've all been there. You have a PNG you need as a JPG. You have a WAV file you need as an MP3. Or maybe a JSON file you need to convert to YAML.
You Google it. You click the first result: "Free Online Converter!"
It asks you to upload your file.
You hesitate.
Maybe that file is a scan of your ID.
Maybe it's a financial spreadsheet.
Maybe it's a confidential work document.
Or maybe it's just a personal photo you'd rather not share with a random server in a jurisdiction you can't pronounce.
But you're in a hurry. You upload it. You wait for the progress bar. You download the result. And you hope that "Delete after 24 hours" promise is actually true.
This workflow is broken. In 2026, with the computing power available in our web browsers, there is absolutely no reason to send a 5MB image to a server halfway across the world just to change its file format.
That is why I built Sagasu Tools.
The Paradigm Shift: Local-First Web Apps
The web has evolved. It used to be a dumb terminal for displaying text. Then it became a way to send forms to servers.
Today, the browser is a full-fledged operating system.
With technologies like WebAssembly (Wasm), Service Workers, and the File System Access API, we can bring desktop-class performance and privacy to the web.
My goal with tools.sagasu.art was simple: Zero server-side processing.
How It Works
When you visit a traditional converter site:
- Client: Select file -> Upload (Bandwidth cost + Privacy risk)
- Server: Receive file -> Spin up process -> Convert (CPU cost) -> Save temp file
- Client: Download result (Bandwidth cost)
When you use Sagasu Tools:
- Client: Select file -> Browser processes it locally -> Save result.
There is no step 2. The server serves the static HTML/JS/Wasm assets once, and then gets out of the way. You could literally turn off your Wi-Fi after the page loads, and the tool would still work.
Under the Hood: FFmpeg.wasm and Friends
The secret sauce for many media converters today is FFmpeg. It's the Swiss Army knife of audio/video processing.
Traditionally, FFmpeg runs on Linux servers. But thanks to the Emscripten compiler toolchain, we can compile FFmpeg's C code into WebAssembly.
ffmpeg.wasm allows the browser to run FFmpeg directly in a Web Worker.
This means when you convert a video on my site, your CPU fan might spin up, but your network card stays quiet. The data never leaves your RAM.
This approach has massive benefits:
- Privacy: This is the big one. If the data never leaves your device, it can't be intercepted, stored, or sold. It is GDPR-compliant by design because there is no data processing happening on my end.
- Speed: For many files, uploading and downloading takes longer than the actual conversion. Local conversion is instant for small files.
- Cost: I don't pay for expensive GPU cloud instances to process video. I host static files. My hosting bill is effectively zero (thanks to Cloudflare Pages), which allows me to offer the tool for free without plastering it with ads.
- Reliability: No "Server Overloaded" errors. If your computer is working, the tool is working.
The Challenges of Client-Side Processing
It's not all sunshine and rainbows. Building a local-first converter comes with trade-offs.
1. Browser Constraints:
Browsers sandbox everything. Managing memory in WebAssembly can be tricky. If you try to convert a 4GB video file in Chrome, you might crash the tab because the browser limits how much RAM a single tab can use.
Cloud servers can throw 128GB of RAM at a problem. Your browser tab gets maybe 4GB.
2. Initial Load Time:
The ffmpeg.wasm core is large (around 25MB). Downloading this takes time on the first visit.
Solution: I use aggressive caching. Once you've visited the site once, the Wasm binary is stored in your cache. Subsequent visits are instant.
3. Format Support:
While FFmpeg is extensive, compiling every codec into Wasm bloats the file size. I have to be selective about which formats to support to keep the app lightweight.
Beyond Media: Unit Conversion, JSON, and More
While media conversion is the flashy use case, the same local-first philosophy applies to everything on tools.sagasu.art.
- JSON Formatter: Why send your config files to a server to pretty-print them? Do it in JS.
- Base64 Encoder: This is a simple string manipulation. It should never touch a backend.
- Unit Converter: Pure math. Zero latency.
Why This Matters
We are seeing a swing back towards "thick clients."
In the 90s, we installed .exe files.
In the 2010s, we moved everything to the cloud (SaaS).
In the 2020s, we are moving back to the edge and the client, but delivered via the web.
This hybrid modelโWeb distribution, Local executionโis the future of utility software. It combines the friction-free access of a website (no install required) with the privacy and performance of a desktop app.
I built this converter because I wanted to use it. I wanted a bookmark I could click, drag a file onto, and get a result, without worrying about who is looking at my data.
If that sounds like something you need, give it a try at tools.sagasu.art. No signup, no upload, no nonsense. Just tools.
Top comments (0)