@ue-shed/protocol 0.6.0 → 0.7.1

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 (33) hide show
  1. package/contracts/cameras/map-tile/v1/README.md +7 -0
  2. package/contracts/cameras/map-tile/v1/capture-response.schema.json +97 -25
  3. package/contracts/cameras/map-tile/v1/manifest.schema.json +136 -37
  4. package/contracts/cameras/map-tile/v1/plan.schema.json +132 -36
  5. package/contracts/cameras/map-tile/v1/release-result.schema.json +12 -0
  6. package/contracts/cameras/render/v1/README.md +33 -0
  7. package/contracts/cameras/render/v1/begin-result.schema.json +712 -0
  8. package/contracts/cameras/render/v1/capabilities.schema.json +201 -0
  9. package/contracts/cameras/render/v1/end-result.schema.json +185 -0
  10. package/contracts/cameras/render/v1/fixtures/frame-orthographic.json +31 -0
  11. package/contracts/cameras/render/v1/fixtures/frame-perspective.json +31 -0
  12. package/contracts/cameras/render/v1/fixtures/invalid-frame-mixed-projection.json +32 -0
  13. package/contracts/cameras/render/v1/fixtures/invalid-frame-size.json +31 -0
  14. package/contracts/cameras/render/v1/fixtures/invalid-session-backend-fields.json +40 -0
  15. package/contracts/cameras/render/v1/fixtures/invalid-session-budget.json +39 -0
  16. package/contracts/cameras/render/v1/fixtures/invalid-session-future.json +39 -0
  17. package/contracts/cameras/render/v1/fixtures/session-camera-regions.json +51 -0
  18. package/contracts/cameras/render/v1/fixtures/session-editor-viewport.json +40 -0
  19. package/contracts/cameras/render/v1/fixtures/session-scene-capture.json +39 -0
  20. package/contracts/cameras/render/v1/frame-evidence.schema.json +771 -0
  21. package/contracts/cameras/render/v1/frame-request.schema.json +219 -0
  22. package/contracts/cameras/render/v1/frame-status.schema.json +1076 -0
  23. package/contracts/cameras/render/v1/policy.schema.json +510 -0
  24. package/contracts/cameras/render/v1/preflight.schema.json +68 -0
  25. package/contracts/cameras/render/v1/review-inspection-request.schema.json +342 -0
  26. package/contracts/cameras/render/v1/review-inspection-result.schema.json +2030 -0
  27. package/contracts/cameras/render/v1/review-realization-request.schema.json +417 -0
  28. package/contracts/cameras/render/v1/review-realization-result.schema.json +454 -0
  29. package/contracts/cameras/render/v1/session-request.schema.json +617 -0
  30. package/contracts/cameras/review/v1/README.md +7 -0
  31. package/contracts/cameras/review/v1/capture-request.schema.json +247 -61
  32. package/contracts/cameras/review/v1/capture-response.schema.json +820 -192
  33. package/package.json +1 -1
@@ -16,25 +16,44 @@
16
16
  "tilePixelSize"
17
17
  ],
18
18
  "properties": {
19
- "capture": { "$ref": "#/$defs/capturePolicy" },
19
+ "capture": {
20
+ "$ref": "#/$defs/capturePolicy"
21
+ },
20
22
  "contract": {
21
23
  "type": "object",
22
24
  "additionalProperties": false,
23
25
  "required": ["name", "version"],
24
26
  "properties": {
25
- "name": { "const": "ue-shed-map-capture-plan" },
26
- "version": { "$ref": "#/$defs/version" }
27
+ "name": {
28
+ "const": "ue-shed-map-capture-plan"
29
+ },
30
+ "version": {
31
+ "$ref": "#/$defs/version"
32
+ }
27
33
  }
28
34
  },
29
- "gutterPixels": { "type": "integer", "minimum": 0, "maximum": 32 },
30
- "id": { "$ref": "#/$defs/id" },
35
+ "gutterPixels": {
36
+ "type": "integer",
37
+ "minimum": 0,
38
+ "maximum": 32
39
+ },
40
+ "id": {
41
+ "$ref": "#/$defs/id"
42
+ },
31
43
  "levels": {
32
44
  "type": "object",
33
45
  "additionalProperties": false,
34
46
  "required": ["coarsestUnitsPerPixel", "count"],
35
47
  "properties": {
36
- "coarsestUnitsPerPixel": { "type": "number", "exclusiveMinimum": 0 },
37
- "count": { "type": "integer", "minimum": 1, "maximum": 24 }
48
+ "coarsestUnitsPerPixel": {
49
+ "type": "number",
50
+ "exclusiveMinimum": 0
51
+ },
52
+ "count": {
53
+ "type": "integer",
54
+ "minimum": 1,
55
+ "maximum": 24
56
+ }
38
57
  }
39
58
  },
40
59
  "output": {
@@ -42,31 +61,61 @@
42
61
  "additionalProperties": false,
43
62
  "required": ["imageFormat", "publication"],
44
63
  "properties": {
45
- "imageFormat": { "const": "png" },
46
- "publication": { "const": "local_immutable" }
64
+ "imageFormat": {
65
+ "const": "png"
66
+ },
67
+ "publication": {
68
+ "const": "local_immutable"
69
+ }
47
70
  }
48
71
  },
49
- "project": { "$ref": "#/$defs/project" },
50
- "requestedBounds": { "$ref": "#/$defs/bounds" },
51
- "tilePixelSize": { "type": "integer", "minimum": 64, "maximum": 4096 }
72
+ "project": {
73
+ "$ref": "#/$defs/project"
74
+ },
75
+ "requestedBounds": {
76
+ "$ref": "#/$defs/bounds"
77
+ },
78
+ "tilePixelSize": {
79
+ "type": "integer",
80
+ "minimum": 64,
81
+ "maximum": 4096
82
+ }
52
83
  },
