Authoring model
Intent first
High-level authoring is where a person, Claude via MCP, a template, or the editor can express rich intent:
{
"kind": "hero-intro",
"headline": "A calm beginning",
"motion": "fade-up"
}
This is illustrative high-level input. The fields are not Neonix JSON V2 fields. The compiler expands and normalizes this intent before output.
Atomic input
An atomic document is explicit and deterministic:
{
"format": "motion-protocol",
"formatVersion": 2,
"composition": { "width": 1920, "height": 1080, "fps": 30 },
"layers": []
}
What belongs where
| Concern | High-level authoring | Neonix JSON V2 |
|---|---|---|
| Pattern and preset names | Yes | No |
| Semantic motion intent | Yes | No |
| Shape geometry | Described | Explicit |
| Transform pivot | Requested | anchor |
| World position | Requested | translate.z |
| Timeline window | Requested | timing |
Determinism
An authoring surface may be expressive. The JSON result must be explicit enough for preview and export without guessing.
MCP authoring
MCP is an authoring transport, not a second format. An agent should express intent first, then create or update explicit Neonix JSON V2 fields.
- Ask for missing composition dimensions, timing, asset references and font information.
- Use
anchorfor a pivot,translate.zfor world position andorderfor paint order. - Keep fill opacity, stroke opacity and effect order independent.
- Do not invent renderer, shader, texture, buffer or preview-state fields.
- Keep patterns, presets, templates and components labeled as intent until a lowering rule exists.
For a targeted edit, send a small patch instead of replacing the whole document:
{
"operation": "update",
"target": "layers.hero.transform",
"set": {
"anchor": { "x": 0.5, "y": 0.5, "z": 0 },
"rotate": { "x": 0, "y": 0, "z": -4 }
}
}
Static example policy
JSON blocks in this guide teach structure. They are not validated or rendered by the web documentation page.