Working on setting up render output of channels rendering image sequences to make use in various compositing packages.
The desired output would be to have the rendered sequences in separate folders, with the image sequence in this format.
<render_directory>/<pass_name>/<primary_name>_<pass_name>.#####.
I have discovered that setting up a compositing node group is what gives you the control.
Setting up separate File Output nodes for each does the trick also.
However, there seems to be no way to keep it from suffixing the pass on the filename.
<primary_name>_<pass_name>.#####.
creates an output of
<primary_name>_<pass_name>.#####..
or
<primary_name>_<pass_name>.#####.
creates
<primary_name>_<pass_name>.#####...
There seems to be no way to control your output as desired, and forced to having the suffixed.
I do understand the functionality, the built in way to make sure your channels are being named.
However often this is not desired syntax some pipelines will allow.
Is there a way to control the “socket” name? Or remove it to allow the user to specify the output naming completely?
I am familiar with this page.
The issue is that the output node forces the socket name into the output as a suffix.
At one point I thought I’d got it working by having the path syntax end in a period. However it was still adding .. regardless.
wouldn’t it be easier to badge rename them outside of Blender? Pretty sure any search engine AI can help tailor such a Python script. It can also generate your desired subdir structure and copy the files accordingly. Using tkinter gives you a gui with preview. AI are reasonably good at these tasks and you seem to be able to describe the culprit.
Thanks @MartinZ , but I do have that and is wonderful.
The issues is that the socket name, regardless of what it is named, is forced as a suffix, and there doesn’t seem to be a way to move it before the frame number, or remove it so you can name the image sequence prefix as desired.
Yes, it really does seem like much nicer way to add in the channel name to know what image sequence it is.
It just seems most image sequences have the frame numbers on the end.
Here is an example of the frame naming, where the socket plugged in is “Image”.
Yes, of course, rename “Image” to “rgba” possibly, but then the image sequence would be. M:\IXP\renders\ImagePrefix_rgba.00132.rgba.png
The desired output would be.
M:\IXP\renders\ImagePrefix_rgba.00132.png
It just doesn’t seem to be possible with the File Output node in the compositor.
Yeah… it’s a bit of a tangled mess in the naming settings. I think there must be some reasons that make some things convenient like this. I have no idea what they are though
I’ll try that again (Adding the frame padding hashes in the socket name.
I believe I had tried that, but it simply made the output literally ImagePrefix_socket.#####.ext
It’s interesting… I have never noticed that if you wanted to render all view layers all at once and save them, you would have to manually set each one of them up in the compositor.I am not sure even the add-ons can take care of that since you have to have a separate Render Layers node for each one…
I am lucky I never need this myself, but if you have many view layers, you got to manually set them all up. …or write a script.
Anyway, I don’t think add-ons are very helpful here in this particular situation. It renders the numbering fine if it’s set in the socket names:
It’s not hard to manipulate them with Python once you find out that the sockets are stored as file_output_items. Like for example if you wanted to make sure the name is taken from connected socket, replace spaces with “_” and add “.##” to all of them:
import bpy
for area in bpy.context.screen.areas:
if area.type != 'NODE_EDITOR':
continue
node_tree = area.spaces.active.node_tree
node = node_tree.nodes.active
if node == None or node.type != 'OUTPUT_FILE':
print("Select File Output node")
continue
for i, input_socket in enumerate(node.inputs):
if input_socket.is_linked:
name = input_socket.links[0].from_socket.name
name = name.replace(" ", "_") + ".##"
node.file_output_items[i].name = name
You are so correct.
And yes, packing everything into one is over the top and kinda insane.
Experimenting with the multi-layer I can see this possibility, e.g. an EXR sequence packing an entire shot of everything in it. Having that possibility is really powerful, and with the layers/parts it is possible, IF you can pack the channels in as such.
UGH. apologies. was replying incorrectly to the incorrect post. This is/was for another.
When I occasionally need to save and use a separated Render Pass image, I don’t look for solutions like this one.
Because changing the filename after rendering is the easier method.
If that doesn’t work, try using a free program to rename and manage files
One useful check before rendering a whole sequence: File Output node has an Output paths panel that shows the final filename for each input.You can test the naming there and catch an extra socket suffix before it creates hundreds of files
@GreyVertex Yes. this is something I love about the File Output node, giving the preview(s). This is how this caveat was discovered and tested.
@oo_1942 Of course you can add a post render script, additional step or separate tool. Just keep in mind that is an additional tool/step/point-of-failure to add, which could be solved by giving the ability to have this control.
This is a feature request due to what seems to be a very common method of saving render channels in a shared production pipeline. /render_path/pass/ImagePrefix_pass_v001.####.exr
Yes, the pass as a suffix is completely workable. /render_path/pass/ImagePrefix_v001.####.pass.exr
Having run into several pipelines that are very strict, and would break if the output given to it wasn’t correct, hoping to remove any gotchas.
Needing to add an additional step or external tool is not ideal for a pipeline if it could be avoided.
Rhetorical Progress Update:
Successfully wrote some functions to automatically build out separate File Output nodes, name, connect, settings, output paths and prefixes.
And the output doesn’t work.
Using Blackmagic Fusion for compositing, with the pass name after the frame numbers, it doesn’t seem to recognize that they are image sequences.
I’ve never experienced it adding the pass name personally. I might be misunderstanding the question though. This is what I’m getting in 5.3 Alpha. I wonder if it might be because you have a dot at the end (which blender 5.3 no longer allows, it changes it immediately to an underscore)