@deepblend/dsh-blender-contracts 0.2.19 → 0.3.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.
@@ -264,6 +264,50 @@
264
264
  "type": "string"
265
265
  },
266
266
  "description": "The view ids a contact sheet contains, in slot order."
267
+ },
268
+ "sourceRevision": {
269
+ "type": [
270
+ "string",
271
+ "null"
272
+ ],
273
+ "description": "Revision whose SceneSpec produced these pixels. Null when a legacy source cannot be established."
274
+ },
275
+ "sourceDigest": {
276
+ "type": [
277
+ "string",
278
+ "null"
279
+ ],
280
+ "pattern": "^[a-f0-9]{64}$",
281
+ "description": "SceneSpec digest of the source revision; distinct from the PNG digest."
282
+ },
283
+ "jobId": {
284
+ "type": [
285
+ "string",
286
+ "null"
287
+ ],
288
+ "description": "Attempt that emitted this artifact, when recorded."
289
+ },
290
+ "renderConfig": {
291
+ "type": [
292
+ "object",
293
+ "null"
294
+ ],
295
+ "additionalProperties": true,
296
+ "description": "Actual configuration reported by the renderer. Null means unknown; never filled from the requested profile."
297
+ },
298
+ "cameraFacts": {
299
+ "type": [
300
+ "object",
301
+ "null"
302
+ ],
303
+ "description": "Evaluated camera optics and world pose measured for these pixels; unknown on legacy records."
304
+ },
305
+ "viewSettings": {
306
+ "type": "array",
307
+ "items": {
308
+ "$ref": "#/$defs/viewSettings"
309
+ },
310
+ "description": "Ordered measured settings for the constituent renders of this sheet, independent of its composed PNG dimensions."
267
311
  }
268
312
  }
269
313
  },
@@ -290,6 +334,79 @@
290
334
  ]
291
335
  }
292
336
  }
337
+ },
338
+ "viewSettings": {
339
+ "type": "object",
340
+ "additionalProperties": false,
341
+ "required": [
342
+ "viewId"
343
+ ],
344
+ "properties": {
345
+ "viewId": {
346
+ "type": "string",
347
+ "minLength": 1,
348
+ "description": "The declared view identifier; order follows the sheet layout."
349
+ },
350
+ "cameraId": {
351
+ "type": [
352
+ "string",
353
+ "null"
354
+ ],
355
+ "description": "The camera a preview was rendered from. Present on preview artifacts, absent on a `.blend`."
356
+ },
357
+ "frame": {
358
+ "type": [
359
+ "integer",
360
+ "null"
361
+ ],
362
+ "minimum": 0,
363
+ "description": "The scene frame a preview shows."
364
+ },
365
+ "width": {
366
+ "type": [
367
+ "integer",
368
+ "null"
369
+ ],
370
+ "minimum": 1
371
+ },
372
+ "height": {
373
+ "type": [
374
+ "integer",
375
+ "null"
376
+ ],
377
+ "minimum": 1
378
+ },
379
+ "engine": {
380
+ "type": [
381
+ "string",
382
+ "null"
383
+ ],
384
+ "description": "The render engine the preview actually used, as Blender reported it (e.g. \"CYCLES\")."
385
+ },
386
+ "samples": {
387
+ "type": [
388
+ "integer",
389
+ "null"
390
+ ],
391
+ "minimum": 1,
392
+ "description": "The sample count the preview actually used — which may be below the profile asked for."
393
+ },
394
+ "renderConfig": {
395
+ "type": [
396
+ "object",
397
+ "null"
398
+ ],
399
+ "additionalProperties": true,
400
+ "description": "Actual configuration reported by the renderer. Null means unknown; never filled from the requested profile."
401
+ },
402
+ "cameraFacts": {
403
+ "type": [
404
+ "object",
405
+ "null"
406
+ ],
407
+ "description": "Evaluated camera optics and world pose measured for these pixels; unknown on legacy records."
408
+ }
409
+ }
293
410
  }
294
411
  }
295
412
  }
