Frame List Formatting Options

Version: Deadline 7.2

Overview

This post covers the various options you have to manipulate the frame list of your job in Deadline, either as part of the submission process (in-app submitter, manual submission or monitor submitter), via an event plugin such as “onJobSubmitted”, or post-submission either via our API’s or in the Monitor UI (assuming you have user permission).

For this blog post, we will just use the “Modify Frame Range...” dialog found by right-clicking a job in the job’s panel of Deadline Monitor.

Note: The Frames Per Task setting simply chunks X frames into a group. So with a Frames Per Task setting of 2, every 2 frames would be grouped together and considered as a single task to be processed by a slave. In the case of an odd sequence total being rendered, then the last task would contain just 1 frame in this example.

OK, let’s dive head-first into frame list formatting and see what we can do!

Frame Formatting

Specifying Individual Frames or a Sequence

You can specify a single frame just by typing in the frame number:

5

You can specify individual frames by separating each frame with a comma or a space:

5,10,15,20
5 10 15 20

You can specify a frame range by separating the start and end frame with a dash or a colon:

1-100
1:100

Specifying a Sequence with a Step Frame

You can specify a step frame for a sequence using x, :, step, by, or every:

1-100x5
1:100:5
1-100step5
1-100by5
1-100every5
1:100:5

Each of these examples will render every 5th frame between 1 and 100 (1, 6, 11, 16, etc).

Specifying a Reverse Frame Sequence

You can specify a reverse frame range by separating the end frame and start frame with a dash:

100-1
100:1

Using a step frame also works for reverse frame sequences:

100-1x5
100:1:5

Note: Individual frames are NEVER repeated in a Job. So, declaring a frame list of 5,5,5 - will NOT render frame 5 a total of 3 times, but rather just once.

Armed with this rule, we can now get creative with advanced frame lists.

Advanced Frame Lists

Individual frames for the same job are never repeated when creating tasks for a job, which allows you to get creative with your frame lists without worrying about rendering the same frame more than once. The next few examples are perfect for those preview jobs where you need some key frames rendered off before the rest of the frames are rendered overnight.

To render frames 5, 18, and then from 28 to 100, you can specify one of the following:

5,18,28-100
5 18 28-100
5,18,28:100

To render every 5th frame between 1 to 100, then fill in the rest, you can specify one of the following:

1-100x5,1-100
1-100x5 1-100
1:100:5,1:100
1:100:5 1:100

To render every 10th frame between 1 to 100, then every 5th frame, then every 2nd frame, then fill in the rest, you can specify one of the following:

1-100x10,1-100x5,1-100x2,1-100
1-100x10 1-100x5 1-100x2 1-100
1:100:10,1:100:5,1:100:2,1:100
1:100:10 1:100:5 1:100:2 1:100

To render in a mix of forward and reverse by different Nth frames, then fill in the rest in reverse, you can specify one of the following:

100-1x10,0-100x5,100-1
100-1x10 0-100x5 100-1
100:1:10,0:100:5,100:1
100:1:10 0:100:5 100:1

Note: In a studio pipeline, it’s a good idea to choose a standard to use as the step and frame separator character(s). Industry wide, the character “x” for step and “-” for frame delimiting seem to be popular.

Appending Frame(s) to a Job

A typical scenario on a Friday night with the renderfarm? If you change the frames of a job, you will cause a requeue (interrupt processing) of any frames currently rendering. To avoid this situation and allow additional frames to be appended to the existing job, we have a number of entry points for essentially the same command:

  • Scripting API: RepositoryUtils.AppendJobFrameRange()
  • RESTful API/Standalone Python API: “Append Job Frame Range” (command: appendjobframerange)
  • DeadlineCommand: AppendJobFrameRange

Note: The above commands ONLY work for additional frames (NOT changing existing frames). Also a caveat when using the above function is if the job’s chunk size is greater than one, and the last task is having frames appended to it.

Alternatively, you could just re-submit a job by right-clicking on it in the Monitor and this allows you to re-submit the job using a different frame range / chunk size.

A novel approach to adding or removing slaves from a job can be seen in a new job script in Deadline 8.0 called DynamicDBR.py where we use the Scripting API function: RepositoryUtils.AppendJobFrameRange() to add slaves to the job without disturbing the currently rendering tasks and when we need to remove the total number of slaves running this job, we use the Scripting API function: RepositoryUtils.CompleteTasks() to reduce the number of slaves. The fun really begins when you then increase or decrease the total number of frames for the job and you have an existing mix of queued, rendering and already completed tasks in the job! It’s recommended to review the code in the above script to see how this setup works.