Automatically saves a numbered or dated image after every render and can extend the Blender output path with dynamic variables.
Automates file naming with dynamic variables in the standard output path and compositing file output nodes, and enables more advanced production workflows with various kinds of batch rendering, automatic compiling of image sequences into videos using FFmpeg, and saving a numbered, dated, or custom formatted image after every render. Render time estimation and logging is also tracked.
Note for Viewport Rendering: Blender does not trigger pre-render and post-render events when using Viewport Render Image
, Viewport Render Keyframes
, and Viewport Render Animation
, which means this plugin is never informed that a render is happening. Unfortunately Blender uses the same output directory for both saving viewport images and actual rendering; output files will still be saved from the viewport, but the unresolved variable names will be used instead of the expected dynamic content. Please see this issue report for more details and potential workarounds for playblast style rendering.
The default settings will work as-is, saving each render in a folder alongside the project file with automatic serialisation and JPG compression. But significant customisation is possible, especially through the use of output path and file name variables.
Plugin settings are found in the Blender Preferences panel add-on tab. These settings apply globally to all projects opened on the local system, except for the Total Render Time
value which is saved within individual project files.
Render Variables
enables dynamic variables in the Render tab > Output panel output path and File Output nodes in the Compositor workspace
Autosave Videos
if FFmpeg is installed, enables the Render tab > Output panel > Autosave Videos interface, which has options for compiling completed image sequences to ProRes, MP4, and custom FFmpeg command line strings (see the Autosave Videos section for more details)
Autosave Images
saves an image every time rendering is completed or canceled (saving current progress), using the custom settings in the Render tab > Output panel (see the Autosave Images section for more details)
Global Overrides
allows for overriding the autosaved file Location
, Name
, and Format
, ignoring per-project settings in the Render tab > Output panel > Autosave Images sectionShow Estimated Render Time
displays the estimated time till completion in the render window menu bar (see the Estimated Time Remaining section for details)
Show Project Render Time
toggles the "total time spent rendering" display in the Render tab > Output panel below the output settings
Total Render Time
allows manual adjustment or resetting of the current project's render time tracking (this is the only value in the plugin settings panel that is unique per project)Save External Render Time Log
enables tracking of render time outside of the Blender file, supporting tracking during command line rendering (where the internal project value is typically not saved) or tallying the render time for all Blender projects in the same directory
{project}
dynamic variable is supported{project}-TotalRenderTime.txt
will save a dynamically labeled file alongside the project (logging render time per-project since each log file would be named per-project)TotalRenderTime.txt
will allow all Blender files in the same directory to use the same log file (logs would be per-directory, not per-project){project}/TotalRenderTime.txt
will save the log file inside the default autosave directory (this is specific to MacOS and Linux; backslash would be required in Windows)Notification systems require careful review of the security risks, please see the Render Complete Notifications section below for more details
Dynamic variables can be used in the Base Path
and individual input File Subpath
strings of File Output
nodes in the Compositing workspace, in the Render tab > Output panel > Output Path
, and in the Autosave Videos
and Autosave Images
sub-panels for dynamically generated output locations and/or file names. Details about each of these features is available below the variable definitions here.
The available variables are sorted into four groups: Project (values derived from the project itself), Rendering (render engine settings), System (the computer system), and Identifiers (values unique to the time or iteration of the render).
{project}
= the name of the Blender file{scene}
= current scene being rendered
{viewlayer}
= current view layer being rendered
{collection}
= active collection
{camera}
= render camera (independent of selection or active status){item}
= active item (camera, light, mesh, curve, etcetera)
{material}
= active material of active object
{node}
= the active node in the active material of the active object
{material}
and {node}
variable are more prone to failure because they require both a selected object and an active material slot, and should only be used in scenarios where the active selection is known to be reliable (such as with the image folder batch rendering function){display}
= display device format{colorspace}
= the output colour space, also known as the interchange format
{viewtransform}
can be used interchangeably{look}
= the additional contrast transform applied{exposure}
= current exposure value{gamma}
= current gamma value{curves}
= returns the status of the color management curves, either "Curves" or "None"
Render
panel can be overridden in the Output
panel: the variables should correctly reflect either approach, but will not reflect per-input overrides in Compositing
tab File Output
nodes{compositing}
= returns the status of the compositing node tree, either "Compositing" or "None"{engine}
= name of the current rendering engine (uses the internal Blender identifier){renderengine}
for better readability, but the old variable still works as expected{device}
= CPU or GPU device
{samples}
= number of samples
{features}
= enabled features or ray recursions
{duration}
= time spent rendering in seconds{rendertime}
for better clarity and readability, but the old variable still works as expected{rtime}
= time spent rendering in HH-MM-SS format (hours will not roll over into days){rH}
= just the hours component from {rtime}
{rM}
= just the minutes component from {rtime}
{rS}
= just the seconds component from {rtime}
Autosave Videos
and Autosave Images
features in the Render tab > Output panelOutput Path
in the Render tab > Output panelImage Output
nodes in the Compositing workspace{host}
= name of the computer or host being used for rendering{processor}
= processor type (example: "x86_64"){platform}
= operating system of the computer being used for rendering (example: "macOS-14.2.1-x86_64-i386-64bit"){system}
= operating system type (examples: "Linux" "macOS" or "Windows"){release}
= operating system version number (Linux version number includes release status){python}
= Python version number{blender}
= Blender version number and type (examples: "3.3.1-release" or "3.4.0-alpha")
{version}
for improved clarity, but the old variable still works as expected{date}
= current date in YYYY-MM-DD format
{y}
or {year}
= current year in YYYY format
{m}
or {month}
= current month in MM format
{d}
or {day}
= current day in DD format
{time}
= current time in HH-MM-SS 24-hour format
{H}
or {hour}
= current hour in HH 24-hour format
{M}
or {minute}
= current minute in MM format
{S}
or {second}
= current second in SS format
{serial}
= automatically incremented serial number padded to 4 digits
Serial Number
input fields are enabled only when the {serial}
variable appears in the associated path or file name, and will automatically increment every time a render is saved{frame}
= current frame number (padded to four digits)
{batch}
= current index during batch rendering, or when not batch rendering, the index that can be manually set in the 3D View > VF Tools > Batch Render panel
{index}
, which remains as an alias to the updated variable (older projects will still render as expected)Warning: using a custom string may result in overwriting or failing to save files if the generated name is not unique. For example, if date and time or serial number variables are not included.
When the Render Variables
option is enabled in preferences, the native Blender Output Path
is extended with all but the render time options; {duration}
{rtime}
{rH}
{rM}
and {rS}
variables are not available because the data does not exist before rendering starts when these variables must be set. If the keyword {serial}
is used anywhere in the output string, the Serial Number
value will be enabled. Click the Variable List
button to see a popup of all available keywords.
This works well for automatic naming of animations because the variables are processed at rendering start and will remain unchanged until the render is canceled or completed. Starting a new render will update the date, time, serial number, or any other variables that might have been changed.
However, note that when rendering still images (which Blender won't automatically save), and the output path includes a serial number, the serial number will still be incremented even though the still image wasn't rendered. This is because Blender doesn't differentiate between still and sequences renders when triggering rendering start; the plugin can't tell if the output will be saved or not by Blender when a render starts, and must assume that the output path needs to be prepped (attempting to work around this is difficult, and could easily introduce bugs where the serial number doesn't increment correctly, a situation that should definitely be avoided).
When the Render Variables
option is enabled in preferences, File Output
nodes in the Compositing tab are extended with all but the total render time options; {duration}
{rtime}
{rH}
{rM}
and {rS}
variables are not available because the data does not exist before rendering starts when these variables must be set. If the keyword {serial}
is used anywhere in the output string, the Serial Number
value will be enabled. Click the Variable List
button to see a popup of all available keywords.
This feature supports customisation of both the Base Path
and each image input File Subpath
in the node. Like the render output variables feature, this fully supports animations, including the date and time variables which are set at render start (not per-frame).
This feature is still in very early testing and is not ready for an official release yet. If you'd like to try it out, however, it's available by downloading the plugin directly from the repository instead of the releases page. You will need to have a local FFmpeg installation on your system to use this feature (the version bundled inside Blender doesn't seem to be accessible via the Python API).
If enabled in the plugin settings along with a valid FFmpeg path, options to automatically compile rendered image sequences into playable videos after rendering completes will appear in the rendering output panel labeled Autosave Video
. Apple ProRes (Proxy, LT, 422, an HQ presets available), H.264 MP4 (with adjustable quality), and custom string (using variables for {input}
{fps}
and {output}
) are all available, and can be enabled concurrently for multi-format outputs.
FFmpeg only supports some of the image formats that Blender does. The standard formats found in FFmpeg 4.4.x are used by default; bmp, png, jpg, dpx, exr (single layer only), and tif. If there's a mismatch in your particular Blender + FFmpeg setup, you can find the supported file list for your installation of FFmpeg by entering ffmpeg -formats
in a command line terminal (look for sequence formats), and then modifying the FFMPEG_FORMATS
list found near the top of the plugin code to correct any issues.
If you run into any issues, especially when using the custom option, try running Blender in terminal mode to check for error codes. If you have any questions about FFmpeg command line formatting, please check https://ffmpeg.org for documentation.
Project settings are found at the bottom of the Render Output panel and are unique per-project. Automatic saving of every render can be disabled by unchecking Autosave Render
, which is turned on by default.
Variable List
file location
or custom string
strings belowSerial Number
Blender Preferences > Add-on
window, which uses the serial number saved in the plugin preferences{serial}
does not appear in the file location
or custom string
inputsAutosave Location
/
to automatically generate a folder with the same name and in the same directory as the Blender project/project/renders/autosave/
to automatically save all renders to the same locationFile Name
Project Name + Serial Number
uses the name of the Blender file and an auto-generated serial number (it will detect any existing files in the autosave location and increment the highest number found)Project Name + Date & Time
uses the name of the blender file and the local date and time (formatted YYYY-MM-DD HH-MM-SS using 24 hour time)Project Name + Render Engine + Render Time
uses the name of the blender file, the name of the render engine, and the time it took to render
Custom String
uses the dynamic variables listed above to allow for entirely unique file naming patternsFile Format
Project Setting
will use the same format as set in the Render Output panel (see note below about multilayer EXR limitations)
image.save_image
has a known and long-standing bug that prevents the saving of multilayer EXR files
PNG
JPEG
OpenEXR
File formats will use whatever compression preferences have been set in the project file. If you want to render animations using the PNG format, but save previews using JPG with a specific compression level, temporarily choose JPG as the Blender output format and customise the settings, then switch back to PNG. When the add-on saves the render file, it'll use the (now invisible) JPG settings saved in the project file.
Only the final frame will be autosaved when rendering animation sequences, preventing mass duplication of frames but still allowing for total render time to be saved in the file name (if included with the Custom String
setting and the {duration}
or other render time variables)
The Batch Render
interface appears in the VF Tools
tab of any 3D view, and allows the user to select from a number of batch options.
Batch Type
sets the batch rendering mode
Cameras
renders the same scene for each selected camera or each camera in the selected collection
Collections
renders the scene for each child collection within the selected collection
Items
renders each selected item, or each item in the selected collection
Images
renders each image in a source folder, replacing the source of a single target Image Texture node each time
Source Folder
sets the input folder of images that should be used for batch renderingAssign Image Node
will assign the currently selected Object > Material > Image Texture node as the target (this must be assigned before batch rendering will be enabled in this mode)If no valid selection, collection, or texture source is found, a warning will appear in the UI to indicate the issue
Batch Index
this can be manually entered for testing of procedural systems, but during batch rendering will be set to the index of the current element in the batch list
Batch Range
Image
will render the current frame once for each element in the batch listAnimation
will render the entire scene frame range for each element in the batch listBatch render relies on the Python API to trigger each render, so Blender will freeze during processing with no updates visible (except for files being saved). This is a limitation of the Blender Python API and the heavy reliance on static context to operate.
Each image or sequence rendered in a batch list is treated as a separate render trigger, so variables like {time}
and {serial}
will be updated for each item in the list. The {batch}
variable will also return the Batch Index during rendering, but more importantly the {camera}
{collection}
{item}
and {node}
variables for their respective batch types all reflect the element that's being rendered.
When enabled in the preferences, time elapsed during animation renders will be tracked, and a rough estimate will be calculated for the remaining render time. This isn't particularly accurate, especially during the first few frames or in scenes with a great deal of variability from frame to frame, but can give a general idea of how much render time might remain.
The estimation will only show up after the first frame of an animation sequence is completed, and will not be displayed during single frame renders.
Notifications all support the full list of render variables, so feel free to customise however you need. However, there are security issues with how Blender saves preferences; they're always plain text. Please read the warnings detailed below and proceed at your own risk.
Minimum Render Time
sets the threshold before notifications will be sent when a render is completed, measured in seconds (the default setting of 300 seconds = 5 minutes)
Email Notification
sends an email to any number of addresses on render completion, including texting mobile phones using email-to-text (depending on carrier support)
Pushover Notification
sends a push notification to browsers and mobile devices on render completion
Siri Announcement
is only available in MacOS; this announces render completion using the local Siri settings
Siri Message
customises the spoken message, all dynamic variables are supportedEmail setup requires an SMTP server with login credentials. Please note that while the Blender field is "protected" as a password (it only displays asterisks), it still allows for direct copying of the original password and stores it as plain text within the Blender user preferences file. It's not actually protected at all and is dangerously insecure. If you choose to use this feature (never with your primary email account), you do so entirely at your own risk.
The default email settings are for a generic Gmail account, which requires a dedicated application code that is only available when two factor authentication is turned on. This is not recommended from a security standpoint (that unsecured password in Blender gives full access to the gmail account), and again, should only be used with a burner email account and is entirely at your own risk.
If you would like to be notified via text message to a mobile phone number, please use email notifications sent to your carrier of choice, you can find the correct address for your phone number here: Free Carrier Lookup.