@deepblend/dsh-blender-host 0.2.20 → 0.3.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 (36) hide show
  1. package/lib/artifact-writer.js +49 -0
  2. package/lib/asset-bundle.js +381 -0
  3. package/lib/asset-io.js +24 -0
  4. package/lib/asset-library.js +113 -0
  5. package/lib/asset-preview.js +139 -0
  6. package/lib/asset-uploads.js +328 -0
  7. package/lib/delivery-manifest.js +6 -1
  8. package/lib/diagnostic-preview.js +264 -0
  9. package/lib/frame-provenance.js +230 -0
  10. package/lib/index.js +1283 -544
  11. package/lib/obj-resources.js +89 -0
  12. package/lib/paths.js +12 -1
  13. package/lib/project-store.js +40 -24
  14. package/lib/project-writer.js +96 -0
  15. package/lib/recipe-catalog.js +128 -0
  16. package/lib/reference-image.js +186 -0
  17. package/lib/render-job-store.js +2 -2
  18. package/lib/revision-transaction.js +106 -43
  19. package/lib/video-encoder.js +71 -13
  20. package/package.json +8 -3
  21. package/recipes/glass-ceramic/LICENSE +21 -0
  22. package/recipes/glass-ceramic/preview.png +0 -0
  23. package/recipes/glass-ceramic/recipe.json +94 -0
  24. package/recipes/glass-ceramic/scene-spec.json +1407 -0
  25. package/recipes/glazed-cup/LICENSE +21 -0
  26. package/recipes/glazed-cup/preview.png +0 -0
  27. package/recipes/glazed-cup/recipe.json +93 -0
  28. package/recipes/glazed-cup/scene-spec.json +248 -0
  29. package/recipes/metal-lamp/LICENSE +21 -0
  30. package/recipes/metal-lamp/preview.png +0 -0
  31. package/recipes/metal-lamp/recipe.json +118 -0
  32. package/recipes/metal-lamp/scene-spec.json +2530 -0
  33. package/recipes/modular-speaker/LICENSE +21 -0
  34. package/recipes/modular-speaker/preview.png +0 -0
  35. package/recipes/modular-speaker/recipe.json +95 -0
  36. package/recipes/modular-speaker/scene-spec.json +6268 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DeepBlend Studio contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
