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 —…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>
"""

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!

Something I’m endlessly frustrated by is having to work around the way Nuke uses confusing hex colour values in Python to do things such as set a node’s ’tile_color’ knob. For example, how are we supposed to remember that 0xff000ff = green? I wrote two simple functions to get around this, which I hope you can make use of too…

Continue Reading "Quick Tip: Programmatically Dealing with Hex Colour in Nuke"

If you’re like me, you’re always looking for ways to get an edge on efficiency in your workflow, and contribute more value to your team. A common thread between most Compositors is they see the value of utilizing Python, but are unsure how and where to start learning…

If this sounds like you, I have some great news — I’ve been hard at work behind the scenes, creating the solution to your problem! I’m incredibly excited to announce a new online course, comprising of 10 weeks of video tutorials, which is now available for pre-order!

I’ve put a ton of effort into making this course as valuable as possible, for an incredibly affordable price.

Click here to read more, and pre-order!

Updated nodes in Nuke should be better than their predecessors, although that’s not always the case. For example, I love that the latest VectorBlur node is GPU-accelerated, although I find it’s output quite arbitrary; it never does what I expect out of the box, and I personally prefer the old version. A problem arises here, because the…Continue Reading “Quick Tip: Easily create legacy nodes via the Script Editor”