We are currently working on a redesign of the File Output node, but the final design is still not clear to us. So we are looking for feedback.
Multi-Layer vs Single Image
The node has two modes of working. It can either save the inputs as layers in a multi-layer EXR file or save each input in its own image file, like PNG. This introduces a number of problems.
Distinction
Problem
The distinction between the two modes is not very clear, because the mode change depending on the file format. If OpenEXR Multi-Layer is chosen, then the node acts in Multi-Layer mode, but for any other format, the node acts in single image mode.
To make matters worse, if Use Node Format is disabled for one of the inputs. The input’s file format still lists OpenEXR Multi-Layer, but it silently just behaves like the non-multi-layer EXR format.
Solution
Our proposed solution so far is to introduce a “Media Type” enum that lets you choose between Single Image and Multi-Layer.
If Single Image is chosen, then OpenEXR Multi-Layer will not be in the file format list.
Like-wise, if Multi-Layer Image, only OpenEXR Multi-Layer will be in the file format list.
Which I guess we can hide since it is the only format for now until we get more multi-layer formats if it ever happens.
It should be noted that this UI is shared between the Render Output and Save Image operators. So they too will likely get the “Media Type” enum. However, for the Render Output, an additional Movie media type will be available.
Base Path
The node has a “Base Path” option that is supposed to specify the path of the the files that will be written.
Problem
The Base Path option is a quite overloaded option and its meaning changes based on the node options.
- Sometimes it specifies the directory only, and the name of the file is specified by the name of the input. This is for single image files.
- Sometimes it specifies both the directory and the file name. This is for Multi-Layer files.
- Sometimes it specifies both the directory and a prefix for the file name, while the full file name is completed based on the name of the input. This is for single image files.
So users might not really be sure what the final name of file(s) will be.
Solution
The solution is two folds. First, we split the Base Path option into two options:
- Directory: Which only specifies the directory where the files will be written.
- File Name/File Name Prefix: Which specifies the file name for Multi-Layer images or the file name prefix for single images.
Second, we draw in the UI the final path of the file that will be written if a render was performed. But has a few complications. Mainly, the file output node might write multiple files if multi-view is enabled, so we will have to list multiple paths for each file that will be written.
Furthermore, the file path might be different depending on whether we are doing a single render or an animation render (As we will later see). So will we have to list both?
Finally, since Blender recently got variable substitutions. We might not be able to substitute every variable since it might depend on information only available during rendering.
Socket Names
Socket names define layer names in Multi-Layer mode and file names in single image mode.
Problem
Currently, the node keeps a separate name database for multi-layer and single image modes. So if you add a bunch of inputs and name them as you like, then you change to Multi-Layer mode, your names will revert back to their default values and you loose what you renamed, which can be frustrating.
Solution
We unify socket names to be consistent in the two modes, so changing the mode will have no effect on the socket names. However, if we do that, we will have to impose restrictions on what the name can be. For instance, file names can’t include special characters like > < " : and so on, so your EXR layer names can’t have those characters as well.
External Factors
Options like File Extensions in the scene Render Output panel affects the File Output node.
Problem
The fact that an option in scene render output settings affect the File Output is not at all clear.
Solution
The node should be self contained, and we should move such options to the node itself for clarity.
Frame Number
The File Output node always appends the frame number even if the render is not an animation.
Problem
Some people use the File Output node to do a single render, and they don’t like the fact that the frame number is always appended.
Solution
We don’t append the frame number unless the user is doing an animation render. However, we heared concerns that users might want to “replace a bad frame” after an animation render, so they do a single render in that frame expecting frame numbers. Otherwise, you will have to render a an animation with a single frame range.
Relevant tasks and discussions:










