AWS Thinkbox Discussion Forums

Resume Draft job on failed task

Hi,

I was wondering if this is possible:

I have nuke job, and it does append quite a few time that i will have 5-6 failed frames. I would still like to the draft event script to pickup the job, and to assing a black frame (or double the frame before) trough the conversion. It will be nice aswell that if there is already a existing video, to append a (2) at the end.

Thks :slight_smile: !

P.S. Here’s my script:

[code]import sys
import os
import datetime
import copy
import xml.etree.ElementTree as xml

import Draft
from DraftParamParser import *

print “Draft Version: %s” % Draft.LibraryInfo.Version()

def ResizeWithLetterbox(self, width, height):
if width <= 0:
raise RuntimeError(‘width must be a positive number’)
if height <= 0:
raise RuntimeError(‘height must be a positive number’)
sourceAR = float(self.width) / self.height
destAR = float(width) / height
if sourceAR == destAR:
self.Resize(width, height)
else:
image = copy.deepcopy(self)
if width <= self.width and height <= self.height:
self.Crop(0, 0, width, height)
else:
self.Resize(width,height)
self.SetToColor(Draft.ColorRGBA(0, 0, 0, 1.0))
if sourceAR > destAR:
image.Resize(width,int(round(width/sourceAR)))
else:
image.Resize(int(round(height*sourceAR)),height)
self.CompositeWithPositionAndGravity(image, 0.5, 0.5, Draft.PositionalGravity.CenterGravity, Draft.CompositeOperator.CopyCompositeOp)

Draft.Image.ResizeWithLetterbox = ResizeWithLetterbox

#Returns a dictionary of a Deadline Job’s properties
def getDeadlineJob (job, repository):
deadlineJobPath = (repository + “\jobs\” + job + “\” + job + “.job”)
jobKeys = (xml.parse(deadlineJobPath)).getroot()
jobDict = {}
for o in list(jobKeys):
if len(o.getchildren()) < 1:
jobDict[o.tag] = o.text
else:
jobDict[o.tag] = []
for t in list(o):
(jobDict[o.tag]).append(t.text)
jobDict[‘deadlineJobPath’] = deadlineJobPath
return jobDict

#Returns a list of frames based on the given frameString
def FrameListToFrames( frameString ):
frames = []
frameRangeTokens = re.split( ‘\s+|,+’, frameString )

for token in frameRangeTokens:
    try:
        if ( len(token) > 0 ):
            dashIndex = string.find( token, '-', 1)

            if ( dashIndex == -1 ):
                startFrame = int(token)
                frames.add( startFrame )
            else:
                startFrame = int(token[0:dashIndex])

                m = re.match( "(-?\d+)(?:(x|step|by|every)(\d+))?", token[dashIndex + 1:] )
                if ( m == None ):
                    raise StandardError( "Second part of Token '" + token[dashIndex + 1:] + "' failed regex match" )
                else:
                    endFrame = int(m.group(1))

                    if ( m.group(2) == None ):
                        frames.extend( range(startFrame, endFrame + 1 ))
                    else:
                        dir = 1
                        if startFrame > endFrame:
                            dir = -1

                        byFrame = int(m.group(3));

                        frame = startFrame
                        while (startFrame * dir) <= (endFrame * dir):
                            frames.add( frame )
                            frame += byFrame * dir

    except:
        print "ERROR: Frame Range token '" + token + "' is malformed. Skipping this token."
        raise

frames = list(set(frames))
frames.sort()

return frames

#CHANGE ME! Path to the Deadline Repository root
deadlineRepo = “\fx-deadline\deadline\”

#CHANGE ME! Path to an image containing the background of the slate frame
slateFrame = “\\fx-deadline\deadline\Draft\Slate_Montage5K.png”

#The argument name/types we’re expecting from the command line arguments
expectedTypes = dict()
expectedTypes[‘frameList’] = ‘’
expectedTypes[‘inFile’] = ‘’
expectedTypes[‘outFile’] = ‘’
expectedTypes[‘username’] = ‘’
expectedTypes[‘entity’] = ‘’
expectedTypes[‘version’] = ‘’
expectedTypes[‘deadlineJobID’] = ‘’

#Parse the command line arguments
params = ParseCommandLine( expectedTypes, sys.argv )

inFilePattern = params[‘inFile’]
frames = FrameListToFrames( params[‘frameList’] )
(outBase, outExt)= os.path.splitext( params[‘outFile’] )

#not a huge deal if we can’t connect to the repo, we’ll just be missing some info
try:
jobParams = getDeadlineJob( params[‘deadlineJobID’], deadlineRepo )
except:
jobParams = {}

outWidth = 1920
outHeight = 1080
slateFrames = 1

for eye in [‘l’,‘r’]:
#Build up the encoders
outBaseEye = outBase.replace( ‘%v’, eye )
MJPEGencoder = Draft.VideoEncoder( outBaseEye + outExt, 24.0, outWidth, outHeight, 100000, “MJPEG” )

#Annotation info used for burn ins
annotationInfo = Draft.AnnotationInfo()
annotationInfo.FontType = "Times-New-Roman"
annotationInfo.PointSize = int( outHeight * 0.022 )
annotationInfo.Color = Draft.ColorRGBA( 1.0, 1.0, 1.0, 1.0 )

#prep the Slate Frame
try:
    slate = Draft.Image.ReadFromFile( slateFrame )
except:
    slate = Draft.Image.CreateImage( outWidth, outHeight )
    slate.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )

if ( slate.width != outWidth or slate.height != outHeight ):
    slate.ResizeWithLetterbox( outWidth, outHeight )

#sets up the text on the slate frame
slateAnnotations = [
      ("SHOW", jobParams.get('ExtraInfo1', '<SKIP>')), #This line is skipped if there is not ExtraInfo1
      ("Episode", params.get('episode', '<SKIP>')), #This line is skipped if 'episode' isn't in the extra args
      ("Shot", params['entity']),
      ("Frames", params['frameList']),
      ("Handles", params.get('handles', '<SKIP>')), #This line is skipped if 'handles' isn't in the extra args
      ("Version", params['version']),
      ("",''),
      ("",''),
      ("Artist", params['username']),
      ("Date", datetime.datetime.now().strftime("%m/%d/%Y %I:%M %p") )
   ]

#comp the annotations over top the slate frame
skipLines = 0
for i in range( 0, len( slateAnnotations ) ):
    annotationTuple = slateAnnotations[i]

    if ( annotationTuple[1] == "<SKIP>" ):
        skipLines += 1
        continue

    lineNum = i - skipLines
    if ( annotationTuple[0] != "" ):
        annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][0] + ": ", annotationInfo )
        slate.CompositeWithPositionAndGravity( annotation, 0.45, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

    if ( annotationTuple[1] != "" ):
        annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][1], annotationInfo )
        slate.CompositeWithPositionAndGravity( annotation, 0.46, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )

#encode the slate frames at the start of the video
print( "Encoding Slate Frames..." )
for i in range( 0, slateFrames ):
    MJPEGencoder.EncodeNextFrame( slate )

studioAnnotation = Draft.Image.CreateAnnotation( "The Ice Age", annotationInfo )
entityAnnotation = Draft.Image.CreateAnnotation( "%s    %s" % (params['entity'], datetime.datetime.now().strftime("%m/%d/%Y")), annotationInfo )
annotationInfo.BackgroundColor = Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 )

#Main encoding loop
for frameNumber in frames:
    print( "Processing Frame: %d...-1" % frameNumber )

    inFile = inFilePattern.replace( '%v', eye )
    inFile = ReplaceFilenameHashesWithNumber( inFile, frameNumber )
    bgFrame = Draft.Image.ReadFromFile( inFile )

    if ( bgFrame.width != outWidth or bgFrame.height != outHeight ):
        bgFrame.ResizeWithLetterbox( outWidth, outHeight )

    #Do the frame burnins
    framesAnnotation = Draft.Image.CreateAnnotation( str( frameNumber ), annotationInfo )
    bgFrame.CompositeWithPositionAndGravity( studioAnnotation, 0.0, 1.0, Draft.PositionalGravity.NorthWestGravity, Draft.CompositeOperator.OverCompositeOp )
    bgFrame.CompositeWithPositionAndGravity( entityAnnotation, 0.0, 0.0, Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )
    bgFrame.CompositeWithPositionAndGravity( framesAnnotation, 1.0, 0.0, Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

    MJPEGencoder.EncodeNextFrame( bgFrame )

#Finalize the encoding process
MJPEGencoder.FinalizeEncoding()

[/code]

Hey there,

It is definitely possible to have a Draft job start when the originating Job failed; you’d just have to modify the event plugin to do so. I’ve attached an updated Event plugin that does so, simply extract the attached zip file to the ‘events/Draft’ folder in your repository.

Note that since the original job could fail, you’ll have to be a lot more careful about tolerating failure in your Draft template; which, I suppose leads us to the second part of your question :slight_smile:. It shouldn’t be hard to tweak your template with the changes you’ve described.

For the filename part, you can do something like this:

    #Appends (#) on the end of the filename until we have a unique name
    increment = 2
    newFileName = outBaseEye + outExt
    while os.path.exists( newFileName ):
        newFileName = "%s (%d)%s" % (outBaseEye, increment, outExt)
        increment += 1

And for the black frames, you’d have to add a bit to your encoding loop to check if the frames exist first:

[code]
if not os.path.exists( inFile ):
bgFrame = Draft.Image.CreateImage( outWidth, outHeight )
bgFrame.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )
else:
bgFrame = Draft.Image.ReadFromFile( inFile )

        if ( bgFrame.width != outWidth or bgFrame.height != outHeight ):
            bgFrame.ResizeWithLetterbox( outWidth, outHeight )[/code]

The full updated script is as follows:

[code]import sys
import os
import datetime
import copy
import xml.etree.ElementTree as xml

import Draft
from DraftParamParser import *

print “Draft Version: %s” % Draft.LibraryInfo.Version()

