Launch App

VerkLabs Reference Manual

One node graph for sound and image: build instruments, shaders and 3D scenes in your browser

Runsheet

The Runsheet is a multi-track timeline for scheduling what happens in a project, and when. Instead of triggering things by hand you place events on tracks – play a sound, move the camera, set a parameter, fade a title in – and press START. The Runsheet then runs the whole sequence, and everything stays in step with the music because the timeline is measured in bars and beats as well as in seconds.

Learn it by doing. These lessons walk you through it, step by step, in the editor:

Move things on the timeline (about 35 minutes): Put the Runsheet in charge of the scene: move, turn and scale an object over bars with Motion events, ease them, and make a movement that loops.
Start lesson · Follow the coach
Change an object over time (about 35 minutes): Wire a Param node into a shader and turn it from the Runsheet: set a parameter with Value events, ease it, and score a color that pulses.
Start lesson · Follow the coach
Arranging a track (about 40 minutes): Turn five loops that play for thirty-two bars into a track with a shape: a quiet intro, parts that arrive one by one, a break that empties the track, a drop that hits, and an ending that dissolves.
Start lesson · Follow the coach

You edit the Runsheet in Editor Mode. A project can also run its Runsheet by itself when someone opens it, in Viewer Mode too (see Running a Runsheet below).

The Runsheet under the Scene Viewer

Open it with Toggle Runsheet in the Canvas Top Bar or the Drop-Down Menu (see Project Settings). It docks at the bottom of the Scene Viewer; drag its top edge to make it taller or shorter.

The Layout

The Header

The Runsheet header

Along the top of the panel:

  • START – runs the Runsheet from the very beginning.
  • CONTINUE – runs it from where the playhead is now (after a pause, or after you clicked somewhere on the timeline).
  • STOP – stops the run and silences everything that is playing.
  • Shift+Space – the keyboard shortcut: starts the Runsheet from the beginning, or stops it when it is running. (Plain Space switches the whole app on and off.)
  • BPM – the tempo of the project, from 20 to 999 beats per minute. In any time signature other than 4/4 it reads BPM · 3/4 (or whichever it is) in green: click it to change the time signature in the project settings. See Bars, Beats and Seconds.
  • The clock (hours, minutes, seconds and thousandths), the bar.beat.sub counter (for example 3.2.1: bar 3, beat 2, sixteenth 1), the frame number and the current frame rate.
  • On the right: the selection (how many events are selected), Scale to fit to fit all the events into the width of the panel, Audio to switch sound on and off (the same as the Audio button in the Media Bar), and Close .

The Tracks

Each row is a track, with its name on the left. Its color tells you the kind:

Track What its events do
Recording Record the run to a video file.
Audio Play an audio file (or the sound of a video file).
Music Play an instrument: one note or chord, a whole clip of notes, or whatever you play live. See the Instruments and Music chapter.
Video Play a video file as a texture, for use in a shader.
Camera Animate, move, aim, turn, orbit or zoom the camera.
Params Set one of the project’s parameters to a value for a while.
Objects Choose which objects are visible.
Motion Move, turn or scale an object of the scene.
Light Move the light, aim it, and change its strength and color.
Windows Bring a window (the Node Editor, the Piano Roll, the Scope, the Controls, the Mixer, the Runsheet or the Canvas) to the front for a while.
Screen Text, the logo and a background over the whole screen for a while, for a recording of the whole screen.
Mix Move a track’s volume or pan, or the master volume, along a curve: a fade out, a duck under a voice, a sweep from side to side.
Title, Background, Text, Nodes, Logo, QR Code Overlays drawn on top of the scene.

Some kinds allow several tracks of the same kind. You can have up to eight Audio tracks, as many Music tracks as you need (500 at most), four Video, eight Camera, eight Motion, eight Light, sixteen Params, eight Text, four QR Code, six Windows and four Screen tracks. The extra ones are named Audio 2, Audio 3 and so on. The Recording, Objects, Title, Background, Nodes and Logo tracks exist only once.

