Skip to content

Make

Updated

Make a theme

A theme is two small text files, each written like CSS. A colour scheme sets the colours. A style sets the shape: corners, gaps, fonts, and how each part of the interface is dressed. The two are chosen apart in Settings ▸ Appearance.

A style with frosted panels and raised controls.
A style with frosted panels and raised controls.
@name "Harbour";
@base nocturne-dark;
:root {
--accent: #3fa7d6;
--socket-number: #ffd166;
}
  • @name is its name in the Colour scheme list. Without it, the file’s name is used.
  • @base is the built-in scheme it starts from, such as dark, light or gruvbox-dark. A colour the file leaves out is the base’s.
  • Each --name: #rrggbb; sets one colour. #rrggbbaa sets its opacity as well, and a percentage after a colour scales it, as #000000 60%.

The file is a .lumtheme. Your themes ▸ Import… reads one and Export… writes the colours in use as one, holding only those that differ from the base. A theme file written in JSON by an older Lumit still opens.

NameWhat it colours
surface0Background
surface1Panel
surface2Raised
surface3Control
surface4Control hover
timeline-out-of-rangeThe Timeline outside the work area
selection-fillA selected row
roomWhat Lantern’s panels stand on
text-primary, text-secondary, text-muted, text-disabledText
hairline, hairline-strongLines
accent, accent-hoverThe accent
animatedWhat is keyframed or being changed
success, warning, errorRoles
markerMarkers
cache-diskThe cache bar, on disk
waveform-rest, waveform-low, waveform-mid, waveform-highThe waveform and the multiwave’s bass, middle and treble
curve0 to curve3Graph editor curves
layer-footage, layer-sequence, layer-precomp, layer-solid, layer-text, layer-cameraLayer kinds
viewer-surroundRound the picture in the Viewer
socket-image, socket-number, socket-colour, socket-shape, socket-audioNode graph sockets and wires, and their legend
label1 to label9The label colours, in picker order

The Viewer surround, the sockets and the label colours are not in the theme editor.

/* Harbour: rounder and softer, with the Timeline set apart */
@base lantern;
:root {
--control-radius: 4;
--card-radius: 20;
--tile-gap: 14;
--window-inset: 14;
--sans: "Segoe UI";
}
pane { background: var(--surface1) 85%; border: 1 #ffffff14; shadow: 0 8 24 #00000066; }
timeline pane { background: var(--surface2); border: 1 var(--accent) 50%; }
button { radius: round; }
button:hover { background: var(--accent) 30%; }
well { radius: 8; border: none; shadow: inset 0 1 3 #000000aa; }
tab:on { background: var(--accent) 35%; }
The Harbour style above, over Lantern.
The Harbour style above, over Lantern.

A style is a .lumstyle file in the styles folder, or in a folder of its own inside it beside its pictures. Settings ▸ Appearance ▸ Your styles shows where the folder is: %APPDATA%\lumit\styles on Windows and ~/.config/lumit/styles on macOS and Linux. Each style is listed in Shape under the three built in. Lumit redraws when a style’s file is saved.

@base is the built-in style it starts from: studio, desk or lantern. A line Lumit cannot read is skipped, and Your styles shows the first, such as Line 4: there's no setting called colr.

:root sets the style’s variables. Every one is optional.

VariableWhat it sets
--control-radius, --float-radius, --card-radiusCorners of controls, menus and panels
--section-radius, --action-radius, --well-radius, --content-radiusCorners of sections, buttons, value boxes and layer bars
--pill-insetThe gap between a pill and the fill inside it
--tile-gap, --window-insetThe gap between panels and round the window
--card-shadowThe shadow under Lantern’s panels
--stroke-weightThe icons’ line weight
--label-casecaps, lower or sentence
--title-centred, --header-dot, --roomed, --tabular-numberstrue or false
--sans, --monoThe two typefaces, by name, from those installed on the computer or bundled with Lumit
--kicker-trackingThe spacing of panel labels
--roomA colour, or a picture as url("room.jpg")
--room-blurHow far a room picture is blurred
--iconsA folder of icons, as url("icons"). See Make an icon set.

A colour from the colour scheme, such as --accent or --surface1, set here replaces the scheme’s while the style is in use. var(--name) reads any variable or colour.

A rule is a part, the properties to set on it, and optionally where and when:

part { property: value; }
panel part:state { property: value; }
PartWhat it is
paneA panel’s box
headerA panel’s title line
tabA panel’s tab
buttonA button, including dropdowns and the menu bar’s names
wellA value box or a text field
menuA menu or a dropdown list
rowA row in a menu
dialogA dialogue, and the Settings window
tooltipA tooltip

A name before the part limits the rule to inside it: timeline button dresses only the Timeline’s buttons. The names are menu, dialog, menubar, toolbar and the panels: project, viewer, timeline, effect-controls, effects-and-presets, scopes, hierarchy, easing, graph, node, mixer, audio, audio-timeline, cut-timeline, text, paragraph, expressions, stagger, notes, align and extension.

StateWhen
:hoverThe pointer is over it
:pressedIt is held down
:onIt is the one in force: a fronted tab, a ticked button, a picked row
:disabledIt can’t be pressed
:focusIt has the keyboard
:activeA panel that has the focus

A button also takes .primary for the one filled action in a window and .dropdown for a dropdown’s face.

PropertyValue
backgroundA colour, or none
borderA width and a colour, as 1 #ffffff22, or none
border-colourA colour
radiusA number, or round for a capsule
shadowx y blur spread colour, with blur and spread optional. Several are separated by commas. inset casts one inwards. none takes them off.
colourIts words and icons
blurHow far what is behind it is blurred

Of two rules that set the same property, the one naming more wins: timeline button:hover over button:hover over button. A state or .primary counts for more than a panel’s name, so button:hover wins over timeline button. Of two that name as much, the later wins.

A see-through background with a blur frosts whatever is behind the part. Panels stand on the room, and menus, dialogues and tooltips over the panels.

:root { --room: url("room.jpg"); --room-blur: 40; }
pane { background: #ffffff 9%; blur: 28; border: 1 #ffffff2e; }
menu { background: #1b1b1e 55%; blur: 30; radius: 16; shadow: 0 18 40 #00000080; }
button { background: #17171a; radius: round; shadow: 0 3 8 #00000070, inset 0 1 0 #ffffff1a; }
well { background: #0d0d0f 80%; border: none; shadow: inset 0 2 4 #000000b8; }
The Layer menu frosting the panels under it.
The Layer menu frosting the panels under it.

A blurred part’s shadow is drawn round it and never under it. Reduce transparency in Settings ▸ Appearance draws every part solid and blurs nothing.

A colour scheme travels as its .lumtheme file, read by Your themes ▸ Import…. A style travels as its .lumstyle file, or as its folder with its pictures and icons, put in the styles folder.