{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:animsmith:schema:contact-fragment:1",
  "title": "AnimSmith contact-fragment V1",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema", "schema_version", "producer", "artifact", "dependency_closure_identity", "clip", "duration_s", "events"],
  "properties": {
    "schema": {"const": "urn:animsmith:schema:contact-fragment:1"},
    "schema_version": {"const": 1},
    "producer": {"$ref": "#/$defs/producer"},
    "artifact": {"$ref": "#/$defs/identity"},
    "dependency_closure_identity": {"$ref": "#/$defs/identity"},
    "clip": {"$ref": "#/$defs/clip"},
    "duration_s": {"type": "number", "exclusiveMinimum": 0, "maximum": 9007199254740991},
    "events": {"type": "array", "maxItems": 4096, "items": {"$ref": "#/$defs/event"}},
    "extensions": {"type": "array", "minItems": 1, "maxItems": 256, "items": {"$ref": "#/$defs/extension"}}
  },
  "$defs": {
    "text": {"type": "string", "minLength": 1, "maxLength": 4096},
    "identifier": {"type": "string", "minLength": 1, "maxLength": 255},
    "identity": {"type": "object", "additionalProperties": false, "required": ["sha256", "bytes"], "properties": {"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}, "bytes": {"type": "integer", "minimum": 0, "maximum": 9007199254740991}}},
    "producer": {"type": "object", "additionalProperties": false, "required": ["tool", "version"], "properties": {"tool": {"$ref": "#/$defs/identifier"}, "version": {"$ref": "#/$defs/identifier"}}},
    "clip": {"oneOf": [
      {"type": "object", "additionalProperties": false, "required": ["scope", "clip_name"], "properties": {"scope": {"const": "document"}, "clip_name": {"$ref": "#/$defs/text"}}},
      {"type": "object", "additionalProperties": false, "required": ["scope", "logical_id", "source", "take_index", "take_name"], "properties": {"scope": {"const": "collection"}, "logical_id": {"$ref": "#/$defs/identifier"}, "source": {"$ref": "#/$defs/identifier"}, "take_index": {"type": "integer", "minimum": 0, "maximum": 4294967295}, "take_name": {"$ref": "#/$defs/text"}}}
    ]},
    "event": {"type": "object", "additionalProperties": false, "required": ["event_id", "role", "phase"], "properties": {"event_id": {"$ref": "#/$defs/identifier"}, "role": {"enum": ["left_foot", "right_foot", "left_hand", "right_hand", "left_toe", "right_toe", "left_knee", "right_knee", "left_elbow", "right_elbow", "root", "prop", "body"]}, "phase": {"enum": ["begin", "end", "marker"]}, "time": {"type": "number", "minimum": 0, "maximum": 1}, "window": {"type": "object", "additionalProperties": false, "required": ["start", "end"], "properties": {"start": {"type": "number", "minimum": 0, "maximum": 1}, "end": {"type": "number", "minimum": 0, "maximum": 1}}}, "confidence": {"type": "number", "minimum": 0, "maximum": 1}}, "oneOf": [{"required": ["time"], "not": {"required": ["window"]}}, {"required": ["window"], "not": {"required": ["time"]}}]},
    "extension_payload": {"type": "object", "maxProperties": 262144, "propertyNames": {"type": "string", "maxLength": 4096}, "additionalProperties": {"$ref": "#/$defs/extension_payload_value"}},
    "extension_payload_value": {"anyOf": [
      {"type": "null"},
      {"type": "boolean"},
      {"type": "number", "minimum": -9007199254740991, "maximum": 9007199254740991},
      {"type": "string", "maxLength": 4096},
      {"type": "array", "maxItems": 262144, "items": {"$ref": "#/$defs/extension_payload_value"}},
      {"type": "object", "maxProperties": 262144, "propertyNames": {"type": "string", "maxLength": 4096}, "additionalProperties": {"$ref": "#/$defs/extension_payload_value"}}
    ]},
    "extension": {"type": "object", "additionalProperties": false, "required": ["schema", "schema_version", "payload"], "properties": {"schema": {"$ref": "#/$defs/identifier"}, "schema_version": {"type": "integer", "minimum": 1, "maximum": 4294967295}, "payload": {"$ref": "#/$defs/extension_payload"}}}
  }
}