def ResizeWithLetterbox(self, width, height):
if width <= 0:
raise RuntimeError(‘width must be a positive number’)
if height <= 0:
raise RuntimeError(‘height must be a positive number’)
sourceAR = float(self.width) / self.height
destAR = float(width) / height
if sourceAR == destAR:
self.Resize(width, height)
else:
image = copy.deepcopy(self)
if width <= self.width and height <= self.height:
self.Crop(0, 0, width, height)
else:
self.Resize(width,height)
self.SetToColor(Draft.ColorRGBA(0, 0, 0, 1.0))
if sourceAR > destAR:
image.Resize(width,int(round(width/sourceAR)))
else:
image.Resize(int(round(height*sourceAR)),height)
self.CompositeWithPositionAndGravity(image, 0.5, 0.5, Draft.PositionalGravity.CenterGravity, Draft.CompositeOperator.CopyCompositeOp)

Draft.Image.ResizeWithLetterbox = ResizeWithLetterbox

#Returns a dictionary of a Deadline Job’s properties
def getDeadlineJob (job, repository):
deadlineJobPath = (repository + “\jobs\” + job + “\” + job + “.job”)
jobKeys = (xml.parse(deadlineJobPath)).getroot()
jobDict = {}
for o in list(jobKeys):
if len(o.getchildren()) < 1:
jobDict[o.tag] = o.text
else:
jobDict[o.tag] = []
for t in list(o):
(jobDict[o.tag]).append(t.text)
jobDict[‘deadlineJobPath’] = deadlineJobPath
return jobDict

#Returns a list of frames based on the given frameString
def FrameListToFrames( frameString ):
frames = []
frameRangeTokens = re.split( ‘\s+|,+’, frameString )

for token in frameRangeTokens:
    try:
        if ( len(token) > 0 ):
            dashIndex = string.find( token, '-', 1)

            if ( dashIndex == -1 ):
                startFrame = int(token)
                frames.add( startFrame )
            else:
                startFrame = int(token[0:dashIndex])

                m = re.match( "(-?\d+)(?:(x|step|by|every)(\d+))?", token[dashIndex + 1:] )
                if ( m == None ):
                    raise StandardError( "Second part of Token '" + token[dashIndex + 1:] + "' failed regex match" )
                else:
                    endFrame = int(m.group(1))

                    if ( m.group(2) == None ):
                        frames.extend( range(startFrame, endFrame + 1 ))
                    else:
                        dir = 1
                        if startFrame > endFrame:
                            dir = -1

                        byFrame = int(m.group(3));

                        frame = startFrame
                        while (startFrame * dir) <= (endFrame * dir):
                            frames.add( frame )
                            frame += byFrame * dir

    except:
        print "ERROR: Frame Range token '" + token + "' is malformed. Skipping this token."
        raise

frames = list(set(frames))
frames.sort()

return frames

#CHANGE ME! Path to the Deadline Repository root
deadlineRepo = “\fx-deadline\deadline\”

#CHANGE ME! Path to an image containing the background of the slate frame
slateFrame = “\\fx-deadline\deadline\Draft\Slate_Montage5K.png”

#The argument name/types we’re expecting from the command line arguments
expectedTypes = dict()
expectedTypes[‘frameList’] = ‘’
expectedTypes[‘inFile’] = ‘’
expectedTypes[‘outFile’] = ‘’
expectedTypes[‘username’] = ‘’
expectedTypes[‘entity’] = ‘’
expectedTypes[‘version’] = ‘’
expectedTypes[‘deadlineJobID’] = ‘’

#Parse the command line arguments
params = ParseCommandLine( expectedTypes, sys.argv )

inFilePattern = params[‘inFile’]
frames = FrameListToFrames( params[‘frameList’] )
(outBase, outExt)= os.path.splitext( params[‘outFile’] )

#not a huge deal if we can’t connect to the repo, we’ll just be missing some info
try:
jobParams = getDeadlineJob( params[‘deadlineJobID’], deadlineRepo )
except:
jobParams = {}

outWidth = 1920
outHeight = 1080
slateFrames = 1

for eye in [‘l’,‘r’]:
#Build up the encoders
outBaseEye = outBase.replace( ‘%v’, eye )

#Appends (#) on the end of the filename until we have a unique name
increment = 2
newFileName = outBaseEye + outExt
while os.path.exists( newFileName ):
    newFileName = "%s (%d)%s" % (outBaseEye, increment, outExt)
    increment += 1

MJPEGencoder = Draft.VideoEncoder( newFileName, 24.0, outWidth, outHeight, 100000, "MJPEG" )

#Annotation info used for burn ins
annotationInfo = Draft.AnnotationInfo()
annotationInfo.FontType = "Times-New-Roman"
annotationInfo.PointSize = int( outHeight * 0.022 )
annotationInfo.Color = Draft.ColorRGBA( 1.0, 1.0, 1.0, 1.0 )

#prep the Slate Frame
try:
    slate = Draft.Image.ReadFromFile( slateFrame )
except:
    slate = Draft.Image.CreateImage( outWidth, outHeight )
    slate.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )

if ( slate.width != outWidth or slate.height != outHeight ):
    slate.ResizeWithLetterbox( outWidth, outHeight )

#sets up the text on the slate frame
slateAnnotations = [
      ("SHOW", jobParams.get('ExtraInfo1', '<SKIP>')), #This line is skipped if there is not ExtraInfo1
      ("Episode", params.get('episode', '<SKIP>')), #This line is skipped if 'episode' isn't in the extra args
      ("Shot", params['entity']),
      ("Frames", params['frameList']),
      ("Handles", params.get('handles', '<SKIP>')), #This line is skipped if 'handles' isn't in the extra args
      ("Version", params['version']),
      ("",''),
      ("",''),
      ("Artist", params['username']),
      ("Date", datetime.datetime.now().strftime("%m/%d/%Y %I:%M %p") )
   ]

#comp the annotations over top the slate frame
skipLines = 0
for i in range( 0, len( slateAnnotations ) ):
    annotationTuple = slateAnnotations[i]

    if ( annotationTuple[1] == "<SKIP>" ):
        skipLines += 1
        continue

    lineNum = i - skipLines
    if ( annotationTuple[0] != "" ):
        annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][0] + ": ", annotationInfo )
        slate.CompositeWithPositionAndGravity( annotation, 0.45, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

    if ( annotationTuple[1] != "" ):
        annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][1], annotationInfo )
        slate.CompositeWithPositionAndGravity( annotation, 0.46, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )

#encode the slate frames at the start of the video
print( "Encoding Slate Frames..." )
for i in range( 0, slateFrames ):
    MJPEGencoder.EncodeNextFrame( slate )

studioAnnotation = Draft.Image.CreateAnnotation( "The Ice Age", annotationInfo )
entityAnnotation = Draft.Image.CreateAnnotation( "%s    %s" % (params['entity'], datetime.datetime.now().strftime("%m/%d/%Y")), annotationInfo )
annotationInfo.BackgroundColor = Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 )

