@volter/editor-blender 0.1.150 → 0.1.151

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 (93) hide show
  1. package/LICENSE +18 -9
  2. package/README.md +5 -5
  3. package/contributions/blender-animation-editors.tsx +17 -69
  4. package/contributions/blender-display-settings.ts +36 -0
  5. package/contributions/blender-export-gltf.ts +228 -0
  6. package/contributions/blender-export.verbs.ts +39 -0
  7. package/contributions/blender-gltf-export.verbs.ts +312 -0
  8. package/contributions/blender-header-menus.tsx +37 -133
  9. package/contributions/blender-icon-trace.mjs +8 -98
  10. package/contributions/blender-icons.source.mjs +96 -860
  11. package/contributions/blender-mixer-pose.ts +369 -0
  12. package/contributions/blender-model-opening.tsx +3 -7
  13. package/contributions/blender-node-editor.document.tsx +28 -180
  14. package/contributions/blender-node-geometry.ts +44 -230
  15. package/contributions/blender-node-panels.source.mjs +7 -121
  16. package/contributions/blender-outliner-authoring.ts +61 -415
  17. package/contributions/blender-outliner-model.ts +15 -112
  18. package/contributions/blender-play-area.tsx +100 -0
  19. package/contributions/blender-playback-movie.ts +409 -0
  20. package/contributions/blender-pose.ts +18 -368
  21. package/contributions/blender-properties-context.ts +1 -1
  22. package/contributions/blender-properties-model.ts +15 -90
  23. package/contributions/blender-properties-tab.tsx +3 -50
  24. package/contributions/blender-properties-view.tsx +15 -147
  25. package/contributions/blender-remedy.ts +14 -0
  26. package/contributions/blender-runtime-skin.ts +103 -99
  27. package/contributions/blender-runtime.document.tsx +217 -339
  28. package/contributions/blender-scene-mixer.ts +51 -0
  29. package/contributions/blender-screenshot.service.ts +28 -0
  30. package/contributions/blender-timeline-geometry.ts +16 -136
  31. package/contributions/blender-timeline.document.tsx +142 -332
  32. package/contributions/blender-uv-editor.document.tsx +48 -112
  33. package/contributions/blender-uv-geometry.ts +14 -179
  34. package/contributions/blender-version.status.tsx +43 -23
  35. package/contributions/blender.environment.ts +2 -2
  36. package/contributions/blender.icons.json +0 -9
  37. package/contributions/blender.keymap.ts +9 -51
  38. package/contributions/blender.node-panels.json +4 -13
  39. package/contributions/blender.page.ts +63 -0
  40. package/contributions/blender.status.tsx +9 -145
  41. package/contributions/blender.style.ts +25 -152
  42. package/contributions/blender.verbs.ts +52 -0
  43. package/contributions/model.layout.ts +2 -34
  44. package/contributions/models.finder.ts +12 -32
  45. package/contributions/properties-bone-constraints.inspector.tsx +1 -16
  46. package/contributions/properties-bone.inspector.tsx +2 -31
  47. package/contributions/properties-collection.inspector.tsx +1 -34
  48. package/contributions/properties-constraints.inspector.tsx +1 -21
  49. package/contributions/properties-data.inspector.tsx +2 -39
  50. package/contributions/properties-material.inspector.tsx +2 -33
  51. package/contributions/properties-modifiers.inspector.tsx +2 -30
  52. package/contributions/properties-object.inspector.tsx +2 -44
  53. package/contributions/properties-output.inspector.tsx +1 -27
  54. package/contributions/properties-particles.inspector.tsx +2 -46
  55. package/contributions/properties-physics.inspector.tsx +2 -41
  56. package/contributions/properties-render.inspector.tsx +1 -45
  57. package/contributions/properties-scene.inspector.tsx +1 -35
  58. package/contributions/properties-texture.inspector.tsx +1 -49
  59. package/contributions/properties-view-layer.inspector.tsx +1 -29
  60. package/contributions/properties-world.inspector.tsx +2 -39
  61. package/contributions/shading.layout.ts +3 -78
  62. package/contributions/uv-editing.layout.ts +3 -70
  63. package/dist-node/serving.mjs +13 -30
  64. package/host/blender-runtime-host.ts +541 -372
  65. package/host/scene-sound.ts +143 -0
  66. package/node/blender-mcp.ts +49 -93
  67. package/package.json +1209 -46
  68. package/producticons/blender-icons.otf +0 -0
  69. package/producticons/blender-product-icon-theme.json +129 -0
  70. package/serving/blender-routes.ts +9 -43
  71. package/serving/blender-wasm-artifact.ts +29 -166
  72. package/serving/index.ts +1 -1
  73. package/src/api.ts +9 -0
  74. package/src/layouts.tsx +1 -17
  75. package/src/looks.ts +1 -12
  76. package/src/model-document-saving.ts +25 -0
  77. package/src/model-play-extension.ts +173 -0
  78. package/src/node-view-state.ts +3 -25
  79. package/src/play-mode.ts +64 -38
  80. package/src/presentation.ts +6 -18
  81. package/src/regions.ts +3 -43
  82. package/src/start-document.ts +15 -0
  83. package/src/timeline-view-state.ts +4 -39
  84. package/src/uv-view-state.ts +4 -20
  85. package/themes/blender.json +299 -0
  86. package/view/blender-view-routes.ts +1 -1
  87. package/contributions/blender-game-panel.tsx +0 -809
  88. package/contributions/blender-palette.source.mjs +0 -350
  89. package/contributions/blender-play-skin.ts +0 -508
  90. package/contributions/blender-screenshot.menu.ts +0 -32
  91. package/contributions/blender.command.ts +0 -109
  92. package/contributions/blender.palette.json +0 -102
  93. package/src/play-live.ts +0 -27
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "@volter/editor-blender",
3
+ "publisher": "volter",
3
4
  "author": "Volter AI, Inc.",
