Some packages with native code components (like sharp) will use these hooks to download the correct precompiled native binary for you.
sharp downloads over https and checks the sha256 (I think?) of the archive.
sharp does this too: https://sharp.pixelplumbing.com/install/#prebuilt-binaries it can sometimes need to compile the C++ shim that sits between node and libvips, but that's rare.
sharp does not rebuild libvips, it downloads a pre-compiled libvips for your platform. https://sharp.pixelplumbing.com/install/#prebuilt-binaries It can usually also download a precompiled binary for the C++ shim that…
Hello, libvips author here, you can get it to do the OKLab averaging for you. For example, using pyvips (ahem, untested): image = pyvips.Image.new_from_file(filename, access="sequential") scale = min(200 / image.width,…
libvips uses imagemagick (via libMagick) for BMP load and save, fwiw
It's just `vips copy src.heic dst.jpg`.
libvips, the library behind sharp, has just released version 8.18.0: https://www.libvips.org/2025/12/04/What's-new-in-8.18.html It includes support for UltraHDR (HDR and SDR in one JPEG file), camera RAW images, and the…
Cleanup can be very useful if you depend on a library that does not support arenas.
`free(NULL);` will crash on some platforms that gcc supports, I believe.
I'm the libvips author, I should have said, so I'm not very neutral. But at least on that test it's usefully quicker and less memory hungry.
pyvips (the libvips Python binding) is quite a bit better than pillow-simd --- 3x faster, 10x less memory use, same quality. On this benchmark at least: https://github.com/libvips/libvips/wiki/Speed-and-memory-use
Ah no problem! I'm glad it's useful. `govips` was a pretty early binding and wasn't really done the libvips way. It doesn't expose all the operations or options, it's mostly done by hand, and there are a number of leaks…
Hello, libvips author here, the JPEG loader has a flag to do this for you. You can write: VipsImage *image = vips_image_new_from_file("something.jpg", "autorotate", TRUE, NULL); and it'll flip it upright for you and…
Applying rotation can have a large performance penalty (both cpu and memory), so you want to be able to avoid it if possible.
Those three all use libvips as the image processing engine, fwiw, so it's maybe not a very wide survey. libvips is fairly highly threaded and does a lot of alloc/free, so it's challenging for most heap implementations.
Hello, libvips author here. This is probably the canonical thread about libvips and memory fragmentation, and the funniest graph: https://github.com/lovell/sharp/issues/955#issuecomment-5458... (that specific graph is…
The wasm build of libvips (the image processing library this thing uses) does not include HEIC because of the various patent issues: https://github.com/kleisauke/wasm-vips/issues/3 It does support AVIF and JXL.…
Although I think this technique was well known before then -- Crosfield were using channel-independent histogram normalization to restore faded transparencies back in the 80s.
libvips dev here -- the CLI interface is deliberately really basic, you'll see much better performance and flexibility with one of the language bindings. pyvips works well: https://github.com/libvips/pyvips The idea is…
imagemagick 7 (the current version) is namespaced under "magick", fwiw
I made an image viewer for large images: https://github.com/jcupitt/vipsdisp It should be fine with your huge PNGs. Internally it's a bit like a tiled map viewer, but it makes the tiles as you view the image with a set…
nip2 does this. It's a little like a spreadsheet, but cells can contain images, matrices, text, widgets, stuff like that. You can add scraps of code to link them together (just like a spreadsheet).…
We're off topic here, but in pyvips (for example) you can do text overlays like this: https://github.com/libvips/pyvips/blob/master/examples/annot... tldr: make an image containing your text, composite it over the image…
Firefox and webkit also have JXL support. Like Chrome, the FF version is behind a flag. The webkit one is a build-time option.
Some packages with native code components (like sharp) will use these hooks to download the correct precompiled native binary for you.
sharp downloads over https and checks the sha256 (I think?) of the archive.
sharp does this too: https://sharp.pixelplumbing.com/install/#prebuilt-binaries it can sometimes need to compile the C++ shim that sits between node and libvips, but that's rare.
sharp does not rebuild libvips, it downloads a pre-compiled libvips for your platform. https://sharp.pixelplumbing.com/install/#prebuilt-binaries It can usually also download a precompiled binary for the C++ shim that…
Hello, libvips author here, you can get it to do the OKLab averaging for you. For example, using pyvips (ahem, untested): image = pyvips.Image.new_from_file(filename, access="sequential") scale = min(200 / image.width,…
libvips uses imagemagick (via libMagick) for BMP load and save, fwiw
It's just `vips copy src.heic dst.jpg`.
libvips, the library behind sharp, has just released version 8.18.0: https://www.libvips.org/2025/12/04/What's-new-in-8.18.html It includes support for UltraHDR (HDR and SDR in one JPEG file), camera RAW images, and the…
Cleanup can be very useful if you depend on a library that does not support arenas.
`free(NULL);` will crash on some platforms that gcc supports, I believe.
I'm the libvips author, I should have said, so I'm not very neutral. But at least on that test it's usefully quicker and less memory hungry.
pyvips (the libvips Python binding) is quite a bit better than pillow-simd --- 3x faster, 10x less memory use, same quality. On this benchmark at least: https://github.com/libvips/libvips/wiki/Speed-and-memory-use
Ah no problem! I'm glad it's useful. `govips` was a pretty early binding and wasn't really done the libvips way. It doesn't expose all the operations or options, it's mostly done by hand, and there are a number of leaks…
Hello, libvips author here, the JPEG loader has a flag to do this for you. You can write: VipsImage *image = vips_image_new_from_file("something.jpg", "autorotate", TRUE, NULL); and it'll flip it upright for you and…
Applying rotation can have a large performance penalty (both cpu and memory), so you want to be able to avoid it if possible.
Those three all use libvips as the image processing engine, fwiw, so it's maybe not a very wide survey. libvips is fairly highly threaded and does a lot of alloc/free, so it's challenging for most heap implementations.
Hello, libvips author here. This is probably the canonical thread about libvips and memory fragmentation, and the funniest graph: https://github.com/lovell/sharp/issues/955#issuecomment-5458... (that specific graph is…
The wasm build of libvips (the image processing library this thing uses) does not include HEIC because of the various patent issues: https://github.com/kleisauke/wasm-vips/issues/3 It does support AVIF and JXL.…
Although I think this technique was well known before then -- Crosfield were using channel-independent histogram normalization to restore faded transparencies back in the 80s.
libvips dev here -- the CLI interface is deliberately really basic, you'll see much better performance and flexibility with one of the language bindings. pyvips works well: https://github.com/libvips/pyvips The idea is…
imagemagick 7 (the current version) is namespaced under "magick", fwiw
I made an image viewer for large images: https://github.com/jcupitt/vipsdisp It should be fine with your huge PNGs. Internally it's a bit like a tiled map viewer, but it makes the tiles as you view the image with a set…
nip2 does this. It's a little like a spreadsheet, but cells can contain images, matrices, text, widgets, stuff like that. You can add scraps of code to link them together (just like a spreadsheet).…
We're off topic here, but in pyvips (for example) you can do text overlays like this: https://github.com/libvips/pyvips/blob/master/examples/annot... tldr: make an image containing your text, composite it over the image…
Firefox and webkit also have JXL support. Like Chrome, the FF version is behind a flag. The webkit one is a build-time option.