radial mask

A spotlight, but the kind that doesn’t hide what’s in the dark. Soft inside, breathing outside. The frame says “look here” without losing the room.

radial mask sample frame rendered from the demo project
Frame from the bundled demo.cinerune — three masks compose with max; the radial one is the inner soft disc.

What it’s for

Old-school theatre directors knew this trick a hundred years before they had to argue about it on a film set: drop the stage lights, put a single soft circle on the one person who matters, and the audience’s eye goes exactly where you want it without you ever having to crop. The frame still contains everything; the attention contains one thing. A good radial mask is just that, ported to ASCII.

Inside the disc, the effect runs at full intensity. Outside, it fades smoothly to intensityFloor — which is the part most people miss. The periphery isn’t off, it’s dimmed. The chromatic aberration still murmurs at the edges; the glitch still rumbles in the corners; the background is alive but quiet. Everything outside the spotlight is part of the world your subject is standing in, not a black hole.

Reach for this when: a face needs to be readable in a noisy scene; a single headline has to survive a glitch pass; an end-frame wants to close in on one detail without cutting to a tighter shot; you want the “iris-in” energy of silent cinema without the corny circular wipe.

Where it lives in the app

Add from the Masks panel. The mask appears as its own layer on the timeline; assign it to one or more effects by setting their target to point at this mask layer.

Parameters

KeyRangeDefaultEffect
cx0–10.5Horizontal centre (0 = left, 1 = right)
cy0–10.5Vertical centre (0 = top, 1 = bottom)
radius0–10.35Disc radius as fraction of frame diagonal
softness0–10.25Feather width of the edge falloff

Drive it from a tracking point

Pair the mask with a tracking point so the spotlight follows a moving face:

const mask = player.getMaskLayer('spot')
const track = player.getTrackingPoint('face')

mask.setEvaluator((frame) => {
  const { x, y } = track.sample(frame)
  return { cx: x, cy: y, radius: 0.25, softness: 0.3 }
})

Pairs well with

Demo project

The downloadable demo.cinerune is the Mask layers — combined demo: three masks compose with max to gate one effect-stack. The radial mask is the soft inner disc; pair with the painted “M→S” and the script-driven expanding ring to see how procedural, painted and scripted masks live together on the same render layer. Drop into the editor via File → Open from disk….