#Main encoding loop
for frameNumber in frames:
    print( "Processing Frame: %d...-1" % frameNumber )

    inFile = inFilePattern.replace( '%v', eye )
    inFile = ReplaceFilenameHashesWithNumber( inFile, frameNumber )
    
    if not os.path.exists( inFile ):
        bgFrame = Draft.Image.CreateImage( outWidth, outHeight )
        bgFrame.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )
    else:
        bgFrame = Draft.Image.ReadFromFile( inFile )

        if ( bgFrame.width != outWidth or bgFrame.height != outHeight ):
            bgFrame.ResizeWithLetterbox( outWidth, outHeight )

    #Do the frame burnins
    framesAnnotation = Draft.Image.CreateAnnotation( str( frameNumber ), annotationInfo )
    bgFrame.CompositeWithPositionAndGravity( studioAnnotation, 0.0, 1.0, Draft.PositionalGravity.NorthWestGravity, Draft.CompositeOperator.OverCompositeOp )
    bgFrame.CompositeWithPositionAndGravity( entityAnnotation, 0.0, 0.0, Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )
    bgFrame.CompositeWithPositionAndGravity( framesAnnotation, 1.0, 0.0, Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

    MJPEGencoder.EncodeNextFrame( bgFrame )

#Finalize the encoding process
MJPEGencoder.FinalizeEncoding()[/code]

Note that I’ve only done nominal testing on my changes, they might need tweaking if stuff breaks :slight_smile:

Cheers,

i get this error :

[code]I get this error

[code]=======================================================
Error Message

Exception during render: An error occurred in RenderTasks(): Error in CheckExitCode(): Renderer returned non-zero error code, 1. Check the log for more information.
à Deadline.Plugins.ScriptPlugin.RenderTasks(String taskId, Int32 startFrame, Int32 endFrame, String& outMessage)

=======================================================
Slave Log

0: Task timeout is 6000 seconds (Regular Task Timeout)
0: Loaded job: IA_009_0005_comp_nt_v24a.nk (1/3) [DRAFT] (002_100_00a_249c99ef)
0: Successfully mapped R: to \FX-NAS-01\vfx\RENDER
0: Successfully mapped K: to \FX-NAS-01\vfx\Projets
0: INFO: StartJob: initializing script plugin Draft
0: INFO: Found Draft python module at: ‘C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\Draft.pyd’
0: INFO: About: Draft Plugin for Deadline
0: Plugin rendering frame(s): 0
0: INFO: Draft job starting…
0: INFO: Stdout Handling Enabled: False
0: INFO: Popup Handling Enabled: False
0: INFO: Using Process Tree: True
0: INFO: Hiding DOS Window: True
0: INFO: Creating New Console: False
0: INFO: Looking for bundled python at: ‘C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe’
0: INFO: Render Executable: “C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe”
0: INFO: Render Argument: -u “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py” username=“Nalalie Tremblay” entity="" version="" width=5120 height=2700 frameList=178-193 startFrame=178 endFrame=193 inFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0005\cmp\elem\3D_grass_only\IA_009_0005_3D_grass_only.%v.####.exr" outFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0005\cmp\elem\3D_grass_only\Draft\IA_009_0005_3D_grass_only.%v…mov" deadlineJobID=000_100_999_17afea38
0: INFO: Startup Directory: “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft”
0: INFO: Process Priority: BelowNormal
0: INFO: Process is now running
0: STDOUT: Traceback (most recent call last):
0: STDOUT: File “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py”, line 5, in
0: STDOUT: from System.Diagnostics import *
0: STDOUT: ImportError: No module named System.Diagnostics
0: INFO: Process exit code: 1

=======================================================
Error Type

RenderPluginException

=======================================================
Error Stack Trace

à Deadline.Plugins.Plugin.RenderTask(String taskId, Int32 startFrame, Int32 endFrame)
à Deadline.Slaves.SlaveRenderThread.RenderCurrentTask(TaskLogWriter tlw)
[/code][/code]

Hmmm, it looks like you might have mixed up the two scripts in my last post …

The zipped file is an updated Event Plugin for Draft, and should be extracted to ‘events/Draft/Draft.py’ in your repository.

The new Draft template was just posted as plain text in the code section of my last post – you should be able to click “Select All” and paste that into a python script.

Cheers,

  • Jon

Haha yes i sure did. Sorry about that.

I got this now :

[code]=======================================================
Error Message

Exception during render: An error occurred in RenderTasks(): Error in CheckExitCode(): Renderer returned non-zero error code, 1. Check the log for more information.
à Deadline.Plugins.ScriptPlugin.RenderTasks(String taskId, Int32 startFrame, Int32 endFrame, String& outMessage)

=======================================================
Slave Log

0: Task timeout is disabled.
0: Loaded job: IA.009.0008.STmaps.v01.nk [DRAFT] (999_050_00a_30b71393)
0: Successfully mapped R: to \FX-NAS-01\vfx\RENDER
0: Successfully mapped K: to \FX-NAS-01\vfx\Projets
0: INFO: StartJob: initializing script plugin Draft
0: INFO: Found Draft python module at: ‘C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\Draft.pyd’
0: INFO: About: Draft Plugin for Deadline
0: Plugin rendering frame(s): 0
0: INFO: Draft job starting…
0: INFO: Stdout Handling Enabled: False
0: INFO: Popup Handling Enabled: False
0: INFO: Using Process Tree: True
0: INFO: Hiding DOS Window: True
0: INFO: Creating New Console: False
0: INFO: Looking for bundled python at: ‘C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe’
0: INFO: Render Executable: “C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe”
0: INFO: Render Argument: -u “R:/simple_slate_h264_MJPEG_burnins.py” username=“ngirard” entity=“IA.009.0008.STmaps.v01.nk” version="" inFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\IA.009.0008.DST.cmp.v12.%v.####.exr" outFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\Draft\IA.009.0008.DST.cmp.v12.%v…mov" startFrame=“1” endFrame=“300” frameList=“1-300” deadlineJobID=000_050_999_5ce5bbfe
0: INFO: Startup Directory: “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft”
0: INFO: Process Priority: BelowNormal
0: INFO: Process is now running
0: STDOUT: Checking for license at 27001@prodflexmr
0: STDOUT: C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py:34: DeprecationWarning: the sets module is deprecated
0: STDOUT: import sets
0: STDOUT: Draft Version: 1.0.0.46764
0: STDOUT: Command line args:
0: STDOUT: username=ngirard
0: STDOUT: entity=IA.009.0008.STmaps.v01.nk
0: STDOUT: version=
0: STDOUT: inFile=\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\IA.009.0008.DST.cmp.v12.%v.####.exr
0: STDOUT: outFile=\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\Draft\IA.009.0008.DST.cmp.v12.%v…mov
0: STDOUT: startFrame=1
0: STDOUT: endFrame=300
0: STDOUT: frameList=1-300
0: STDOUT: deadlineJobID=000_050_999_5ce5bbfe
0: STDOUT: Encoding Slate Frames…
0: STDOUT: Processing Frame: 1…-1
0: STDOUT: Traceback (most recent call last):
0: STDOUT: File “R:/simple_slate_h264_MJPEG_burnins.py”, line 210, in
0: STDOUT: bgFrame = Draft.Image.ReadFromFile( inFile )
0: STDOUT: RuntimeError: Error reading pixel data from image file “\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\IA.009.0008.DST.cmp.v12.l.0001.exr”. Tried to read scan line outside the image file’s data window.
0: STDOUT: Output #0, mov, to ‘\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0008\cmp\outputs\v12\Draft\IA.009.0008.DST.cmp.v12.l…mov’:
0: STDOUT: Metadata:
0: STDOUT: encoder : Lavf53.24.0
0: STDOUT: Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p, 1920x1080, q=2-31, 100000 kb/s, 24 tbn, 24 tbc
0: INFO: Process exit code: 1

=======================================================
Error Type

RenderPluginException

=======================================================
Error Stack Trace

à Deadline.Plugins.Plugin.RenderTask(String taskId, Int32 startFrame, Int32 endFrame)
à Deadline.Slaves.SlaveRenderThread.RenderCurrentTask(TaskLogWriter tlw)
[/code]

The error you’re getting doesn’t seem to be specific to the changes I made:

That implies there’s either something wonky with the .exr Draft is trying to open, or there is something wrong with our .exr code. I’m guessing the exr’s display window is somehow mapped outside of its data window, from that message. Is the file readable by other programs at all? If so, could you upload a copy of that particular frame so that we can try to replicate this locally?

If, on the other hand, this is a known bad frame, and you want the Draft script to knowingly encode it as a black frame (like we discussed earlier), you’ll actually have to make modifications to my previous code. I was assuming that failed frames just wouldn’t be present at all, and it doesn’t handle the case where a frame is there but unreadable. To do that, you’d need something like this:

[code] #check if the file exists
blackFrame = ( not os.path.exists( inFile ) )

	if not blackFrame:
		try:
			#try to read in the frame
			bgFrame = Draft.Image.ReadFromFile( inFile )
		except:
			#failed to read in, encode a black frame instead
			blackFrame = True

	#create a black frame if we weren't able to read it in 
	if blackFrame:
		bgFrame = Draft.Image.CreateImage( outWidth, outHeight )
		bgFrame.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )
	elif ( bgFrame.width != outWidth or bgFrame.height != outHeight ):
		bgFrame.ResizeWithLetterbox( outWidth, outHeight )[/code]

And here’s the fully updated script:

[code]import sys
import os
import datetime
import copy
import xml.etree.ElementTree as xml

import Draft
from DraftParamParser import *

print “Draft Version: %s” % Draft.LibraryInfo.Version()

def ResizeWithLetterbox(self, width, height):
if width <= 0:
raise RuntimeError(‘width must be a positive number’)
if height <= 0:
raise RuntimeError(‘height must be a positive number’)
sourceAR = float(self.width) / self.height
destAR = float(width) / height
if sourceAR == destAR:
self.Resize(width, height)
else:
image = copy.deepcopy(self)
if width <= self.width and height <= self.height:
self.Crop(0, 0, width, height)
else:
self.Resize(width,height)
self.SetToColor(Draft.ColorRGBA(0, 0, 0, 1.0))
if sourceAR > destAR:
image.Resize(width,int(round(width/sourceAR)))
else:
image.Resize(int(round(height*sourceAR)),height)
self.CompositeWithPositionAndGravity(image, 0.5, 0.5, Draft.PositionalGravity.CenterGravity, Draft.CompositeOperator.CopyCompositeOp)

Draft.Image.ResizeWithLetterbox = ResizeWithLetterbox

#Returns a dictionary of a Deadline Job’s properties
def getDeadlineJob (job, repository):
deadlineJobPath = (repository + “\jobs\” + job + “\” + job + “.job”)
jobKeys = (xml.parse(deadlineJobPath)).getroot()
jobDict = {}
for o in list(jobKeys):
if len(o.getchildren()) < 1:
jobDict[o.tag] = o.text
else:
jobDict[o.tag] = []
for t in list(o):
(jobDict[o.tag]).append(t.text)
jobDict[‘deadlineJobPath’] = deadlineJobPath
return jobDict

#Returns a list of frames based on the given frameString
def FrameListToFrames( frameString ):
frames = []
frameRangeTokens = re.split( ‘\s+|,+’, frameString )

for token in frameRangeTokens:
	try:
		if ( len(token) > 0 ):
			dashIndex = string.find( token, '-', 1)

			if ( dashIndex == -1 ):
				startFrame = int(token)
				frames.add( startFrame )
			else:
				startFrame = int(token[0:dashIndex])

				m = re.match( "(-?\d+)(?:(x|step|by|every)(\d+))?", token[dashIndex + 1:] )
				if ( m == None ):
					raise StandardError( "Second part of Token '" + token[dashIndex + 1:] + "' failed regex match" )
				else:
					endFrame = int(m.group(1))

					if ( m.group(2) == None ):
						frames.extend( range(startFrame, endFrame + 1 ))
					else:
						dir = 1
						if startFrame > endFrame:
							dir = -1

						byFrame = int(m.group(3));

						frame = startFrame
						while (startFrame * dir) <= (endFrame * dir):
							frames.add( frame )
							frame += byFrame * dir

	except:
		print "ERROR: Frame Range token '" + token + "' is malformed. Skipping this token."
		raise

frames = list(set(frames))
frames.sort()

return frames

#CHANGE ME! Path to the Deadline Repository root
deadlineRepo = “\fx-deadline\deadline\”

#CHANGE ME! Path to an image containing the background of the slate frame
slateFrame = “\\fx-deadline\deadline\Draft\Slate_Montage5K.png”

#The argument name/types we’re expecting from the command line arguments
expectedTypes = dict()
expectedTypes[‘frameList’] = ‘’
expectedTypes[‘inFile’] = ‘’
expectedTypes[‘outFile’] = ‘’
expectedTypes[‘username’] = ‘’
expectedTypes[‘entity’] = ‘’
expectedTypes[‘version’] = ‘’
expectedTypes[‘deadlineJobID’] = ‘’

#Parse the command line arguments
params = ParseCommandLine( expectedTypes, sys.argv )

inFilePattern = params[‘inFile’]
frames = FrameListToFrames( params[‘frameList’] )
(outBase, outExt)= os.path.splitext( params[‘outFile’] )

