Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Colour & style

The palette

manic uses a small, fixed set of colour names — no hex, no RGB. They’re tuned to glow on the dark default background:

nameisnameis
cyanelectric bluedimmuted grey-violet
magentahot pinkfgnear-white (default text)
limegreenpaneldark fill
voidthe background
color(sun, cyan);
recolor(sun, magenta, 0.5);   // animate to a new palette colour

Any colour, by hue

For a computed colour — a gradient, or one per item in a loop — use hue, which takes an angle from 0 to 360:

hue(sun, 200);              // a fixed hue
for i in 0..24 {
  hue(p{i}, 360*i/24);      // a full rainbow around the loop
}

That’s how the rainbow-ring loop gets its colours.

Glow

Every entity has a neon glow (0 = crisp, higher = brighter halo):

glow(sun, 8);   // strong halo
glow(grid, 0);  // crisp, no halo — good for fine detail

Easings

The optional last argument of a motion verb is the easing — the shape of the motion over time:

easingfeel
linearconstant speed (mechanical)
smoothease in and out (the default, natural)
in / outaccelerate / decelerate
backovershoot slightly and settle
bouncebounce at the end
elastic / springwobble / springy settle
move(p, (900, 400), 0.8, bounce);
move(p, (900, 400), 0.8, smooth);   // usually what you want

Canvas & size

canvas(...) sets the frame. Give it a preset or explicit pixels:

canvas("16:9");        // 1280x720  (also: 1080p, 4k, square, portrait/9:16, 4:3)
canvas(1280, 720);     // explicit

portrait / 9:16 is 1080×1920 — pair it with the reel render preset for vertical / social clips.

Next: loops, variables, and macros → The language layer.