motionloom 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/README.md +123 -17
  3. package/ROADMAP.md +8 -3
  4. package/SKILL.md +34 -3
  5. package/agent-card.json +48 -5
  6. package/agent-surfaces.json +8 -1
  7. package/artifact-adapter-registry.json +53 -0
  8. package/bin/motionloom.mjs +41 -4
  9. package/docs/AGENT-INTEGRATION.md +15 -2
  10. package/docs/CHECKLIST.md +21 -0
  11. package/docs/STATUS.md +2 -2
  12. package/docs/audits/data/deep-stress-latest.json +65 -65
  13. package/docs/releases/2.3.0.md +33 -0
  14. package/docs/releases/2.4.0.md +31 -0
  15. package/docs/releases/npm-publish-from-workstation.md +19 -8
  16. package/docs/research/agent-skill-ecosystem-notes.md +47 -0
  17. package/docs/research/ai-animation-tools-2026-notes.md +81 -0
  18. package/docs/research/ai-animation-tools-2026-report.md +168 -0
  19. package/docs/research/ai-pilot-ingest-notes.md +29 -0
  20. package/examples/agent-consumer/ai-generated-pilot/hero-male.json +10 -0
  21. package/examples/agent-consumer/ai-generated-pilot-provenance.json +55 -0
  22. package/examples/agent-consumer/ai-pilot-scout/CHATGPT-HANDOFF.md +70 -0
  23. package/examples/agent-consumer/ai-pilot-scout/CODEX-HANDOFF.md +80 -0
  24. package/examples/agent-consumer/ai-pilot-scout/README.md +39 -0
  25. package/examples/agent-consumer/ai-pilot-scout/chatgpt-geometry-correction-prompt.md +55 -0
  26. package/examples/agent-consumer/ai-pilot-scout/chatgpt-pose-generation-prompt.md +78 -0
  27. package/examples/agent-consumer/ai-pilot-scout/partial-handoff.json +73 -0
  28. package/examples/agent-consumer/artifact-intake/hero-motion-controls.json +15 -0
  29. package/examples/agent-consumer/artifact-intake/hero-motion-export.json +14 -0
  30. package/examples/agent-consumer/artifact-intake/hero-motion-provenance.json +20 -0
  31. package/examples/agent-consumer/artifact-intake/hero-motion-receipt.json +16 -0
  32. package/examples/agent-consumer/asset-consistency/assets/forest-back.png +0 -0
  33. package/examples/agent-consumer/asset-consistency/assets/forest-front.png +0 -0
  34. package/examples/agent-consumer/asset-consistency/assets/forest-mid.png +0 -0
  35. package/examples/agent-consumer/asset-consistency/assets/hero-atlas.png +0 -0
  36. package/examples/agent-consumer/asset-consistency/assets/hero-frame-00.png +0 -0
  37. package/examples/agent-consumer/asset-consistency/assets/hero-frame-01.png +0 -0
  38. package/examples/agent-consumer/asset-consistency/assets/hero-frame-02.png +0 -0
  39. package/examples/agent-consumer/asset-consistency/assets/hero-frame-03.png +0 -0
  40. package/examples/agent-consumer/asset-consistency/forest-layered-map.json +53 -0
  41. package/examples/agent-consumer/asset-consistency/hero-atlas-contract.json +24 -0
  42. package/examples/agent-consumer/asset-consistency/hero-identity.json +51 -0
  43. package/examples/agent-consumer/asset-consistency/hero-walk-action-set.json +27 -0
  44. package/examples/agent-consumer/asset-consistency/hero-walk-frame-geometry.json +63 -0
  45. package/examples/agent-consumer/rig-compatibility/hero-walk-fixture-rig.json +13 -0
  46. package/examples/agent-consumer/rive-package-gate/README.md +20 -0
  47. package/examples/agent-consumer/runtime-candidate/hero-walk-candidate.json +18 -0
  48. package/examples/agent-consumer/runtime-pilot/action-set.json +19 -0
  49. package/examples/agent-consumer/runtime-pilot/asset-identity.json +44 -0
  50. package/examples/agent-consumer/runtime-pilot/candidate.json +21 -0
  51. package/examples/agent-consumer/runtime-pilot/controls.json +35 -0
  52. package/examples/agent-consumer/runtime-pilot/export.json +17 -0
  53. package/examples/agent-consumer/runtime-pilot/provenance.json +38 -0
  54. package/examples/agent-consumer/runtime-pilot/receipt.json +30 -0
  55. package/package.json +65 -4
  56. package/references/agent-interoperability.md +11 -0
  57. package/references/browser-review-contract.md +7 -1
  58. package/references/intelligence-core.md +29 -2
  59. package/rig-adapter-registry.json +39 -0
  60. package/schemas/action-set.schema.json +42 -0
  61. package/schemas/agent-surfaces.schema.json +1 -1
  62. package/schemas/artifact-adapter-registry.schema.json +16 -0
  63. package/schemas/asset-identity.schema.json +117 -0
  64. package/schemas/asset-provenance.schema.json +183 -0
  65. package/schemas/atlas-contract.schema.json +48 -0
  66. package/schemas/control-track.schema.json +18 -0
  67. package/schemas/export-manifest.schema.json +19 -0
  68. package/schemas/frame-geometry.schema.json +79 -0
  69. package/schemas/generation-receipt.schema.json +20 -0
  70. package/schemas/layered-map.schema.json +75 -0
  71. package/schemas/rig-adapter-registry.schema.json +14 -0
  72. package/schemas/rig-compatibility.schema.json +53 -0
  73. package/schemas/rive-package-manifest.schema.json +43 -0
  74. package/schemas/runtime-candidate.schema.json +48 -0
  75. package/schemas/scene-manifest.schema.json +19 -0
  76. package/scripts/artifact-intake.py +408 -0
  77. package/scripts/asset-consistency.py +517 -0
  78. package/scripts/asset-provenance.py +395 -0
  79. package/scripts/build-ai-pilot.py +504 -0
  80. package/scripts/docs-audit.py +14 -2
  81. package/scripts/isolate-alpha-background.py +147 -0
  82. package/scripts/pr.py +2 -0
  83. package/scripts/quality-gate.py +127 -3
  84. package/scripts/report.py +135 -0
  85. package/scripts/resolve-task-bundle.py +84 -0
  86. package/scripts/review-hook.py +26 -4
  87. package/scripts/rig-compatibility.py +251 -0
  88. package/scripts/rive-package-gate.py +245 -0
  89. package/scripts/runtime-candidate.py +301 -0
  90. package/scripts/setup.mjs +500 -0
  91. package/scripts/skill-doctor.py +2 -1
  92. package/src/output/browser-review-smoke/asset-provenance.json +77 -0
  93. package/src/output/browser-review-smoke/manifest.json +1 -0
  94. package/src/output/browser-review-smoke/visual-truth.json +3 -3
  95. package/src/output/runtime-pilot-framer/asset-provenance.json +38 -0
  96. package/src/output/runtime-pilot-framer/browser-review.json +20 -0
  97. package/src/output/runtime-pilot-framer/framer-motion/runtime-telemetry.json +103 -0
  98. package/src/output/runtime-pilot-framer/manifest.json +31 -0
  99. package/src/output/runtime-pilot-framer/motion-spec.json +25 -0
  100. package/src/output/runtime-pilot-framer/runtime-evidence.json +96 -0
  101. package/src/output/runtime-pilot-framer/runtime-telemetry.json +100 -0
  102. package/src/output/runtime-pilot-framer/scene.jsx +52 -0
  103. package/src/output/runtime-pilot-framer/snapshot/.render-meta.json +9 -0
  104. package/src/output/runtime-pilot-framer/snapshot/frame-00.png +0 -0
  105. package/src/output/runtime-pilot-framer/snapshot/frame-100.png +0 -0
  106. package/src/output/runtime-pilot-framer/snapshot/frame-50.png +0 -0
  107. package/tests/scripts/run_tests.py +131 -0
  108. package/tests/scripts/test_ai_pilot_builder.py +128 -0
  109. package/tests/scripts/test_alpha_isolation.py +60 -0
  110. package/tests/scripts/test_artifact_intake.py +146 -0
  111. package/tests/scripts/test_asset_consistency.py +199 -0
  112. package/tests/scripts/test_rig_compatibility.py +105 -0
  113. package/tests/scripts/test_rive_package_gate.py +101 -0
  114. package/tests/scripts/test_runtime_candidate.py +95 -0
