Cupboard JA

Documentation

Cupboard

Four lanes of video, played from a keyboard

Cupboard
Cupboard

Overview

Cupboard is an instrument that samples video the way a sampler samples sound. A clip is loaded into one of four lanes, given a root note and a key range, and played: the key decides the rate, and the picture follows the sound rather than the other way round.

What comes out of the audio outputs is the clip’s own audio at that rate. What the canvas shows is every sounding lane composited, each with its own position, scale, opacity and chroma keyer.

Quick start

System requirements

  • macOS 10.15 or later on Intel, 11.0 or later on Apple Silicon. Standalone, AU and VST3
  • Windows version in preparation

Installation

Format Where it goes on macOS
AU Cupboard.component in ~/Library/Audio/Plug-Ins/Components
VST3 Cupboard.vst3 in ~/Library/Audio/Plug-Ins/VST3
Standalone Cupboard.app in /Applications

After installing, restart your DAW or rescan its plug-ins.

Getting a sound out of the standalone app

  1. Open the app.
  2. Choose an audio output and a MIDI input device in Preferences (⌘,) on the menu bar. MIDI input starts at none, so nothing plays from a MIDI keyboard until one is chosen.

A first sound

  1. Drag a video file onto one of the lanes down the left. Clicking an empty lane to choose a file does the same.
  2. That lane’s key zone, on the keyboard along the bottom, shows which notes it answers to.
  3. Play. With no MIDI keyboard, click the keys in the zone editor, or use the computer keyboard: A to L, with Z and X for the octave.
  4. Root is the note at which the clip plays at its recorded speed. Higher notes play it faster, lower notes slower.

Load all four lanes with different clips, then press Split to divide the keyboard between them, or Layer to stack all four under every note.

The panel

The window is 1200 × 800 and never changes size. The window scale in the ≡ menu changes the draw scale only.

The four lanes

Click a lane to select it, and the two rows of controls under the canvas point at it. Those two rows are always “the current lane”: select another and the same knobs show another lane’s values.

Each lane answers to a MIDI channel of its own.

The canvas

Every sounding lane composites here at its own position, scale and opacity, in lane order. Drop a video here to load it into the selected lane.

Canvas sets what the canvas is filled with first. Transparent is what a sender usually wants. Blue, green and magenta are for keying again further downstream.

Clip and placement

The first half is how the clip sounds, the second where it sits on the canvas.

At 100%, Key Flw doubles the speed for every octave; at 0% every note plays at the same speed. There is no way to hold the picture still and move the pitch: picture and sound always move together.

Start and End are how much of the clip is used, and Loop is what happens on reaching that end point.

Envelope, loop and keyer

A / D / S / R shape both the sound and the picture: opacity follows the envelope, so a long attack fades the picture in as well.

Key and the three to its right are the chroma keyer, for material shot against green or blue that has to composite over the lanes below it. It works in chroma rather than RGB distance, so a screen that is unevenly lit still keys.

Working left to right is quickest. Turn Key on, raise Amount until just before the subject starts to go, blend the outline with Soft, then take the green off hair and shoulders with Despill.

Whole-instrument controls

Split and Layer redraw every key zone at once. Split divides the keyboard between the loaded lanes and sets every lane to Omni; Layer gives every lane the whole keyboard. Either can be adjusted by hand afterwards.

The header and the menu

The band across the top of the window and the ≡ menu are the same in every Hügelton plug-in. This product has no presets, so the band carries no preset field and no ▲ / ▼ pair, and the menu has no preset entries.

Where What it does
The logo, at the left Click it for the product information
Level meter The output level. The upper bar is left, the lower right. Red at the top means the output limiter is working
≡, at the right Opens the menu

The ≡ menu

  • About … — version and copyright
  • Settings — settings that belong to this product (see its own chapter)
  • Window scale — 75% / 100% / 125% / 150%
  • Language — Auto / English / 日本語 (only where a font that can draw Japanese is installed)

Help and tooltips

Point at a control and its name and current value appear beside it, while the band along the bottom of the window says what that control does. The name-and-value bubble can be turned off under ≡ → Settings → Tooltips.

Settings (≡ → Settings)

  • Tooltips — show or hide the name-and-value bubble beside the pointer

Key zones

Which notes each lane answers to, shown as a keyboard and edited on it. Drag an edge to move it, drag the middle to slide the whole zone, click a key to hear it. Sounding notes light up here.

The key strip below plays the selected lane. The computer keyboard plays it too: A to L, with Z and X for the octave.

Why there are no presets

Cupboard has no presets. That is the product, not the schedule.

A patch cannot carry the four clips — a path belongs to one machine. And most of what is left is about a particular clip: its root note, its key range, where in the file a note starts. On different material those numbers are not a starting point, they are wrong.

