ParamRig is an open-source workbench for human-tuning AI-built visual systems.
Coding agents are good at building something that renders. The last mile is where they slow down. A value is right or wrong because of how it looks, and turning that into prose costs several rounds and rarely lands on it. So instead of asking AI to own the finished creative result, ParamRig asks it to build the tool: a rig around a component, a design system, an SVG, an animation, a 3D scene or a running page. You take the controls, find the values with your eyes, and hand back numbers the agent can apply.
Uncertain ideas work the same way. A rough prototype becomes something you can manipulate, and the parameters you approve go into the product.
It is for creative developers, vibecoders and technical artists who build visual systems with coding agents, and lose time turning what they can see into precise code changes.
1. The agent builds the rig. It names the parameters that matter, with their ranges and their
kinds: numbers, colors, curves, choices, resources, collections. In this repository that is a rig
manifest. In a project you are building it is .paramrig/manifest.json and the
@paramrig/web SDK.
2. You tune it. The controls open beside a live preview. Compare against a reference, keep snapshots, animate a value on the timeline, and step back through the session's history.
3. The agent reads what you kept. An export from the workbench, or a reviewed batch written into the connected project for its own agent to pick up on the next run.
A rig open in the workbench: preview, inspector, and a timeline with grouped tracks and keyframes.
The workbench runs as the Docker Compose project paramrig, from the repository root. Nothing
needs a Node installation on the host.
docker compose up -dOpen http://localhost:5174/. docs/local-docker-development.md
covers stop and start, rebuilds, and one-off commands.
docker compose run --rm app npm test
docker compose run --rm app npm run lint
docker compose run --rm app npm run build| Route | What is there |
|---|---|
/ |
The library |
/r/contour-bloom, /r/tidal-planet |
Example rigs |
/r/controller-lab |
Every controller family in one rig |
/docs |
Documentation inside the app |
/docs/controls |
The controller catalog |
/web |
Connected web projects |
/?fixture=empty, /?fixture=error, /?fixture=loading, /?fixture=long |
Library states for QA |
The Web workspace opens a page from your own development server beside the controls its agent exposed. You change values, select DOM elements, draw on what you see, and approve a batch. The batch is written into the project, where the agent that maintains it can read the note, the element it points at, and the values you settled on.
In the project you are tuning:
npm install --save-dev @paramrig/webThen, from this repository, point the optional web profile at it:
PARAMRIG_PROJECT_DIR=/absolute/path/to/project docker compose --profile web up -dOpen /web and pick the project. Without PARAMRIG_PROJECT_DIR, the profile starts with the
bundled Fieldnotes example instead.
A running page beside the controls its own agent exposed.
The service only writes inside the project's .paramrig directory. It does not start the
application, install anything in it, or touch its source. docs/web-workspace.md
covers the setup and the file handoff. packages/web-sdk/README.md
is the integration guide, with the manifest fields, the binding kinds, the data-paramrig-*
attributes and JSON Schema for the manifest, the batch and the response.
One value contract, several instruments. A number can be a field, a stepper, a bar, a logarithmic
scale, a stepped scale, a knob, an angle dial or a seed. The same definitions drive the catalog at
/docs/controls, the inspector, the vector and scene editors, and the Controller lab.
Numbers, position and dimensions, color and appearance, choices, text and typography, curves and
profiles, resources, scene instruments, actions, collections, value sources and animation.
docs/CONTROLLERS.md has the contracts and the limits.
A document can be a drawing, or a drawing that carries a rig. Bind an element's property to a parameter and the document becomes tunable without leaving it.
Grouped tracks with zoom, keyframe selection and dragging, copy, paste and delete, precise time, value and easing controls, and a playback range. A whole drag records as one action. The History tab keeps the last 100 actions of the session. Snapshots can be named, restored with their reference, and removed, and those actions undo too. Reference and Current sample animated values at the same playhead position.
Right-click a control to reset it or animate it. Shift+F10 opens the same menu from the keyboard, and small screens get an actions button. Keys, track labels, backgrounds, group headers and the ruler have context menus of their own.
| Example | Renderer | What it shows |
|---|---|---|
| Contour bloom | SVG | Shape, relief and motion from a handful of numbers |
| Tidal planet | 3D | A procedural planet, with two animated tracks |
| Surface studies | HTML / CSS | Material and light |
| Type specimen | HTML / CSS | Rhythm and hierarchy |
| Controller lab | HTML / CSS | Every controller family at once |
| Desk study | Scene | A lamp and two props, arranged, with six controls |
| Paper lantern | Scene | A 3D document that carries its own rig |
| Aperture mark | Vector | A drawing that carries its own rig |
| Aperture poster | Vector | A poster laid out with guides, bound to eight controls |
Examples come from src/rigs/registry.ts.
docs/ADDING-A-RIG.md shows how to add a study without editing the
workspace shell.
| Document | What it covers |
|---|---|
docs/local-docker-development.md |
Commands, routes, rebuilds |
docs/CONTROLLERS.md |
Controller contracts and limits |
docs/ADDING-A-RIG.md |
Adding a rig |
docs/web-workspace.md |
The connected web workspace |
packages/web-sdk/README.md |
The @paramrig/web integration guide |
docs/scene-editor-keymap.md |
Scene editor keys |
Examples are bundled, and the workbench does not watch a folder on disk. An export is a file the agent reads, not a patch applied to your source. Undo reaches back a hundred actions and no further. Drafts and snapshots live in browser storage, and selection, track visibility and the keyframe clipboard are gone after a reload. There is no account, no AI chat and no telemetry.
CONTRIBUTING.md has the checks to run and how a pull request lands.
AGENTS.md has the repository conventions, including the rule against AI signatures in
commit messages. English is the canonical language for the application, APIs, rig definitions,
documentation and error messages, and translations derive from that source. To report a
vulnerability, see SECURITY.md.
The approved Coform logo and the branding study are in assets/brand/. The
application self-hosts Public Sans from public/fonts/, and the wordmark is vector geometry rather
than a font.
ParamRig is MIT licensed. The terms are in LICENSE, and both package.json files
declare it. packages/web-sdk carries its own copy so the published package travels with it.
That covers ParamRig's own code. Runtime dependencies keep their own licences, listed in
package.json, and the bundled Public Sans keeps the SIL Open Font License that ships beside it in
public/fonts/PublicSans-OFL.txt.




