Skip to content
eddie_dodd edited this page Sep 9, 2026 · 1 revision

Panels

Every module has two panels, a dark one and a light one. Right click the module and choose under "Panel". The choice is saved with the patch, per module instance, so two copies of the same module can differ. Dark is the default.

Rack 2 has no panel theming of its own, so this is implemented in the plugin.

Colours

Dark Light
Panel #101010 #edeae3
Module name #b4b4b4 #2e2e2e
Control labels #9a9a9a #3a3a3a
Tick marks, wordmark #6f6f6f #5f5f5f

Two sets rather than one, because no single label colour is legible on both grounds. The best compromise value sits below the readable threshold on both, which is worse than picking two.

Knobs

Knob face #8b9a8c, outline and pointer #4f5a50.

The knobs, attenuverters, jacks and switch are drawn for this plugin rather than taken from Rack's component library, so one set of artwork has to work on both panel colours. The outline is what makes that possible. A flat disc disappears into the light panel and floats on the dark one.

The outline is structural rather than decorative. Removing it for a flatter look breaks the light panel.

Labels are neutral gray and never tinted towards the knob colour. The knobs being the only colour on the panel is the point.

Regenerating the artwork

scripts/genpanels.py writes all ten panel SVGs. It needs fonttools and a copy of DejaVu Sans.

Label text is emitted as outlines rather than as <text>. Rack renders SVG with nanosvg, which ignores text elements entirely, so any panel relying on live text renders with the labels missing.

tools/panelcheck.sh parses the panels with Rack's own nanosvg and checks the page size, the HP, that nothing overflows the panel and that the hidden components layer is not being drawn.

Clone this wiki locally