What people actually want back is the session, and that comes back in full, clips included. In a DAW the project carries it. The standalone keeps its own, so quitting and reopening puts the cupboard back the way it was.

~/Library/Application Support/Hugelton/Cupboard/standalone.state

Delete that file to start empty.

What does generalise across material is Split, Layer and the canvas fill — and each of those is one button.

MIDI

Each lane listens on a MIDI channel of its own, so the same controller number means “this lane’s parameter” on every channel. CC 24 on channel 1 moves the speed of the lane set to channel 1; CC 24 on channel 2 moves lane 2’s. A lane set to omni answers to every channel. That is what makes 102 parameters fit in 128 controllers.

A value moved from a controller shows on the panel but is not written to the host’s automation.

Per lane — send on that lane’s channel

CC Parameter Notes
20 Root maps to the whole note range
21 Key Low low end of the lane’s zone
22 Key High high end of the lane’s zone
23 Key Flw 0% fixed pitch, 100% 1V/oct
24 Speed 0.25x–4x
25 Start % into the clip
26 End % into the clip
27 Loop 0–42 off, 43–85 forward, 86–127 ping-pong
28 Reverse 0–63 off, 64–127 on
29 Note Off 0–42 one shot, 43–85 gate, 86–127 toggle
30 Attack 0.1–2000 ms
31 Decay 1–2000 ms
102 Sustain 0–100%
103 Release 2–4000 ms
104 Gain 0–100%
105 Pan 64 is centre
106 X 64 is centre
107 Y 64 is centre
108 Scale 5–300%
109 Opacity 0–100%
110 Key 0–63 off, 64–127 on
111 Key Amount 1–150%
112 Key Soft 0–100%
113 Despill 0–100%

No controller changes a lane’s MIDI channel. The channel is the route a controller takes to reach the lane, so one that could change it could put the lane out of reach of the controller that changed it.

Whole instrument — any channel

CC Parameter
7 Master
114 Canvas (black / blue / green / magenta / white / transparent)

Standard messages

  • Note on / off — velocity sets the level of the voice it starts
  • CC 64 (sustain pedal) — a note off arriving with the pedal down is held back until the pedal comes up. Lanes set to Gate are the ones this is for
  • CC 120 / 123 — stop every sounding voice at once

Pitch bend is not implemented. A clip’s rate is set by the key it was played at, so bending it would slide the picture as well as the sound; whether that is wanted is a decision nobody has made yet.

Troubleshooting

Nothing sounds when I play Check that a MIDI input device is chosen in Preferences (⌘,). It starts out as none. Even without one, the keys in the zone editor and the computer keyboard (A to L) will play.

I loaded a clip into a lane and nothing happens Check that the lane’s key zone covers the notes being played. Split divides the keyboard between whichever lanes hold a clip.

I hear it but I cannot see it Check that lane’s Opacity and Scale, and whether X / Y have moved it off the canvas. A file with no picture in it says so on the lane.

Keying the green screen takes the subject too Lower Key Amount — the higher it is, the more it takes. A jagged outline is Key Soft; green left around the edges is Despill.

Cupboard does not appear in my DAW Check where it was installed, then restart the DAW or rescan its plug-ins.

Changelog

0.1.0

First release.

Licence

This software, its source code, artwork, documentation and accompanying materials are proprietary to Hügelton Instruments. They are not open source.

Anyone who has obtained a distributed binary from Hügelton Instruments, directly or through its store — by buying it, as a beta tester, or free of charge where the product is offered free — has a personal, non-transferable licence to install and use that binary. It conveys no rights to the source code and no right to redistribute the binary.

The software is provided as is, without warranty of any kind.

Third-party components

The software includes third-party code and typefaces, each under its own licence.

Component Used for
iPlug2 / Cockos WDL The plug-in framework
Steinberg VST3 SDK The VST3 format
NanoVG / NanoSVG / MetalNanoVG / fontstash Drawing the editor
RtAudio / RtMidi Audio and MIDI in the standalone
libpng / zlib / STB Reading images and typefaces
Yoga Layout
Khronos OpenGL declarations (glad) OpenGL
nlohmann/json Settings files
Roboto The text typeface (Apache-2.0)

Fukiai, the icon face, was drawn by Hügelton Instruments. It ships inside the product bundle and is not licensed for use outside it.

The full licence texts are inside the plug-in you have installed:

<Product>.vst3/Contents/Resources/LICENSE.txt

On macOS, right-click the plug-in and choose Show Package Contents to open it. The same file is in the .component and the .app. This chapter is the same thing made easier to read; it does not replace the texts.