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 set of semantic colour names. The default mono template maps all of them to distinct black-and-white luminance levels; choose plain or another colour template when hue should carry meaning. Their original neon roles are:

nameisnameis
cyanelectric bluegoldwarm amber
magentahot pinkredwarm red
limegreenorangeorange
bluetrue blue (≠ cyan)dimmuted grey-violet
voidthe backgroundfgnear-white (default text)
paneldark fill
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: 4:5, square, portrait/9:16, 4:3, 1080p, 4k)
canvas(1280, 720);     // explicit

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

Use --canvas portrait|4:5|square|16:9|WIDTHxHEIGHT to reframe one responsive source without changing its canvas(...) line. The override is applied before w, h, cx, cy, and build-time layout branches are evaluated.

Templates — the whole look

For the complete selection guide, CLI override rules, mono tips and a runnable black-and-white example, see Templates — choose the whole visual system.

template("...") sets the movie’s look in one call: the background, how the palette renders, the glow, and any page chrome. Put it near the top, after canvas(...).

canvas("16:9");
template("paper");     // a flat white exam-paper page
templatelook
mono (aliases monochrome, bw)default — black-and-white editorial, near-black page, subtle glow
plainoriginal neon palette on near-black, no chrome
terminalthe neon-terminal frame (border, title, masthead)
paper (aliases light, print)white page, dark ink — for print / textbook figures
blueprint (alias blue)white & cyan lines on deep navy
shortsrestrained dark creator palette for Shorts and Reels

Omitting template(...) is exactly the same as selecting template("mono"). Use explicit plain when an older scene should keep the original neon colours.

The clever part is the palette remap: a template doesn’t just change the background, it re-maps every named palette colour to that template’s role. So on mono, cyan, magenta, lime, gold, red, orange, and blue become carefully separated greys; on paper, panel → light box, fg → dark ink, lime → forest green, and so on — which means your existing scene renders legibly on the new page without recolouring anything. That’s why template("paper") alone turns a pulley, a spring, or a linked list into a clean textbook figure (see Elevating a scene). paper/blueprint also drop the glow for crisp print output.

hue(...) and future explicit RGB colours are intentionally bespoke, so they pass through instead of being forced to greyscale. Use the named palette colours when a scene must remain strictly monochrome.

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