Arranging tracks. Tracks have no fixed order. A track you add from +Track goes at the end, and a track that is made for you when you drop an event onto one that overlaps it goes right under the track you dropped it on. You put the tracks in the order you like by dragging a track’s label (in the left-hand column) up or down: a line shows where it will land. Drop it over the middle of a group’s row to move it into that group, or between two rows to put it there, inside or outside a group. Near the top or bottom edge of the list the list scrolls as you drag, and Escape cancels. The order is saved with the project, and the Runsheet shown in a recording follows it too.

Click +Track at the bottom of the label column to add a track; the list shows what is still available. The six overlay tracks are kept together in an Overlays submenu. To remove a track, right-click its lane and choose Remove … track. When there are more tracks than fit, a small arrow appears at the top or bottom of the labels, and the mouse wheel scrolls the tracks.

The +Track picker with the Overlays submenu open

The Ruler and the Playhead

The ruler along the top shows bars, and beats when you zoom in. Click or drag anywhere on the ruler, or on an empty part of a track, to move the playhead. While the Runsheet is stopped, moving the playhead lets you see the scene as it will look at that moment.

  • Zoom with Ctrl (or Cmd) and the mouse wheel.
  • Scroll the timeline sideways with a sideways swipe or drag, and scroll the tracks up and down with the mouse wheel.

Working with Events

Adding an Event

Double-click (or right-click) an empty spot on a track to get the menu of that track, and choose Add … for the kind of event you want. The Camera track offers Animate, Move, Look At, Turn, Orbit, Zoom and Path. The Music track also offers Add Live Music (an event you play yourself) and Add Music from MIDI and more – see the Instruments and Music chapter.

A new event starts at the whole bar nearest to where you clicked, and lasts two bars.

The menu for adding a Camera event

Moving, Resizing and Selecting

  • Move an event by dragging it. Drag it up or down to another track of the same kind.
  • Resize it by dragging its right edge.
  • Click an event to select it. Shift-click adds it to, or removes it from, the selection. Dragging one of several selected events moves them all together.
  • An amber line shows when the edge you are dragging snaps to something: the edge of another event, a marker, or a bar or beat line.
  • On an Audio or Video event, hold Alt and drag to slip the content (change where in the file the event starts playing) without moving the event itself.

Ctrl/Cmd+C and Ctrl/Cmd+V copy and paste the selected event. Delete or Backspace removes the selection. D switches the selected events off and on, and a switched-off event stays on the timeline but is skipped, which is handy when you are trying things out. You can also do this from the right-click menu (Disable / Enable selected).

The Event Inspector

Double-click an event to open its inspector, a small floating panel that you can drag out of the way. Its title says which track and which kind of event it belongs to. Most of what an event does is set there. The fields depend on the kind of event, but a few appear almost everywhere:

  • Active – Yes or No, the same as switching the event off with D.
  • Start and Duration – where the event begins and how long it lasts. Both have a unit next to them.
  • Fade In and Fade Out (Ease In and Ease Out for camera and parameter events) – how long the event takes to reach full strength and to let go again.

The inspector of an Audio event

Bars, Beats and Seconds

Every time field has a unit menu: seconds, bars or beats. A bar is normally four beats; the Time signature in the Music section of the project settings changes that (3/4 is three beats). New events use bars, so an event placed on bar 5 is on bar 5 whatever the tempo.

That is the point of the BPM field. When you change the tempo, everything set in bars or beats moves and stretches with it: events start later or earlier, loops get longer or shorter, and fades follow. Anything set in seconds stays where it is. So if you decide the song should be faster, change the BPM once, and the whole arrangement follows.

Switching a field from one unit to another keeps the same moment in time, and only changes how the number is shown.

Here is one project at 120 BPM and at 90 BPM, with the playhead at the same time (9.5 seconds) in both. At the slower tempo a bar lasts longer, so the same moment falls in an earlier bar, and every event, having the same length in bars, stretches to fill the longer bars.

A project at 120 BPM

The same project at 90 BPM

Loop Length and Loop Gap use the same units. Set the loop length of an audio or music event to 4 beats and it repeats every four beats, at any tempo.

Loops, Fades and Volume

