Read Node on corrupt Frames workaround


#1

Hey everyone,

I have the following problem:

Read node (Read1) reads an image sequence.
If frames are missing, I use the checkerboard. That works fine!
But sometimes I have frames Nuke isn’t able to open and that makes the job stop rendering in the farm. I have to manually check which frame is the bad one and delete it, than missing frame checker gets its place.

My current solution is to use a switch node ( Read1 on Input 0) with the expression Read1.error , If the file throws an error the result is 1 which switches to a checker node (on Input 1).

  1. [u]But and here comes the important part:

[/u]I have to replace the Read Nodes from time to time and the names change.
Therefore I also have to manually change the Name of the new Read Node back to Read1.
And due to more Read Nodes this is a lot of work.

What I am looking for is an expression that is not limited to the name, but my scripting abilities are not good enough.
Something like (and here comes nonesense, I know, just to brainstorm): parent.error or Input0.error

I do not understand how I can adress the Inputs of the switch node. Or the Node on Input0 without addressing the name.
Is this even possible?

I am using Nuke 8

  1. I found in this old thread (2011, it was already closed) this quote from ChristopherP :

One way around this would be to use the frame-expression in the read-node to display an empty frame. Like this…
frame==201||frame==203?0:frame
which would display frame 0 on frames 201 and 203 (corrupt frames) and the current frame otherwise.

Did I understand this right?
User already knows that frame 201 and 203 are corrupt (could have deleted them beforehand for on_missing checker) and they are getting replaced with frame 0. Which I don’t see the benefit over just deleting the frames instead of scripting them in an expression.

I hope you understand what I am trying to do.
Or maybe you guys know an even better way to solve the corrupt frame in read file problem.
Not sure why Foundry hasn’t added, besides on_missing, an on_corrupt option.

Thanks for your time.


#2

if the 0 input of the switch is connected to the read node you can use

[value [topnode].error ]

as expression

this expression will check the top most node of the input for an error, this means you can also have some other nodes after your read node (e.g. a colorspace, grade, reformat, …)


#3

Thank you so much for your help! This works great.

I found a second solution with python:

nuke.thisNode().input(0).error()

Do you know if there is a speed difference between using an expression or using python?

Thanks again for your help! Greetings to Benztown :wink:


#4

i dont think there is a speed difference in using TCL or Python in the expression box. i guess for rather complex once TCL will be faster, but never experienced any major slowdowns with python in a expression.