Hey dev community! π
I wanted to share a story about my pet project, AllConvert, and how I tried to solve a very personal annoyance.
The Problem with Online Converters
Every time I needed to convert a HEIC photo from my iPhone to JPG, or trim a heavy video, the process felt painful:
"Your file is too large β buy Premium!"
"You are #4 in the conversion queue."
Uploading private photos/videos to some unknown server.
Page-takeover ads everywhere.
So I asked myself: Why upload files to a server at all? Modern browsers are insanely powerful. Can we do 100% of the conversion locally on the user's machine?
I paired up with Google AI Studio as my co-pilot, and we went down the WebAssembly rabbit hole.
The Tech Stack Under the Hood
We experimented with a bunch of libraries, broke things, cleaned up, and ended up with a pretty solid setup:
FFmpeg WASM: For heavy media processing.
WebCodecs API: To tap into hardware acceleration (GPU) for video encoding/decoding where supported.
Web Audio & Canvas APIs: For ultra-fast audio extraction and instant image manipulation.
React + TypeScript: For the UI.
The Good: Media Conversion Flies π
For images and media, the result exceeded my expectations:
Formats like HEIC β JPG, WEBP β PNG, or MP3/WAV extraction work instantly.
Heavy Files: I stress-tested a 1.5 GB video file β the script processed it entirely through the browserβs RAM without sending a single byte to any server.
Privacy: You can literally turn off your Wi-Fi after loading the page, and the conversion still works.
The Bad: Documents Are Pain π
While video and audio worked like a charm, documents (PDF, DOCX, Spreadsheets) turned out to be a nightmare.
Relying on WASM tools for document layout parsing without native system fonts is tough. Some PDFs converted into complete gibberish or broken layouts.
Right now, I'm actively debugging document parsing with AI Studio β fixing what can be fixed and probably dropping the unsalvageable formats to keep the app clean.
Deployment & Infrastructure
The site is hosted on GitHub Pages and proxied through Cloudflare for global availability and speed. Itβs completely free, has no registration, and no ads.
Try It Out!
Iβd love to get feedback from other developers and tech enthusiasts:
π Live Web App: https://allconvert.ru/
π GitHub Repo: https://github.com/laboratoryjob2022-debug/allconvert.ru

Give it a spin with a heavy video or a batch of images! Howβs the performance on your setup? Drop your thoughts or edge cases in the comments.
Top comments (4)
Good writeup. The ceiling you will hit on the WASM path is that ffmpeg.wasm is a 32-bit build, so the heap tops out around 2-4GB regardless of how much RAM the machine has - a 1.5GB input is already close once you count the output buffer too. Two things that helped me: read the file with File.slice and feed it in chunks rather than one big ArrayBuffer, and call VideoEncoder.isConfigSupported() before assuming WebCodecs is available, since Safari supports a much narrower codec set than Chrome and quietly falls back to the slow path. Did you see much difference between Safari and Chrome on the heavy files?
Spot on observation about the 32-bit WASM heap limit! Chunking via File.slice is definitely the way to go here. Safariβs limited codec support is always a headache compared to Chromium engines, which is why optimizing fallback paths is so critical. Thanks for the great insights!
Amazing project @nextgen_logic_studio. Personal project are a great way to learn a new technology. Hoping to read few more articles of your few amazing personal projects which I can learn from.
Thank you very much, @tanaydwivedi! I really appreciate your kind words. There are still many potential technical articles and projects ahead! The only thing is where to find the time for all of this.