4
5
  "license": "AGPL-3.0-only AND GPL-3.0-or-later",
5
- "version": "0.1.150",
6
+ "version": "0.1.151",
7
+ "engines": {
8
+ "vscode": "*"
9
+ },
6
10
  "publishConfig": {
7
11
  "access": "public"
8
12
  },
@@ -22,69 +26,1228 @@
22
26
  "LICENSE-MCP",
23
27
  "serving",
24
28
  "view",
25
- "dist-node"
29
+ "dist-node",
30
+ "themes",
31
+ "producticons"
26
32
  ],
27
33
  "exports": {
28
34
  "./contributions/*": "./contributions/*",
29
35
  "./looks": "./src/looks.ts",
30
36
  "./layouts": "./src/layouts.tsx",
37
+ "./api": "./src/api.ts",
31
38
  "./mcp": "./node/blender-mcp.ts",
32
39
  "./package.json": "./package.json"
33
40
  },
34
- "volter": {
35
- "contributions": [
36
- "./contributions/blender-node-editor.document.tsx",
37
- "./contributions/blender-timeline.document.tsx",
38
- "./contributions/blender-uv-editor.document.tsx",
39
- "./contributions/blender-runtime.document.tsx",
40
- "./contributions/blender-screenshot.menu.ts",
41
- "./contributions/blender-version.status.tsx",
42
- "./contributions/blender.command.ts",
43
- "./contributions/blender.environment.ts",
44
- "./contributions/blender.keymap.ts",
45
- "./contributions/blender.status.tsx",
46
- "./contributions/blender.style.ts",
47
- "./contributions/model.layout.ts",
48
- "./contributions/models.finder.ts",
49
- "./contributions/properties-bone-constraints.inspector.tsx",
50
- "./contributions/properties-bone.inspector.tsx",
51
- "./contributions/properties-collection.inspector.tsx",
52
- "./contributions/properties-constraints.inspector.tsx",
53
- "./contributions/properties-data.inspector.tsx",
54
- "./contributions/properties-material.inspector.tsx",
55
- "./contributions/properties-modifiers.inspector.tsx",
56
- "./contributions/properties-object.inspector.tsx",
57
- "./contributions/properties-output.inspector.tsx",
58
- "./contributions/properties-particles.inspector.tsx",
59
- "./contributions/properties-physics.inspector.tsx",
60
- "./contributions/properties-render.inspector.tsx",
61
- "./contributions/properties-scene.inspector.tsx",
62
- "./contributions/properties-texture.inspector.tsx",
63
- "./contributions/properties-view-layer.inspector.tsx",
64
- "./contributions/properties-world.inspector.tsx",
65
- "./contributions/sculpt.layout.ts",
66
- "./contributions/shading.layout.ts",
67
- "./contributions/uv-editing.layout.ts",
68
- "./contributions/texture.layout.ts"
41
+ "extensionDependencies": [
42
+ "volter.@volter/editor-threejs"
43
+ ],
44
+ "contributes": {
45
+ "volter": {
46
+ "serving": [
47
+ "./dist-node/serving.mjs"
48
+ ],
49
+ "viewRoutes": [
50
+ "./view/blender-view-routes.ts"
51
+ ],
52
+ "page": [
53
+ "./contributions/blender.page.ts"
54
+ ],
55
+ "editors": [
56
+ {
57
+ "viewType": "volter.blender.model",
58
+ "displayName": "Blender Model",
59
+ "document": "./contributions/blender-runtime.document.tsx",
60
+ "selector": [
61
+ {
62
+ "filenamePattern": "*.blend"
63
+ }
64
+ ],
65
+ "priority": "default",
66
+ "kind": "model"
67
+ },
68
+ {
69
+ "document": "./contributions/blender-node-editor.document.tsx"
70
+ },
71
+ {
72
+ "document": "./contributions/blender-timeline.document.tsx"
73
+ },
74
+ {
75
+ "document": "./contributions/blender-uv-editor.document.tsx"
76
+ }
77
+ ],
78
+ "inspectors": [
79
+ "./contributions/properties-bone-constraints.inspector.tsx",
80
+ "./contributions/properties-bone.inspector.tsx",
81
+ "./contributions/properties-collection.inspector.tsx",
82
+ "./contributions/properties-constraints.inspector.tsx",
83
+ "./contributions/properties-data.inspector.tsx",
84
+ "./contributions/properties-material.inspector.tsx",
85
+ "./contributions/properties-modifiers.inspector.tsx",
86
+ "./contributions/properties-object.inspector.tsx",
87
+ "./contributions/properties-output.inspector.tsx",
88
+ "./contributions/properties-particles.inspector.tsx",
89
+ "./contributions/properties-physics.inspector.tsx",
90
+ "./contributions/properties-render.inspector.tsx",
91
+ "./contributions/properties-scene.inspector.tsx",
92
+ "./contributions/properties-texture.inspector.tsx",
93
+ "./contributions/properties-view-layer.inspector.tsx",
94
+ "./contributions/properties-world.inspector.tsx"
95
+ ],
96
+ "views": {
97
+ "statusbar": [
98
+ "./contributions/blender-version.status.tsx",
99
+ "./contributions/blender.status.tsx"
100
+ ]
101
+ },
102
+ "finders": [
103
+ {
104
+ "name": "modelsFromBlendFiles",
105
+ "module": "./contributions/models.finder.ts"
106
+ }
107
+ ],
108
+ "looks": [
109
+ "./contributions/model.layout.ts",
110
+ "./contributions/sculpt.layout.ts",
111
+ "./contributions/shading.layout.ts",
112
+ "./contributions/uv-editing.layout.ts",
113
+ "./contributions/texture.layout.ts",
114
+ "./contributions/blender.keymap.ts",
115
+ "./contributions/blender.style.ts",
116
+ "./contributions/blender.environment.ts"
117
+ ],
118
+ "services": [
119
+ "./contributions/blender-screenshot.service.ts"
120
+ ]
121
+ },
122
+ "commands": [
123
+ {
124
+ "command": "volter.blender.saveScreenshotEditor",
125
+ "title": "Save Screenshot (Editor)…",
126
+ "category": "Blender"
127
+ },
128
+ {
129
+ "command": "volter.blender-draw-batching",
130
+ "title": "blender-draw-batching",
131
+ "category": "Blender",
132
+ "volter": {
133
+ "derivedRefresh": "none"
134
+ }
135
+ },
136
+ {
137
+ "command": "volter.blender-start",
138
+ "title": "blender-start",
139
+ "category": "Blender",
140
+ "volter": {
141
+ "timeoutMs": 120000,
142
+ "derivedRefresh": "none"
143
+ }
144
+ },
145
+ {
146
+ "command": "volter.blender-stop",
147
+ "title": "blender-stop",
148
+ "category": "Blender",
149
+ "volter": {
150
+ "timeoutMs": 1800000,
151
+ "derivedRefresh": "none"
152
+ }
153
+ },
154
+ {
155
+ "command": "volter.blender-execute",
156
+ "title": "blender-execute",
157
+ "category": "Blender",
158
+ "volter": {
159
+ "timeoutMs": 1800000
160
+ }
161
+ },
162
+ {
163
+ "command": "volter.blender-render-movie",
164
+ "title": "blender-render-movie",
165
+ "category": "Blender",
166
+ "volter": {
167
+ "derivedRefresh": "none"
168
+ }
169
+ },
170
+ {
171
+ "command": "volter.blender-render-status",
172
+ "title": "blender-render-status",
173
+ "category": "Blender",
174
+ "volter": {
175
+ "derivedRefresh": "none"
176
+ }
177
+ },
178
+ {
179
+ "command": "volter.blender-native-preview",
180
+ "title": "blender-native-preview",
181
+ "category": "Blender",
182
+ "volter": {
183
+ "timeoutMs": 120000,
184
+ "derivedRefresh": "none"
185
+ }
186
+ },
187
+ {
188
+ "command": "volter.blender-scene-info",
189
+ "title": "blender-scene-info",
190
+ "category": "Blender",
191
+ "volter": {
192
+ "timeoutMs": 60000,
193
+ "derivedRefresh": "none"
194
+ }
195
+ },
196
+ {
197
+ "command": "volter.blender-object-info",
198
+ "title": "blender-object-info",
199
+ "category": "Blender",
200
+ "volter": {
201
+ "timeoutMs": 60000,
202
+ "derivedRefresh": "none"
203
+ }
204
+ },
205
+ {
206
+ "command": "volter.blender-screenshot-view",
207
+ "title": "blender-screenshot-view",
208
+ "category": "Blender",
209
+ "volter": {
210
+ "timeoutMs": 60000
211
+ }
212
+ },
213
+ {
214
+ "command": "volter.blender-read-file",
215
+ "title": "blender-read-file",
216
+ "category": "Blender",
217
+ "volter": {
218
+ "timeoutMs": 60000,
219
+ "derivedRefresh": "none"
220
+ }
221
+ },
222
+ {
223
+ "command": "volter.blender-write-file",
224
+ "title": "blender-write-file",
225
+ "category": "Blender",
226
+ "volter": {
227
+ "timeoutMs": 60000,
228
+ "derivedRefresh": "none"
229
+ }
230
+ },
231
+ {
232
+ "command": "volter.blender-list-files",
233
+ "title": "blender-list-files",
234
+ "category": "Blender",
235
+ "volter": {
236
+ "timeoutMs": 60000,
237
+ "derivedRefresh": "none"
238
+ }
239
+ },
240
+ {
241
+ "command": "volter.blender-rna",
242
+ "title": "blender-rna",
243
+ "category": "Blender",
244
+ "volter": {
245
+ "timeoutMs": 60000,
246
+ "derivedRefresh": "none"
247
+ }
248
+ },
249
+ {
250
+ "command": "volter.blender-rna-context",
251
+ "title": "blender-rna-context",
252
+ "category": "Blender",
253
+ "volter": {
254
+ "timeoutMs": 60000,
255
+ "derivedRefresh": "none"
256
+ }
257
+ },
258
+ {
259
+ "command": "volter.blender-rna-set",
260
+ "title": "blender-rna-set",
261
+ "category": "Blender",
262
+ "volter": {
263
+ "timeoutMs": 60000
264
+ }
265
+ },
266
+ {
267
+ "command": "volter.blender-outliner",
268
+ "title": "blender-outliner",
269
+ "category": "Blender",
270
+ "volter": {
271
+ "timeoutMs": 60000,
272
+ "derivedRefresh": "none"
273
+ }
274
+ },
275
+ {
276
+ "command": "volter.blender-node-tree",
277
+ "title": "blender-node-tree",
278
+ "category": "Blender",
279
+ "volter": {
280
+ "timeoutMs": 60000,
281
+ "derivedRefresh": "none"
282
+ }
283
+ },
284
+ {
285
+ "command": "volter.blender-uv-layout",
286
+ "title": "blender-uv-layout",
287
+ "category": "Blender",
288
+ "volter": {
289
+ "timeoutMs": 60000,
290
+ "derivedRefresh": "none"
291
+ }
292
+ },
293
+ {
294
+ "command": "volter.blender-action-clip",
295
+ "title": "blender-action-clip",
296
+ "category": "Blender",
297
+ "volter": {
298
+ "timeoutMs": 120000,
299
+ "derivedRefresh": "none"
300
+ }
301
+ },
302
+ {
303
+ "command": "volter.blender-node-view",
304
+ "title": "blender-node-view",
305
+ "category": "Blender",
306
+ "volter": {
307
+ "derivedRefresh": "none"
308
+ }
309
+ },
310
+ {
311
+ "command": "volter.blender-outliner-set",
312
+ "title": "blender-outliner-set",
313
+ "category": "Blender",
314
+ "volter": {
315
+ "timeoutMs": 60000
316
+ }
317
+ },
318
+ {
319
+ "command": "volter.blender-status",
320
+ "title": "blender-status",
321
+ "category": "Blender",
322
+ "volter": {
323
+ "derivedRefresh": "none"
324
+ }
325
+ },
326
+ {
327
+ "command": "volter.blender-export-gltf",
328
+ "title": "blender-export-gltf",
329
+ "category": "Blender",
330
+ "volter": {
331
+ "timeoutMs": 1800000,
332
+ "derivedRefresh": "none"
333
+ }
334
+ },
335
+ {
336
+ "command": "volter.blender-export-component",
337
+ "title": "blender-export-component",
338
+ "category": "Blender",
339
+ "volter": {
340
+ "timeoutMs": 95000,
341
+ "derivedRefresh": "none"
342
+ }
343
+ },
344
+ {
345
+ "command": "volter.blender-export-level",
346
+ "title": "blender-export-level",
347
+ "category": "Blender",
348
+ "volter": {
349
+ "timeoutMs": 95000,
350
+ "derivedRefresh": "none"
351
+ }
352
+ },
353
+ {
354
+ "command": "volter.blender-node-view.state",
355
+ "title": "state",
356
+ "category": "Node Editor"
357
+ },
358
+ {
359
+ "command": "volter.blender-node-view.look",
360
+ "title": "look",
361
+ "category": "Node Editor"
362
+ },
363
+ {
364
+ "command": "volter.blender-node-view.view-all",
365
+ "title": "Frame All",
366
+ "category": "Node Editor"
367
+ },
368
+ {
369
+ "command": "volter.blender-node-view.zoom",
370
+ "title": "zoom",
371
+ "category": "Node Editor"
372
+ },
373
+ {
374
+ "command": "volter.blender-node-view.pan",
375
+ "title": "pan",
376
+ "category": "Node Editor"
377
+ },
378
+ {
379
+ "command": "volter.blender-node-view.move",
380
+ "title": "move",
381
+ "category": "Node Editor"
382
+ },
383
+ {
384
+ "command": "volter.blender-node-view.link",
385
+ "title": "link",
386
+ "category": "Node Editor"
387
+ },
388
+ {
389
+ "command": "volter.blender-node-view.set-value",
390
+ "title": "set-value",
391
+ "category": "Node Editor"
392
+ },
393
+ {
394
+ "command": "volter.blender-node-view.use-nodes",
395
+ "title": "use-nodes",
396
+ "category": "Node Editor"
397
+ },
398
+ {
399
+ "command": "volter.blender-node-view.collapse-panel",
400
+ "title": "collapse-panel",
401
+ "category": "Node Editor"
402
+ },
403
+ {
404
+ "command": "volter.timeline.state",
405
+ "title": "state",
406
+ "category": "Timeline"
407
+ },
408
+ {
409
+ "command": "volter.timeline.editor",
410
+ "title": "Show Editor",
411
+ "category": "Animation"
412
+ },
413
+ {
414
+ "command": "volter.timeline.frame",
415
+ "title": "Set Frame",
416
+ "category": "Timeline"
417
+ },
418
+ {
419
+ "command": "volter.timeline.play",
420
+ "title": "Play",
421
+ "category": "Timeline"
422
+ },
423
+ {
424
+ "command": "volter.timeline.pause",
425
+ "title": "Pause",
426
+ "category": "Timeline"
427
+ },
428
+ {
429
+ "command": "volter.timeline.jump-start",
430
+ "title": "Jump to Start",
431
+ "category": "Timeline"
432
+ },
433
+ {
434
+ "command": "volter.timeline.jump-end",
435
+ "title": "Jump to End",
436
+ "category": "Timeline"
437
+ },
438
+ {
439
+ "command": "volter.timeline.next-keyframe",
440
+ "title": "Next Keyframe",
441
+ "category": "Timeline"
442
+ },
443
+ {
444
+ "command": "volter.timeline.prev-keyframe",
445
+ "title": "Previous Keyframe",
446
+ "category": "Timeline"
447
+ },
448
+ {
449
+ "command": "volter.timeline.view-all",
450
+ "title": "View All",
451
+ "category": "Timeline"
452
+ },
453
+ {
454
+ "command": "volter.timeline.zoom",
455
+ "title": "Zoom",
456
+ "category": "Timeline"
457
+ },
458
+ {
459
+ "command": "volter.timeline.pan",
460
+ "title": "Pan",
461
+ "category": "Timeline"
462
+ },
463
+ {
464
+ "command": "volter.timeline.set-range",
465
+ "title": "set-range",
466
+ "category": "Timeline"
467
+ },
468
+ {
469
+ "command": "volter.timeline.insert-key",
470
+ "title": "insert-key",
471
+ "category": "Timeline"
472
+ },
473
+ {
474
+ "command": "volter.timeline.move-key",
475
+ "title": "move-key",
476
+ "category": "Timeline"
477
+ },
478
+ {
479
+ "command": "volter.timeline.delete-key",
480
+ "title": "delete-key",
481
+ "category": "Timeline"
482
+ },
483
+ {
484
+ "command": "volter.timeline.set-interpolation",
485
+ "title": "set-interpolation",
486
+ "category": "Timeline"
487
+ },
488
+ {
489
+ "command": "volter.timeline.select-key",
490
+ "title": "select-key",
491
+ "category": "Timeline"
492
+ },
493
+ {
494
+ "command": "volter.blender-uv-view.state",
495
+ "title": "state",
496
+ "category": "UV Editor"
497
+ },
498
+ {
499
+ "command": "volter.blender-uv-view.view-all",
500
+ "title": "View All",
501
+ "category": "UV Editor"
502
+ },
503
+ {
504
+ "command": "volter.blender-uv-view.zoom",
505
+ "title": "Zoom",
506
+ "category": "UV Editor"
507
+ },
508
+ {
509
+ "command": "volter.blender-uv-view.pan",
510
+ "title": "Pan",
511
+ "category": "UV Editor"
512
+ },
513
+ {
514
+ "command": "volter.blender-uv-view.move-uv",
515
+ "title": "move-uv",
516
+ "category": "UV Editor"
517
+ },
518
+ {
519
+ "command": "volter.blender-uv-view.select",
520
+ "title": "select",
521
+ "category": "UV Editor"
522
+ },
523
+ {
524
+ "command": "volter.blender-uv-view.pin",
525
+ "title": "pin",
526
+ "category": "UV Editor"
527
+ },
528
+ {
529
+ "command": "volter.blender-uv-view.unwrap",
530
+ "title": "unwrap",
531
+ "category": "UV Editor"
532
+ }
533
+ ],
534
+ "keybindings": [
535
+ {
536
+ "command": "volter.edit.duplicate",
537
+ "key": "shift+D",
538
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
539
+ },
540
+ {
541
+ "command": "volter.edit.selectAll",
542
+ "key": "A",
543
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
544
+ },
545
+ {
546
+ "command": "volter.edit.deselectAll",
547
+ "key": "alt+A",
548
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
549
+ },
550
+ {
551
+ "command": "volter.edit.delete",
552
+ "key": "X",
553
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
554
+ },
555
+ {
556
+ "command": "volter.transform.select",
557
+ "key": "W",
558
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
559
+ },
560
+ {
561
+ "command": "volter.transform.translate",
562
+ "key": "G",
563
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
564
+ },
565
+ {
566
+ "command": "volter.transform.rotate",
567
+ "key": "R",
568
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
569
+ },
570
+ {
571
+ "command": "volter.transform.scale",
572
+ "key": "S",
573
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
574
+ },
575
+ {
576
+ "command": "volter.viewport.frameSelection",
577
+ "key": "NumPad_Decimal",
578
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
579
+ },
580
+ {
581
+ "command": "volter.viewport.frameSelection",
582
+ "key": ".",
583
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
584
+ },
585
+ {
586
+ "command": "volter.viewport.cyclePivot",
587
+ "key": ",",
588
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
589
+ },
590
+ {
591
+ "command": "volter.view.bottom",
592
+ "key": "ctrl+NumPad7",
593
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
594
+ },
595
+ {
596
+ "command": "volter.view.back",
597
+ "key": "ctrl+NumPad1",
598
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
599
+ },
600
+ {
601
+ "command": "volter.view.left",
602
+ "key": "ctrl+NumPad3",
603
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
604
+ },
605
+ {
606
+ "command": "volter.view.orbitLeft",
607
+ "key": "NumPad4",
608
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
609
+ },
610
+ {
611
+ "command": "volter.view.orbitRight",
612
+ "key": "NumPad6",
613
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
614
+ },
615
+ {
616
+ "command": "volter.view.orbitUp",
617
+ "key": "NumPad8",
618
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
619
+ },
620
+ {
621
+ "command": "volter.view.orbitDown",
622
+ "key": "NumPad2",
623
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
624
+ },
625
+ {
626
+ "command": "volter.view.opposite",
627
+ "key": "NumPad9",
628
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
629
+ },
630
+ {
631
+ "command": "volter.view.rollLeft",
632
+ "key": "shift+NumPad4",
633
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
634
+ },
635
+ {
636
+ "command": "volter.view.rollRight",
637
+ "key": "shift+NumPad6",
638
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
639
+ },
640
+ {
641
+ "command": "volter.view.all",
642
+ "key": "Home",
643
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
644
+ },
645
+ {
646
+ "command": "volter.view.zoomIn",
647
+ "key": "ctrl+=",
648
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
649
+ },
650
+ {
651
+ "command": "volter.view.zoomIn",
652
+ "key": "NumPad_Add",
653
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
654
+ },
655
+ {
656
+ "command": "volter.view.zoomOut",
657
+ "key": "ctrl+-",
658
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
659
+ },
660
+ {
661
+ "command": "volter.view.zoomOut",
662
+ "key": "NumPad_Subtract",
663
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
664
+ },
665
+ {
666
+ "command": "volter.view.projection",
667
+ "key": "NumPad5",
668
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
669
+ },
670
+ {
671
+ "command": "volter.unboundKey",
672
+ "key": "ctrl+D",
673
+ "mac": "cmd+D",
674
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
675
+ },
676
+ {
677
+ "command": "volter.edit.delete",
678
+ "key": "Delete",
679
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
680
+ },
681
+ {
682
+ "command": "volter.unboundKey",
683
+ "key": "Backspace",
684
+ "when": "volter.focused && !inputFocus && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
685
+ },
686
+ {
687
+ "command": "volter.unboundKey",
688
+ "key": "Q",
689
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
690
+ },
691
+ {
692
+ "command": "volter.unboundKey",
693
+ "key": "E",
694
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
695
+ },
696
+ {
697
+ "command": "volter.unboundKey",
698
+ "key": "F",
699
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.keymap == 'blender'"
700
+ },
701
+ {
702
+ "command": "volter.unboundKey",
703
+ "key": "M",
704
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.stage.surface == 'canvas' && volter.keymap == 'blender'"
705
+ },
706
+ {
707
+ "command": "volter.unboundKey",
708
+ "key": "ctrl+'",
709
+ "mac": "cmd+'",
710
+ "when": "volter.stage.focused && volter.stage.mode != 'PLAY' && volter.stage.surface == 'canvas' && volter.keymap == 'blender'"
711
+ }
712
+ ],
713
+ "languageModelTools": [
714
+ {
715
+ "name": "blender-status",
716
+ "tags": [
717
+ "volter"
718
+ ],
719
+ "displayName": "Blender status",
720
+ "modelDescription": "Whether Blender is running in this editor and which document it holds.",
721
+ "inputSchema": {
722
+ "type": "object",
723
+ "properties": {},
724
+ "required": [],
725
+ "additionalProperties": false
726
+ }
727
+ },
728
+ {
729
+ "name": "blender-execute",
730
+ "tags": [
731
+ "volter"
732
+ ],
733
+ "displayName": "Run Blender Python",
734
+ "modelDescription": "Run Python in the Blender open in this editor (bpy is available). Answers what the script printed, or its traceback.",
735
+ "inputSchema": {
736
+ "type": "object",
737
+ "properties": {
738
+ "code": {
739
+ "type": "string",
740
+ "description": "The Python to run."
741
+ }
742
+ },
743
+ "required": [
744
+ "code"
745
+ ],
746
+ "additionalProperties": false
747
+ }
748
+ },
749
+ {
750
+ "name": "blender-scene-info",
751
+ "tags": [
752
+ "volter"
753
+ ],
754
+ "displayName": "Blender scene",
755
+ "modelDescription": "Describe the open Blender scene: its objects, materials and settings.",
756
+ "inputSchema": {
757
+ "type": "object",
758
+ "properties": {},
759
+ "required": [],
760
+ "additionalProperties": false
761
+ }
762
+ },
763
+ {
764
+ "name": "blender-object-info",
765
+ "tags": [
766
+ "volter"
767
+ ],
768
+ "displayName": "Blender object",
769
+ "modelDescription": "Describe one Blender object by name.",
770
+ "inputSchema": {
771
+ "type": "object",
772
+ "properties": {
773
+ "name": {
774
+ "type": "string",
775
+ "description": "The object's name."
776
+ }
777
+ },
778
+ "required": [
779
+ "name"
780
+ ],
781
+ "additionalProperties": false
782
+ }
783
+ },
784
+ {
785
+ "name": "blender-rna",
786
+ "tags": [
787
+ "volter"
788
+ ],
789
+ "displayName": "Blender properties",
790
+ "modelDescription": "Read one datablock's properties, by its path such as bpy.data.objects[\"Cube\"].",
791
+ "inputSchema": {
792
+ "type": "object",
793
+ "properties": {
794
+ "path": {
795
+ "type": "string",
796
+ "description": "The datablock's path."
797
+ },
798
+ "names": {
799
+ "type": "number",
800
+ "description": "How many enum names to list."
801
+ }
802
+ },
803
+ "required": [
804
+ "path"
805
+ ],
806
+ "additionalProperties": false
807
+ }
808
+ },
809
+ {
810
+ "name": "blender-rna-context",
811
+ "tags": [
812
+ "volter"
813
+ ],
814
+ "displayName": "Blender context",
815
+ "modelDescription": "The active object, bone, material slot and modifier the Properties tabs key on, and the tabs.",
816
+ "inputSchema": {
817
+ "type": "object",
818
+ "properties": {
819
+ "object": {
820
+ "type": "string",
821
+ "description": "The object being looked at."
822
+ },
823
+ "collection": {
824
+ "type": "string",
825
+ "description": "The collection being looked at."
826
+ }
827
+ },
828
+ "required": [],
829
+ "additionalProperties": false
830
+ }
831
+ },
832
+ {
833
+ "name": "blender-rna-set",
834
+ "tags": [
835
+ "volter"
836
+ ],
837
+ "displayName": "Set a Blender property",
838
+ "modelDescription": "Set one property of a datablock.",
839
+ "inputSchema": {
840
+ "type": "object",
841
+ "properties": {
842
+ "path": {
843
+ "type": "string",
844
+ "description": "The datablock's path."
845
+ },
846
+ "property": {
847
+ "type": "string",
848
+ "description": "The property's name."
849
+ },
850
+ "value": {
851
+ "description": "The new value."
852
+ },
853
+ "index": {
854
+ "type": "number",
855
+ "description": "An array property's index."
856
+ }
857
+ },
858
+ "required": [
859
+ "path",
860
+ "property",
861
+ "value"
862
+ ],
863
+ "additionalProperties": false
864
+ }
865
+ },
866
+ {
867
+ "name": "blender-outliner",
868
+ "tags": [
869
+ "volter"
870
+ ],
871
+ "displayName": "Blender outliner",
872
+ "modelDescription": "Read Blender's outliner: the view layer's collections and objects.",
873
+ "inputSchema": {
874
+ "type": "object",
875
+ "properties": {
876
+ "selected": {
877
+ "type": "array",
878
+ "items": {
879
+ "type": "string"
880
+ },
881
+ "description": "Names to report as selected."
882
+ }
883
+ },
884
+ "required": [],
885
+ "additionalProperties": false
886
+ }
887
+ },
888
+ {
889
+ "name": "blender-outliner-set",
890
+ "tags": [
891
+ "volter"
892
+ ],
893
+ "displayName": "Set an outliner column",
894
+ "modelDescription": "Set one outliner column (visibility, selectability) on an item.",
895
+ "inputSchema": {
896
+ "type": "object",
897
+ "properties": {
898
+ "path": {
899
+ "type": "string",
900
+ "description": "The item's path."
901
+ },
902
+ "column": {
903
+ "type": "string",
904
+ "description": "The column."
905
+ },
906
+ "value": {
907
+ "type": "boolean"
908
+ }
909
+ },
910
+ "required": [
911
+ "path",
912
+ "column",
913
+ "value"
914
+ ],
915
+ "additionalProperties": false
916
+ }
917
+ },
918
+ {
919
+ "name": "blender-node-tree",
920
+ "tags": [
921
+ "volter"
922
+ ],
923
+ "displayName": "Blender node tree",
924
+ "modelDescription": "Read one material's shader node tree, whole.",
925
+ "inputSchema": {
926
+ "type": "object",
927
+ "properties": {
928
+ "material": {
929
+ "type": "string",
930
+ "description": "The material's name."
931
+ },
932
+ "path": {
933
+ "type": "string",
934
+ "description": "A node tree's path."
935
+ }
936
+ },
937
+ "required": [],
938
+ "additionalProperties": false
939
+ }
940
+ },
941
+ {
942
+ "name": "blender-node-view",
943
+ "tags": [
944
+ "volter"
945
+ ],
946
+ "displayName": "Blender node view",
947
+ "modelDescription": "Drive the node editor's view: state (the default) and its other actions.",
948
+ "inputSchema": {
949
+ "type": "object",
950
+ "properties": {
951
+ "action": {
952
+ "type": "string",
953
+ "description": "The action; state when omitted."
954
+ }
955
+ },
956
+ "required": [],
957
+ "additionalProperties": false
958
+ }
959
+ },
960
+ {
961
+ "name": "blender-uv-layout",
962
+ "tags": [
963
+ "volter"
964
+ ],
965
+ "displayName": "Blender UV layout",
966
+ "modelDescription": "Read an object's UV layout.",
967
+ "inputSchema": {
968
+ "type": "object",
969
+ "properties": {
970
+ "object": {
971
+ "type": "string",
972
+ "description": "The object's name."
973
+ },
974
+ "uvLayer": {
975
+ "type": "string",
976
+ "description": "The UV layer's name."
977
+ }
978
+ },
979
+ "required": [],
980
+ "additionalProperties": false
981
+ }
982
+ },
983
+ {
984
+ "name": "blender-action-clip",
985
+ "tags": [
986
+ "volter"
987
+ ],
988
+ "displayName": "Blender animation",
989
+ "modelDescription": "Read an object's animation clip, optionally baking constraints.",
990
+ "inputSchema": {
991
+ "type": "object",
992
+ "properties": {
993
+ "object": {
994
+ "type": "string",
995
+ "description": "The object's name."
996
+ },
997
+ "bake": {
998
+ "type": "boolean"
999
+ }
1000
+ },
1001
+ "required": [],
1002
+ "additionalProperties": false
1003
+ }
1004
+ },
1005
+ {
1006
+ "name": "blender-list-files",
1007
+ "tags": [
1008
+ "volter"
1009
+ ],
1010
+ "displayName": "Blender files",
1011
+ "modelDescription": "List the files Blender sees under a project path.",
1012
+ "inputSchema": {
1013
+ "type": "object",
1014
+ "properties": {
1015
+ "path": {
1016
+ "type": "string",
1017
+ "description": "A project-relative folder."
1018
+ }
1019
+ },
1020
+ "required": [
1021
+ "path"
1022
+ ],
1023
+ "additionalProperties": false
1024
+ }
1025
+ }
1026
+ ],
1027
+ "themes": [
1028
+ {
1029
+ "id": "blender",
1030
+ "label": "Blender",
1031
+ "uiTheme": "vs-dark",
1032
+ "path": "./themes/blender.json"
1033
+ }
1034
+ ],
1035
+ "productIconThemes": [
1036
+ {
1037
+ "id": "blender",
1038
+ "label": "Blender",
1039
+ "path": "./producticons/blender-product-icon-theme.json"
1040
+ }
69
1041
  ],
70
- "serving": "./dist-node/serving.mjs",
71
- "viewServing": "./view/blender-view-routes.ts"
1042
+ "menus": {
1043
+ "commandPalette": [
1044
+ {
1045
+ "command": "volter.blender-draw-batching",
1046
+ "when": "false"
1047
+ },
1048
+ {
1049
+ "command": "volter.blender-start",
1050
+ "when": "false"
1051
+ },
1052
+ {
1053
+ "command": "volter.blender-stop",
1054
+ "when": "false"
1055
+ },
1056
+ {
1057
+ "command": "volter.blender-execute",
1058
+ "when": "false"
1059
+ },
1060
+ {
1061
+ "command": "volter.blender-render-movie",
1062
+ "when": "false"
1063
+ },
1064
+ {
1065
+ "command": "volter.blender-render-status",
1066
+ "when": "false"
1067
+ },
1068
+ {
1069
+ "command": "volter.blender-native-preview",
1070
+ "when": "false"
1071
+ },
1072
+ {
1073
+ "command": "volter.blender-scene-info",
1074
+ "when": "false"
1075
+ },
1076
+ {
1077
+ "command": "volter.blender-object-info",
1078
+ "when": "false"
1079
+ },
1080
+ {
1081
+ "command": "volter.blender-screenshot-view",
1082
+ "when": "false"
1083
+ },
1084
+ {
1085
+ "command": "volter.blender-read-file",
1086
+ "when": "false"
1087
+ },
1088
+ {
1089
+ "command": "volter.blender-write-file",
1090
+ "when": "false"
1091
+ },
1092
+ {
1093
+ "command": "volter.blender-list-files",
1094
+ "when": "false"
1095
+ },
1096
+ {
1097
+ "command": "volter.blender-rna",
1098
+ "when": "false"
1099
+ },
1100
+ {
1101
+ "command": "volter.blender-rna-context",
1102
+ "when": "false"
1103
+ },
1104
+ {
1105
+ "command": "volter.blender-rna-set",
1106
+ "when": "false"
1107
+ },
1108
+ {
1109
+ "command": "volter.blender-outliner",
1110
+ "when": "false"
1111
+ },
1112
+ {
1113
+ "command": "volter.blender-node-tree",
1114
+ "when": "false"
1115
+ },
1116
+ {
1117
+ "command": "volter.blender-uv-layout",
1118
+ "when": "false"
1119
+ },
1120
+ {
1121
+ "command": "volter.blender-action-clip",
1122
+ "when": "false"
1123
+ },
1124
+ {
1125
+ "command": "volter.blender-node-view",
1126
+ "when": "false"
1127
+ },
1128
+ {
1129
+ "command": "volter.blender-outliner-set",
1130
+ "when": "false"
1131
+ },
1132
+ {
1133
+ "command": "volter.blender-status",
1134
+ "when": "false"
1135
+ },
1136
+ {
1137
+ "command": "volter.blender-export-gltf",
1138
+ "when": "false"
1139
+ },
1140
+ {
1141
+ "command": "volter.blender-export-component",
1142
+ "when": "false"
1143
+ },
1144
+ {
1145
+ "command": "volter.blender-export-level",
1146
+ "when": "false"
1147
+ },
1148
+ {
1149
+ "command": "volter.blender-node-view.state",
1150
+ "when": "false"
1151
+ },
1152
+ {
1153
+ "command": "volter.blender-node-view.look",
1154
+ "when": "false"
1155
+ },
1156
+ {
1157
+ "command": "volter.blender-node-view.zoom",
1158
+ "when": "false"
1159
+ },
1160
+ {
1161
+ "command": "volter.blender-node-view.pan",
1162
+ "when": "false"
1163
+ },
1164
+ {
1165
+ "command": "volter.blender-node-view.move",
1166
+ "when": "false"
1167
+ },
1168
+ {
1169
+ "command": "volter.blender-node-view.link",
1170
+ "when": "false"
1171
+ },
1172
+ {
1173
+ "command": "volter.blender-node-view.set-value",
1174
+ "when": "false"
1175
+ },
1176
+ {
1177
+ "command": "volter.blender-node-view.use-nodes",
1178
+ "when": "false"
1179
+ },
1180
+ {
1181
+ "command": "volter.blender-node-view.collapse-panel",
1182
+ "when": "false"
1183
+ },
1184
+ {
1185
+ "command": "volter.timeline.state",
1186
+ "when": "false"
1187
+ },
1188
+ {
1189
+ "command": "volter.timeline.set-range",
1190
+ "when": "false"
1191
+ },
1192
+ {
1193
+ "command": "volter.timeline.insert-key",
1194
+ "when": "false"
1195
+ },
1196
+ {
1197
+ "command": "volter.timeline.move-key",
1198
+ "when": "false"
1199
+ },
1200
+ {
1201
+ "command": "volter.timeline.delete-key",
1202
+ "when": "false"
1203
+ },
1204
+ {
1205
+ "command": "volter.timeline.set-interpolation",
1206
+ "when": "false"
1207
+ },
1208
+ {
1209
+ "command": "volter.timeline.select-key",
1210
+ "when": "false"
1211
+ },
1212
+ {
1213
+ "command": "volter.blender-uv-view.state",
1214
+ "when": "false"
1215
+ },
1216
+ {
1217
+ "command": "volter.blender-uv-view.move-uv",
1218
+ "when": "false"
1219
+ },
1220
+ {
1221
+ "command": "volter.blender-uv-view.select",
1222
+ "when": "false"
1223
+ },
1224
+ {
1225
+ "command": "volter.blender-uv-view.pin",
1226
+ "when": "false"
1227
+ },
1228
+ {
1229
+ "command": "volter.blender-uv-view.unwrap",
1230
+ "when": "false"
1231
+ }
1232
+ ]
1233
+ }
72
1234
  },
73
1235
  "dependencies": {
1236
+ "@volter/editor-movie": "0.5.212",
74
1237
  "@modelcontextprotocol/sdk": "1.32.1",
75
- "@volter/blender-engine": "0.1.148",
76
- "@volter/editor-threejs": "0.5.211",
1238
+ "@volter/blender-engine": "0.1.149",
1239
+ "@volter/editor-threejs": "0.5.212",
77
1240
  "zod": "^4.3.6",
78
1241
  "@fortawesome/free-solid-svg-icons": "^7.2.0"
79
1242
  },
80
1243
  "peerDependencies": {
81
- "@volter/live": "0.5.211",
82
- "@volter/project": "0.5.211",
83
- "@volter/sdk": "0.5.211",
1244
+ "@volter/live": "0.5.212",
1245
+ "@volter/project": "0.5.212",
1246
+ "@volter/sdk": "0.5.212",
84
1247
  "react": "^19.0.0",
85
1248
  "react-dom": "^19.0.0",
86
- "three": "^0.180.0",
87
- "vite": "^6.4.3"
1249
+ "three": "^0.186.1",
1250
+ "vite": "^6.4.3 || ^7.0.0 || ^8.0.0"
88
1251
  },
89
1252
  "scripts": {
90
1253
  "typecheck": "tsc -p tsconfig.json",