{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/aousd/refs/heads/main/json-schema/aousd-usd-layer-schema.json",
  "title": "USDLayer",
  "description": "A USD layer — the fundamental unit of composition in OpenUSD, representing a file or in-memory container for scene description data including prim specs, property specs, and composition arcs.",
  "type": "object",
  "properties": {
    "identifier": {"type": "string", "description": "The unique identifier (path or URI) for this layer.", "example": "/assets/characters/hero/hero.usda"},
    "realPath": {"type": "string", "description": "The resolved filesystem path for this layer.", "example": "/studio/assets/characters/hero/hero.usda"},
    "fileFormat": {"type": "string", "description": "The file format identifier for this layer.", "enum": ["usda", "usdb", "usd", "usdz"], "example": "usda"},
    "defaultPrim": {"type": "string", "description": "The default prim path to use when referencing this layer.", "example": "Hero"},
    "startTimeCode": {"type": "number", "description": "The start time code for the layer's time-sampled data.", "example": 1.0},
    "endTimeCode": {"type": "number", "description": "The end time code for the layer's time-sampled data.", "example": 240.0},
    "framesPerSecond": {"type": "number", "description": "Frames per second for time code interpretation.", "example": 24.0},
    "timeCodesPerSecond": {"type": "number", "description": "Time codes per second (usually matches framesPerSecond).", "example": 24.0},
    "metersPerUnit": {"type": "number", "description": "Scene scale in meters per USD unit.", "example": 0.01},
    "upAxis": {"type": "string", "enum": ["Y", "Z"], "description": "The up axis convention for the scene.", "example": "Y"},
    "documentation": {"type": "string", "description": "Human-readable documentation for the layer.", "example": "Hero character asset for production."},
    "subLayerPaths": {"type": "array", "items": {"type": "string"}, "description": "Ordered list of sublayer paths composed by this layer.", "example": ["/assets/characters/hero/hero_rig.usda", "/assets/characters/hero/hero_model.usda"]}
  },
  "required": ["identifier"]
}