@@ -0,0 +1,332 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://deepblend.local/schemas/recipe.schema.json",
4
+ "title": "DeepBlend portable product recipe",
5
+ "type": "object",
6
+ "additionalProperties": false,
7
+ "required": [
8
+ "schemaVersion",
9
+ "id",
10
+ "version",
11
+ "title",
12
+ "description",
13
+ "author",
14
+ "license",
15
+ "source",
16
+ "compatibility",
17
+ "input",
18
+ "preview",
19
+ "parameters"
20
+ ],
21
+ "properties": {
22
+ "schemaVersion": {
23
+ "const": "deepblend.recipe/v1"
24
+ },
25
+ "id": {
26
+ "type": "string",
27
+ "pattern": "^[a-z][a-z0-9._-]{0,63}$"
28
+ },
29
+ "version": {
30
+ "type": "string",
31
+ "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(-[a-zA-Z0-9.-]+)?$"
32
+ },
33
+ "title": {
34
+ "type": "string",
35
+ "minLength": 1,
36
+ "maxLength": 200
37
+ },
38
+ "description": {
39
+ "type": "string",
40
+ "minLength": 1,
41
+ "maxLength": 2000
42
+ },
43
+ "author": {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": [
47
+ "name"
48
+ ],
49
+ "properties": {
50
+ "name": {
51
+ "type": "string",
52
+ "minLength": 1,
53
+ "maxLength": 200
54
+ },
55
+ "url": {
56
+ "type": "string",
57
+ "minLength": 1,
58
+ "maxLength": 1000
59
+ }
60
+ }
61
+ },
62
+ "license": {
63
+ "type": "string",
64
+ "minLength": 1,
65
+ "maxLength": 200
66
+ },
67
+ "source": {
68
+ "type": "object",
69
+ "additionalProperties": false,
70
+ "required": [
71
+ "url"
72
+ ],
73
+ "properties": {
74
+ "url": {
75
+ "type": "string",
76
+ "minLength": 1,
77
+ "maxLength": 1000
78
+ },
79
+ "note": {
80
+ "type": "string",
81
+ "minLength": 1,
82
+ "maxLength": 1000
83
+ }
84
+ }
85
+ },
86
+ "compatibility": {
87
+ "type": "object",
88
+ "additionalProperties": false,
89
+ "required": [
90
+ "sceneSchemaVersion",
91
+ "capabilities"
92
+ ],
93
+ "properties": {
94
+ "sceneSchemaVersion": {
95
+ "const": "deepblend.scene/v1"
96
+ },
97
+ "capabilities": {
98
+ "type": "array",
99
+ "minItems": 1,
100
+ "maxItems": 15,
101
+ "items": {
102
+ "enum": [
103
+ "geometry.primitive",
104
+ "geometry.lathe",
105
+ "geometry.curve",
106
+ "geometry.handled_cup",
107
+ "geometry.handled_cup.tension",
108
+ "geometry.handled_cup.tension.extended",
109
+ "geometry.modifiers",
110
+ "material.principled",
111
+ "material.glass",
112
+ "material.emission",
113
+ "material.procedural",
114
+ "material.procedural.uv",
115
+ "material.anisotropy",
116
+ "animation.transform",
117
+ "animation.material"
118
+ ]
119
+ }
120
+ }
121
+ }
122
+ },
123
+ "input": {
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "required": [
127
+ "path",
128
+ "sha256"
129
+ ],
130
+ "properties": {
131
+ "path": {
132
+ "const": "scene-spec.json"
133
+ },
134
+ "sha256": {
135
+ "type": "string",
136
+ "pattern": "^[a-f0-9]{64}$"
137
+ }
138
+ }
139
+ },
140
+ "preview": {
141
+ "type": "object",
142
+ "additionalProperties": false,
143
+ "required": [
144
+ "path",
145
+ "sha256",
146
+ "mediaType",
147
+ "alt"
148
+ ],
149
+ "properties": {
150
+ "path": {
151
+ "const": "preview.png"
152
+ },
153
+ "sha256": {
154
+ "type": "string",
155
+ "pattern": "^[a-f0-9]{64}$"
156
+ },
157
+ "mediaType": {
158
+ "const": "image/png"
159
+ },
160
+ "alt": {
161
+ "type": "string",
162
+ "minLength": 1,
163
+ "maxLength": 500
164
+ }
165
+ }
166
+ },
167
+ "parameters": {
168
+ "type": "array",
169
+ "maxItems": 8,
170
+ "items": {
171
+ "oneOf": [
172
+ {
173
+ "$ref": "#/$defs/colorParameter"
174
+ },
175
+ {
176
+ "$ref": "#/$defs/numberParameter"
177
+ }
178
+ ]
179
+ }
180
+ }
181
+ },
182
+ "$defs": {
183
+ "binding": {
184
+ "oneOf": [
185
+ {
186
+ "type": "object",
187
+ "additionalProperties": false,
188
+ "required": [
189
+ "kind",
190
+ "materialId",
191
+ "property"
192
+ ],
193
+ "properties": {
194
+ "kind": {
195
+ "const": "material"
196
+ },
197
+ "materialId": {
198
+ "type": "string",
199
+ "pattern": "^[a-zA-Z][a-zA-Z0-9._-]{0,63}$"
200
+ },
201
+ "property": {
202
+ "enum": [
203
+ "baseColor",
204
+ "roughness"
205
+ ]
206
+ }
207
+ }
208
+ },
209
+ {
210
+ "type": "object",
211
+ "additionalProperties": false,
212
+ "required": [
213
+ "kind",
214
+ "profile",
215
+ "property"
216
+ ],
217
+ "properties": {
218
+ "kind": {
219
+ "const": "render-profile"
220
+ },
221
+ "profile": {
222
+ "enum": [
223
+ "preview",
224
+ "final"
225
+ ]
226
+ },
227
+ "property": {
228
+ "const": "exposure"
229
+ }
230
+ }
231
+ }
232
+ ]
233
+ },
234
+ "colorParameter": {
235
+ "type": "object",
236
+ "additionalProperties": false,
237
+ "required": [
238
+ "id",
239
+ "title",
240
+ "type",
241
+ "default",
242
+ "bindings"
243
+ ],
244
+ "properties": {
245
+ "id": {
246
+ "type": "string",
247
+ "pattern": "^[a-z][a-z0-9._-]{0,63}$"
248
+ },
249
+ "title": {
250
+ "type": "string",
251
+ "minLength": 1,
252
+ "maxLength": 100
253
+ },
254
+ "description": {
255
+ "type": "string",
256
+ "minLength": 1,
257
+ "maxLength": 500
258
+ },
259
+ "bindings": {
260
+ "type": "array",
261
+ "minItems": 1,
262
+ "maxItems": 8,
263
+ "items": {
264
+ "$ref": "#/$defs/binding"
265
+ }
266
+ },
267
+ "type": {
268
+ "const": "color"
269
+ },
270
+ "default": {
271
+ "type": "array",
272
+ "minItems": 3,
273
+ "maxItems": 3,
274
+ "items": {
275
+ "type": "number",
276
+ "minimum": 0,
277
+ "maximum": 1
278
+ }
279
+ }
280
+ }
281
+ },
282
+ "numberParameter": {
283
+ "type": "object",
284
+ "additionalProperties": false,
285
+ "required": [
286
+ "id",
287
+ "title",
288
+ "type",
289
+ "default",
290
+ "minimum",
291
+ "maximum",
292
+ "bindings"
293
+ ],
294
+ "properties": {
295
+ "id": {
296
+ "type": "string",
297
+ "pattern": "^[a-z][a-z0-9._-]{0,63}$"
298
+ },
299
+ "title": {
300
+ "type": "string",
301
+ "minLength": 1,
302
+ "maxLength": 100
303
+ },
304
+ "description": {
305
+ "type": "string",
306
+ "minLength": 1,
307
+ "maxLength": 500
308
+ },
309
+ "bindings": {
310
+ "type": "array",
311
+ "minItems": 1,
312
+ "maxItems": 8,
313
+ "items": {
314
+ "$ref": "#/$defs/binding"
315
+ }
316
+ },
317
+ "type": {
318
+ "const": "number"
319
+ },
320
+ "default": {
321
+ "type": "number"
322
+ },
323
+ "minimum": {
324
+ "type": "number"
325
+ },
326
+ "maximum": {
327
+ "type": "number"
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }