{"id":209,"date":"2024-06-22T09:52:50","date_gmt":"2024-06-22T09:52:50","guid":{"rendered":"https:\/\/www.artixels.com\/wp1_stage\/?p=209"},"modified":"2025-04-23T15:23:45","modified_gmt":"2025-04-23T15:23:45","slug":"xray-into-openexr-metadata-and-alembic","status":"publish","type":"post","link":"https:\/\/www.artixels.com\/wp1\/2024\/06\/22\/xray-into-openexr-metadata-and-alembic\/","title":{"rendered":"Dive into OpenEXR metadata and Alembic"},"content":{"rendered":"\n<p class=\"has-small-font-size wp-block-paragraph\">Modern VFX works are definitely getting more and more complicated in terms of the amount of data and the required knowledge of how to interpret these data.  Here I am sharing two examples of tools that are designed to look deeply at the details of such production data.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">The first example tool is designed to examine OpenEXR metadata. It is quite common that digital camera generated metadata such as body tilt and roll, lenses focal length and focus distance etc. could be easily passed to vfx studios through the use of metadata in an OpenEXR sequence. ACES standard OpenEXR files also use metadata entries to highlight an AP0-colorspace plate and its lossless compression scheme. As a result, a dedicated tool just for examining OpenEXR metadata is pretty essential for any modern VFX studios. I developed a prototype of such a metadata viewer which can be invoked directly by right-clicking any OpenEXR file in a file explorer alike. the app (see below) can run as a &#8216;trendy again&#8217; text-based UI or inside a browser (thanks to the awesome <a href=\"https:\/\/github.com\/Textualize\/textual\">Textual<\/a> python library). More importantly, this tool supports reading metadata from a Multi-Part OpenEXR file, this is important because for example Nuke (at the moment of writing) cannot read metadata from Part #1 and above.<\/p>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">However, metadata in an OpenEXR file can become unreliable quickly because most apps leave certain critical metadata unchanged after processing.  One such example is the ACES AP0 metadata being passed into the pipeline even when the data have been converted to another colorspace say ACEScg and now even compressed !  Well, this can take another writing just to discuss the risk of metdata interpretation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1002\" height=\"737\" src=\"https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/exr_meta_MP.png\" alt=\"\" class=\"wp-image-211\" srcset=\"https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/exr_meta_MP.png 1002w, https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/exr_meta_MP-300x221.png 300w, https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/exr_meta_MP-768x565.png 768w\" sizes=\"auto, (max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">The second one is for Alembic caches. The purpose of alembic cache is to allow different studios and hence different software\/pratcice to exchange animation data. However, there are times certain subtle attributes could be exported in many possible ways (there is no correct or wrong here, it is simply because different parties interpret them differently). Because of this, artists can easily become helpless when they expect a smooth data trasnfer from App A to B but failed.  After expericencing multiple nightmares of Alembic file import\/export incompatibilities of some subtle attributes, I decided to prototype an app (also as an exercise to understand the technical details of alembic cache). The goal of this app (named &#8216;abx&#8217;, see below) is to allow people to look deep inside the content of an Alembic cache such that they could find how a particular attribute is exported such that they can make sure the importing party may ingest them correctly through scripts or a custom filter\/bridge alike.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"662\" src=\"https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/abx-1024x662.png\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/abx-1024x662.png 1024w, https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/abx-300x194.png 300w, https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/abx-768x496.png 768w, https:\/\/www.artixels.com\/wp1\/wp-content\/uploads\/2025\/04\/abx.png 1416w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Modern VFX works are definitely getting more and more complicated in terms of the amount of data and the required knowledge of how to interpret these data. Here I am sharing two examples of tools that are designed to look deeply at the details of such production data. The first example tool is designed to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":210,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,9,7],"tags":[],"class_list":["post-209","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pin","category-pipeline","category-vfx"],"_links":{"self":[{"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/posts\/209","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/comments?post=209"}],"version-history":[{"count":3,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/posts\/209\/revisions"}],"predecessor-version":[{"id":253,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/posts\/209\/revisions\/253"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/media\/210"}],"wp:attachment":[{"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/media?parent=209"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/categories?post=209"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.artixels.com\/wp1\/wp-json\/wp\/v2\/tags?post=209"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}