ImageWriter
Writes image files to disk using OpenImageIO. All file types supported by OpenImageIO are supported by the ImageWriter.
user
Container for user-defined plugs. Nodes should never make their own plugs here, so users are free to do as they wish.
preTasks
Input connections to upstream nodes which must be executed before this node.
postTasks
Input connections to nodes which must be executed after this node, but which don’t need to be executed before downstream nodes.
task
Output connections to downstream nodes which must not be executed until after this node.
dispatcher
Container for custom plugs which dispatchers use to control their behaviour.
dispatcher.batchSize
Maximum number of frames to batch together when dispatching tasks.
If the node requires sequence execution batchSize
will be ignored.
dispatcher.immediate
Causes this node to be executed immediately upon dispatch, rather than have its execution be scheduled normally by the dispatcher. For instance, when using the LocalDispatcher, the node will be executed immediately in the dispatching process and not in a background process as usual.
When a node is made immediate, all upstream nodes are automatically considered to be immediate too, regardless of their settings.
in
The image to be written to disk.
fileName
The name of the file to be written. File sequences with arbitrary padding may be specified using the ‘#’ character as a placeholder for the frame numbers.
Supported file extensions : exr, sxr, mxr, tif, tiff, tx, env, sm, vsm, jpg, jpe, jpeg, jif, jfif, jfi, bmp, dib, cin, dds, dpx, fits, hdr, rgbe, ico, iff, z, jp2, j2k, j2c, null, nul, png, ppm, pgm, pbm, pnm, pfm, psd, pdd, psb, bay, bmq, cr2, crw, cs1, dc2, dcr, dng, erf, fff, k25, kdc, mdc, mos, mrw, nef, orf, pef, pxn, raf, raw, rdc, sr2, srf, x3f, arw, 3fr, cine, ia, kc2, mef, nrw, qtk, rw2, sti, rwl, srw, drf, dsc, ptx, cap, iiq, rwz, cr3, rla, sgi, rgb, rgba, bw, int, inta, pic, tga, tpic, term, zfile, osl, oso, oslgroup, oslbody
channels
The names of the channels to be written to the file. Names should be separated by spaces and may contain any of Gaffer’s standard wildcards.
colorSpace
The colour space of the output image, used to convert the input
image from the working space. The default behaviour is to automatically
determine the colorspace by calling the function registered with
ImageWriter::setDefaultColorSpaceFunction()
.
out
A pass-through of the input image.
layout
Controls where channels are placed in the file, including how they are named. “Single part” writes all channels to the same part ( all interleaved ). “Part per layer” writes a separate part for each layer, so they may be loaded independently for better performance, and is the default. “Part per view” is a compromise, where layers are not separated, but views are separated, so that stereo files can use independent data windows.
There is also the option to use a layout that matches Nuke’s default behaviour, but does not conform to the EXR specification. The Nuke presets match “Part per Layer”, “Part per View”, and “Single Part” respectively, but with the following deviations from the specification :
The layer name is omitted from the channel name
Custom channels from the main layer are placed in a part named other
The channel Z from the main layer is placed in a part named depth
The RGBA channels from secondary layers are renamed to red, green, blue, and alpha
When writing single part stereo, the view name comes before the layer name
You may also pick “custom”, and set up your own layout. This allows for things like a mixed layout that is partially EXR spec compliant, and partially Nuke. Or you could use a expression to group some layers together in the same part.
layout.partName
Specifies the name to be stored in EXR’s part name metadata.
If different channels are given different part names, then a multipart file is produced.
Special context variables available for setting layout plugs:
${imageWriter:viewName}
: The current view${imageWriter:channelName}
: The current channel name${imageWriter:layerName}
: The prefix of the channel name${imageWriter:baseName}
: The suffix of the channel name${imageWriter:standardPartName}
: Like the layerName, but set to “rgba” instead of empty for the main layer${imageWriter:nukeViewName}
: Like viewName, but set to “main” when there is no current view${imageWriter:nukeLayerName}
: Like layerName, but set to “depth” for “Z”, and “other” for custom channels of the main layer${imageWriter:nukeBaseName}
: Like baseName, but set to “red”, “green”, “blue”, “alpha” instead of RGBA for layers other than the main layer.${imageWriter:nukePartName}
: Like standardPartName, but set to “depth” for “Z”, and “other” for custom channels of the main layer${imageWriter:singlePartViewName}
: The current view, or “” if this is the first view. This should be used to compose channel names for single-part multi-view EXR files.
layout.channelName
Specifies the channel name to be given to EXR. To match the standard, this should just be exactly the Gaffer channel name. But some other software like Nuke omits the layer prefix, and assumes that the part name will be prefixed to the channel.
Special context variables available for setting layout plugs:
${imageWriter:viewName}
: The current view${imageWriter:channelName}
: The current channel name${imageWriter:layerName}
: The prefix of the channel name${imageWriter:baseName}
: The suffix of the channel name${imageWriter:standardPartName}
: Like the layerName, but set to “rgba” instead of empty for the main layer${imageWriter:nukeViewName}
: Like viewName, but set to “main” when there is no current view${imageWriter:nukeLayerName}
: Like layerName, but set to “depth” for “Z”, and “other” for custom channels of the main layer${imageWriter:nukeBaseName}
: Like baseName, but set to “red”, “green”, “blue”, “alpha” instead of RGBA for layers other than the main layer.${imageWriter:nukePartName}
: Like standardPartName, but set to “depth” for “Z”, and “other” for custom channels of the main layer${imageWriter:singlePartViewName}
: The current view, or “” if this is the first view. This should be used to compose channel names for single-part multi-view EXR files.
matchDataWindows
For multi-view images, sets the data windows to be the same for all views, by expanding them all to include the union of all views. Wastes disk space and processing time, but is required by Nuke for multi-view images.
openexr
Format options specific to OpenEXR files.
openexr.mode
The write mode for the OpenEXR file - scanline or tiled data.
openexr.compression
The compression method to use when writing the OpenEXR file.
openexr.dwaCompressionLevel
The compression level used when writing files with DWAA or DWAB compression. Higher values decrease file size at the expense of image quality.
openexr.dataType
The data type to be written to the OpenEXR file. If you want to use different
data types for different channels, you can drive this with an expression or spreadsheet,
which may use the same context variables as the layout plugs ( the useful ones are
${imageWriter:channelName}
, ${imageWriter:layerName}
and ${imageWriter:baseName}
,
for the whole channel name, and for the prefix and suffix respectively ).
openexr.depthDataType
Overriding the data type for depth channels is useful because many of the things depth is used
for require greater precision. This is a simple override which sets Z and ZBack to float precision.
If you want to do something more complex, set this to Use Default
, and connect an expression or
spreadsheet to the Data Type
plug.
dpx
Format options specific to DPX files.
dpx.dataType
The data type to be written to the DPX file.
tiff
Format options specific to TIFF files.
tiff.mode
The write mode for the TIFF file - scanline or tiled data.
tiff.compression
The compression method to use when writing the TIFF file.
tiff.dataType
The data type to be written to the TIFF file.
field3d
Format options specific to Field3D files.
field3d.mode
The write mode for the Field3D file - scanline or tiled data.
field3d.dataType
The data type to be written to the Field3D file.
fits
Format options specific to FITS files.
fits.dataType
The data type to be written to the FITS file.
iff
Format options specific to IFF files.
iff.mode
The write mode for the IFF file - scanline or tiled data.
jpeg
Format options specific to Jpeg files.
jpeg.compressionQuality
The compression quality for the Jpeg file to be written. A value between 0 (low quality, high compression) and 100 (high quality, low compression).
jpeg.chromaSubSampling
The chroma sub sampling used to write the jpeg file. Note that the file will be stored as YCbCr instead of RGB.
jpeg2000
Format options specific to Jpeg2000 files.
jpeg2000.dataType
The data type to be written to the Jpeg2000 file.
png
Format options specific to PNG files.
png.compression
The compression method to use when writing the PNG file.
png.compressionLevel
The compression level of the PNG file. This is a value between 0 (no compression) and 9 (most compression).
rla
Format options specific to RLA files.
rla.dataType
The data type to be written to the RLA file.
sgi
Format options specific to SGI files.
sgi.dataType
The data type to be written to the SGI file.
targa
Format options specific to Targa files.
targa.compression
The compression method to use when writing the Targa file.
webp
Format options specific to WebP files.
webp.compressionQuality
The compression quality for the WebP file to be written. A value between 0 (low quality, high compression) and 100 (high quality, low compression).