[RESOLVED] Looking for simple self-hosted image editor / resizer app
I've searched around and can't find this but it seems like someone must have created this already. I am hoping to find a self-hosted image resizer app. I frequently need to take photos from my phone (etc...) and make them small enough to post online.
For instance, my lemmy instance (lemm.ee) only allows images in posts if they are smaller than 500KB but my phone's photos are always larger than that.
In a perfect world, I could just browse to a local server app, upload an image, select a size to resize it to, hit Go and then download the smaller image. It doesn't have to allow any other editing and it shouldn't store images long-term. I want to self-host so I don't have to upload my images to randomweb sites I know nothing about.
I would be happy with a FOSS desktop app I can install in linux too, but then I couldn't access it from my phone. The Android apps I found for this either look scammy or include tons of ads.
Anyone know of such a thing? Thanks!
EDIT - UPDATE:
Thank you for the great suggestions. I've installed Image Toolbox on my Android phone and that looks great. It both has a ton of tools but also makes this resizing task very straightforward. Not sure how I never found that before.
But for my desktop, I started writing a PHP app to run in my existing nginx web server. It runs the suggested ffmpeg command under the hood, and since I am the only user on this server, this works very well for me.
That's working now so I am going to tweak a few things and then use it for a while. (Before anyone asks, I started based on the Python recs here, but couldn't get it working (PIP couldn't add Flask because PIP couldn't find PIP???) and so switched to PHP since my local server was already using that from another home-made app. This (PHP) was not as hard as I was afraid it would be, with help from Duck Duck Go's AI chat bot.
Minimal fucking around needed too, just pkg install imagemagick then navigate filesystem to images ya want to adjust and magick however desired to reduce the file size.
Do you use a gallery app you like? I'm kind of sick of Google photos. I always have to "save a copy" when editing and it also separates my photos in a dumb way.
I'd like something simple that isn't trying to sell me something (storage)
IT-tools has an image resizer: https://github.com/sharevb/it-tools (this is a fork of the original, not sure if the original has the same tool, but in any case this fork is way ahead)
But also, on a second read of your post, I now realize what you are looking for is right here: https://squoosh.app/
It's open source and it's entirely client-side. It allows you to customize the settings to compress your image to the file size and format you need and maintain as much as the quality as possible. I can't think of a simpler solution that works across all your devices.
I loved that app for like a year and yes, it was perfect. I don't know what changed but about 6 months ago, when I upload images to it, they were black rectangles and so it wouldn't shrink my images. No idea what caused that, I searched around and could not find a resolution so I moved on.
But also, it's owned by GOOG and that's a downside for me.
However, Squoosh utilizes Google Analytics to collect the following:
Basic visitor data. <-- what does this mean?
The before and after image size value.
If Squoosh PWA, the type of Squoosh installation.
If Squoosh PWA, the installation time and date.
I should see if I can download the code, strip out their surveillance and then use it locally from there. Thanks for the tip!
I would be happy with a FOSS desktop app I can install in linux too
On the command line, you can do this with ImageMagick (e.g. use the command convert once it's installed).
With a (desktop) GUI, there's a bunch of programs. GIMP is probably the most well known and has a ton of capabilities but is a bit complex. I use Kolourpaint as a quick-and-dirty "MS Paint"-like program for very simple tasks where I want a GUI.
If you want a simple web UI I'm sure there is one already, but I don't know one specifically. It wouldn't be too complicated to hack something up if all you need is a quick-and-dirty file input and percentage rescale or something like that. If you don't get a better suggestion and don't know how to make something like that yourself, let me know and I can write an example.
Static page route. You can just write some Javascript to load the image from a file input in HTML, draw it resized to a canvas (based on an input slider or other input element), then save the canvas to an image. (There might even be simpler approaches if I wasn't stupidly tired right now...) This can be done in a single file (HTML with embedded JS -- and CSS if you want to style it a little) that you toss on any web server anywhere (e.g. Apache, nginx, whatever). Should work for JPEG, PNG, and probably WebP -- maybe other regular image types too. Benefit: data never needs to leave your device.
Process on server route. Use Python with a simple web server library (I usually opt for tornado for stuff like this, but flask or cherrypy or similar would probably work). Set up a handler for e.g. an HTTP POST and either pass the image into a library like Pillow to resize it or shell out to ImageMagick as others have suggested. (If you want to do something clever with animated GIFs you could shell out to ffmpeg, but that'd be a fair bit trickier...) The image can be sent back as the response. Be careful about security if you take this route. Probably want some kind of login in front of it, and run it in a VM or some other secure environment -- especially if you're using AI to kludge it together...
Best of luck and let me know if you need any help. Will probably have some time this weekend if you can't get it on your own. Happy hacking!
You should really just do this without any web application. Just use a background shell script that does the resizing automatically on any image file that you dump into a certain folder. I have similar stuff set up for naming and sorting based on geo location data.
You can even make this work for mobile by having the folder that the script runs on synced to your phone. You take a pic on your phone, it gets synced to your desktop, converted by the script, synced back to your phone.
This way it also works if you want to share large amount of photos (of a trip or event or something)
that would probably be better as an app, rather than a hosted service.
I run picsur. It's not an image resizer like that. It's like Imgur, but self-hosted and can take size arguments as part of the query. I use it to host images for a markdown based blog and keep the sizes under control.
On a side note, I recently started noticing so many sites that use full sized images regardless of the actual size it shows up on screen.