So today I received an alert from my VPS, telling me that I was soon going to be out of space (320GB total, got 32GB free). Being a dev/hobby/tools machine, I was 100% sure something wasn’t quite right.
Upon checking it, I found that a link I’ve posted here on Reddit a while back… Kind of “spreaded” elsewhere and attracted more people than intended.
I never implemented a script to auto-clean everything, as I never intended to publish it. Well, I was wrong, as it’s useful for other folks like me (apparently). On top of that, the link was posted in a comment of a comment of a comment, it wasn’t really visible.
The first version was entirely PHP based. All the upload/compression work was done on the server side (hence the space problem). Today I coded a new version entirely in JavaScript, to make it work 100% client-side. Also, no privacy issues (I could tell you stories about the uploaded photos…). So, in short, you will never upload anything to my server and I will never know if you’re a naughty boi or not. It was fun, though.
Should anyone need it, I moved the original link to this domain:
I tested it with 2000 photos at once (1.5GB size total) and it did the job pretty well. Sure, Chrome wasn’t exactly “happy” but it didn’t flinch or anything else.
You ran out of space because the images were stored on the server? But the website says that it’s 100% client side… Forgive me if I’m just being stupid.
Edit: I am being stupid. My sincere apologies. I didn’t read the post properly.
@Kieran
Yep, the first iteration was entirely server-side. It was an old script, I abandoned that solution a while back when I started coding webapps for smartphones, where the user often uploads huge photos from the device (making the entire process slower and more taxing on the server).
With a full client-side only JS solution, all the logic and CPU power is handled by the device, freeing my VPS from the burden.
Lin said:
What library (if any) did you use for the compression? Squoosh?
No library. I draw the uploaded image into a canvas element, convert to blob and then download the blob as compressed WebP (you can do it natively via JS).