Events that play something over time (Audio, Music and Video) share a few settings:

  • Playback – Loop repeats for as long as the event lasts; Once plays it a single time.
  • Loop Length – how long one repetition is. Until you set it, one repetition is as long as the event, so nothing repeats. Set a shorter length to repeat only the first part of a file, or of a note clip.
  • Loop Gap – silence between repetitions. Zero means the loop is seamless.
  • Offset – where in the file to start (Audio and Video). Alt-dragging the event on the timeline changes the same thing.
  • Fade In and Fade Out – smooth start and end.
  • Volume – a multiplier (1 is full).
  • Audible Output – On or Muted (Audio and Video events; a Music event has none: mute its track instead). A muted event makes no sound and adds nothing to its track’s data. To use a drum loop that you never hear, only see, mute its track (the M button on its row or in the Mixer): the Runsheet Track nodes read the track before its Mute, so a shader reacts to it all the same.

The Kinds of Events

Recording

While a run passes through a Recording event, the project is recorded to a video file (with the sound, if audio is on). The event shows REC on the timeline, or a greyed REC DISABLED when its Active is set to No. See Recording under Project Settings for quality and speed.

Audio

Plays an audio file, or the sound of a video file. Click File to pick one from My Files. Expose as Uniform gives the event’s sound spectrum a name that every shader in the project can read as a texture, which is how a pasted shader that expects, for example, iChannel0 can be pointed at your music. The Runsheet Track nodes read the sound of any audio track without needing this.

Music

Plays an instrument that you built or picked from the library: a single Note or chord, a note clip, or - with Notes set to Live - what you play on the keyboard, an on-screen piano, or from a note graph while the event runs (see Live Input). This has its own chapter: Instruments and Music.

Video

Plays a video file as a texture, silent by default. To see it, add a Runsheet Video node to a shader: it provides the video frame that the track is playing right now. To hear the video’s sound, put an Audio event on the same file.

Camera

All camera events run for their duration, and take over the camera while they are active.

  • Animate – follows the camera path from the Camera Animation panel, at its own Speed, starting from Position (from 0, the start of the path, to 1, its end).
  • Move – moves the camera in a straight line from Start to End.
  • Look At – aims the camera at a point that travels from Start to End.
  • Turn – turns the viewing direction from Start to End. These are directions, not angles: each is an (x, y, z) vector pointing where the camera looks (only its direction counts, so (0, 0, -5) is the same as (0, 0, -1)). The camera swings the short way round between them, so a turn is never more than half a circle, and it only changes where the camera points, not how it is tilted.
  • Orbit – circles around a Center, from Start to End, clockwise or counter-clockwise.
  • Zoom – changes the zoom from Start Zoom to End Zoom.
  • Path – a smooth curve through your own Waypoints. Click Edit in Scene Viewer to place the points by dragging them in the scene.

Ease In and Ease Out make the movement start and stop gently.

The inspector of an Orbit event

Params

A Value event sets one of the project’s 64 parameters. Choose which in Param (Rename Param gives it a name that you will recognize), and the Value it should reach. The parameter eases in to the value, holds it, and eases back to zero, and it is zero whenever no event is active (unless the event holds, see below). Any Param node in a shader or an instrument can read it, which is how the Runsheet controls what your nodes do.

Set to a calculation. Instead of a number, a Param event can be a formula: choose A calculation in Set to and write the formula in Formula. The Param is what the formula gives, worked out again for every frame while the event lasts (its Ease In and Ease Out still apply), and it is read by the shaders, the instruments and the Control Map like any other Param. The formula is written in the language of the f(x) nodes (see Function Nodes), and it can use:

Name What it is
t, et seconds since the start of the Runsheet, and since this event started
x how far along this event is, from 0 to 1
beat, bar beats and bars since the start (bar 0 is the first bar); ebeat and ebar count from the start of this event
bpm, frame the tempo, and the frame number
gate, held with Listens to (below): 1 while a note sounds on that track, and how many sound at once
age, off with Listens to: seconds since a note last started, and since one last ended (0 while one sounds)
note, vel with Listens to: the MIDI note number (a whole number: 60 is middle C, 69 is A 440 Hz) and the velocity (0 to 1) of the note that started last, which they stay after it ends. note is 0 to 127 as written in the clip, plus or minus the Music event’s Transpose (so -48 to 175 at the extremes); it is 0 before any note has started
count with Listens to: how many notes have started so far
pan with Pan from (below): the chosen Param as it was when the last note started
c1 … c16 the project’s MIDI controls (knobs and faders), from 0 to 1; one that has not been moved is 0
p0 … p63 the other Params, as they are now (one that is calculated later in the same frame still has its value from the frame before)
rand(x), rand(x, y) a random number from 0 to 1 for each x, the same every time you ask: rand(floor(beat)) is a new number on every beat. The second input tells two series apart
noise(x) smooth random from 0 to 1 that wanders as x grows: noise(t * 0.5)