Binary file
@@ -0,0 +1,93 @@
1
+ {
2
+ "schemaVersion": "deepblend.recipe/v1",
3
+ "id": "deepblend.glazed-cup",
4
+ "version": "3.0.0",
5
+ "title": "青釉带把手杯",
6
+ "description": "105 mm 高的陶瓷杯,3 mm 壁厚,圆润杯沿与连续把手。根部曲面展开过渡;可调整釉色、光泽与曝光,创建后修改尺寸和连接曲面。",
7
+ "author": {
8
+ "name": "DeepBlend contributors",
9
+ "url": "https://github.com/pearjelly/deep-blend"
10
+ },
11
+ "license": "MIT",
12
+ "source": {
13
+ "url": "https://github.com/pearjelly/deep-blend",
14
+ "note": "Original procedural handled cup with explicit 2.5 endpoint tension, retained body dimensions and analytic corner normals. Actual fixed hero-camera Blender preview and SceneSpec bytes are pinned. Historical v1 and v2 are preserved byte-for-byte in their fixtures; technical evidence is not artistic approval."
15
+ },
16
+ "compatibility": {
17
+ "sceneSchemaVersion": "deepblend.scene/v1",
18
+ "capabilities": [
19
+ "geometry.handled_cup",
20
+ "geometry.handled_cup.tension",
21
+ "geometry.handled_cup.tension.extended",
22
+ "geometry.primitive",
23
+ "material.principled"
24
+ ]
25
+ },
26
+ "input": {
27
+ "path": "scene-spec.json",
28
+ "sha256": "4bbc13795cfc54f10cc2605c24072d11deb2f029381d38b97753d4003d58d5e7"
29
+ },
30
+ "preview": {
31
+ "path": "preview.png",
32
+ "sha256": "b8f7b70e26032ef9f6deae577856a71342c450a0e71e47c804876227d1086807",
33
+ "mediaType": "image/png",
34
+ "alt": "青釉带把手杯默认参数的实际 Blender 主视角渲染"
35
+ },
36
+ "parameters": [
37
+ {
38
+ "id": "main-color",
39
+ "title": "陶瓷釉色",
40
+ "description": "调整杯体与把手的统一釉色。",
41
+ "type": "color",
42
+ "default": [
43
+ 0.035,
44
+ 0.24,
45
+ 0.2
46
+ ],
47
+ "bindings": [
48
+ {
49
+ "kind": "material",
50
+ "materialId": "glaze",
51
+ "property": "baseColor"
52
+ }
53
+ ]
54
+ },
55
+ {
56
+ "id": "surface-roughness",
57
+ "title": "主表面粗糙度",
58
+ "description": "调整陶瓷釉面的光泽;数值越小,表面越亮。",
59
+ "type": "number",
60
+ "default": 0.22,
61
+ "minimum": 0.12,
62
+ "maximum": 0.42,
63
+ "bindings": [
64
+ {
65
+ "kind": "material",
66
+ "materialId": "glaze",
67
+ "property": "roughness"
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "id": "exposure",
73
+ "title": "摄影曝光",
74
+ "description": "调整整体画面的明暗,预览和成品同步生效。",
75
+ "type": "number",
76
+ "default": 0,
77
+ "minimum": -1,
78
+ "maximum": 1,
79
+ "bindings": [
80
+ {
81
+ "kind": "render-profile",
82
+ "profile": "preview",
83
+ "property": "exposure"
84
+ },
85
+ {
86
+ "kind": "render-profile",
87
+ "profile": "final",
88
+ "property": "exposure"
89
+ }
90
+ ]
91
+ }
92
+ ]
93
+ }
@@ -0,0 +1,248 @@
1
+ {
2
+ "schemaVersion": "deepblend.scene/v1",
3
+ "project": {
4
+ "id": "glazed-cup",
5
+ "title": "青釉带把手杯",
6
+ "units": "metric",
7
+ "fps": 24,
8
+ "frameStart": 1,
9
+ "frameEnd": 48,
10
+ "aspectRatio": "4:3",
11
+ "goal": "105 mm 青釉陶瓷杯,3 mm 壁厚,圆润杯沿与杯底,连续连接的把手。使用大面积摄影灯;创建后可调整尺寸并检查把手根部与内壁。",
12
+ "activeCamera": "hero"
13
+ },
14
+ "materials": [
15
+ {
16
+ "id": "glaze",
17
+ "shader": "principled",
18
+ "parameters": {
19
+ "baseColor": [
20
+ 0.035,
21
+ 0.24,
22
+ 0.2,
23
+ 1
24
+ ],
25
+ "roughness": 0.22,
26
+ "metallic": 0
27
+ }
28
+ },
29
+ {
30
+ "id": "floor",
31
+ "shader": "principled",
32
+ "parameters": {
33
+ "baseColor": [
34
+ 0.09,
35
+ 0.1,
36
+ 0.12,
37
+ 1
38
+ ],
39
+ "roughness": 0.7
40
+ }
41
+ }
42
+ ],
43
+ "entities": [
44
+ {
45
+ "id": "cup",
46
+ "type": "generator",
47
+ "generator": {
48
+ "shape": "handled_cup",
49
+ "rootRadius": 0.009,
50
+ "rootLength": 0.006,
51
+ "rootTension": 2.5
52
+ },
53
+ "materialId": "glaze",
54
+ "tags": [
55
+ "subject"
56
+ ]
57
+ },
58
+ {
59
+ "id": "floor",
60
+ "type": "generator",
61
+ "generator": {
62
+ "shape": "plane",
63
+ "size": 5
64
+ },
65
+ "materialId": "floor",
66
+ "tags": [
67
+ "environment"
68
+ ],
69
+ "transform": {
70
+ "location": [
71
+ 0,
72
+ 0,
73
+ -0.0004
74
+ ]
75
+ }
76
+ }
77
+ ],
78
+ "lights": [
79
+ {
80
+ "id": "key",
81
+ "type": "area",
82
+ "energy": 0.65,
83
+ "size": 0.12,
84
+ "transform": {
85
+ "location": [
86
+ 0.08,
87
+ -0.13,
88
+ 0.16
89
+ ],
90
+ "rotationEuler": [
91
+ 0.9380354763622779,
92
+ 0,
93
+ 0.43240777557053783
94
+ ]
95
+ }
96
+ },
97
+ {
98
+ "id": "fill",
99
+ "type": "area",
100
+ "energy": 0.35,
101
+ "size": 0.16,
102
+ "transform": {
103
+ "location": [
104
+ 0.15,
105
+ -0.18,
106
+ 0.12
107
+ ],
108
+ "rotationEuler": [
109
+ 1.278915286064148,
110
+ 0,
111
+ 0.588002622127533
112
+ ]
113
+ }
114
+ },
115
+ {
116
+ "id": "rim",
117
+ "type": "area",
118
+ "energy": 0.4,
119
+ "size": 0.1,
120
+ "transform": {
121
+ "location": [
122
+ 0.08,
123
+ 0.12,
124
+ 0.14
125
+ ],
126
+ "rotationEuler": [
127
+ 1.0060704583410132,
128
+ 0,
129
+ 2.677945044588987
130
+ ]
131
+ }
132
+ }
133
+ ],
134
+ "cameras": [
135
+ {
136
+ "id": "hero",
137
+ "lens": 60,
138
+ "sensorWidth": 36,
139
+ "clipping": [
140
+ 0.001,
141
+ 10
142
+ ],
143
+ "transform": {
144
+ "location": [
145
+ 0.175,
146
+ -0.245,
147
+ 0.135
148
+ ]
149
+ },
150
+ "targetPoint": [
151
+ 0.018,
152
+ 0,
153
+ 0.0525
154
+ ]
155
+ },
156
+ {
157
+ "id": "roots",
158
+ "lens": 68,
159
+ "sensorWidth": 36,
160
+ "clipping": [
161
+ 0.001,
162
+ 10
163
+ ],
164
+ "transform": {
165
+ "location": [
166
+ 0.135,
167
+ -0.175,
168
+ 0.102
169
+ ]
170
+ },
171
+ "targetPoint": [
172
+ 0.044,
173
+ 0,
174
+ 0.055
175
+ ]
176
+ },
177
+ {
178
+ "id": "inside",
179
+ "lens": 60,
180
+ "sensorWidth": 36,
181
+ "clipping": [
182
+ 0.001,
183
+ 10
184
+ ],
185
+ "transform": {
186
+ "location": [
187
+ 0.14,
188
+ -0.2,
189
+ 0.32
190
+ ]
191
+ },
192
+ "targetPoint": [
193
+ 0,
194
+ 0,
195
+ 0.05
196
+ ]
197
+ }
198
+ ],
199
+ "shots": [
200
+ {
201
+ "id": "cup-hero",
202
+ "cameraId": "hero",
203
+ "frameRange": [
204
+ 1,
205
+ 48
206
+ ]
207
+ }
208
+ ],
209
+ "animationTracks": [],
210
+ "renderProfiles": {
211
+ "preview": {
212
+ "engine": "cycles",
213
+ "resolution": [
214
+ 640,
215
+ 480
216
+ ],
217
+ "samples": 32,
218
+ "maxSamplesBudget": 128,
219
+ "colorManagement": {
220
+ "viewTransform": "AgX",
221
+ "exposure": 0
222
+ }
223
+ },
224
+ "final": {
225
+ "engine": "cycles",
226
+ "resolution": [
227
+ 960,
228
+ 720
229
+ ],
230
+ "samples": 128,
231
+ "maxSamplesBudget": 256,
232
+ "colorManagement": {
233
+ "viewTransform": "AgX",
234
+ "exposure": 0
235
+ }
236
+ }
237
+ },
238
+ "assets": [],
239
+ "world": {
240
+ "color": [
241
+ 0.09,
242
+ 0.09,
243
+ 0.09,
244
+ 1
245
+ ],
246
+ "strength": 0.35
247
+ }
248
+ }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DeepBlend Studio contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
Binary file
@@ -0,0 +1,118 @@
1
+ {
2
+ "schemaVersion": "deepblend.recipe/v1",
3
+ "id": "deepblend.metal-lamp",
4
+ "version": "2.0.0",
5
+ "title": "香槟金属桌灯",
6
+ "description": "连续旋压灯罩、沿曲面延伸的金属细纹、珐琅内衬、曲线弯臂与贴地线缆。分别调整旋压件和拉丝件的粗糙度,同步调整金属颜色与摄影曝光。",
7
+ "author": {
8
+ "name": "DeepBlend contributors",
9
+ "url": "https://github.com/pearjelly/deep-blend"
10
+ },
11
+ "license": "MIT",
12
+ "source": {
13
+ "url": "https://github.com/pearjelly/deep-blend",
14
+ "note": "Native metal-lamp benchmark with UV grain. SceneSpec bytes and native hero pixels are pinned; preview metadata is removed. Source URL is attribution, not an installation endpoint."
15
+ },
16
+ "compatibility": {
17
+ "sceneSchemaVersion": "deepblend.scene/v1",
18
+ "capabilities": [
19
+ "animation.transform",
20
+ "geometry.curve",
21
+ "geometry.lathe",
22
+ "geometry.modifiers",
23
+ "geometry.primitive",
24
+ "material.anisotropy",
25
+ "material.principled",
26
+ "material.procedural",
27
+ "material.procedural.uv"
28
+ ]
29
+ },
30
+ "input": {
31
+ "path": "scene-spec.json",
32
+ "sha256": "4a9ea6e09e757acf23dc01593a94a3a51776ec697f15853b1ba62f0ed9515f1f"
33
+ },
34
+ "preview": {
35
+ "path": "preview.png",
36
+ "sha256": "a4c39a0679b5c829fa7183b55a5b637d3fcc0f6dfaf89e7dc0f2f319c9ed9572",
37
+ "mediaType": "image/png",
38
+ "alt": "香槟金属桌灯默认参数及曲面细纹的实际 Blender 渲染"
39
+ },
40
+ "parameters": [
41
+ {
42
+ "id": "main-color",
43
+ "title": "主金属颜色",
44
+ "description": "同步调整旋压件和拉丝件的金属色调。",
45
+ "type": "color",
46
+ "default": [
47
+ 0.63,
48
+ 0.535,
49
+ 0.415
50
+ ],
51
+ "bindings": [
52
+ {
53
+ "kind": "material",
54
+ "materialId": "champagne-spun",
55
+ "property": "baseColor"
56
+ },
57
+ {
58
+ "kind": "material",
59
+ "materialId": "champagne-brushed",
60
+ "property": "baseColor"
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "id": "spun-roughness",
66
+ "title": "旋压件粗糙度",
67
+ "description": "灯罩、底座和旋钮的光泽。数值越小,反光越集中。",
68
+ "type": "number",
69
+ "default": 0.28,
70
+ "minimum": 0.22,
71
+ "maximum": 0.6,
72
+ "bindings": [
73
+ {
74
+ "kind": "material",
75
+ "materialId": "champagne-spun",
76
+ "property": "roughness"
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "id": "brushed-roughness",
82
+ "title": "拉丝件粗糙度",
83
+ "description": "支架与弯臂的光泽。数值越小,反光越集中。",
84
+ "type": "number",
85
+ "default": 0.39,
86
+ "minimum": 0.22,
87
+ "maximum": 0.6,
88
+ "bindings": [
89
+ {
90
+ "kind": "material",
91
+ "materialId": "champagne-brushed",
92
+ "property": "roughness"
93
+ }
94
+ ]
95
+ },
96
+ {
97
+ "id": "exposure",
98
+ "title": "摄影曝光",
99
+ "description": "调整整体画面的明暗,预览和成品同步生效。",
100
+ "type": "number",
101
+ "default": 0,
102
+ "minimum": -1,
103
+ "maximum": 1,
104
+ "bindings": [
105
+ {
106
+ "kind": "render-profile",
107
+ "profile": "preview",
108
+ "property": "exposure"
109
+ },
110
+ {
111
+ "kind": "render-profile",
112
+ "profile": "final",
113
+ "property": "exposure"
114
+ }
115
+ ]
116
+ }
117
+ ]
118
+ }