53
84
  "$defs": {
54
- "id": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$" },
85
+ "id": {
86
+ "type": "string",
87
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$"
88
+ },
55
89
  "version": {
56
90
  "type": "object",
57
91
  "additionalProperties": false,
58
92
  "required": ["major", "minor"],
59
- "properties": { "major": { "const": 1 }, "minor": { "const": 0 } }
93
+ "properties": {
94
+ "major": {
95
+ "const": 1
96
+ },
97
+ "minor": {
98
+ "enum": [0, 1]
99
+ }
100
+ }
60
101
  },
61
102
  "bounds": {
62
103
  "type": "object",
63
104
  "additionalProperties": false,
64
105
  "required": ["minX", "minY", "maxX", "maxY"],
65
106
  "properties": {
66
- "minX": { "type": "number" },
67
- "minY": { "type": "number" },
68
- "maxX": { "type": "number" },
69
- "maxY": { "type": "number" }
107
+ "minX": {
108
+ "type": "number"
109
+ },
110
+ "minY": {
111
+ "type": "number"
112
+ },
113
+ "maxX": {
114
+ "type": "number"
115
+ },
116
+ "maxY": {
117
+ "type": "number"
118
+ }
70
119
  }
71
120
  },
72
121
  "project": {
@@ -74,8 +123,13 @@
74
123
  "additionalProperties": false,
75
124
  "required": ["id", "mapPath"],
76
125
  "properties": {
77
- "id": { "$ref": "#/$defs/id" },
78
- "mapPath": { "type": "string", "pattern": "^/[A-Za-z0-9_./-]+$" }
126
+ "id": {
127
+ "$ref": "#/$defs/id"
128
+ },
129
+ "mapPath": {
130
+ "type": "string",
131
+ "pattern": "^/[A-Za-z0-9_./-]+$"
132
+ }
79
133
  }
80
134
  },
81
135
  "dataLayers": {
@@ -84,14 +138,20 @@
84
138
  "type": "object",
85
139
  "additionalProperties": false,
86
140
  "required": ["mode"],
87
- "properties": { "mode": { "const": "unchanged" } }
141
+ "properties": {
142
+ "mode": {
143
+ "const": "unchanged"
144
+ }
145
+ }
88
146
  },
89
147
  {
90
148
  "type": "object",
91
149
  "additionalProperties": false,
92
150
  "required": ["mode", "states"],
93
151
  "properties": {
94
- "mode": { "const": "explicit" },
152
+ "mode": {
153
+ "const": "explicit"
154
+ },
95
155
  "states": {
96
156
  "type": "array",
97
157
  "maxItems": 64,
@@ -100,8 +160,14 @@
100
160
  "additionalProperties": false,
101
161
  "required": ["name", "state"],
102
162
  "properties": {
103
- "name": { "type": "string", "minLength": 1, "maxLength": 1024 },
104
- "state": { "enum": ["unloaded", "loaded", "activated"] }
163
+ "name": {
164
+ "type": "string",
165
+ "minLength": 1,
166
+ "maxLength": 1024
167
+ },
168
+ "state": {
169
+ "enum": ["unloaded", "loaded", "activated"]
170
+ }
105
171
  }
106
172
  }
107
173
  }
@@ -114,15 +180,23 @@
114
180
  "additionalProperties": false,
115
181
  "required": ["dataLayers", "orientation", "render", "z"],
116
182
  "properties": {
117
- "dataLayers": { "$ref": "#/$defs/dataLayers" },
183
+ "dataLayers": {
184
+ "$ref": "#/$defs/dataLayers"
185
+ },
118
186
  "orientation": {
119
187
  "type": "object",
120
188
  "additionalProperties": false,
121
189
  "required": ["pitch", "roll", "yaw"],
122
190
  "properties": {
123
- "pitch": { "const": -90 },
124
- "roll": { "const": 0 },
125
- "yaw": { "const": 0 }
191
+ "pitch": {
192
+ "const": -90
193
+ },
194
+ "roll": {
195
+ "const": 0
196
+ },
197
+ "yaw": {
198
+ "const": 0
199
+ }
126
200
  }
127
201
  },
128
202
  "render": {
@@ -130,21 +204,33 @@
130
204
  "additionalProperties": false,
131
205
  "required": ["effects", "lodPolicy", "profile"],
132
206
  "properties": {
133
- "exposureEV100": { "type": "number", "minimum": -20, "maximum": 30 },
207
+ "exposureEV100": {
208
+ "type": "number",
209
+ "minimum": -20,
210
+ "maximum": 30
211
+ },
134
212
  "effects": {
135
213
  "type": "object",
136
214
  "additionalProperties": false,
137
215
  "required": ["fog", "volumetricFog"],
138
216
  "properties": {
139
- "fog": { "type": "boolean" },
140
- "volumetricFog": { "type": "boolean" }
217
+ "fog": {
218
+ "type": "boolean"
219
+ },
220
+ "volumetricFog": {
221
+ "type": "boolean"
222
+ }
141
223
  }
142
224
  },
143
225
  "lodDistanceScaleByZoom": {
144
226
  "type": "array",
145
227
  "minItems": 1,
146
228
  "maxItems": 24,
147
- "items": { "type": "number", "minimum": 0.1, "maximum": 100 }
229
+ "items": {
230
+ "type": "number",
231
+ "minimum": 0.1,
232
+ "maximum": 100
233
+ }
148
234
  },
149
235
  "lodPolicy": {
150
236
  "enum": ["natural", "fixed_lod_zero", "per_level_distance_scale"]
@@ -162,15 +248,25 @@
162
248
  {
163
249
  "if": {
164
250
  "properties": {
165
- "lodPolicy": { "const": "per_level_distance_scale" }
251
+ "lodPolicy": {
252
+ "const": "per_level_distance_scale"
253
+ }
166
254
  }
167
255
  },
168
- "then": { "required": ["lodDistanceScaleByZoom"] },
169
- "else": { "not": { "required": ["lodDistanceScaleByZoom"] } }
256
+ "then": {
257
+ "required": ["lodDistanceScaleByZoom"]
258
+ },
259
+ "else": {
260
+ "not": {
261
+ "required": ["lodDistanceScaleByZoom"]
262
+ }
263
+ }
170
264
  }
171
265
  ]
172
266
  },
173
- "z": { "type": "number" }
267
+ "z": {
268
+ "type": "number"
269
+ }
174
270
  }
175
271
  }
176
272
  }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://ue-shed.dev/contracts/cameras/map-tile/v1/release-result.schema.json",
4
+ "type": "object",
5
+ "properties": {
6
+ "released": { "type": "boolean" },
7
+ "restoration": { "type": "string", "enum": ["restored", "failed"] }
8
+ },
9
+ "required": ["released", "restoration"],
10
+ "additionalProperties": false,
11
+ "$defs": {}
12
+ }
@@ -0,0 +1,33 @@
1
+ # Camera render wire 1.0
2
+
3
+ These JSON schemas are the wire authorities. `@ue-shed/cameras` exposes matching Effect Schema
4
+ decoders; `check-render-contract.ts` detects shape drift and checks fixtures without rewriting the
5
+ authorities. `UEShed.Cameras.Rendering.WireConformance` checks the same request fixtures in C++.
6
+
7
+ The separately enabled UEShedCore capability is `cameras.render-session.v1`. The public Remote
8
+ Control library is `/Script/UEShedCamerasEditor.Default__UEShedCameraRenderingLibrary`.
9
+
10
+ | Method | Parameters | Result schema |
11
+ | --------------------------- | ---------------------------- | ------------- |
12
+ | GetCameraRenderCapabilities | None | capabilities |
13
+ | PreflightCameraRender | RequestJson: session-request | preflight |
14
+ | BeginCameraRender | RequestJson: session-request | begin-result |
15
+ | StartCameraFrame | RequestJson: frame-request | frame-status |
16
+ | PollCameraFrame | SessionId, OperationId | frame-status |
17
+ | EndCameraRender | SessionId | end-result |
18
+
19
+ Review's separately versioned `ue-shed-review-render-stages/1.0` uses
20
+ `ResolveReviewViewpoint(RequestJson)` and
21
+ `InspectRenderedReview(SessionId, RequestJson)` on `UEShedCameraReviewLibrary`.
22
+
23
+ Request JSON rejects unknown fields. Native semantic validation additionally rejects duplicate Data
24
+ Layer identities, unsupported renderer/exposure combinations, effective layer hierarchy conflicts,
25
+ world/project mismatch, contention, region overrides with preserved loading, exceeded resource
26
+ budgets and sizes beyond the connected RHI limit. These are preflight/frame failures, not silent
27
+ coercions. IDs correlate active operations; repeating an active Begin renews its lease. Repeated
28
+ frame input is idempotent while retained; changed input conflicts and expired input cannot recapture.
29
+
30
+ Frame evidence describes the source render. Artifact publication and optional Review assessment
31
+ are separate operations. There is no pixel-equivalence claim between backend policies.
32
+
33
+ See [public lifecycle, retention, policies and adoption](../../../../../../docs/products/camera-rendering.md).