Will do,
Cheers

On Wed, 26 Feb 2020 at 6:25 PM, Larry Gritz <l...@larrygritz.com> wrote:

> That's pretty old, yeah. At least a couple years. Try the current
> supported release, 2.1, and see if that makes things better.
>
>
>
> On Feb 25, 2020, at 11:23 PM, Orion Holder-Monk <orionholderm...@gmail.com>
> wrote:
>
> Ah, might be the release I’m on then. I’m on 1.8. Probably a good time to
> just fully update.
>
> On Wed, 26 Feb 2020 at 6:21 PM, Larry Gritz <l...@larrygritz.com> wrote:
>
>> I'm not seeing that behavior. Using the file you originally attached,
>>
>> $ oiiotool -info -v utils_test_input.1001.exr
>> Reading utils_test_input.1001.exr
>> utils_test_input.1001.exr : 2163 x 1141, 4 channel, half openexr
>>     7 subimages: 2163x1141 [h,h,h,h], 2163x1141 [f], 2163x1141 [f,f,f],
>> 2163x1141 [h,h,h], 2163x1141 [h,h,h], 2163x1141 [h,h,h], 2163x1141 [h,h,h]
>> ...
>>
>> $ oiiotool -a --autotrim utils_test_input.1001.exr -o out.exr
>> $ iinfo -v out.exr
>> out.exr : 2163 x 1141, 4 channel, half openexr
>>     7 subimages: 2163x1141 [h,h,h,h], 2163x1141 [f], 2163x1141 [f,f,f],
>> 2163x1141 [h,h,h], 2163x1141 [h,h,h], 2163x1141 [h,h,h], 2163x1141 [h,h,h]
>>
>>
>> So I'm getting the original set of data types in the output subimages as
>> well.
>> I tested against the current master. Haven't looked at old releases yet.
>>
>>
>>
>> On Feb 25, 2020, at 11:08 PM, Orion Holder-Monk <
>> orionholderm...@gmail.com> wrote:
>>
>> So, if you run  oiiotool -i multipart_input.exr -a --autotrim -o
>> multipart_output.exr with that exr and inspect the normals channel in both
>> images you will see that the input.exr pixel data format is float, whereas
>> the output becomes half.
>> Basically all the subimages in this case are being converted to 'half'
>> even if they were originally 'float'.
>>
>> On Wed, Feb 26, 2020 at 7:04 AM Larry Gritz <l...@larrygritz.com> wrote:
>>
>>> What do you mean by change data format?
>>>
>>>
>>> On Feb 25, 2020, at 10:58 PM, Orion Holder-Monk <
>>> orionholderm...@gmail.com> wrote:
>>>
>>> Thanks Larry,
>>>
>>> That all looks good for the behavior of the autotrim argument. In my
>>> case, I *may* actually get away with some of these subimages being
>>> cropped to the first images non-zero pixels (although obviously not
>>> completely desirable), but having them change data format through the
>>> oiiotool is actually what causes issues for me. Is that the expected
>>> behavior with the tool? Fine if it is, as I can work around that and is
>>> more out of interest.
>>>
>>> Apart from that, thanks again, really appreciate it.
>>> Cheers
>>> Orion
>>>
>>>
>>> On Wed, 26 Feb 2020 at 5:23 AM, Larry Gritz <l...@larrygritz.com> wrote:
>>>
>>>> Proposed autotrim fix here:
>>>> https://github.com/OpenImageIO/oiio/pull/2497
>>>>
>>>> For now, I'm keeping the --trim and --autotrim behavior to only trim to
>>>> the union of nonzero regions of all the parts, since several apps that may
>>>> read the exrs later have trouble with differing data windows per pert.
>>>>
>>>> It is possible for me to make an optional argument to --trim (off by
>>>> default) that would allow it to make separate, tightest possible data
>>>> windows, on a per-part basis. This would only be safe to do if you were
>>>> absolutely sure that the only readers consuming the resulting files were ok
>>>> with it. If this is important to anybody, let me know and I can add this
>>>> feature.
>>>>
>>>> -- lg
>>>>
>>>>
>>>> On Feb 24, 2020, at 2:52 PM, Jonathan Egstad <jegs...@earthlink.net>
>>>> wrote:
>>>>
>>>> For reference here’s the check code in OpenEXR which verifies matching
>>>> displayWindows when you author a MultiPart file:
>>>>
>>>> MultiPartOutputFile::Data::checkSharedAttributesValues() line 408:
>>>>
>>>> https://github.com/AcademySoftwareFoundation/openexr/blob/master/OpenEXR/IlmImf/ImfMultiPartOutputFile.cpp
>>>>
>>>> As others have said there’s no similar restriction on dataWindows
>>>> matching and it’s the apps reading MultiPart exrs that choke.
>>>>
>>>> -j
>>>>
>>>> On Feb 24, 2020, at 1:13 PM, Orion Holder-Monk <
>>>> orionholderm...@gmail.com> wrote:
>>>>
>>>> Thanks for the responses. Appreciate the insight.
>>>>
>>>> For now with the python code, I will look to implement in a similar way
>>>> to the trim, and possibly move similar sized images into their
>>>> own multipart image.
>>>> I can also post it to the Foundry and Autodesk and see what they say,
>>>> but also check some other apps I use gets tripped up by the different
>>>> display windows.
>>>>
>>>> Thanks again,
>>>> Orion
>>>>
>>>> On Tue, 25 Feb 2020 at 8:00 AM, Larry Gritz <l...@larrygritz.com> wrote:
>>>> It's entirely possible that the reason I implemented oiiotool --trim as
>>>> the union across parts is because I knew or discovered at the time that
>>>> there were widely-used apps out there that would get gummed up if the
>>>> windows didn't match on all the parts.
>>>>
>>>> The --autotrim issue of only considering the first image is separate
>>>> and is a true bug, I will fix that right away.
>>>>
>>>> -- lg
>>>>
>>>>
>>>> On Feb 24, 2020, at 12:55 PM, Marco Meyer <m...@marcomeyer-vfx.de>
>>>> wrote:
>>>>
>>>> Had a silimar observation when trying creating autotrimmed multiparts
>>>> and ultimately stuck with creating a union data window for all subimages so
>>>> every app is happy with it.
>>>>
>>>> An interesting thing I noticed was that Beachball multipart example
>>>> from openexr (
>>>> https://github.com/AcademySoftwareFoundation/openexr-images/tree/master/Beachball
>>>> )
>>>> also can't be read in nuke and throws the 'Reader did not set bounding
>>>> box' error, because it includes one subimage "whitebarmask.mask" that has a
>>>> different data window.
>>>> So I while I think openexr itself encourages datawindows per subimage,
>>>> some of the apps unfortunately don't know how to handle it.
>>>>
>>>> One could assume the app developers use the official exr examples for
>>>> the most basic compatibility testing... but here we are :)
>>>>
>>>>
>>>> On Sun, 2020-02-23 at 23:09 -0800, Larry Gritz wrote:
>>>>
>>>> Aha, I see, I believe that oiiotool --autotrim sets the trim based on
>>>> the first subimage (which is definitely wrong and I will fix right away),
>>>> and --trim seems to trim all subimages to the union of the nonzero regions
>>>> of all subimages (suboptimal, see below).
>>>>
>>>> It seems as if my assumption on --trim was that the different parts
>>>> (what we call subimages) had to share the same data windows. In rereading
>>>> the openexr docs now, it looks like that is not the case. Does anybody more
>>>> familiar with OpenEXR want to comment?
>>>>
>>>> I'm really not sure what's up with RV and Nuke, though, but I wonder if
>>>> they, too, are assuming that the data window will always be the same for
>>>> all parts? (Is anybody from Autodesk or Foundry reading and can check?)
>>>>
>>>> Fixing --autotrim to work the same as --trim, rather than incorrectly
>>>> trim all parts to the nonzero portion of the first part, is a no-brainer.
>>>>
>>>> However, fixing --trim/--autotrim to trim each part individually... I
>>>> do worry that this might result in files that are unreadable by other apps.
>>>>
>>>> -- lg
>>>>
>>>>
>>>> On Feb 23, 2020, at 7:01 PM, Orion Holder-Monk <
>>>> orionholderm...@gmail.com> wrote:
>>>>
>>>> Hi Dev team
>>>>
>>>> I've just been trying to implement the auto-trim tool for multi-part
>>>> exrs from oiiotool in a python set of tools.
>>>> Reason I'm doing it is currently if I was to use oiiotool -i
>>>> multipart_input.exr -a --autotrim -o multipart_output.exr, it will change
>>>> all my parts to match the spec of the first part (so cropping to the first
>>>> images visible pixels and change the data format etc).
>>>>
>>>> My implementation (below) is not raising any errors from oiio, but what
>>>> happens is that I'm getting an 'incomplete image' warning in RV (although
>>>> can see each image correctly) and a 'Reader did not set bounding box' error
>>>> in Nuke.
>>>>
>>>> If I set the crop roi to be consistent for every part instead of unique
>>>> per part, it creates the image fine and no warnings come up.
>>>>
>>>> Any help or suggestions would be greatly appreciated. (and if there's a
>>>> simple oiiotool command that I could use as an alternative, please do say)
>>>> And in terms of build, I am using 1.8.7.3, but have tested with 2.1 as
>>>> well and get the same result.
>>>> The below code if ran as a file will run with `python autotrim.py
>>>> --input multipart_input.exr --output multipart_output.exr`
>>>> I've also attempted to attach an example file to run it on, but it may
>>>> be too big.
>>>> Thanks!
>>>> Orion
>>>>
>>>> Code below:
>>>>
>>>> import OpenImageIO as oiio
>>>> import argparse
>>>> # Current build is OpenImageIO-1.8.7.3
>>>>
>>>> parser = argparse.ArgumentParser(description='Autotrim multi-part exrs')
>>>> parser.add_argument('--input', default='', help='Input filepath')
>>>> parser.add_argument('--output', default='', help='Output filepath')
>>>> args = parser.parse_args()
>>>>
>>>> def write_multipart_exr(out_image_path, buf_list, spec_list):
>>>>     """
>>>>     With an ordered list of ImageBuf's and correlating list of spec's
>>>> this
>>>>     will go through and write to the out_image_path.
>>>>     """
>>>>     out_img = oiio.ImageOutput.create(out_image_path)
>>>>     out_img.open(out_image_path, tuple(spec_list))
>>>>
>>>>     for s in range(len(spec_list)):
>>>>         img_buf = buf_list[s]
>>>>         if s > 0:
>>>>             append_success = out_img.open(out_image_path, spec_list[s],
>>>> oiio.ImageOutputOpenMode.AppendSubimage) #"AppendSubImage" for 2.1
>>>>             if not append_success: print out_img.geterror()
>>>>
>>>>         pixels = img_buf.get_pixels(oiio.FLOAT)
>>>>
>>>>         write_result = out_img.write_image(pixels)
>>>>         if not write_result: print out_img.geterror()
>>>>     out_img.close()
>>>>
>>>> def _autotrim_buffer(image_buffer):
>>>>     new_spec = image_buffer.nativespec()
>>>>
>>>>     roi = oiio.get_roi(new_spec)
>>>>
>>>>     # If all the parts get given the same ROI to crop, the exr works
>>>> fine
>>>>     new_roi = oiio.ImageBufAlgo.nonzero_region(image_buffer, roi)
>>>>
>>>>     if new_roi.npixels == 0:
>>>>         new_roi = oiio.ROI(roi.xbegin, roi.xbegin + 1, roi.ybegin,
>>>> roi.ybegin + 1, roi.zbegin, roi.zbegin + 1,
>>>>                            roi.chbegin, roi.chend)
>>>>
>>>>     new_buffer = oiio.ImageBuf(new_spec)
>>>>
>>>>     result = oiio.ImageBufAlgo.crop(new_buffer, image_buffer, new_roi)
>>>>
>>>>     if not result: raise OpenImageIOException(new_buffer.geterror())
>>>>     return new_buffer
>>>>
>>>> def autotrim(image_path, output_image_path):
>>>>     image_path = str(image_path)
>>>>     output_image_path = str(output_image_path)
>>>>     image_buffer = oiio.ImageBuf(image_path)
>>>>
>>>>     buffer_list = []
>>>>     spec_list = []
>>>>     nsubimages = image_buffer.nsubimages
>>>>     for n in range(nsubimages):
>>>>         img_buff = oiio.ImageBuf(image_path, n, 0)
>>>>
>>>>         new_buff = _autotrim_buffer(img_buff)
>>>>
>>>>         spec = new_buff.spec()
>>>>
>>>>         buffer_list.append(new_buff)
>>>>
>>>>         spec_list.append(spec)
>>>>
>>>>     write_multipart_exr(output_image_path, buffer_list, spec_list)
>>>>
>>>> autotrim(args.input, args.output)
>>>>
>>>> Cheers!
>>>> Orion
>>>>
>>>> This e-mail and any attachments are intended only for use by the
>>>> addressee(s) named herein and may contain confidential information. If you
>>>> are not the intended recipient of this e-mail, you are hereby notified any
>>>> dissemination, distribution or copying of this email and any attachments is
>>>> strictly prohibited. If you receive this email in error, please immediately
>>>> notify the sender by return email and permanently delete the original, any
>>>> copy and any printout thereof. The integrity and security of e-mail
>>>> cannot be guaranteed.
>>>>
>>>> <utils_test_input.1001.exr>_______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>>>
>>>> --
>>>> Larry Gritz
>>>> l...@larrygritz.com
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>>>
>>>> --
>>>> Larry Gritz
>>>> l...@larrygritz.com
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>>>
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>>>
>>>> --
>>>> Larry Gritz
>>>> l...@larrygritz.com
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Oiio-dev mailing list
>>>> Oiio-dev@lists.openimageio.org
>>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>>
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> Oiio-dev@lists.openimageio.org
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>
>>>
>>> --
>>> Larry Gritz
>>> l...@larrygritz.com
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> Oiio-dev@lists.openimageio.org
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>>
>> _______________________________________________
>> Oiio-dev mailing list
>> Oiio-dev@lists.openimageio.org
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>
>>
>> --
>> Larry Gritz
>> l...@larrygritz.com
>>
>>
>>
>>
>> _______________________________________________
>> Oiio-dev mailing list
>> Oiio-dev@lists.openimageio.org
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>>
> _______________________________________________
> Oiio-dev mailing list
> Oiio-dev@lists.openimageio.org
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
>
> --
> Larry Gritz
> l...@larrygritz.com
>
>
>
>
> _______________________________________________
> Oiio-dev mailing list
> Oiio-dev@lists.openimageio.org
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
>
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to