I have set up our pipeline to auto pickup versions in the filename and conform to our file name conventions for 3d renders (arnold/redshift, maya houdini)
Since we need Single Layer OpenEXR files, i name the slot.path of the EXR accordingly to get the proper output file name.
As seen in the image.

Now comes the issue, float and vector connections are passing their info to the wrong EXR channel. The metadata of the exr channels is not recognized by nukes read node. Normal (vector) comes in an "X" "Y" and "Z" exr channel which is partially translated to disparity in nuke. Float values like Mist and Depth are coded into a "V" channel which is interpreted as motion by nuke.
Is there any way I can control the channel name Blender is writing to. By default it should always target RGBA in a singleLayer EXR. Otherwise its unpredictable behaviour.
OpenEXR Multilayer output all Channels/Layers are behaving correctly.
But in singleLayer EXR , utility passes are not getting written to the correct channel.
How can I add a Node or otherwise control which EXR channel the Info is written to. For Mist and Depth, a workaround is putting a "Mix Color" Node in-between the viewLayer AOV and the CompositorNodeOutputFile slots, changing its type from float (grey connection) to image (yellow connection) but this workaround is not working for the Normal pass.
This for sure must be a bug, normally the singleLayer OpenEXR information should stay in RGBA, or Z for the standard AOVs.
Also i tried to see if layer slot or file slots are wrong named, but they seem fine. I think its Blenders Type handling that messes up:
import bpy
# Get the compositor node tree
tree = bpy.context.scene.node_tree
# Ensure we're in the compositor context and nodes are used
if tree and bpy.context.scene.use_nodes:
selected_nodes = [node for node in tree.nodes if node.select]
if selected_nodes:
# You can loop or just grab the first selected one
selected_node = selected_nodes[0]
if isinstance(selected_node, bpy.types.CompositorNodeOutputFile):
selected_out_node = selected_node
print(f"Selected Output File Node found: {selected_out_node}")
else:
print("Selected node is not a CompositorNodeOutputFile.")
else:
print("No node is selected.")
else:
print("Compositor nodes not enabled or node tree is missing.")
for slot in selected_out_node.layer_slots:
print(f"layer slot: {slot.name}")
for slot in selected_out_node.file_slots:
print(f"file slot: {slot.path}")
>>>
layer slot: rgba
layer slot: z
layer slot: Mist
layer slot: Pworld
layer slot: Normal
layer slot: UV
file slot: previz_main.previz_mmr.p_main.dataRGBA.v025.
file slot: previz_main.previz_mmr.p_main.Depth.v025.
file slot: previz_main.previz_mmr.p_main.Mist.v025.
file slot: previz_main.previz_mmr.p_main.Position.v025.
file slot: previz_main.previz_mmr.p_main.Normal.v025.
file slot: previz_main.previz_mmr.p_main.UV.v025.
