JOS JOS Compositor

2D

The node graph

This page covers only the node graph features that are particular to JOS Compositor. The familiar ones (Tab picker, Dots, Backdrops, clones, minimap) work as you'd expect.

Connecting nodes

Pictures flow along wires from a node's output (the socket on its right) into another node's inputs (the named sockets on its left). Drag from an output to an input, or click one then the other. Here a plate goes through a Grade into the Merge's B, a foreground into its A, and the Merge into the Viewer:

Two Reads, a Grade, a Merge and a Viewer: the plate through the Grade into the Merge's B input, the foreground into its A input, the Merge into the Viewer

Settings inside the node

Double-click a node: it grows in the graph and shows all of its settings, with the same controls, tables and buttons as the Properties panel. You can close the Properties panel and work entirely in the graph.

Compact settings

Settings, in the Properties panel and inside nodes, use small dark fields in tight rows, so a node's settings take little room.

A Read open in the node graph: its file field shows only the end of the path

The same Read after Ctrl+click on the field: the node is wider and the whole path shows

Colour swatches and the colour picker

A colour's swatch is filled with the colour. Click it to open the colour's wheel under the row (see Colour wheels in Everyday work). The colour picker window opens from the row's right-click menu, Colour picker..., next to the row (below, or above when there is no room), always on the screen.

Curve graphs inside nodes

Some settings are curves, drawn in a small graph: ColorLookup (Colour Curves), HueCorrect, HueKeyer, ColorCorrect's ranges, AddMix, Sampler, the colour crosstalk, TimeDissolve and ScannedGrain. The graph sits inside the node and in the Properties panel.

A Colour Curves node open in the node graph: its master curve bent into an S by two keys, the upper one selected with its tangent handles

Every change is one undo step.

A bigger graph: double-click the graph's background (not a key or the curve). It grows, taller in Properties, wider and taller in a node, and the node grows around it. Double-click the background again to bring it back.

The same node after a double-click on the graph's background: the graph is about twice as big and the node has grown around it

Number fields

Every number field is also a slider.

A socket per channel

Click the ▸ triangle in a node's header. Its output splits into:

A Read of a render, closed, then opened with ▸: the wire into the Blur is drawn from its R, G, B and A, and its other layers (diffuse, specular, depth) wait behind data:

A Read of a render, closed, wired into a Blur

The same Read opened: sockets for the whole image, R, G, B, A and data; the wire into the Blur drawn from R, G, B and A

The data socket. A render can hold dozens of layers, so the node doesn't draw a socket for each one. Click data to list them:

The data socket clicked: a list of the render's layers, depth, diffuse and specular, opens beside it

Pick a layer and it gets a socket of its own, just above data, and the next input you click receives it. Click in empty space instead to make a new node fed with that layer. data stays at the bottom for the next layer you need:

After picking diffuse: a diffuse socket above data, wired into a Grade named diffuse grade

How to use them:

You never need a Shuffle to route a pass.

Cryptomatte as one entry

The Cryptomatte ranks of a render (CryptoObject00, CryptoObject01, ...) appear as one entry named after the Cryptomatte. A wire from it carries every rank, together with the manifest the Cryptomatte node needs.

Combine

Combine builds an image from channels, layers and fills. You never need a Shuffle node.

A Read of a render wired into a Combine, closed, then opened with ▸:

A Read of a render wired into a closed Combine: one connection drawn into its RGB, A and data inputs; outputs RGB, A and data

The same Combine opened: inputs R, G, B, A, data and in2 each fed from the Read; outputs R, G, B, A and the render's layers (depth, diffuse, specular) one by one

Wire first, pick the node after

Drag a wire from a free output or a free input and drop it on empty space. The node picker opens; the node you choose is created there, already connected.

Dragging an already connected input into empty space disconnects it instead.

Click to connect

You don't have to drag a wire. Click an output socket (a channel socket, or a pick from data, works too), then click an input socket on another node: they are connected, in one undo step.

Between the two clicks you can pan and zoom, so this is the easy way to connect nodes far apart in a big graph. The node you clicked stays highlighted until you click the input. Clicking anything else cancels.

The view follows your drag

While you drag a wire, a node or a selection box, bring the mouse to the edge of the graph: the view scrolls that way, faster the further you go, and keeps scrolling while the mouse rests there. Drop the wire on a node that was out of sight. The same works in the material editor's graph.

Grabbing small nodes

Zoomed out, a press on a node's body moves the node, even right next to a socket. Only the socket dot itself picks up the wire. Just outside the node, wires stay easy to grab.

Move or swap an input

Drag a connection from one input of a node onto another input of the same node:

Each is one undo step. Shift+X still swaps a node's first two inputs.

