One value 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 bounds cannot pass each other. The rig declares which one this value deserves.

The ParamRig controller catalogue: exact value, stepper, bar, bipolar bar, logarithmic scale, stepped scale, rotary knob, circular angle, minimum/maximum and random seed, each in its own card

Live. This is ParamRig itself, running in the page.A capture. The window here is too narrow to work in; open it full size to use the controllers.Open it full size ↗

Every card runs the same renderer the inspector runs, not a reproduction of it. The code icon on a card opens its current JSON value and its complete declaration.

Eleven families.

All 66, by name.

Read off the running catalogue, not typed out. Each family opens that family and no other.

  • Exact valuenumber
  • Number steppernumber
  • Number barnumber
  • Bipolar barnumber
  • Logarithmic scalenumber
  • Stepped scalenumber
  • Rotary knobnumber
  • Circular anglenumber
  • Minimum / maximumrange
  • Random seednumber
  • Vector 2Dvector
  • XY padvector
  • Vector 3Dvector
  • Dimensions 2Dvector
  • Dimensions 3Dvector
  • Direction 2Dgroup
  • Direction 3Dgroup
  • Rotation 3Dvector
  • Anchor / pivotvector
  • Transformgroup
  • Color & channelscolor
  • Color with opacitycolor
  • Color palettepalette
  • Color gradientgradient
  • Opacity ramppoints
  • Gradient geometrygroup
  • HDR colorgroup
  • Material presetselect
  • Shadowgroup
  • Switchswitch
  • Segmented choiceselect
  • Dropdownselect
  • Tri-state choiceselect
  • Searchable choiceselect
  • Multiple choicemultiselect
  • Object referenceselect
  • Texttext
  • Multiline texttext
  • Typographygroup
  • Variable font axesgroup
  • Cubic Béziercurve
  • Ramp / falloff profilepoints
  • Editable 2D pathpoints
  • Radial profileradial
  • Image / texture / SVGresource
  • Font / model / environmentresource
  • Parameter presetpreset
  • 2D transform gizmogizmo2d
  • 3D transform gizmogizmo3d
  • Texture frametextureFrame
  • Camera rigcamera
  • Apply compositionaction
  • Trigger impulseaction
  • Randomize allowed valuesaction
  • Reset numeric groupaction
  • Value listlist
  • Repeatable layerslist
  • Linked sides / cornersvector
  • Strokegroup
  • Durationnumber
  • Time positionnumber
  • Modulated valuenumber
  • Macronumber
  • Expression value sourcenumber
  • Blend amountnumber
  • Blended outputnumber

A value can also be a curve.

Grouped tracks, zoom, keyframe selection and dragging, copy and paste, precise time, value and easing controls, and a playback range. The curve editor edits the selected track, with its real keys and their interpolation, and a line that samples the easing in force.

Undo records a complete drag as one action. Scrubbing and playing do not fill the history. Changing the duration scales key times and the playback range, and that is undoable too.

The ParamRig timeline: transport controls, a ruler from 0 to 8 seconds, a Numbers track group and a circular-angle track carrying two keyframes with the interpolated line between them
Right-click a control to reset it or give it a track. Right-click a key to change its easing, or edit it with the parameter’s own numeric instrument.

Seven ways for a number to get its value.

local
The number is its own value. The default.
parameter
It reads another editable number.
expression
Parameter names, t, pi, arithmetic and a small allowlist of maths functions. It never runs JavaScript.
animation
A track on the timeline, with keys and easing.
macro
One input mapped into a declared output range.
modulation
Samples time without rewriting the local value. Noise is seeded. Envelopes have attack, hold and release.
blend
Interpolates two numeric endpoints, by a fixed amount or by another parameter.

Every top-level numeric parameter owns exactly one source, stored in drafts, snapshots and exports. Changing mode replaces the previous driver instead of stacking one on top of it. An invalid source or a circular reference leaves the stored value usable and reports the error on that parameter’s own control.

Two states, one playhead.

Reference and Current sample animated values at the same position in time, so a comparison is between two results and not between two moments.

Snapshots can be named, restored and removed, and restoring one brings back the active reference with it. Those actions are undoable. History keeps the last hundred actions of the session.

The edges of this build.

  • Tracks animate top-level numeric values. Composite, vector and color fields are editable, saved, exported and undoable, but do not yet take per-component tracks.
  • A generic profile control does not automatically become timeline easing. The rig decides how to consume its data.
  • JSON exports carry file metadata and a local resource identifier, not embedded binary files. A JSON alone does not move an image between browsers.
  • Drafts and snapshots persist in browser storage. Undo history lasts for the session and is not restored after a reload.
  • HDR is a color-and-intensity composite, not a claim that the browser’s color picker shows an HDR gamut.
  • Object references and font choices resolve against options the rig supplies. They do not discover scene objects or installed system fonts.

Every controller, in one page.

Each example runs the same field the inspector runs, with undo, saved local state and its declaration on show.

Open the full lab