Repository navigation
openimageio 3.2.1.0 - #314717
Merged
Merged
openimageio 3.2.1.0#314717
Conversation
fxcoudert
approved these changes
Oct 1, 2026
chenrui333
force-pushed
the
bump-openimageio-3.2.1.0
branch
from
October 1, 2026 12:28
5b02e05 to
9323400
Compare
Signed-off-by: Rui Chen <rui@chenrui.dev>
Signed-off-by: Rui Chen <rui@chenrui.dev>
Signed-off-by: Rui Chen <rui@chenrui.dev>
chenrui333
force-pushed
the
bump-openimageio-3.2.1.0
branch
from
October 1, 2026 19:00
9323400 to
c1a849c
Compare
botantony
approved these changes
Oct 2, 2026
Contributor
|
🤖 An automated task has requested bottles to be published to this PR. Caution Please do not push to this PR branch before the bottle commits have been pushed, as this results in a state that is difficult to recover from. If you need to resolve a merge conflict, please use a merge commit. Do not force-push to this PR branch. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Created by
brew bumpCreated with
brew bump-formula-pr.Details
release notes
ImageBufAlgo::flip_diff()andoiiotool --flipdiff.staandardized names throughout, support for CICF codes in file formats
that allow them, better ICC profile R/W support.
new oiiotool commands for adding and extracting thumbnails.
format readers against corrupted or malicious image file input.
by defalt.
compatible with OpenImageIO 3.1.
ABI backwards-compatibility -- NO CHANGE
Unlike previous yearly releases. OpenImageIO 3.2 is 100% backward compatible
with 3.1 releases in its API and also ABI / link compatibility. There may be
new functionality added, but any API call supported by 3.1 still exists and is
link compatible.
This means, for example, that if you are making a large appication that
currently embeds OpenImageIO 3.1 and exposes its APIs to user-written dynamic
plugins/modules (so that they can make calls to the built-in OIIO), your app
can upgrade to OpenImageIO 3.2 without losing compatibility with those plugins
-- all the link symbols that existed before continue to exist with the same
call signatures.
New minimum dependencies and compatibility changes:
USE_SIMD=sse4.2) instead of inheriting the compiler default (often plain SSE2), so OIIO's SSE4 fast paths are used out of the box. Every x86-64 CPU since 2008 has SSE4.2. UseUSE_SIMD=0to disable SIMD orUSE_SIMD=sse2for the old behavior.USE_SIMDis also now architecture-aware, so x86 tokens no longer leak into ARM builds. #5411 (3.2.0.3)-DOIIO_PYTHON_BINDINGS_BACKEND=pybind11to keep the old backend. #5430 (3.2.0.3)⛰️ New features and public API changes:
lj2k(lossy, JPEG2000-based) andzstdOpenEXR compression modes, when OIIO is built with OpenEXR 3.5 or later. #5495 (by @QuantaDude / Abhirup Bhattacharyya) (3.2.0.5) #5520 (3.2.1.0)--flipdiffcomputes the FLIP perceptual difference between two images,prints statistics, and leaves the error map on the image stack for further
processing or saving. #5154 #5171 (by @lgritz / Larry Gritz) (3.2.0.1)
--nchannelsspecifies the number of output channels, for parity with maketx. #5198 (by @grdanny / Danny Greenstein) (3.2.0.3, 3.1.14.0)X,YorWxH,X,Yin addition to the X11-style+X+Yform). This affects--create,--crop,--cut,--fit,--fullsize,--origin,--originoffset,--paste,--pattern,--printstats,--resize. #5209 (3.2.0.3, 3.1.14.0)oiiotool --decorrstretchapplies a decorrelation stretch (see the explanation ofIBA::decorr_stretch()). #5478 (3.2.0.5) (@lgritz / Larry Gritz)--experimentalenables opt-in trial features not yet part of the stable API, signaling that such behaviors may change between releases. #5147 (3.2.0.1, 3.1.13.0)format('{}...', val, ...)applies standardstd::format/Python-style replacement fields (e.g.{},{:+},{:04d},{:.2f}) to the values that follow, so e.g.format('{:+}{:+}', 3, -4)returns"+3-4". #5481 (by @nafisab / Nafisa Baker) #5486 (3.2.0.5)whotkey! #5480 (by @nshelton / Nick Shelton) (3.2.0.5)iv --missing-pixels {tolerate,strict}selects the behavior from the command line. #5463 (by @linsen458-spec / Ethan Lin) (3.2.0.5)-o outfilefor output file designation, for parity with oiiotool syntax. #5173 (3.2.0.3, 3.1.14.0)ImageBufAlgo::FLIP_diff()computes the FLIP (perceptual Imagedifference Predictor) metric between two LDR or HDR images. The result is
a single-channel float image with per-pixel FLIP error in [0,1]. A
FLIPResultsstruct returns mean error, max error, and location. Theoptional
colormapkwarg applies a false-color map to the result.FLIP_ppd()helper computes pixels-per-degree for a given display setup.Python bindings and
oiiotool --flipdiffare also provided.#5154 #5171 #5331 (3.2.0.1)
ImageBuf::localpixels_as_[writable_]byte_image_span#5011 (3.2.0.0, 3.1.10.0)IBA::decorr_stretch()applies a decorrelation stretch, which exaggerates subtle color variation in images whose channels are highly correlated (hazy aerial photographs, rock faces, faded pigments), with optional percentile-based contrast stretch and a choice of covariance or correlation matrix mode. #5478 (3.2.0.5) (@lgritz / Larry Gritz)README.md/SPEC.mdin the testsuite entry for design details. #5228 (by @aconty / Alejandro Conty) (3.2.0.3, 3.1.16.0)limits:resolution(default: 1048576) caps the maximum number of pixels along any single image dimension.ImageInput::check_openrejects files exceeding it. This complementslimits:imagesize_MBto catch corrupt headers that are tiny in one dimension but absurdly large in another, which can defeat the total-pixel-memory check. #5297 (3.2.0.3, 3.1.16.0)isData()API method to query if a color space is a data space; fix PythonisColorSpaceLinear(). #5191 (3.2.0.3, 3.1.14.0)ImageSpec::size_t_safe()andImageSpec::valid_tile_range()are now annotatedOIIO_NODISCARDto warn callers not to ignore their return values. #5218 (by @zoomhunter2010 / Hunter) (3.2.0.3)merge_deep_pixels()'s srcpixel parameter toint64_t, change its return type, and addOIIO_NODISCARD_ERROR. #5252 #5253 (by @luna-y-kim / Luna Kim) (3.2.0.3, 3.1.15.0).exrfiles use ACES2065-1 primaries). #5194 (3.2.0.3, 3.1.14.0)g24_rec709_sceneinterop ID (from the CIF texture color space recommendation 1.1) to PNG write, TGA, and RLA for consistency with PNG read and DPX; also fix TGA/RLA writingg22_rec709/g18_rec709without the_scenesuffix. #5391 (by @brechtvl / Brecht Van Lommel)ColorConfig::isColorSpaceActive()to test activity. Inactive spaces remain hidden fromiv's UI. #5387 (by @brechtvl / Brecht Van Lommel)srgb_rec709_displayis now a built-in color space alongsidesrgb_rec709_scene, so ite's available even with an OCIO config that doesn't define it; the built-insRGBname remains an alias ofsrgb_rec709_scene. #5396 (by @brechtvl / Brecht Van Lommel)ImageSpechelpersis_colorspace_srgb(),get_colorspace_rec709_gamma(),get_colorspace_icc_profile(), andget_colorspace_cicp()replace logic each writer previously open-coded, and writing gamma metadata from an interop ID now works for display interop IDs too, not just scene ones. #5390 (by @brechtvl / Brecht Van Lommel) (3.2.0.3)oiiotool --ociodisplayto an HDR or wide-gamut display space. #4971 (by @brechtvl / Brecht Van Lommel) (3.2.0.3)--thumbnail-get(and-i:get_thumbnail=1) and--thumbnail-setcommands to extract and attach embedded thumbnails (for those formats that support them). #5236 (by @jinhgkim / Jinnie Kim) (3.2.0.3, 3.1.16.0)previewattribute (thumbnail) per subimage, exposing a latentImageRecbug since EXR was the first multi-subimage format to support thumbnails. #5374 (by @jinhgkim / Jinnie Kim)🚀 Performance improvements
ImageBufAlgo::resampleandoiiotool --resampleimprovements to speed up 20x or more #4993 (3.2.0.0, 3.1.10.0)ImageBufAlgo::resample()andoiiotool --resampleprecompute the destination-to-source pixel mapping into per-axis tables instead of recomputing it per pixel, roughly 2-3x faster for the common in-memory cases (nearest and bilinear). Also fixes nearest-mode resample incorrectly routing through the always-bilinear Highway path. #5395 #5393 (by @wingfiring / Jackson Sun) (3.2.0.3)🐛 Fixes and feature enhancements
sort(); change int pixel toint64_t. #5241 (by @luna-y-kim / Luna Kim) (3.2.0.3, 3.1.15.0)--hash; fix return code when a file could not be read #5168 (3.2.0.1, 3.1.13.0)m_pixels_valid(andm_spec_valid) were set true as soon as the buffer/spec were allocated, before being fully populated, so a lock-free reader on another thread could observe the flag true and read stale or empty data. The flags (andm_pixels_read) are now set only once their data is fully populated, and made atomic so lock-free readers get a proper memory barrier. #5325 (3.2.0.3, 3.1.16.0)IBA::reorient()bug: a stray flag reset that immediately undidm_badfile = true, a redundantvalidate_spec()call inorientation()(already called byspec()), and an unreachable condition incopy(). #5353 (by @luna-y-kim / Luna Kim) (3.2.0.3)compare_Yee()accessed the wrong channel #4976 (by @pmady / Pavan Madduri) (3.2.0.0)fillholes_pushpull()#5105 (3.2.0.1, 3.1.12.0, 3.0.17.0)ImageBuf::ConstIteratorread errors in the orientation functions (flip, flop, rotate90/180/270, transpose), previously silently ignored. #5355 (by @luna-y-kim / Luna Kim) (3.2.0.3, 3.1.17.0)reorient()had orientations 5 and 7 swapped (transverse and transpose). #5350 (by @luna-y-kim / Luna Kim)ImageBufAlgo::make_texture()now honors "maketx:threads" hint #5014 (3.2.0.0, 3.1.10.0)close()were called) whenopen()fails, clarifying and enforcing a previously ambiguous contract. #5398ImageInput::check_compression_ratio()so it can be reused uniformly by other format readers. #5328 (3.2.0.3, 3.1.16.0)check_open()andcheck_compression_ratio()consistently across the format readers that previously lacked them (cineon, dds, dpx, fits, gif, hdr, heif, ico, iff, jpeg, null, openexr, png, pnm, rla, sgi, softimage, webp, zfile), so a small malformed file can't drive a large pixel allocation before any pixel data is read; also add acheck_open()validity test for non-negative, non-oversized tile sizes, and a batch of new decompression-bomb/extent regression tests and fuzz corpora. #5342 (3.2.0.3, 3.1.17.0)thumbnail_*metadata to formats that can't hold a thumbnail;iconvertwas leaking these attributes from a thumbnail-capable source into the output spec even when the destination format doesn't support thumbnails (oiiotoolalready stripped them). The stripping now lives inImageOutput::check_open(). #5357 (by @jinhgkim / Jinnie Kim) (3.2.0.3, 3.1.17.0)ImageSpec::default_channel_names()now validatesnchannelsbefore thereserve()-driven allocation it performs. #5368 (3.2.0.3, 3.1.17.0)get_string_attribute()now correctly converts non-string attributes to string (previously it only found attributes already stored as strings) #5161 (3.2.0.1, 3.1.13.0, 3.0.18.0)--buildinfomisreported platform on MSVS #5027 (3.2.0.0, 3.1.11.0)-d SUBIMAGENAME.*didn't work properly #5048 (3.2.0.0, 3.1.11.0)oiiotool --compressiondoes expression substitution #5055 (3.2.0.0, 3.1.11.0)-i:ch=and other related cleanup #5056 (3.2.0.1, 3.1.12.0)--autoccis used alongside explicit color space names. #5192 (3.2.0.3, 3.1.14.0)ImageSpecof a failed read. #5377 (3.2.0.3, 3.1.17.0)iinfoalready reported. #5380 (3.2.0.3, 3.1.17.0)Strutil::format(). #5401 (3.2.0.3, 3.1.17.0)memcpy. #5417 (3.2.0.3, 3.1.17.0)<rdf:Description ... />elements (previously only</rdf:Description>end tags were recognized) #5106 (3.2.0.1, 3.1.13.0, 3.0.18.0)encode_xmp()for aliased metadata names such asIPTC:Rating/xmp:Rating, which were silently dropped from the XMP write path. #5108 (by @Qi-fly) (3.2.0.2, 3.1.17.0)check_compression_ratio()rejects a tiny file with implausibly high resolutions; negate the height field in 64-bit to avoid signed-overflow UB when the attacker-controlled height isINT32_MIN. #5371 (3.2.0.3, 3.1.17.0)init(). CVE-2026-59181 #5250 (3.2.0.3, 3.1.15.0, 3.0.20.0)sizeof(uint32_t)to prevent a stack overflow. #5287 (3.2.0.3)readimg_scanlines()/readimg_tiles(), previously ignored, so a failed or short decode is no longer copied out of the buffer as if it had succeeded. #5402DicomImage::getInterData()/getOutputData(), which can return null when a corrupt frame fails to decode. #5364ImageSpec; addcheck_open()/check_compression_ratio()at open so a tiny file can't declare a gigabyte frame; and stop feeding an uninitializedAVPackettoav_read_frame()and looping forever on a bad stream. #5406 (3.2.0.3, 3.1.17.0)int. #5497 (3.2.0.5).hdrfiles: the rare Hasselblad raw extension collides with Radiance HDR, and withEMBEDPLUGINS=0giving the raw reader first crack at.hdrfiles, older libraw versions would crash trying to open a Radiance file. Remove the rarely-used.hdrext...View the full release notes at https://github.com/AcademySoftwareFoundation/OpenImageIO/releases/tag/v3.2.1.0.