One contract, sixty-six instruments.

A number is a number. How you turn it is not: an exact field, a gauge, a logarithmic scale that marks its decades, a knob, a range whose two bounds cannot pass each other. The rig declares which one this value deserves, and the catalogue at /docs/controls in the workbench runs all of them against the same renderer the inspector uses.

The families

Family Count
Numbers 10
Position and dimensions 10
Color and appearance 9
Choices 7
Text and typography 4
Curves and profiles 4
Resources 3
Scene instruments 4
Actions 4
Collections 4
Value sources and animation 7

Instruments shows what is in each one.

What a value may be

  • Numbers can declare a view, a scale, stops, units and display bounds. A logarithmic scale needs positive bounds. Discrete stops should be sorted and inside the numeric bounds, and the arrow keys then follow the stops instead of the raw step.
  • A measured number with no declared view renders as a bar: the field is its own track, filled to the value, one row instead of two.
  • A bipolar range fills from its zero, so a neutral value reads as empty, not half full.
  • Convertible display units declare a positive factor from the displayed unit to the manifest’s base unit. Drafts, snapshots and exports always keep the normalised base number.
  • A vector is an array with one number per declared axis. A range is an ordered pair. A spatial pad edits both coordinates in one history transaction.
  • Colors are #RRGGBB or #RRGGBBAA. HDR is a color-and-intensity composite, not a claim that the browser’s color picker shows an HDR gamut.
  • Multipoint profiles are { x, y }[] with straight segments between points. For Bézier handles there is a separate cubic Bézier control.
  • A radial profile stores layers of { name, color, enabled, points }, where x is radius and y is value, both 0 to 1. Overlapping layers share one graph.
  • Groups store an object keyed by child id. Lists store an array described by their item definition, and entries can be added, removed or moved.
  • Object references and font choices resolve against options the rig supplies. They do not discover scene objects or installed system fonts.

normalizeValue validates saved drafts and every session edit, nested groups and lists included. Unsupported options, malformed shapes and non-finite numbers fall back to defaults, and bounded numeric data is clamped.

Keyboard and history

Pads, points, dials, sliders and ranges all expose a keyboard alternative and an exact number field. Radio choices take arrow navigation, and lists expose move buttons. Text commits on blur or Enter, with Cmd or Ctrl and Enter for multiline, and Escape discards the draft. Composition through an input method does not commit early.

Draft values and snapshots persist locally. Undo history lasts for the session and is not restored after a reload.