Some gizmos dynamically hide/show a number of knobs with the KnobChanged python callback. This is a good option to keep your gizmo’s UI clean, but can start to get very heavy when you have too many knobs to handle, and too many nodes inside your gizmo.

Instead, it can be cleaner to use Python Script Buttons to add/remove knobs/nodes from your gizmo to keep things fast, neat and tidy.

I whipped up the following example node, which you can download here, to see how this works.

Continue Reading "Dynamically add/remove knobs from gizmos"

In Nuke, you’re able to dynamically change any knob’s value depending on if you’re looking through a Viewer in Nuke’s GUI, or rendering your Nuke script on a render farm. This can be useful to keep your Nuke scripts light & efficient while working, while automatically switching to more processor-intensive tasks at render time — for example, increasing motion blur render samples.

Continue Reading "Ben, how do I use $gui when rendering locally?"

I’m excited to announce that I have just released a new course, aimed at introducing Compositors to GitHub!

If you are unfamiliar, Git is a powerful version control system, which supports the backbone of most modern VFX pipelines. Compositors like you are starting to embrace GitHub for finding and developing gizmos & python scripts, as well as version-controlling their .nuke directories.

Gone are the days where your Nuke preferences, toolsets, and menu.py have to be re-built at every new studio. Click here to get ahead of the curve, and introduce GitHub to your workflow today!

The beginning of my Compositing career started with After Effects, and while I’m now living and breathing Nuke, there’s one thing I still miss — the ease of use of After Effects’ animation tools.

Coupled with a recent fascination with bezier curves, I decided to set out and see if I could bring the most basic functionality from After Effects, “easy ease”, into Nuke, with a way to control the smoothness of that curve.

To start out, I wanted to explore what was already possible. Selecting a keyframe and hitting “h” on your keyboard changes the keyframe type to “horizontal”. If you do that on the first and/or last keyframe of a curve, you get a smooth ramp in/out. However, if it’s not easing enough, grabbing one of the handles and trying to adjust the curve quickly results in frustration.

Continue Reading "Programmatically editing animation curves in Nuke."

Congratulations to Andriy Koval for winning the NukeX license giveaway! As a bonus for being a Patreon supporter, I wanted to show you the thought process & Python script I wrote to help me choose a winner.

To start, I was able to download a CSV report for newsletter subscribers who entered the giveaway, as well as another CSV report for current Patreon supporters. I then needed to find an easy way to get all the email addresses from both CSV’s into a Python-friendly list. I’d never had to use Python to navigate a CSV file before, so it was a fun learning experience!

As you know, subscribers of Ben’s Comp Newsletter could enter this draw simply by clicking the sign-up link in Issue 064, and since you’re a Patreon Supporter, you got two entries! However, there was no guarantee that all Patreon supporters would click the link in the newsletter for that second entry, so I also wanted to code up a solution to account for that.

Lastly, this draw had to be completely random. Rather than closing my eyes, scrolling through a list, and putting my finger on the screen to make my selection, I wanted the computer to choose for me to remove any human bias.

Check out the final code below, commented for clarity.

# Import the modules we need.
import csv
import random

# Create lists to hold email addresses.
newsletter = []
patreon = []

# Define filepaths for the CSV's on disk.
newsletter_csv_file = open("C:\\Users\\benmc\\Desktop\\newsletter.csv", "r")
patreon_csv_file = open("C:\\Users\\benmc\\Desktop\\patreon.csv", "r")

# Open the newsletter CSV, and add all the addresses from the "email address" column (column A).
for emails in csv.reader(newsletter_csv_file, delimiter=','):
	newsletter.append(emails[0])
# The first item in the row is the header, "email address", so we can remove it.
newsletter.pop(0)

# Same deal for the Patreon members CSV, except the email addresses are in column B in this instance.
for emails in csv.reader(patreon_csv_file, delimiter=','):
	patreon.append(emails[1])
patreon.pop(0)


# List to hold all email addresses.
email_list = []

# Remove Patreon subscribers from newsletter list.
print(str(len(set(patreon).intersection(newsletter)))+" Patreons were duplicates, and have been removed.")
for email in set(patreon).intersection(newsletter):
	newsletter.remove(email)

# Add Newsletter subscribers to the email list.
email_list.extend(newsletter)

# Add patreon subscribers into the same list, twice.
email_list.extend(patreon)
email_list.extend(patreon)


# Randomly pick a winner.
print("\nThe winner of the NukeX license is: "+str(random.choice(email_list))+"!")


"""
-----  RESULT  -----

24 Patreons were duplicates, and have been removed.

The winner of the NukeX license is: <email address hidden for privacy>
"""

You might have seen gizmos with knobs that dynamically disable/enable, or hide/show, based on the value of another knob. This is achieved by accessing the knobChanged knob, which is hidden to users, and can be accessed via Python. You can disable a selected node’s mix knob with this line of code: Similarly, you can hide a selected node’s mix knob with this line of code: Super easy. Now to do hide/show and disable/enable some knobs dynamically, I’ll create a NoOp with some custom knobs. And…Continue Reading “Dynamic knobs in Nuke.”

A common thread I’ve picked up among Compositors is they understand the value of utilizing Python in their day-to-day work, but are unsure how and where to start learning. If this sounds like you, I have some great news!

I’ve spent the last few months designing and creating the perfect course, tailored to introduce you to the basics of Python in Nuke! Rather than enduring long lessons on the fundamentals of programming or focusing on pure theory, you will instead dive straight into learning how to customize Nuke to work the way you want to work, and create useful production-ready tools as you learn Python in project-based lessons!

Interested? Click here to read more & sign up!