and the usual math (sin, abs, floor, fract, mod, min, max, clamp, mix, smoothstep, pow …). Some examples:

  • sin(beat * 3.14159) * 0.5 + 0.5 rises and falls once every two beats, between 0 and 1.
  • rand(floor(bar)) * 2.0 - 1.0 is a new place between -1 and 1 for every bar, which a Param node into a Pan would use to move a sound around.
  • mix(0.2, 1.0, c1) is a knob that cannot go below 0.2.
  • p3 * 0.5 is half of another Param.

The notes of a track. Listens to makes the note names above work: choose All Music tracks, one Music track, or a group. The start of a note is the moment age is near 0, and it grows from there, so exp(-age * 10.0) * vel is a flash that follows every note, gate follows the sustain, exp(-off * 3.0) fades out after the notes end, (note - 60.0) / 12.0 is the number of octaves above middle C (note is a note number, not a frequency in Hz), and rand(count) is a different random number for every note. Pan from names the Param that sets the pan of the notes (the one that your Pan node reads): the formula’s pan is then what that Param was when the last note started, which is the pan that note got, so a shader or another formula can use it. For notes written in clips the numbers are worked out from the clips, as the other inputs are, so they agree on every run; for notes you play by hand they are live, and a recording has 0.

A note in a clip is built a little before it sounds. Every note is given the Params as they are at its own start for that moment, so a Param node into a Hold in the instrument keeps the value of its own note: a Param of rand(count) * 2.0 - 1.0 into a Pan gives each note a pan of its own.

Because the numbers (and rand and noise) depend only on the frame, a calculation gives the same value every time you play, scrub, loop or record the Runsheet; only the knobs (c1 … c16) are live. A formula that cannot be read says why under the field, and gives 0 until it is fixed. A Param that is wired through a Hold node into an instrument keeps what it was when each note started, so every note can have its own random value.

Set to a curve. Choose A curve in Set to to draw how the Param changes over the event, the way a DAW draws automation. Low and High are the values at the bottom and top of the graph. Click empty space to add a point, drag a point to move it, and double-click one to remove it (the first and last points stay, and only move up and down). Beat and Value below the graph give the selected point as numbers, and with Snap to the beat on, points land on quarter beats (hold Alt or Option to move freely). Curve chooses how the points are joined: Smooth (it never goes above or below the points around it), Straight lines or Steps. The curve stretches with the event, so making the event longer slows the change down, and the event on the timeline shows the curve. A curve is read by the shaders, the instruments and the Control Map like any other Param, and its Ease In and Ease Out still apply. Like a calculation, it gives the same value every time you play, scrub, loop or record.

When it ends. After its last frame a Param goes back to 0, which can cut off a note that is still ringing out: a filter that was open slams shut. Choose Hold the last value in When it ends and the Param keeps the value the event ended on, with no jump, until another event for the same Param starts (the one that started last owns the Param; if it does not hold, the Param goes to 0 after it). It is the same as a Mix event, which holds by itself. An Ease Out that goes all the way down still ends at 0. Hold is in a recording and in the audio file like the rest.

Draw a curve on the Runsheet (about 35 minutes): Open a filter with a Param, turn the Param into a drawn curve, choose its shape, and draw a fade and a sweep on the Mix track.
Start lesson · Follow the coach

Objects

A Visible Objects event decides which objects are shown while it is active. Objects that are not in its list are hidden until the event ends.

Motion

