It runs in the browser and handles common tasks like compression, resizing, format conversion (AVIF, WebP, HEIC, PNG, JPEG), as well as cropping, flipping, and rotating.
The backend is powered by Go and libvips.
Would love to hear feedback from HN.
1 karma · joined September 7, 2025
It runs in the browser and handles common tasks like compression, resizing, format conversion (AVIF, WebP, HEIC, PNG, JPEG), as well as cropping, flipping, and rotating.
The backend is powered by Go and libvips.
Would love to hear feedback from HN.
I wasn’t aware of `vipsgen`, but it looks great — full coverage and auto-generated bindings are exactly what I’ll be missing in `govips` if the project grows (I hope it will). I’ll definitely give it a try and see how it works.
Also, great tip on avoiding `autorot` by flipping crop coordinates — I hadn’t thought of that! Thanks again for your help!
In my Go project I’m using the Golang library github.com/davidbyttow/govips/v2.
Images are loaded via `vips.NewImageFromFile()`, which internally calls `vips_image_new_from_file()`. However, `NewImageFromFile()` doesn't support any flags or options beyond the image path, so for JPEGs I manually call `AutoRotate()` before resizing, which wraps `vips_autorot()` — and that works well.
Thanks again!
I especially appreciated the section on slog.Attr and the !BADKEY issue, it’s one of those little things that can go unnoticed until logs break in prod.
Thanks for putting this together!