@@ -0,0 +1,117 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/asset-identity.schema.json",
4
+ "title": "MotionLoom Asset Identity Contract",
5
+ "description": "Stable identity and derivation locks shared by generated or code-authored runtime variants.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "asset_id", "asset_kind", "identity", "derivation"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "asset_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._/-]{2,127}$" },
12
+ "asset_kind": {
13
+ "type": "string",
14
+ "enum": ["character", "prop", "effect", "background", "tile", "ui", "rig"]
15
+ },
16
+ "identity": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["subject_id", "reference_hashes", "camera", "coordinate_system", "scale", "pivot", "palette_lock"],
20
+ "properties": {
21
+ "subject_id": { "type": "string", "minLength": 1 },
22
+ "reference_hashes": {
23
+ "type": "array",
24
+ "items": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
25
+ "minItems": 1,
26
+ "uniqueItems": true
27
+ },
28
+ "camera": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["projection", "width", "height", "focal_length"],
32
+ "properties": {
33
+ "projection": { "enum": ["orthographic", "perspective"] },
34
+ "width": { "type": "integer", "minimum": 1 },
35
+ "height": { "type": "integer", "minimum": 1 },
36
+ "focal_length": { "type": "number", "exclusiveMinimum": 0 }
37
+ }
38
+ },
39
+ "coordinate_system": { "enum": ["screen_y_down", "world_y_up"] },
40
+ "scale": { "type": "number", "exclusiveMinimum": 0 },
41
+ "pivot": {
42
+ "type": "object",
43
+ "additionalProperties": false,
44
+ "required": ["x", "y", "space"],
45
+ "properties": {
46
+ "x": { "type": "number", "minimum": 0, "maximum": 1 },
47
+ "y": { "type": "number", "minimum": 0, "maximum": 1 },
48
+ "space": { "enum": ["normalized_canvas", "world"] }
49
+ }
50
+ },
51
+ "palette_lock": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": ["colors", "delta_e_tolerance"],
55
+ "properties": {
56
+ "colors": {
57
+ "type": "array",
58
+ "items": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
59
+ "minItems": 1,
60
+ "uniqueItems": true
61
+ },
62
+ "delta_e_tolerance": { "type": "number", "minimum": 0, "maximum": 100 }
63
+ }
64
+ },
65
+ "style_profile": { "type": "string", "minLength": 1 },
66
+ "lighting_profile": { "type": "string", "minLength": 1 }
67
+ }
68
+ },
69
+ "derivation": {
70
+ "type": "object",
71
+ "additionalProperties": false,
72
+ "required": ["origin", "source_refs"],
73
+ "properties": {
74
+ "origin": { "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"] },
75
+ "generator": {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["model", "task_id", "prompt_hash"],
79
+ "properties": {
80
+ "model": { "type": "string", "minLength": 1 },
81
+ "task_id": { "type": "string", "minLength": 1 },
82
+ "prompt_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
83
+ "seed": { "type": ["integer", "string"] },
84
+ "tool_version": { "type": "string" }
85
+ }
86
+ },
87
+ "source_refs": {
88
+ "type": "array",
89
+ "items": { "type": "string", "minLength": 1 },
90
+ "minItems": 1
91
+ },
92
+ "derivation_chain": {
93
+ "type": "array",
94
+ "items": {
95
+ "type": "object",
96
+ "additionalProperties": false,
97
+ "required": ["step", "operation", "input_hashes", "output_hash"],
98
+ "properties": {
99
+ "step": { "type": "integer", "minimum": 0 },
100
+ "operation": { "type": "string", "minLength": 1 },
101
+ "input_hashes": { "type": "array", "items": { "type": "string", "pattern": "^[a-f0-9]{64}$" } },
102
+ "output_hash": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ },
108
+ "provenance_ref": { "type": "string", "minLength": 1 },
109
+ "notes": { "type": "string" }
110
+ },
111
+ "allOf": [
112
+ {
113
+ "if": {"properties": {"derivation": {"properties": {"origin": {"enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed"]}}, "required": ["origin"]}}, "required": ["derivation"]},
114
+ "then": {"properties": {"derivation": {"required": ["generator"]}}}
115
+ }
116
+ ]
117
+ }
@@ -0,0 +1,183 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/asset-provenance.schema.json",
4
+ "title": "MotionLoom asset provenance contract",
5
+ "description": "Asset-level origin, authority, readiness and human-governance contract. This schema never treats an Agent assertion as human approval.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "provenance_id", "asset", "authority", "readiness", "files", "license", "provenance_chain", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "1.0"},
11
+ "provenance_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "task_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
13
+ "scene": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{1,63}$"},
14
+ "created_at": {"type": "string", "format": "date-time"},
15
+ "asset": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["id", "path", "type", "framework"],
19
+ "properties": {
20
+ "id": {"type": "string", "minLength": 1},
21
+ "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
22
+ "type": {"type": "string", "minLength": 1},
23
+ "framework": {"type": "string", "minLength": 1},
24
+ "version": {"type": "string", "minLength": 1}
25
+ }
26
+ },
27
+ "authority": {
28
+ "type": "string",
29
+ "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"]
30
+ },
31
+ "readiness": {
32
+ "type": "string",
33
+ "enum": ["blocked", "runtime_ready", "review_required", "production_eligible", "production_approved"]
34
+ },
35
+ "generator": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": ["model", "task_id", "source", "generated_at"],
39
+ "properties": {
40
+ "model": {"type": "string", "minLength": 1},
41
+ "task_id": {"type": "string", "minLength": 1},
42
+ "source": {"type": "string", "minLength": 1},
43
+ "generated_at": {"type": "string", "format": "date-time"},
44
+ "prompt_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
45
+ "agent": {"type": "string", "minLength": 1}
46
+ }
47
+ },
48
+ "human_attestation": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["attestor", "attestor_type", "decision", "attested_at", "user_confirmed"],
52
+ "properties": {
53
+ "attestor": {"type": "string", "minLength": 1},
54
+ "attestor_type": {"type": "string", "enum": ["artist", "user"]},
55
+ "decision": {"type": "string", "enum": ["artist_authored", "accepted", "rejected"]},
56
+ "attested_at": {"type": "string", "format": "date-time"},
57
+ "user_confirmed": {"const": true},
58
+ "signature": {"type": "string", "minLength": 1}
59
+ }
60
+ },
61
+ "human_review": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "required": ["reviewer", "decision", "scope", "reviewed_at", "user_confirmed"],
65
+ "properties": {
66
+ "reviewer": {"type": "string", "minLength": 1},
67
+ "decision": {"type": "string", "enum": ["approved", "rejected", "changes_requested"]},
68
+ "scope": {"type": "string", "minLength": 1},
69
+ "reviewed_at": {"type": "string", "format": "date-time"},
70
+ "user_confirmed": {"const": true},
71
+ "notes": {"type": "string"}
72
+ }
73
+ },
74
+ "human_approval": {
75
+ "type": "object",
76
+ "additionalProperties": false,
77
+ "required": ["issued_by", "decision", "approved_at", "user_confirmed"],
78
+ "properties": {
79
+ "issued_by": {
80
+ "type": "object",
81
+ "additionalProperties": false,
82
+ "required": ["id", "type"],
83
+ "properties": {
84
+ "id": {"type": "string", "minLength": 1},
85
+ "type": {"type": "string", "enum": ["user", "artist"]}
86
+ }
87
+ },
88
+ "decision": {"const": "approved"},
89
+ "approved_at": {"type": "string", "format": "date-time"},
90
+ "user_confirmed": {"const": true},
91
+ "notes": {"type": "string"}
92
+ }
93
+ },
94
+ "license": {
95
+ "type": "object",
96
+ "additionalProperties": false,
97
+ "required": ["spdx", "source", "attribution"],
98
+ "properties": {
99
+ "spdx": {"type": "string", "minLength": 1},
100
+ "source": {"type": "string", "minLength": 1},
101
+ "attribution": {"type": "string", "minLength": 1}
102
+ }
103
+ },
104
+ "files": {
105
+ "type": "array",
106
+ "minItems": 1,
107
+ "items": {
108
+ "type": "object",
109
+ "additionalProperties": false,
110
+ "required": ["path", "role", "sha256"],
111
+ "properties": {
112
+ "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
113
+ "role": {"type": "string", "minLength": 1},
114
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
115
+ "bytes": {"type": "integer", "minimum": 0}
116
+ }
117
+ }
118
+ },
119
+ "provenance_chain": {
120
+ "type": "array",
121
+ "minItems": 1,
122
+ "items": {
123
+ "type": "object",
124
+ "additionalProperties": false,
125
+ "required": ["step", "actor", "source", "timestamp"],
126
+ "properties": {
127
+ "step": {"type": "string", "minLength": 1},
128
+ "actor": {"type": "string", "minLength": 1},
129
+ "source": {"type": "string", "minLength": 1},
130
+ "timestamp": {"type": "string", "format": "date-time"},
131
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
132
+ }
133
+ }
134
+ },
135
+ "runtime_evidence": {
136
+ "type": "object",
137
+ "additionalProperties": false,
138
+ "required": ["status", "runtime", "tested_at"],
139
+ "properties": {
140
+ "status": {"type": "string", "enum": ["pass", "fail", "not_run"]},
141
+ "runtime": {"type": "string", "minLength": 1},
142
+ "tested_at": {"type": "string", "format": "date-time"},
143
+ "evidence_path": {"type": "string", "minLength": 1},
144
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}
145
+ }
146
+ },
147
+ "full_gate": {
148
+ "type": "object",
149
+ "additionalProperties": false,
150
+ "required": ["status", "quality_gate", "visual_truth", "license", "checked_at"],
151
+ "properties": {
152
+ "status": {"type": "string", "enum": ["pass", "fail", "not_run"]},
153
+ "quality_gate": {"const": "pass"},
154
+ "visual_truth": {"const": "pass"},
155
+ "license": {"const": "pass"},
156
+ "checked_at": {"type": "string", "format": "date-time"},
157
+ "report_path": {"type": "string", "minLength": 1}
158
+ }
159
+ }
160
+ },
161
+ "allOf": [
162
+ {
163
+ "if": {"required": ["authority"], "properties": {"authority": {"enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed"]}}},
164
+ "then": {"required": ["generator"]}
165
+ },
166
+ {
167
+ "if": {"required": ["authority"], "properties": {"authority": {"const": "artist_authored"}}},
168
+ "then": {"required": ["human_attestation"]}
169
+ },
170
+ {
171
+ "if": {"required": ["authority"], "properties": {"authority": {"const": "unknown"}}},
172
+ "then": {"properties": {"readiness": {"const": "blocked"}}}
173
+ },
174
+ {
175
+ "if": {"required": ["readiness"], "properties": {"readiness": {"const": "production_approved"}}},
176
+ "then": {"required": ["human_approval", "full_gate"]}
177
+ },
178
+ {
179
+ "if": {"required": ["readiness"], "properties": {"readiness": {"const": "production_eligible"}}},
180
+ "then": {"required": ["full_gate"]}
181
+ }
182
+ ]
183
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/atlas-contract.schema.json",
4
+ "title": "MotionLoom Atlas Contract",
5
+ "description": "Deterministic atlas geometry and contamination boundary contract.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "image", "allow_rotation", "padding_px", "extrude_px", "regions"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "image": { "type": "string", "minLength": 1 },
12
+ "allow_rotation": { "const": false },
13
+ "padding_px": { "type": "integer", "minimum": 0 },
14
+ "extrude_px": { "type": "integer", "minimum": 0 },
15
+ "require_transparent_outside_regions": { "type": "boolean" },
16
+ "regions": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "items": {
20
+ "type": "object",
21
+ "additionalProperties": false,
22
+ "required": ["region_id", "frame_id", "rect", "trim", "pivot"],
23
+ "properties": {
24
+ "region_id": { "type": "string", "minLength": 1 },
25
+ "frame_id": { "type": "string", "minLength": 1 },
26
+ "rect": {
27
+ "type": "object",
28
+ "additionalProperties": false,
29
+ "required": ["x", "y", "width", "height"],
30
+ "properties": {
31
+ "x": { "type": "integer", "minimum": 0 },
32
+ "y": { "type": "integer", "minimum": 0 },
33
+ "width": { "type": "integer", "minimum": 1 },
34
+ "height": { "type": "integer", "minimum": 1 }
35
+ }
36
+ },
37
+ "trim": { "type": "boolean" },
38
+ "pivot": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["x", "y"],
42
+ "properties": { "x": { "type": "number" }, "y": { "type": "number" } }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/control-track.schema.json",
4
+ "title": "MotionLoom generation control track",
5
+ "description": "Hash-bound generation controls. It stores no prompt plaintext, API token or approval assertion.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "control_id", "asset_id", "references", "tracks", "output_profile", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "control_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "asset_id": {"type": "string", "minLength": 1},
13
+ "created_at": {"type": "string", "format": "date-time"},
14
+ "references": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["id", "path", "sha256", "role"], "properties": {"id": {"type": "string", "minLength": 1}, "path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "role": {"type": "string", "enum": ["identity", "style", "pose", "camera", "motion", "palette", "lighting", "other"]}}}},
15
+ "tracks": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["id", "kind", "binding", "value_hash"], "properties": {"id": {"type": "string", "minLength": 1}, "kind": {"type": "string", "enum": ["identity", "style", "camera", "motion", "pose", "seed", "negative_prompt", "lighting", "source"]}, "binding": {"type": "string", "enum": ["required", "advisory", "not_applicable"]}, "value_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "samples": {"type": "integer", "minimum": 0}}}},
16
+ "output_profile": {"type": "object", "additionalProperties": false, "required": ["kind"], "properties": {"kind": {"type": "string", "enum": ["image", "frame_sequence", "sprite_atlas", "layered_map", "video", "rigged_2d", "rigged_3d", "runtime_scene"]}, "fps": {"type": "number", "exclusiveMinimum": 0}, "expected_frame_count": {"type": "integer", "minimum": 1}, "loop": {"type": "boolean"}}}
17
+ }
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/export-manifest.schema.json",
4
+ "title": "MotionLoom artifact export manifest",
5
+ "description": "Binds an output set to its receipt and control track for downstream runtime and Dev Lab evidence. It does not certify production readiness.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "manifest_id", "asset_id", "receipt_ref", "control_track_ref", "outputs", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "manifest_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "asset_id": {"type": "string", "minLength": 1},
13
+ "created_at": {"type": "string", "format": "date-time"},
14
+ "receipt_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
15
+ "control_track_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
16
+ "runtime_evidence_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
17
+ "outputs": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "role", "sha256", "bytes", "target"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "role": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "bytes": {"type": "integer", "minimum": 0}, "target": {"type": "string", "enum": ["runtime_candidate", "preview", "archive"]}}}}
18
+ }
19
+ }
@@ -0,0 +1,79 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/frame-geometry.schema.json",
4
+ "title": "MotionLoom Frame Geometry Contract",
5
+ "description": "Measured geometry for action frames; measurements are validated against pixels, not trusted from AI self-reporting.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "asset_identity", "canvas", "invariants", "frames"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "asset_identity": { "type": "string", "minLength": 1 },
12
+ "canvas": {
13
+ "type": "object",
14
+ "additionalProperties": false,
15
+ "required": ["width", "height", "color_space", "alpha_mode"],
16
+ "properties": {
17
+ "width": { "type": "integer", "minimum": 1 },
18
+ "height": { "type": "integer", "minimum": 1 },
19
+ "color_space": { "enum": ["srgb", "linear-srgb"] },
20
+ "alpha_mode": { "enum": ["straight", "premultiplied"] }
21
+ }
22
+ },
23
+ "invariants": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["pivot_tolerance_px", "footline_tolerance_px", "bbox_drift_tolerance_px", "min_alpha_pixels"],
27
+ "properties": {
28
+ "pivot_tolerance_px": { "type": "number", "minimum": 0 },
29
+ "footline_tolerance_px": { "type": "number", "minimum": 0 },
30
+ "bbox_drift_tolerance_px": { "type": "number", "minimum": 0 },
31
+ "min_alpha_pixels": { "type": "integer", "minimum": 1 },
32
+ "allow_external_opaque_pixels": { "type": "boolean" }
33
+ }
34
+ },
35
+ "frames": {
36
+ "type": "array",
37
+ "minItems": 1,
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["frame_id", "image", "rect", "alpha_bbox", "pivot", "footline_px", "safe_rect", "sha256"],
42
+ "properties": {
43
+ "frame_id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]{1,63}$" },
44
+ "image": { "type": "string", "minLength": 1 },
45
+ "rect": { "$ref": "#/$defs/rect" },
46
+ "alpha_bbox": { "$ref": "#/$defs/rect" },
47
+ "pivot": { "$ref": "#/$defs/point" },
48
+ "footline_px": { "type": "number" },
49
+ "safe_rect": { "$ref": "#/$defs/rect" },
50
+ "bleed_margin_px": { "type": "integer", "minimum": 0 },
51
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "$defs": {
57
+ "rect": {
58
+ "type": "object",
59
+ "additionalProperties": false,
60
+ "required": ["x", "y", "width", "height"],
61
+ "properties": {
62
+ "x": { "type": "integer", "minimum": 0 },
63
+ "y": { "type": "integer", "minimum": 0 },
64
+ "width": { "type": "integer", "minimum": 1 },
65
+ "height": { "type": "integer", "minimum": 1 }
66
+ }
67
+ },
68
+ "point": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "required": ["x", "y", "space"],
72
+ "properties": {
73
+ "x": { "type": "number" },
74
+ "y": { "type": "number" },
75
+ "space": { "enum": ["pixels", "normalized"] }
76
+ }
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/generation-receipt.schema.json",
4
+ "title": "MotionLoom generation receipt",
5
+ "description": "Provider-neutral, hash-bound receipt for generated or imported visual artifacts. A receipt is evidence, never human approval.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "receipt_id", "asset", "authority", "provider", "control_track_ref", "provenance_ref", "outputs", "created_at"],
9
+ "properties": {
10
+ "schema_version": {"const": "0.1"},
11
+ "receipt_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{2,127}$"},
12
+ "created_at": {"type": "string", "format": "date-time"},
13
+ "asset": {"type": "object", "additionalProperties": false, "required": ["id", "kind", "intended_use"], "properties": {"id": {"type": "string", "minLength": 1}, "kind": {"type": "string", "enum": ["image", "frame_sequence", "sprite_atlas", "layered_map", "video", "rigged_2d", "rigged_3d", "runtime_scene"]}, "intended_use": {"type": "string", "enum": ["pilot", "runtime_candidate", "reference_only"]}}},
14
+ "authority": {"type": "string", "enum": ["ai_generated", "ai_assisted", "ai_assisted_human_reviewed", "artist_authored", "code_authored", "unknown"]},
15
+ "provider": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "kind", "invocation_mode", "task_id", "model", "generated_at", "cost_class"], "properties": {"adapter_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{2,127}$"}, "kind": {"type": "string", "enum": ["fixture", "internal_skill", "external_provider", "manual_import"]}, "invocation_mode": {"type": "string", "enum": ["none", "manual", "agent-mediated", "api"]}, "task_id": {"type": "string", "minLength": 1}, "model": {"type": "string", "minLength": 1}, "generated_at": {"type": "string", "format": "date-time"}, "cost_class": {"type": "string", "enum": ["included", "metered", "external", "unknown"]}, "prompt_hash": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}},
16
+ "control_track_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
17
+ "provenance_ref": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"},
18
+ "outputs": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["path", "role", "sha256", "bytes"], "properties": {"path": {"type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$)).+"}, "role": {"type": "string", "minLength": 1}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "bytes": {"type": "integer", "minimum": 0}}}}
19
+ }
20
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://motionloom.dev/schemas/layered-map.schema.json",
4
+ "title": "MotionLoom Layered Map Contract",
5
+ "description": "Multi-layer background contract for deterministic camera, parallax and seam validation.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["schema_version", "map_id", "coordinate_system", "world_bounds", "camera", "layers"],
9
+ "properties": {
10
+ "schema_version": { "const": "0.1" },
11
+ "map_id": { "type": "string", "minLength": 1 },
12
+ "coordinate_system": { "enum": ["world_y_up", "screen_y_down"] },
13
+ "world_bounds": { "$ref": "#/$defs/rect" },
14
+ "camera": {
15
+ "type": "object",
16
+ "additionalProperties": false,
17
+ "required": ["viewport_width", "viewport_height", "safe_bounds"],
18
+ "properties": {
19
+ "viewport_width": { "type": "number", "exclusiveMinimum": 0 },
20
+ "viewport_height": { "type": "number", "exclusiveMinimum": 0 },
21
+ "safe_bounds": { "$ref": "#/$defs/rect" },
22
+ "seam_tolerance": { "type": "number", "minimum": 0, "maximum": 1 }
23
+ }
24
+ },
25
+ "layers": {
26
+ "type": "array",
27
+ "minItems": 1,
28
+ "items": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": ["layer_id", "image", "z_index", "parallax", "anchor", "tileable", "world_bounds", "camera_safe_bounds"],
32
+ "properties": {
33
+ "layer_id": { "type": "string", "minLength": 1 },
34
+ "role": { "enum": ["sky", "far", "mid", "near", "ground", "occluder", "foreground", "fx"] },
35
+ "image": { "type": "string", "minLength": 1 },
36
+ "z_index": { "type": "integer" },
37
+ "parallax": {
38
+ "type": "object",
39
+ "additionalProperties": false,
40
+ "required": ["x", "y"],
41
+ "properties": {
42
+ "x": { "type": "number", "minimum": 0 },
43
+ "y": { "type": "number", "minimum": 0 },
44
+ "reference": { "enum": ["camera", "world"] }
45
+ }
46
+ },
47
+ "anchor": { "enum": ["top_left", "center", "bottom_left", "world_origin"] },
48
+ "tileable": {
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": ["x", "y"],
52
+ "properties": { "x": { "type": "boolean" }, "y": { "type": "boolean" } }
53
+ },
54
+ "world_bounds": { "$ref": "#/$defs/rect" },
55
+ "camera_safe_bounds": { "$ref": "#/$defs/rect" },
56
+ "blend": { "enum": ["normal", "add", "multiply", "screen"] },
57
+ "opacity": { "type": "number", "minimum": 0, "maximum": 1 }
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "$defs": {
63
+ "rect": {
64
+ "type": "object",
65
+ "additionalProperties": false,
66
+ "required": ["x", "y", "width", "height"],
67
+ "properties": {
68
+ "x": { "type": "number" },
69
+ "y": { "type": "number" },
70
+ "width": { "type": "number", "exclusiveMinimum": 0 },
71
+ "height": { "type": "number", "exclusiveMinimum": 0 }
72
+ }
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/lenhonbp/MotionLoom/blob/main/schemas/rig-adapter-registry.schema.json",
4
+ "title": "MotionLoom rig runtime adapter registry",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": ["schema_version", "registry_id", "generated_at", "adapters"],
8
+ "properties": {
9
+ "schema_version": {"const": "0.1"},
10
+ "registry_id": {"type": "string", "minLength": 1},
11
+ "generated_at": {"type": "string", "format": "date-time"},
12
+ "adapters": {"type": "array", "minItems": 1, "items": {"type": "object", "additionalProperties": false, "required": ["adapter_id", "target", "framework", "status", "evidence", "limitations"], "properties": {"adapter_id": {"type": "string", "minLength": 1}, "target": {"type": "string", "minLength": 1}, "framework": {"type": "string", "minLength": 1}, "status": {"type": "string", "enum": ["verified", "project_integrated", "static_validated", "scaffold_only", "disabled"]}, "evidence": {"type": "array", "minItems": 1, "items": {"type": "object", "required": ["path", "sha256"], "properties": {"path": {"type": "string"}, "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"}}, "additionalProperties": true}}, "limitations": {"type": "array", "items": {"type": "string"}}}}}
13
+ }
14
+ }