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

ConcernHigh-level authoringNeonix JSON V2
Pattern and preset namesYesNo
Semantic motion intentYesNo
Shape geometryDescribedExplicit
Transform pivotRequestedanchor
World positionRequestedtranslate.z
Timeline windowRequestedtiming

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 anchor for a pivot, translate.z for world position and order for 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.