Nuke has a great selection of nodes available, which for most compositing tasks are sufficient. However, there are many instances where you find yourself creating the same set of nodes over and over, or Nuke simply doesn’t have the node configuration for what you need. In this article I’m going to share with you my essential gizmos that I use on the daily.
One small thing to note when creating gizmos, is that I try to keep them as simple as possible and utilize the default set of nodes Nuke is shipped with. This is to keep them light, and also fully compatible with everyone’s system. This also makes it easier to debug issues if something is broken as you’ll be familiar with what’s inside the group. When creating your own gizmos it is also important to understand the difference of a group vs. a gizmo and how it fits in to your pipeline. Ben McEwan released a great article which explains it well.
Please note, my tools are designed to work with Python 3, and have been tested to work in Nuke 14.0v4. Earlier versions of Python will not be compatible. Earlier versions of Nuke may work, but have not been tested.
A very simple, but useful node. Choose by % the size of overscan you would like to add. What’s unique about this setup is that it has intersect enabled, which means that if your bbox is lower than the % of the root format you would like to add, it will not bloat the bbox and potentially slow the script down. If the bbox upstream is greater than the % specified, then it will reduce it.
This node creates a solid matte for the difference between the A and B input. Pixels values are binary which makes this a great tool when you’re regraining. My workflow would be to work on the denoised plate, and then use DifferenceMatte with A at the bottom of the comp, and B would be the top, at the (denoised) plate. I can then copy the output of the DifferenceMatte in to my comp and premult it, then I will merge this over the original (grainy) plate. This allows me to see all the areas of the plate I have affected, and gives me a hard matte I can then apply grain through, to avoid soft blended grain.
Does what it says on the tin. Choose which channels you need to remove the negative values from.
Generate a random curve for a multitude of purposes. You have control over where the curve sits in the timeline, as well as where it’s centred. You can control how frequent the curve is as well as min/max values for the curve to be contained in.
FrameFix is your solution to fixing missing frames in renders, or for blending two frames together.
This node provides a template that I use to ensure my gizmos are all formatted in the same way. I have a version tab which shows a description and information about the release. It’s good to be consistent in these things!
If you want to perfectly match your grain you need to do more than look at the regular RGB channels. Try this gizmo for an alternate view which will bring out lots of detail to see if there are any discrepancies in your match.
Maybe you’re matching some scans from a film shoot, or maybe you’re just adding a filmic flare. Try this halation out to see how it mimics the luminance response or bright values against a film stock.
Camera lenses have what is called a hyperfocal distance. It is a distance at which beyond this point everything is acceptably sharp. Z depth values in CG are infinite, but we need a maximum so that when we’re racking focus we get the correct curve and achieve the focus pull with the correct timing. Using this node to calculate the hyperfocal distance, or max Z value, with the Zeiss formula will allow you to have a smooth rack focus which will match the plate.
This node creates an exponential blur to help sell bright values in your image by adding a soft falloff.
This expression driven merge node will detect if there is an alpha channel present and create a log sandwich for your merge operation – highly useful when merging elements that have bright values.
A twist on the commonly used, double expression driven, filter erode – this node features a mask channel.
Sometimes tracking a large plate isn’t feasible, or maybe you accidentally tracked the proxy and need to use the tracker on the full res plate. This node allows you to reformat the track points to fit the new resolution. Everything is expression driven and easily reversible.
This is a great way of visualizing whether or not your script is reading from the node graph, or from a render. The colour of the node makes it easy to understand what is going on, which is very useful if working in a team and sharing scripts.
You can download all of the gizmos, as well as the menu.py to import them here. All of the icons associated with the gizmos in this download are default to the Nuke package, so there’s nothing to re-link.