A Motion track moves, turns and scales the objects of the scene. Choose the Object an event is for (a new event starts on the object selected in the scene), and the change it makes while it runs:

  • Move – moves the object by Move By (x, y, z).
  • Turn – turns the object by a number of Degrees around an Axis (by default up, 0, 1, 0).
  • Scale – grows or shrinks the object by a factor: Scale By 2 makes it twice the size.

Ease In and Ease Out make the change start and stop gently, as for the camera.

These events change an object from where it is. They add to what the object does by itself (its own position, its orbit and its spin in the object’s properties), so a spinning object can still rise on the beat. An event leaves its change in place when it ends: an object moved by 2 stays 2 higher, and the next event carries on from there. Where an object is depends only on where the playhead is, so you can drag the playhead anywhere and the objects are where they should be, and a recording gets the same result every time. Two events on the same object at the same time add together: two moves add their offsets, two scales multiply.

A move, a turn and a scale usually run together, so put them on separate Motion tracks: on one track their bars would sit on top of each other.

Light

A Light track changes the scene’s light over time, from the values in Light & Shadow in the project settings. There are four kinds of event:

  • Move – moves the light (Light Position) from one point to another, From and To (x, y, z).
  • Light Towards – moves the point the light is aimed at.
  • Strength – changes the Light Strength, from one number to another.
  • Color – changes the Light Color, from one color to another.

Leave From empty (or As it is for a color) and the event starts where the light was: at the end of the event before it, or else at the value in the project settings. Ease In and Ease Out make the change start and stop gently, as for the camera. Before the first event of a kind the light is as set in the project settings. After an event has ended it stays at its end value until a later event takes over. Scrubbing the Runsheet shows the light at that moment, and when the Runsheet is not running the light goes back to the project’s own.

A move, a change of direction, a strength and a color often run together, so put them on separate Light tracks, up to eight of them.

Mix

A Mix event changes the volume or the pan of one track, a group, or the Master along a curve, the way a DAW draws automation. Choose the Track (or Master) and the Change (Volume or Pan), and draw the curve in the inspector like a Param curve: click to add a point, drag to move it, double-click to remove it. The curve stretches with the event.

  • Volume is in dB and is added to the track’s fader in the Mixer: 0 changes nothing, -6 is half as loud, -60 is silence, and up to +6 makes it louder. A new event is a fade out.
  • Pan goes from -1 (left) to 1 (right) and is added to the track’s pan knob, up to the ends.
  • After the event the value stays where the curve ended, until another Mix event for the same track and change takes over. So a fade out stays faded, and a duck for one bar ends its curve back at 0. Before the first event nothing is changed.
  • In the Mixer the fader handle stays where you set it. A pink mark shows where the sound is now, a bar joins the two, and the number under the fader is the sound’s level with an A. Park the playhead anywhere on the Runsheet and it shows that moment.

A Mix event is in a recording, in the audio file and in the stems.

Windows

A Window event puts a window in front for as long as the event lasts: the Node Editor, the Piano Roll, the Scope, the Controls panel, the Mixer, the Runsheet, the Canvas, or Canvas only, which closes the other windows for a clean view of the visuals. It opens the window if it is closed, and a window that is a tab comes to the front. It is meant for showing a project on video or on a screen: the music plays on while the windows change.

  • Instrument (for the Scope, the Controls and the Node Editor): the instrument they show. Left as the current one, they show the instrument that is chosen at that moment. For the Scope you can also choose Overall mix; left as the current one, the Scope keeps looking at whatever it looked at (the mix too). When the event ends, the Scope goes back to what it looked at before.
  • Looks at (the Scope): a node of that instrument, or its output.
  • Object (the Node Editor, when no instrument is chosen): an object for the Node Editor to show.
  • Music event (the Piano Roll): the clip whose notes it shows.

What is in front follows from the playhead alone, so seeking, and starting in the middle, show the right window. A project can have several Windows tracks (up to six), and Window events on different tracks can overlap: the windows of all the events that are active are open together, so you can start with none open and open one more every few seconds. Each window closes when its own event ends (back to how it was before, if nothing else wants it), and your own arrangement comes back when the last one is over. When no Window event is active any more, or you stop the Runsheet, your own arrangement comes back: the windows the event opened are closed again and the tabs are as you had them. If you move the playhead (a seek) the windows follow it, but with the playhead parked in an event, opening the Runsheet does not rearrange anything. One Windows track is enough; if two events overlap, the one that started last wins.