#not a huge deal if we can’t connect to the repo, we’ll just be missing some info
try:
jobParams = getDeadlineJob( params[‘deadlineJobID’], deadlineRepo )
except:
jobParams = {}

outWidth = 1920
outHeight = 1080
slateFrames = 1

for eye in [‘l’,‘r’]:
#Build up the encoders
outBaseEye = outBase.replace( ‘%v’, eye )

#Appends (#) on the end of the filename until we have a unique name
increment = 2
newFileName = outBaseEye + outExt
while os.path.exists( newFileName ):
	newFileName = "%s (%d)%s" % (outBaseEye, increment, outExt)
	increment += 1

MJPEGencoder = Draft.VideoEncoder( newFileName, 24.0, outWidth, outHeight, 100000, "MJPEG" )

#Annotation info used for burn ins
annotationInfo = Draft.AnnotationInfo()
annotationInfo.FontType = "Times-New-Roman"
annotationInfo.PointSize = int( outHeight * 0.022 )
annotationInfo.Color = Draft.ColorRGBA( 1.0, 1.0, 1.0, 1.0 )

#prep the Slate Frame
try:
	slate = Draft.Image.ReadFromFile( slateFrame )
except:
	slate = Draft.Image.CreateImage( outWidth, outHeight )
	slate.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )

if ( slate.width != outWidth or slate.height != outHeight ):
	slate.ResizeWithLetterbox( outWidth, outHeight )

#sets up the text on the slate frame
slateAnnotations = [
	  ("SHOW", jobParams.get('ExtraInfo1', '<SKIP>')), #This line is skipped if there is not ExtraInfo1
	  ("Episode", params.get('episode', '<SKIP>')), #This line is skipped if 'episode' isn't in the extra args
	  ("Shot", params['entity']),
	  ("Frames", params['frameList']),
	  ("Handles", params.get('handles', '<SKIP>')), #This line is skipped if 'handles' isn't in the extra args
	  ("Version", params['version']),
	  ("",''),
	  ("",''),
	  ("Artist", params['username']),
	  ("Date", datetime.datetime.now().strftime("%m/%d/%Y %I:%M %p") )
	]

#comp the annotations over top the slate frame
skipLines = 0
for i in range( 0, len( slateAnnotations ) ):
	annotationTuple = slateAnnotations[i]

	if ( annotationTuple[1] == "<SKIP>" ):
		skipLines += 1
		continue

	lineNum = i - skipLines
	if ( annotationTuple[0] != "" ):
		annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][0] + ": ", annotationInfo )
		slate.CompositeWithPositionAndGravity( annotation, 0.45, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

	if ( annotationTuple[1] != "" ):
		annotation = Draft.Image.CreateAnnotation( slateAnnotations[i][1], annotationInfo )
		slate.CompositeWithPositionAndGravity( annotation, 0.46, 0.7 - (lineNum * 0.06), Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )

#encode the slate frames at the start of the video
print( "Encoding Slate Frames..." )
for i in range( 0, slateFrames ):
	MJPEGencoder.EncodeNextFrame( slate )

studioAnnotation = Draft.Image.CreateAnnotation( "The Ice Age", annotationInfo )
entityAnnotation = Draft.Image.CreateAnnotation( "%s    %s" % (params['entity'], datetime.datetime.now().strftime("%m/%d/%Y")), annotationInfo )
annotationInfo.BackgroundColor = Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 )

#Main encoding loop
for frameNumber in frames:
	print( "Processing Frame: %d...-1" % frameNumber )

	inFile = inFilePattern.replace( '%v', eye )
	inFile = ReplaceFilenameHashesWithNumber( inFile, frameNumber )
	
	#check if the file exists
	blackFrame = ( not os.path.exists( inFile ) )
	
	if not blackFrame:
		try:
			#try to read in the frame
			bgFrame = Draft.Image.ReadFromFile( inFile )
		except:
			#failed to read in, encode a black frame instead
			blackFrame = True

	#create a black frame if we weren't able to read it in 
	if blackFrame:
		bgFrame = Draft.Image.CreateImage( outWidth, outHeight )
		bgFrame.SetToColor( Draft.ColorRGBA( 0.0, 0.0, 0.0, 1.0 ) )
	elif ( bgFrame.width != outWidth or bgFrame.height != outHeight ):
		bgFrame.ResizeWithLetterbox( outWidth, outHeight )

	#Do the frame burnins
	framesAnnotation = Draft.Image.CreateAnnotation( str( frameNumber ), annotationInfo )
	bgFrame.CompositeWithPositionAndGravity( studioAnnotation, 0.0, 1.0, Draft.PositionalGravity.NorthWestGravity, Draft.CompositeOperator.OverCompositeOp )
	bgFrame.CompositeWithPositionAndGravity( entityAnnotation, 0.0, 0.0, Draft.PositionalGravity.SouthWestGravity, Draft.CompositeOperator.OverCompositeOp )
	bgFrame.CompositeWithPositionAndGravity( framesAnnotation, 1.0, 0.0, Draft.PositionalGravity.SouthEastGravity, Draft.CompositeOperator.OverCompositeOp )

	MJPEGencoder.EncodeNextFrame( bgFrame )

#Finalize the encoding process
MJPEGencoder.FinalizeEncoding()[/code]

I dont know why draft see the frame as a failed frame. I can open them without any problem in RV. The only thing i could suspect is for that test, i didn’t wait for a task, i right click on a already finish task and submit the draft script.

So i copy the new script you gave me, and got a new error :slight_smile:

[code]=======================================================
Error Message

Exception during render: An error occurred in RenderTasks(): Error in CheckExitCode(): Renderer returned non-zero error code, 1. Check the log for more information.
à Deadline.Plugins.ScriptPlugin.RenderTasks(String taskId, Int32 startFrame, Int32 endFrame, String& outMessage)

=======================================================
Slave Log

0: Task timeout is disabled.
0: Loaded job: IA.009.0008.STmaps.v01.nk [DRAFT] (002_060_00a_440658df)
0: Successfully mapped R: to \FX-NAS-01\vfx\RENDER
0: Successfully mapped K: to \FX-NAS-01\vfx\Projets
0: INFO: StartJob: initializing script plugin Draft
0: INFO: Found Draft python module at: ‘C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\Draft.pyd’
0: INFO: About: Draft Plugin for Deadline
0: Plugin rendering frame(s): 0
0: INFO: Draft job starting…
0: INFO: Stdout Handling Enabled: False
0: INFO: Popup Handling Enabled: False
0: INFO: Using Process Tree: True
0: INFO: Hiding DOS Window: True
0: INFO: Creating New Console: False
0: INFO: Looking for bundled python at: ‘C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe’
0: INFO: Render Executable: “C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe”
0: INFO: Render Argument: -u “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py”
0: INFO: Startup Directory: “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft”
0: INFO: Process Priority: BelowNormal
0: INFO: Process is now running
0: STDOUT: Checking for license at 27001@prodflexmr
0: STDOUT: C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py:34: DeprecationWarning: the sets module is deprecated
0: STDOUT: import sets
0: STDOUT: Draft Version: 1.0.0.46764
0: STDOUT: Command line args:
0: STDOUT: Traceback (most recent call last):
0: STDOUT: File “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py”, line 113, in
0: STDOUT: params = ParseCommandLine( expectedTypes, sys.argv )
0: STDOUT: File “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py”, line 197, in ParseCommandLine
0: STDOUT: return ParseParams( expected, params )
0: STDOUT: File “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py”, line 120, in ParseParams
0: STDOUT: raise StandardError( “ERROR: Expected parameter ‘%s’ was not found.” % key )
0: STDOUT: StandardError: ERROR: Expected parameter ‘username’ was not found.
0: INFO: Process exit code: 1

=======================================================
Error Type

RenderPluginException

=======================================================
Error Stack Trace

à Deadline.Plugins.Plugin.RenderTask(String taskId, Int32 startFrame, Int32 endFrame)
à Deadline.Slaves.SlaveRenderThread.RenderCurrentTask(TaskLogWriter tlw)
[/code]

The ode thing in the error, is that we did specify a user name. I also realise in the extra info panel: I am use to see in the bottom section same info about draft. (username and comment). It’s now empty. I don"t know if this is related or not but i think that a information that could be useful for you :slight_smile:

Once again thanks for that support. Your team are doing a great job and i cant wait to get draft fully up and running :slight_smile:

Fred

I believe this error is due to a bug we fixed in Draft Beta 9. Could you please update Draft and try this job again?

Hmm, this sounds like a bug we recently discovered where ExtraInfo KeyValuePairs are randomly disappearing – it definitely should always be passed a username argument by the submitters, even if the field was left blank. We’ve been able to reproduce it here, but we can’t reproduce it reliably yet, and we haven’t figured out how to fix it. The weird thing is that it seems to have happened half-way through the draft Event plugin for you, which might help me pin this down.

For now, I’d recommend upgrading to Draft Beta 9, like Paul suggested, and trying again (with a freshly submitted Job). Hopefully this doesn’t become a recurring issue while we look for a fix

Cheers,

  • Jon

Ho right ! I got a new error:

[code]=======================================================
Error Message

Exception during render: An error occurred in RenderTasks(): Error in CheckExitCode(): Renderer returned non-zero error code, 1. Check the log for more information.
à Deadline.Plugins.ScriptPlugin.RenderTasks(String taskId, Int32 startFrame, Int32 endFrame, String& outMessage)

=======================================================
Slave Log