Pick up a wire by either end

You don't have to aim for the socket: press on a wire near either of its ends (within about 35 pixels, measured along the wire) and drag it:

Where several wires meet one socket, or leave one output, the wire nearest the mouse is the one you take. A press in the middle of a wire still just selects it, and a click near an end without dragging selects it too. Each drag is one undo step.

A Scene's objects socket

A Scene has one objects socket, a little taller than the others, that takes every object you connect: cards, primitives, cameras, lights, ReadUSDs, other Scenes (groups). However many you add, it stays one socket of the same size: their wires end spread along it, in order from top to bottom (left to right in vertical flow), with a free place at the end, so they fan in apart.

Projects saved with the older numbered sockets (obj, obj2, obj3...) open with their objects in the same order, and Nuke scripts' Scene, MergeGeo and Axis inputs come in on this socket in Nuke's order. Scripts and assistants connect to it by the name objects (connect with an optional index in MCP, Node.add_input and Node.move_input in Python).

Tidy with L

L lays out the selected nodes (two or more), or the whole graph when fewer are selected, as a tree with nothing overlapping. One undo step.

Find a node

The Find node field on the graph's toolbar, before the flow button, finds nodes by name as you type. Ctrl+F in the graph (or Edit > Find nodes) puts the cursor in it.

The search field with merge typed: the two Merges ringed in blue and framed

Broken branches in red

The red-branch button on the graph's toolbar, between the Find node field and the flow button, shows the parts of the tree that can't render properly. It is on by default, and your choice is remembered.

What counts as missing:

Files are checked again a few seconds after the last check whenever the graph changes, at once when you open a project, and when you reload a Read (R).

A Read whose frames are missing: its red frame, the Grade, Merge and Write after it tinted red, the background's branch as usual

Copy and paste

Ctrl+C, Ctrl+X and Ctrl+V copy, cut and paste the selected nodes. A pasted node is the node you copied: its values, animation curves, expressions, thumbnail on or off, disabled state, a Nest's inside, and the connections between the copied nodes. Connections to nodes you didn't copy are left out. Names that are taken get the next number (Grade1 becomes Grade2); in another project, the names stay. The copies land at the mouse, and pasting is one undo step.

Vertical or horizontal flow

The Vertical flow / Horizontal flow button on the graph's toolbar turns the whole tree. In vertical flow, sockets are on the top and bottom of nodes; in horizontal flow, on the sides. Your choice is remembered.

Snap on sockets

With Snap on (graph toolbar), nodes snap to a 50-unit grid by their sockets, not their corners. An open node grows equally on both sides of its sockets, so nodes on the grid stay lined up whether they are open or closed. Every way of creating a node, and resizing a Backdrop, snaps too.

Node colours

Nodes are coloured by category in dark, muted tones, like the Backdrops, so the graph stays calm and the text stays readable.

Shake to extract

While dragging a node, shake it quickly: it leaves its wires, and the nodes around it reconnect. Drop a free node on a wire to insert it again.

Nests

A Nest holds a group of nodes and shows them as one node (Nuke's Group). Ctrl+G puts the selected nodes in a new Nest. Double-click a Nest to go inside; double-click the background inside to come back out (or Edit > Leave Nest).

Outside, a Nest called Look sits between a Read and the Viewer:

The node graph: a Read named bg.exr wired into a Nest node called Look (its input, and an empty input2 below it), and the Nest wired into the Viewer

Inside, the Nest Input's sockets are the Nest's inputs, and the Nest Output's are its outputs. Each always ends with an empty socket (the Nest Input's is marked +): drag a wire from or to it to add one.

Inside the Nest: NestInput1 wired into a Grade, the Grade into a Blur opened to show its settings (its size reads 12), and the Blur into NestOutput1, which has an empty output2 socket below its output

A Nest's sockets carry whatever its inside takes and gives: flat images, deep images (orange sockets and wires), and cameras, scenes and axes (yellow). A Nest made of deep nodes takes and gives deep images. A Nest whose inside ends in a Scene or a camera plugs into a render's scene or camera input, and an Axis plugged into a Nest's input moves what the inside parents to that input. The usual rules still apply: a 2D node won't take a deep image.

Showing a setting on the Nest: inside, Ctrl+drag a setting onto the Nest Input node. The Nest gets the same setting, with its value, and the inner one follows it by an expression (parent.size); its animation moves to the Nest. Numbers, on/off settings and colours can be exposed. Here the Blur's size and the Grade's gain were exposed, and size set to 12 on the Nest:

The Nest's settings in Properties: its name Look, its inputs, its colour, then the two exposed settings, size at 12 and gain at 1