Screen

The Screen track draws over the whole screen, not just the Scene Viewer, so a recording of the whole screen carries it (the Text, Background and Logo overlays below are drawn in the Scene Viewer only, and go into a recording of the Scene Viewer). With the Windows track it makes a self-running show of a project: the music plays, the windows change, and the screen says what is going on. It has three kinds of event, all of which fade in and out (Fade In, Fade Out):

  • Caption – text. Text is what it says (a line break is kept). Position is Bottom (above the Runsheet), Middle or Top (under the toolbar), and Y position moves it from there, in lines of text. Size scales the text (1 is the default size; it follows the smaller side of the window, so it reads the same on a wide window and on a portrait video), Color sets its color, and Background puts a dark panel behind it, or not.
  • Logo – the VERKLABS wordmark in the middle of the screen: VERK in the Color (white) and LABS in the Accent (teal). Size scales it and Y position moves it up and down.
  • Background – a solid color, or a linear or radial gradient (Color and Color 2; Angle for a linear one) over everything. Fade it in and the screen fades to it, with the windows gone; fade it out and they come back. Put a logo or a caption over it for an opening or a closing.

The background is under the logo, and the logo under the captions. Like the Window events, they follow the playhead: they show while the Runsheet runs and when you move the playhead, and they go when you stop it. Up to four Screen tracks can be used, to let events overlap.

Overlays

The overlay tracks draw on top of the scene while their event is active.

  • Title – the project’s name together with the time, frame and tempo.
  • Background – a full-frame color, gradient or animated background (solid, linear, radial, shimmer or aurora).
  • Text – your own text, with Font size, Y position and Color.
  • Nodes – shows the node graph of an object, cycling through the objects (or staying on one Object you choose) at the interval you set in Switch every.
  • Logo – the VERKLABS wordmark: VERK in the Color (white) and LABS in the Accent (teal), as on the welcome window. Size scales it (1 is the default size), and Y position moves it up and down.
  • QR Code – a QR code for a Data / URL you type, with Size, position, colors, an Error correction level, and optional animation (rings, pulse, orbit, bars, spinner).

Overlays fade in and out, 25 frames each by default.

A Text overlay on the scene, with its events on the timeline

Markers

A marker is a named flag on the ruler, for marking the sections of a song, or a place you want to come back to. Right-click the ruler and choose Add marker here: the marker snaps to the very start, to the start or end of an event, or to a bar or beat line when one is close, and the menu says what it snapped to (Add marker exactly here puts it on the exact spot you clicked, and Add marker at the start puts it at frame 0). To mark an event itself, right-click it and choose Add marker at start of event or Add marker at end of event. Right-click a marker to Rename it, Move it to the playhead, or Remove it.

Markers are also handles. Drag a marker, and every event that starts at or after it moves with it (so a marker at the very start moves everything), so you can make room for a new section in the middle of an arrangement, or take one out. Hold Shift while dragging to move only the marker. Events snap to markers when you drag them close.

Three markers on the ruler, and an event snapping to one of them

Running a Runsheet

Press START to run from the beginning, CONTINUE to run from the playhead, and STOP to stop. While it runs, the playhead moves, the scene follows the events, and the header shows the clock and the bar and beat.

Two settings in Project Settings decide what happens when a project is opened: Run on Load starts the Runsheet automatically, and Run Loop starts it over again when it ends. Together they make a project that plays by itself when someone opens its link.

Rec. Runsheet shows the Runsheet itself as a strip under the scene in a recording, which is useful for showing how a project was put together.

Sound needs the Audio button to be on, since browsers do not allow a page to make sound until you have asked for it. If it is off, the Runsheet shows an Enable audio prompt the first time something wants to play. Clicking Start or Continue turns audio on if it has not been turned on since the page was loaded. If you switched audio off yourself, Start and Continue leave it off.

Sound in a Recording

When you record a run, every Audio and Music event is rendered into the recording’s sound track. Instruments are calculated in advance, exactly as they sound live, so what you hear while it runs is what ends up in the video.