0: Loaded plugin: Draft
0: Task timeout is disabled.
0: Loaded job: IA_009_0001b_lts_preCmp.nk [DRAFT] (002_050_00a_48e49c13)
0: Successfully mapped R: to \FX-NAS-01\vfx\RENDER
0: Successfully mapped K: to \FX-NAS-01\vfx\Projets
0: INFO: StartJob: initializing script plugin Draft
0: INFO: Found Draft python module at: ‘C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\Draft.pyd’
0: INFO: About: Draft Plugin for Deadline
0: Plugin rendering frame(s): 0
0: INFO: Draft job starting…
0: INFO: Stdout Handling Enabled: False
0: INFO: Popup Handling Enabled: False
0: INFO: Using Process Tree: True
0: INFO: Hiding DOS Window: True
0: INFO: Creating New Console: False
0: INFO: Looking for bundled python at: ‘C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe’
0: INFO: Render Executable: “C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe”
0: INFO: Render Argument: -u “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py”
0: INFO: Startup Directory: “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft”
0: INFO: Process Priority: BelowNormal
0: INFO: Process is now running
0: STDOUT: Checking for license at 27001@prodflexmr
0: STDOUT: Draft Beta 0.9.0.47054
0: STDOUT: Draft Version: 0.9.0.47054
0: STDOUT: Command line args:
0: STDOUT: Traceback (most recent call last):
0: STDOUT: File “C:/Users/renderfx/AppData/Local/Thinkbox/Deadline/slave/Draft_node/jobsData/simple_slate_h264_MJPEG_burnins.py”, line 113, in
0: STDOUT: params = ParseCommandLine( expectedTypes, sys.argv )
0: STDOUT: File “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py”, line 196, in ParseCommandLine
0: STDOUT: return ParseParams( expected, params )
0: STDOUT: File “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\DraftParamParser.py”, line 119, in ParseParams
0: STDOUT: raise StandardError( “ERROR: Expected parameter ‘%s’ was not found.” % key )
0: STDOUT: StandardError: ERROR: Expected parameter ‘username’ was not found.
0: INFO: Process exit code: 1
0: An exception occurred: Exception during render: An error occurred in RenderTasks(): Error in CheckExitCode(): Renderer returned non-zero error code, 1. Check the log for more information.
à Deadline.Plugins.ScriptPlugin.RenderTasks(String taskId, Int32 startFrame, Int32 endFrame, String& outMessage) (Deadline.Plugins.RenderPluginException)

=======================================================
Error Type

RenderPluginException

=======================================================
Error Stack Trace

à Deadline.Plugins.Plugin.RenderTask(String taskId, Int32 startFrame, Int32 endFrame)
à Deadline.Slaves.SlaveRenderThread.RenderCurrentTask(TaskLogWriter tlw)
[/code]

It seems that % is the variable for our left or right eye if im not mistaking

Unfortunatly yes. All my draft got his error now. Even after the update

So I think I know what the problem is now. I forgot that I had changed how Draft was passing parameters to the Plugin, and the modified Event Plugin I gave you was based on the latest version (which isn’t compatible with older plugin versions)… Sorry about that :blush:

If you attach a copy of your Draft plugin (located at ‘plugins/Draft/Drafy.py’ in your repository), I’ll make the necessary changes to make it compatible with the new Event Plugin I gave you. I wouldn’t want to make the same mistake again :slight_smile:

In the meantime, if you’re in a rush to get Draft working again, you can find and uncomment (remove the ‘#’ at the beginning) this line in the Event Plugin I gave you:

#fileHandle.write( "arguments=%s\n" % scriptArgs )

That should restore compatibility with the Draft Plugin that you currently have

Cheers,

  • Jon

No worry :slight_smile: We are quite aware that we are dealing with a beta program. Your support is great. I attach my draft plugin to this post. Does that mean that in each update i will have to worry about this ?

thks,

Fred
_to_thinkbox.zip (1.75 KB)

I’ve attached the updated plugin file, just extract it to ‘plugins/Draft/Draft.py’ in your repo.

With regards to upgrades, it’s definitely something you should be aware of when you have custom modifications to plugins/event plugins/submission scripts. For the Draft Plugin (the one I’m attaching here), it shouldn’t be a big deal because I’m actually just giving you the updated stock one here (I was just asking for yours to make sure we hadn’t modified it for you in the past already :slight_smile:).

The Draft Event Plugin, though, you’ll want to back up before upgrades and restore it after, since it has the custom “submit when failed” bit added to it, which could get wiped in the update process. I should also note that if you did uncomment that line I mentioned in the previous post, you should re-comment it, since it won’t play nice with this Plugin I’m attaching now.

But yeah, it’s essentially up to you to preserve custom changes in plugins/events during upgrades, since we can’t really automatically merge them with new code.

Cheers,

thanks ! Works great !

I got a new problem,

Our script detec stereoscopy. Since the plugin is there, it only append a (1) or (2) at the end, but soent put before the l or r eye

Odd, I thought I made sure to take that into account, and looking back at my code, it should be working… Could you upload the Slave log for the Draft job in question? In the meantime, I’ll try to replicate this here…

Cheers,

  • Jon

Yes of course . THere he is:

[code]=======================================================
Log Message

0: Plugin will be reloaded because a new job has been loaded, or one of the job files has been modified
0: Loaded plugin: Draft
0: Task timeout is disabled.
0: Loaded job: IA_009_0001b_cmp_v15_natt.nk (3/4) [DRAFT] (002_050_00a_65ca8267)
0: Successfully mapped R: to \FX-NAS-01\vfx\RENDER
0: Successfully mapped K: to \FX-NAS-01\vfx\Projets
0: INFO: StartJob: initializing script plugin Draft
0: INFO: Found Draft python module at: ‘C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft\Draft.pyd’
0: INFO: About: Draft Plugin for Deadline
0: Plugin rendering frame(s): 0
0: INFO: Draft job starting…
0: INFO: Stdout Handling Enabled: False
0: INFO: Popup Handling Enabled: False
0: INFO: Using Process Tree: True
0: INFO: Hiding DOS Window: True
0: INFO: Creating New Console: False
0: INFO: Looking for bundled python at: ‘C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe’
0: INFO: Render Executable: “C:\Program Files\Thinkbox\Deadline\python\2.6.7\x64\python.exe”
0: INFO: Render Argument: -u “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\jobsData\simple_slate_h264_MJPEG_burnins.py” username=“Nalalie Tremblay” entity="" version="" width=5120 height=2700 frameList=1-252 startFrame=1 endFrame=252 inFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\plate_only.%v.####.exr" outFile="\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only.mov" deadlineJobID=000_050_999_48f84b9e
0: INFO: Startup Directory: “C:\Users\renderfx\AppData\Local\Thinkbox\Deadline\slave\Draft_node\Draft”
0: INFO: Process Priority: BelowNormal
0: INFO: Process is now running
0: STDOUT: Checking for license at 27001@prodflexmr
0: STDOUT: Draft Beta 0.10.0.47171
0: STDOUT: Draft Version: 0.10.0.47171
0: STDOUT: Command line args:
0: STDOUT: username=Nalalie Tremblay
0: STDOUT: entity=
0: STDOUT: version=
0: STDOUT: width=5120
0: STDOUT: height=2700
0: STDOUT: frameList=1-252
0: STDOUT: startFrame=1
0: STDOUT: endFrame=252
0: STDOUT: inFile=\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\plate_only.%v.####.exr
0: STDOUT: outFile=\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only.mov
0: STDOUT: deadlineJobID=000_050_999_48f84b9e
0: STDOUT: Encoding Slate Frames…
0: STDOUT: Processing Frame: 1…-1
0: STDOUT: Processing Frame: 2…-1
0: STDOUT: Processing Frame: 3…-1
0: STDOUT: Processing Frame: 4…-1
0: STDOUT: Processing Frame: 5…-1
0: STDOUT: Processing Frame: 6…-1
0: STDOUT: Processing Frame: 7…-1
0: STDOUT: Processing Frame: 8…-1
0: STDOUT: Processing Frame: 9…-1
0: STDOUT: Processing Frame: 10…-1
0: STDOUT: Processing Frame: 11…-1
0: STDOUT: Processing Frame: 12…-1
0: STDOUT: Processing Frame: 13…-1
0: STDOUT: Processing Frame: 14…-1
0: STDOUT: Processing Frame: 15…-1
0: STDOUT: Processing Frame: 16…-1
0: STDOUT: Processing Frame: 17…-1
0: STDOUT: Processing Frame: 18…-1
0: STDOUT: Processing Frame: 19…-1
0: STDOUT: Processing Frame: 20…-1
0: STDOUT: Processing Frame: 21…-1
0: STDOUT: Processing Frame: 22…-1
0: STDOUT: Processing Frame: 23…-1
0: STDOUT: Processing Frame: 24…-1
0: STDOUT: Processing Frame: 25…-1
0: STDOUT: Processing Frame: 26…-1
0: STDOUT: Processing Frame: 27…-1
0: STDOUT: Processing Frame: 28…-1
0: STDOUT: Processing Frame: 29…-1
0: STDOUT: Processing Frame: 30…-1
0: STDOUT: Processing Frame: 31…-1
0: STDOUT: Processing Frame: 32…-1
0: STDOUT: Processing Frame: 33…-1
0: STDOUT: Processing Frame: 34…-1
0: STDOUT: Processing Frame: 35…-1
0: STDOUT: Processing Frame: 36…-1
0: STDOUT: Processing Frame: 37…-1
0: STDOUT: Processing Frame: 38…-1
0: STDOUT: Processing Frame: 39…-1
0: STDOUT: Processing Frame: 40…-1
0: STDOUT: Processing Frame: 41…-1
0: STDOUT: Processing Frame: 42…-1
0: STDOUT: Processing Frame: 43…-1
0: STDOUT: Processing Frame: 44…-1
0: STDOUT: Processing Frame: 45…-1
0: STDOUT: Processing Frame: 46…-1
0: STDOUT: Processing Frame: 47…-1
0: STDOUT: Processing Frame: 48…-1
0: STDOUT: Processing Frame: 49…-1
0: STDOUT: Processing Frame: 50…-1
0: STDOUT: Processing Frame: 51…-1
0: STDOUT: Processing Frame: 52…-1
0: STDOUT: Processing Frame: 53…-1
0: STDOUT: Processing Frame: 54…-1
0: STDOUT: Processing Frame: 55…-1
0: STDOUT: Processing Frame: 56…-1
0: STDOUT: Processing Frame: 57…-1
0: STDOUT: Processing Frame: 58…-1
0: STDOUT: Processing Frame: 59…-1
0: STDOUT: Processing Frame: 60…-1
0: STDOUT: Processing Frame: 61…-1
0: STDOUT: Processing Frame: 62…-1
0: STDOUT: Processing Frame: 63…-1
0: STDOUT: Processing Frame: 64…-1
0: STDOUT: Processing Frame: 65…-1
0: STDOUT: Processing Frame: 66…-1
0: STDOUT: Processing Frame: 67…-1
0: STDOUT: Processing Frame: 68…-1
0: STDOUT: Processing Frame: 69…-1
0: STDOUT: Processing Frame: 70…-1
0: STDOUT: Processing Frame: 71…-1
0: STDOUT: Processing Frame: 72…-1
0: STDOUT: Processing Frame: 73…-1
0: STDOUT: Processing Frame: 74…-1
0: STDOUT: Processing Frame: 75…-1
0: STDOUT: Processing Frame: 76…-1
0: STDOUT: Processing Frame: 77…-1
0: STDOUT: Processing Frame: 78…-1
0: STDOUT: Processing Frame: 79…-1
0: STDOUT: Processing Frame: 80…-1
0: STDOUT: Processing Frame: 81…-1
0: STDOUT: Processing Frame: 82…-1
0: STDOUT: Processing Frame: 83…-1
0: STDOUT: Processing Frame: 84…-1
0: STDOUT: Processing Frame: 85…-1
0: STDOUT: Processing Frame: 86…-1
0: STDOUT: Processing Frame: 87…-1
0: STDOUT: Processing Frame: 88…-1
0: STDOUT: Processing Frame: 89…-1
0: STDOUT: Processing Frame: 90…-1
0: STDOUT: Processing Frame: 91…-1
0: STDOUT: Processing Frame: 92…-1
0: STDOUT: Processing Frame: 93…-1
0: STDOUT: Processing Frame: 94…-1
0: STDOUT: Processing Frame: 95…-1
0: STDOUT: Processing Frame: 96…-1
0: STDOUT: Processing Frame: 97…-1
0: STDOUT: Processing Frame: 98…-1
0: STDOUT: Processing Frame: 99…-1
0: STDOUT: Processing Frame: 100…-1
0: STDOUT: Processing Frame: 101…-1
0: STDOUT: Processing Frame: 102…-1
0: STDOUT: Processing Frame: 103…-1
0: STDOUT: Processing Frame: 104…-1
0: STDOUT: Processing Frame: 105…-1
0: STDOUT: Processing Frame: 106…-1
0: STDOUT: Processing Frame: 107…-1
0: STDOUT: Processing Frame: 108…-1
0: STDOUT: Processing Frame: 109…-1
0: STDOUT: Processing Frame: 110…-1
0: STDOUT: Processing Frame: 111…-1
0: STDOUT: Processing Frame: 112…-1
0: STDOUT: Processing Frame: 113…-1
0: STDOUT: Processing Frame: 114…-1
0: STDOUT: Processing Frame: 115…-1
0: STDOUT: Processing Frame: 116…-1
0: STDOUT: Processing Frame: 117…-1
0: STDOUT: Processing Frame: 118…-1
0: STDOUT: Processing Frame: 119…-1
0: STDOUT: Processing Frame: 120…-1
0: STDOUT: Processing Frame: 121…-1
0: STDOUT: Processing Frame: 122…-1
0: STDOUT: Processing Frame: 123…-1
0: STDOUT: Processing Frame: 124…-1
0: STDOUT: Processing Frame: 125…-1
0: STDOUT: Processing Frame: 126…-1
0: STDOUT: Processing Frame: 127…-1
0: STDOUT: Processing Frame: 128…-1
0: STDOUT: Processing Frame: 129…-1
0: STDOUT: Processing Frame: 130…-1
0: STDOUT: Processing Frame: 131…-1
0: STDOUT: Processing Frame: 132…-1
0: STDOUT: Processing Frame: 133…-1
0: STDOUT: Processing Frame: 134…-1
0: STDOUT: Processing Frame: 135…-1
0: STDOUT: Processing Frame: 136…-1
0: STDOUT: Processing Frame: 137…-1
0: STDOUT: Processing Frame: 138…-1
0: STDOUT: Processing Frame: 139…-1
0: STDOUT: Processing Frame: 140…-1
0: STDOUT: Processing Frame: 141…-1
0: STDOUT: Processing Frame: 142…-1
0: STDOUT: Processing Frame: 143…-1
0: STDOUT: Processing Frame: 144…-1
0: STDOUT: Processing Frame: 145…-1
0: STDOUT: Processing Frame: 146…-1
0: STDOUT: Processing Frame: 147…-1
0: STDOUT: Processing Frame: 148…-1
0: STDOUT: Processing Frame: 149…-1
0: STDOUT: Processing Frame: 150…-1
0: STDOUT: Processing Frame: 151…-1
0: STDOUT: Processing Frame: 152…-1
0: STDOUT: Processing Frame: 153…-1
0: STDOUT: Processing Frame: 154…-1
0: STDOUT: Processing Frame: 155…-1
0: STDOUT: Processing Frame: 156…-1
0: STDOUT: Processing Frame: 157…-1
0: STDOUT: Processing Frame: 158…-1
0: STDOUT: Processing Frame: 159…-1
0: STDOUT: Processing Frame: 160…-1
0: STDOUT: Processing Frame: 161…-1
0: STDOUT: Processing Frame: 162…-1
0: STDOUT: Processing Frame: 163…-1
0: STDOUT: Processing Frame: 164…-1
0: STDOUT: Processing Frame: 165…-1
0: STDOUT: Processing Frame: 166…-1
0: STDOUT: Processing Frame: 167…-1
0: STDOUT: Processing Frame: 168…-1
0: STDOUT: Processing Frame: 169…-1
0: STDOUT: Processing Frame: 170…-1
0: STDOUT: Processing Frame: 171…-1
0: STDOUT: Processing Frame: 172…-1
0: STDOUT: Processing Frame: 173…-1
0: STDOUT: Processing Frame: 174…-1
0: STDOUT: Processing Frame: 175…-1
0: STDOUT: Processing Frame: 176…-1
0: STDOUT: Processing Frame: 177…-1
0: STDOUT: Processing Frame: 178…-1
0: STDOUT: Processing Frame: 179…-1
0: STDOUT: Processing Frame: 180…-1
0: STDOUT: Processing Frame: 181…-1
0: STDOUT: Processing Frame: 182…-1
0: STDOUT: Processing Frame: 183…-1
0: STDOUT: Processing Frame: 184…-1
0: STDOUT: Processing Frame: 185…-1
0: STDOUT: Processing Frame: 186…-1
0: STDOUT: Processing Frame: 187…-1
0: STDOUT: Processing Frame: 188…-1
0: STDOUT: Processing Frame: 189…-1
0: STDOUT: Processing Frame: 190…-1
0: STDOUT: Processing Frame: 191…-1
0: STDOUT: Processing Frame: 192…-1
0: STDOUT: Processing Frame: 193…-1
0: STDOUT: Processing Frame: 194…-1
0: STDOUT: Processing Frame: 195…-1
0: STDOUT: Processing Frame: 196…-1
0: STDOUT: Processing Frame: 197…-1
0: STDOUT: Processing Frame: 198…-1
0: STDOUT: Processing Frame: 199…-1
0: STDOUT: Processing Frame: 200…-1
0: STDOUT: Processing Frame: 201…-1
0: STDOUT: Processing Frame: 202…-1
0: STDOUT: Processing Frame: 203…-1
0: STDOUT: Processing Frame: 204…-1
0: STDOUT: Processing Frame: 205…-1
0: STDOUT: Processing Frame: 206…-1
0: STDOUT: Processing Frame: 207…-1
0: STDOUT: Processing Frame: 208…-1
0: STDOUT: Processing Frame: 209…-1
0: STDOUT: Processing Frame: 210…-1
0: STDOUT: Processing Frame: 211…-1
0: STDOUT: Processing Frame: 212…-1
0: STDOUT: Processing Frame: 213…-1
0: STDOUT: Processing Frame: 214…-1
0: STDOUT: Processing Frame: 215…-1
0: STDOUT: Processing Frame: 216…-1
0: STDOUT: Processing Frame: 217…-1
0: STDOUT: Processing Frame: 218…-1
0: STDOUT: Processing Frame: 219…-1
0: STDOUT: Processing Frame: 220…-1
0: STDOUT: Processing Frame: 221…-1
0: STDOUT: Processing Frame: 222…-1
0: STDOUT: Processing Frame: 223…-1
0: STDOUT: Processing Frame: 224…-1
0: STDOUT: Processing Frame: 225…-1
0: STDOUT: Processing Frame: 226…-1
0: STDOUT: Processing Frame: 227…-1
0: STDOUT: Processing Frame: 228…-1
0: STDOUT: Processing Frame: 229…-1
0: STDOUT: Processing Frame: 230…-1
0: STDOUT: Processing Frame: 231…-1
0: STDOUT: Processing Frame: 232…-1
0: STDOUT: Processing Frame: 233…-1
0: STDOUT: Processing Frame: 234…-1
0: STDOUT: Processing Frame: 235…-1
0: STDOUT: Processing Frame: 236…-1
0: STDOUT: Processing Frame: 237…-1
0: STDOUT: Processing Frame: 238…-1
0: STDOUT: Processing Frame: 239…-1
0: STDOUT: Processing Frame: 240…-1
0: STDOUT: Processing Frame: 241…-1
0: STDOUT: Processing Frame: 242…-1
0: STDOUT: Processing Frame: 243…-1
0: STDOUT: Processing Frame: 244…-1
0: STDOUT: Processing Frame: 245…-1
0: STDOUT: Processing Frame: 246…-1
0: STDOUT: Processing Frame: 247…-1
0: STDOUT: Processing Frame: 248…-1
0: STDOUT: Processing Frame: 249…-1
0: STDOUT: Processing Frame: 250…-1
0: STDOUT: Processing Frame: 251…-1
0: STDOUT: Processing Frame: 252…-1
0: STDOUT: Encoding Slate Frames…
0: STDOUT: Processing Frame: 1…-1
0: STDOUT: Processing Frame: 2…-1
0: STDOUT: Processing Frame: 3…-1
0: STDOUT: Processing Frame: 4…-1
0: STDOUT: Processing Frame: 5…-1
0: STDOUT: Processing Frame: 6…-1
0: STDOUT: Processing Frame: 7…-1
0: STDOUT: Processing Frame: 8…-1
0: STDOUT: Processing Frame: 9…-1
0: STDOUT: Processing Frame: 10…-1
0: STDOUT: Processing Frame: 11…-1
0: STDOUT: Processing Frame: 12…-1
0: STDOUT: Processing Frame: 13…-1
0: STDOUT: Processing Frame: 14…-1
0: STDOUT: Processing Frame: 15…-1
0: STDOUT: Processing Frame: 16…-1
0: STDOUT: Processing Frame: 17…-1
0: STDOUT: Processing Frame: 18…-1
0: STDOUT: Processing Frame: 19…-1
0: STDOUT: Processing Frame: 20…-1
0: STDOUT: Processing Frame: 21…-1
0: STDOUT: Processing Frame: 22…-1
0: STDOUT: Processing Frame: 23…-1
0: STDOUT: Processing Frame: 24…-1
0: STDOUT: Processing Frame: 25…-1
0: STDOUT: Processing Frame: 26…-1
0: STDOUT: Processing Frame: 27…-1
0: STDOUT: Processing Frame: 28…-1
0: STDOUT: Processing Frame: 29…-1
0: STDOUT: Processing Frame: 30…-1
0: STDOUT: Processing Frame: 31…-1
0: STDOUT: Processing Frame: 32…-1
0: STDOUT: Processing Frame: 33…-1
0: STDOUT: Processing Frame: 34…-1
0: STDOUT: Processing Frame: 35…-1
0: STDOUT: Processing Frame: 36…-1
0: STDOUT: Processing Frame: 37…-1
0: STDOUT: Processing Frame: 38…-1
0: STDOUT: Processing Frame: 39…-1
0: STDOUT: Processing Frame: 40…-1
0: STDOUT: Processing Frame: 41…-1
0: STDOUT: Processing Frame: 42…-1
0: STDOUT: Processing Frame: 43…-1
0: STDOUT: Processing Frame: 44…-1
0: STDOUT: Processing Frame: 45…-1
0: STDOUT: Processing Frame: 46…-1
0: STDOUT: Processing Frame: 47…-1
0: STDOUT: Processing Frame: 48…-1
0: STDOUT: Processing Frame: 49…-1
0: STDOUT: Processing Frame: 50…-1
0: STDOUT: Processing Frame: 51…-1
0: STDOUT: Processing Frame: 52…-1
0: STDOUT: Processing Frame: 53…-1
0: STDOUT: Processing Frame: 54…-1
0: STDOUT: Processing Frame: 55…-1
0: STDOUT: Processing Frame: 56…-1
0: STDOUT: Processing Frame: 57…-1
0: STDOUT: Processing Frame: 58…-1
0: STDOUT: Processing Frame: 59…-1
0: STDOUT: Processing Frame: 60…-1
0: STDOUT: Processing Frame: 61…-1
0: STDOUT: Processing Frame: 62…-1
0: STDOUT: Processing Frame: 63…-1
0: STDOUT: Processing Frame: 64…-1
0: STDOUT: Processing Frame: 65…-1
0: STDOUT: Processing Frame: 66…-1
0: STDOUT: Processing Frame: 67…-1
0: STDOUT: Processing Frame: 68…-1
0: STDOUT: Processing Frame: 69…-1
0: STDOUT: Processing Frame: 70…-1
0: STDOUT: Processing Frame: 71…-1
0: STDOUT: Processing Frame: 72…-1
0: STDOUT: Processing Frame: 73…-1
0: STDOUT: Processing Frame: 74…-1
0: STDOUT: Processing Frame: 75…-1
0: STDOUT: Processing Frame: 76…-1
0: STDOUT: Processing Frame: 77…-1
0: STDOUT: Processing Frame: 78…-1
0: STDOUT: Processing Frame: 79…-1
0: STDOUT: Processing Frame: 80…-1
0: STDOUT: Processing Frame: 81…-1
0: STDOUT: Processing Frame: 82…-1
0: STDOUT: Processing Frame: 83…-1
0: STDOUT: Processing Frame: 84…-1
0: STDOUT: Processing Frame: 85…-1
0: STDOUT: Processing Frame: 86…-1
0: STDOUT: Processing Frame: 87…-1
0: STDOUT: Processing Frame: 88…-1
0: STDOUT: Processing Frame: 89…-1
0: STDOUT: Processing Frame: 90…-1
0: STDOUT: Processing Frame: 91…-1
0: STDOUT: Processing Frame: 92…-1
0: STDOUT: Processing Frame: 93…-1
0: STDOUT: Processing Frame: 94…-1
0: STDOUT: Processing Frame: 95…-1
0: STDOUT: Processing Frame: 96…-1
0: STDOUT: Processing Frame: 97…-1
0: STDOUT: Processing Frame: 98…-1
0: STDOUT: Processing Frame: 99…-1
0: STDOUT: Processing Frame: 100…-1
0: STDOUT: Processing Frame: 101…-1
0: STDOUT: Processing Frame: 102…-1
0: STDOUT: Processing Frame: 103…-1
0: STDOUT: Processing Frame: 104…-1
0: STDOUT: Processing Frame: 105…-1
0: STDOUT: Processing Frame: 106…-1
0: STDOUT: Processing Frame: 107…-1
0: STDOUT: Processing Frame: 108…-1
0: STDOUT: Processing Frame: 109…-1
0: STDOUT: Processing Frame: 110…-1
0: STDOUT: Processing Frame: 111…-1
0: STDOUT: Processing Frame: 112…-1
0: STDOUT: Processing Frame: 113…-1
0: STDOUT: Processing Frame: 114…-1
0: STDOUT: Processing Frame: 115…-1
0: STDOUT: Processing Frame: 116…-1
0: STDOUT: Processing Frame: 117…-1
0: STDOUT: Processing Frame: 118…-1
0: STDOUT: Processing Frame: 119…-1
0: STDOUT: Processing Frame: 120…-1
0: STDOUT: Processing Frame: 121…-1
0: STDOUT: Processing Frame: 122…-1
0: STDOUT: Processing Frame: 123…-1
0: STDOUT: Processing Frame: 124…-1
0: STDOUT: Processing Frame: 125…-1
0: STDOUT: Processing Frame: 126…-1
0: STDOUT: Processing Frame: 127…-1
0: STDOUT: Processing Frame: 128…-1
0: STDOUT: Processing Frame: 129…-1
0: STDOUT: Processing Frame: 130…-1
0: STDOUT: Processing Frame: 131…-1
0: STDOUT: Processing Frame: 132…-1
0: STDOUT: Processing Frame: 133…-1
0: STDOUT: Processing Frame: 134…-1
0: STDOUT: Processing Frame: 135…-1
0: STDOUT: Processing Frame: 136…-1
0: STDOUT: Processing Frame: 137…-1
0: STDOUT: Processing Frame: 138…-1
0: STDOUT: Processing Frame: 139…-1
0: STDOUT: Processing Frame: 140…-1
0: STDOUT: Processing Frame: 141…-1
0: STDOUT: Processing Frame: 142…-1
0: STDOUT: Processing Frame: 143…-1
0: STDOUT: Processing Frame: 144…-1
0: STDOUT: Processing Frame: 145…-1
0: STDOUT: Processing Frame: 146…-1
0: STDOUT: Processing Frame: 147…-1
0: STDOUT: Processing Frame: 148…-1
0: STDOUT: Processing Frame: 149…-1
0: STDOUT: Processing Frame: 150…-1
0: STDOUT: Processing Frame: 151…-1
0: STDOUT: Processing Frame: 152…-1
0: STDOUT: Processing Frame: 153…-1
0: STDOUT: Processing Frame: 154…-1
0: STDOUT: Processing Frame: 155…-1
0: STDOUT: Processing Frame: 156…-1
0: STDOUT: Processing Frame: 157…-1
0: STDOUT: Processing Frame: 158…-1
0: STDOUT: Processing Frame: 159…-1
0: STDOUT: Processing Frame: 160…-1
0: STDOUT: Processing Frame: 161…-1
0: STDOUT: Processing Frame: 162…-1
0: STDOUT: Processing Frame: 163…-1
0: STDOUT: Processing Frame: 164…-1
0: STDOUT: Processing Frame: 165…-1
0: STDOUT: Processing Frame: 166…-1
0: STDOUT: Processing Frame: 167…-1
0: STDOUT: Processing Frame: 168…-1
0: STDOUT: Processing Frame: 169…-1
0: STDOUT: Processing Frame: 170…-1
0: STDOUT: Processing Frame: 171…-1
0: STDOUT: Processing Frame: 172…-1
0: STDOUT: Processing Frame: 173…-1
0: STDOUT: Processing Frame: 174…-1
0: STDOUT: Processing Frame: 175…-1
0: STDOUT: Processing Frame: 176…-1
0: STDOUT: Processing Frame: 177…-1
0: STDOUT: Processing Frame: 178…-1
0: STDOUT: Processing Frame: 179…-1
0: STDOUT: Processing Frame: 180…-1
0: STDOUT: Processing Frame: 181…-1
0: STDOUT: Processing Frame: 182…-1
0: STDOUT: Processing Frame: 183…-1
0: STDOUT: Processing Frame: 184…-1
0: STDOUT: Processing Frame: 185…-1
0: STDOUT: Processing Frame: 186…-1
0: STDOUT: Processing Frame: 187…-1
0: STDOUT: Processing Frame: 188…-1
0: STDOUT: Processing Frame: 189…-1
0: STDOUT: Processing Frame: 190…-1
0: STDOUT: Processing Frame: 191…-1
0: STDOUT: Processing Frame: 192…-1
0: STDOUT: Processing Frame: 193…-1
0: STDOUT: Processing Frame: 194…-1
0: STDOUT: Processing Frame: 195…-1
0: STDOUT: Processing Frame: 196…-1
0: STDOUT: Processing Frame: 197…-1
0: STDOUT: Processing Frame: 198…-1
0: STDOUT: Processing Frame: 199…-1
0: STDOUT: Processing Frame: 200…-1
0: STDOUT: Processing Frame: 201…-1
0: STDOUT: Processing Frame: 202…-1
0: STDOUT: Processing Frame: 203…-1
0: STDOUT: Processing Frame: 204…-1
0: STDOUT: Processing Frame: 205…-1
0: STDOUT: Processing Frame: 206…-1
0: STDOUT: Processing Frame: 207…-1
0: STDOUT: Processing Frame: 208…-1
0: STDOUT: Processing Frame: 209…-1
0: STDOUT: Processing Frame: 210…-1
0: STDOUT: Processing Frame: 211…-1
0: STDOUT: Processing Frame: 212…-1
0: STDOUT: Processing Frame: 213…-1
0: STDOUT: Processing Frame: 214…-1
0: STDOUT: Processing Frame: 215…-1
0: STDOUT: Processing Frame: 216…-1
0: STDOUT: Processing Frame: 217…-1
0: STDOUT: Processing Frame: 218…-1
0: STDOUT: Processing Frame: 219…-1
0: STDOUT: Processing Frame: 220…-1
0: STDOUT: Processing Frame: 221…-1
0: STDOUT: Processing Frame: 222…-1
0: STDOUT: Processing Frame: 223…-1
0: STDOUT: Processing Frame: 224…-1
0: STDOUT: Processing Frame: 225…-1
0: STDOUT: Processing Frame: 226…-1
0: STDOUT: Processing Frame: 227…-1
0: STDOUT: Processing Frame: 228…-1
0: STDOUT: Processing Frame: 229…-1
0: STDOUT: Processing Frame: 230…-1
0: STDOUT: Processing Frame: 231…-1
0: STDOUT: Processing Frame: 232…-1
0: STDOUT: Processing Frame: 233…-1
0: STDOUT: Processing Frame: 234…-1
0: STDOUT: Processing Frame: 235…-1
0: STDOUT: Processing Frame: 236…-1
0: STDOUT: Processing Frame: 237…-1
0: STDOUT: Processing Frame: 238…-1
0: STDOUT: Processing Frame: 239…-1
0: STDOUT: Processing Frame: 240…-1
0: STDOUT: Processing Frame: 241…-1
0: STDOUT: Processing Frame: 242…-1
0: STDOUT: Processing Frame: 243…-1
0: STDOUT: Processing Frame: 244…-1
0: STDOUT: Processing Frame: 245…-1
0: STDOUT: Processing Frame: 246…-1
0: STDOUT: Processing Frame: 247…-1
0: STDOUT: Processing Frame: 248…-1
0: STDOUT: Processing Frame: 249…-1
0: STDOUT: Processing Frame: 250…-1
0: STDOUT: Processing Frame: 251…-1
0: STDOUT: Processing Frame: 252…-1
0: STDOUT: Output #0, mov, to ‘\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only.mov’:
0: STDOUT: Metadata:
0: STDOUT: encoder : Lavf53.32.100
0: STDOUT: Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p, 1920x1080, q=2-31, 100000 kb/s, 24 tbn, 24 tbc
0: STDOUT: [libx264 @ 00000000006B2CD0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
0: STDOUT: [libx264 @ 00000000006B2CD0] profile Main, level 4.1
0: STDOUT: [libx264 @ 00000000006B2CD0] 264 - core 120 - H.264/MPEG-4 AVC codec - Copyright 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=0 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=2 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=3 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=3 rc=abr mbtree=1 bitrate=16000 ratetol=1.0 qcomp=0.60 qpmin=4 qpmax=51 qpstep=4 ip_ratio=1.40 aq=1:1.00
0: STDOUT: Output #0, mov, to ‘\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only.mov-h264.mov’:
0: STDOUT: Metadata:
0: STDOUT: encoder : Lavf53.32.100
0: STDOUT: Stream #0:0: Video: h264 (avc1 / 0x31637661), yuvj420p, 1920x1080, q=4-51, 16000 kb/s, 24 tbn, 24 tbc
0: STDOUT: [libx264 @ 00000000006B2CD0] frame I:85 Avg QP:16.43 size:270407
0: STDOUT: [libx264 @ 00000000006B2CD0] frame P:84 Avg QP:22.59 size: 11704
0: STDOUT: [libx264 @ 00000000006B2CD0] frame B:84 Avg QP:22.15 size: 7648
0: STDOUT: [libx264 @ 00000000006B2CD0] consecutive B-frames: 33.6% 66.4% 0.0%
0: STDOUT: [libx264 @ 00000000006B2CD0] mb I I16…4: 32.4% 0.0% 67.6%
0: STDOUT: [libx264 @ 00000000006B2CD0] mb P I16…4: 1.2% 0.0% 0.5% P16…4: 10.6% 3.6% 2.5% 0.0% 0.0% skip:81.6%
0: STDOUT: [libx264 @ 00000000006B2CD0] mb B I16…4: 0.1% 0.0% 0.1% B16…8: 20.0% 1.2% 0.5% direct: 1.9% skip:76.2% L0:56.1% L1:40.2% BI: 3.7%
0: STDOUT: [libx264 @ 00000000006B2CD0] final ratefactor: 17.86
0: STDOUT: [libx264 @ 00000000006B2CD0] coded y,uvDC,uvAC intra: 67.9% 69.3% 54.4% inter: 5.1% 3.3% 1.0%
0: STDOUT: [libx264 @ 00000000006B2CD0] i16 v,h,dc,p: 57% 17% 8% 18%
0: STDOUT: [libx264 @ 00000000006B2CD0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 23% 13% 7% 9% 7% 9% 6% 11%
0: STDOUT: [libx264 @ 00000000006B2CD0] i8c dc,h,v,p: 56% 27% 8% 9%
0: STDOUT: [libx264 @ 00000000006B2CD0] Weighted P-Frames: Y:0.0% UV:0.0%
0: STDOUT: [libx264 @ 00000000006B2CD0] kb/s:18676.48
0: STDOUT: Output #0, mov, to ‘\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only (2).mov’:
0: STDOUT: Metadata:
0: STDOUT: encoder : Lavf53.32.100
0: STDOUT: Stream #0:0: Video: mjpeg (jpeg / 0x6765706A), yuvj420p, 1920x1080, q=2-31, 100000 kb/s, 24 tbn, 24 tbc
0: STDOUT: [libx264 @ 000000000D484A40] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
0: STDOUT: [libx264 @ 000000000D484A40] profile Main, level 4.1
0: STDOUT: [libx264 @ 000000000D484A40] 264 - core 120 - H.264/MPEG-4 AVC codec - Copyright 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=0 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=2 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=3 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=3 rc=abr mbtree=1 bitrate=16000 ratetol=1.0 qcomp=0.60 qpmin=4 qpmax=51 qpstep=4 ip_ratio=1.40 aq=1:1.00
0: STDOUT: Output #0, mov, to ‘\fx-nas-01\vfx\RENDER\IA\SHOTS\009\0007\cmp\element\plate_only\Draft\plate_only (2).mov-h264.mov’:
0: STDOUT: Metadata:
0: STDOUT: encoder : Lavf53.32.100
0: STDOUT: Stream #0:0: Video: h264 (avc1 / 0x31637661), yuvj420p, 1920x1080, q=4-51, 16000 kb/s, 24 tbn, 24 tbc
0: STDOUT: [libx264 @ 000000000D484A40] frame I:85 Avg QP:16.07 size:271475
0: STDOUT: [libx264 @ 000000000D484A40] frame P:84 Avg QP:22.44 size: 11444
0: STDOUT: [libx264 @ 000000000D484A40] frame B:84 Avg QP:22.13 size: 7192
0: STDOUT: [libx264 @ 000000000D484A40] consecutive B-frames: 33.6% 66.4% 0.0%
0: STDOUT: [libx264 @ 000000000D484A40] mb I I16…4: 33.2% 0.0% 66.8%
0: STDOUT: [libx264 @ 000000000D484A40] mb P I16…4: 1.1% 0.0% 0.4% P16…4: 11.1% 3.8% 2.6% 0.0% 0.0% skip:81.0%
0: STDOUT: [libx264 @ 000000000D484A40] mb B I16…4: 0.1% 0.0% 0.1% B16…8: 20.5% 1.3% 0.5% direct: 1.8% skip:75.8% L0:55.6% L1:40.6% BI: 3.8%
0: STDOUT: [libx264 @ 000000000D484A40] final ratefactor: 17.64
0: STDOUT: [libx264 @ 000000000D484A40] coded y,uvDC,uvAC intra: 67.8% 67.1% 50.6% inter: 5.0% 3.1% 0.8%
0: STDOUT: [libx264 @ 000000000D484A40] i16 v,h,dc,p: 55% 18% 8% 19%
0: STDOUT: [libx264 @ 000000000D484A40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 23% 13% 7% 8% 6% 9% 6% 11%
0: STDOUT: [libx264 @ 000000000D484A40] i8c dc,h,v,p: 56% 27% 8% 9%
0: STDOUT: [libx264 @ 000000000D484A40] Weighted P-Frames: Y:0.0% UV:0.0%
0: STDOUT: [libx264 @ 000000000D484A40] kb/s:18699.67
0: INFO: Process exit code: 0
0: INFO: Draft job complete!
0: Render time for frame: 14.283 m
0: Total time for task: 14.324 m

=======================================================
Log Details

Log Date/Time = May 01/12 14:19:53
Frames = 0-0

Slave Machine = Draft_node
Slave Version = v5.1.0.46114 R

Plugin Name = Draft

[/code]

Thanks for you patience.

I found the problem and fixed it; it was a bug in the Draft Event Plugin. Again, just extract the updated script to ‘events/Draft/Draft.py’ in your repo.

Hopefully this time it’s all good!

Cheers,

Works quite well thaks ! I also remove the h264 beacause it isnt supported in rv. I did instead a 2.5k version, so we can zoom into the render

Privacy | Site terms | Cookie preferences