dcc-mcp-speedtree 0.1.1__tar.gz

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 (83) hide show
  1. dcc_mcp_speedtree-0.1.1/MANIFEST.in +3 -0
  2. dcc_mcp_speedtree-0.1.1/PKG-INFO +119 -0
  3. dcc_mcp_speedtree-0.1.1/README.md +105 -0
  4. dcc_mcp_speedtree-0.1.1/docs/asset-bundle.md +49 -0
  5. dcc_mcp_speedtree-0.1.1/docs/capability-audit.md +114 -0
  6. dcc_mcp_speedtree-0.1.1/docs/compatibility.md +79 -0
  7. dcc_mcp_speedtree-0.1.1/docs/images/native-node-workflow.gif +0 -0
  8. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-01.png +0 -0
  9. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-02.png +0 -0
  10. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-03.png +0 -0
  11. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-04.png +0 -0
  12. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-05.png +0 -0
  13. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-06.png +0 -0
  14. dcc_mcp_speedtree-0.1.1/docs/images/node-stages/stage-07.png +0 -0
  15. dcc_mcp_speedtree-0.1.1/docs/images/speedtree-to-unreal.png +0 -0
  16. dcc_mcp_speedtree-0.1.1/docs/native-capability-matrix.md +58 -0
  17. dcc_mcp_speedtree-0.1.1/docs/node-authoring.md +139 -0
  18. dcc_mcp_speedtree-0.1.1/docs/node-showcase-acceptance.json +87 -0
  19. dcc_mcp_speedtree-0.1.1/docs/node-showcase-provenance.json +895 -0
  20. dcc_mcp_speedtree-0.1.1/docs/showcase-provenance.json +15 -0
  21. dcc_mcp_speedtree-0.1.1/docs/showcase.md +29 -0
  22. dcc_mcp_speedtree-0.1.1/pyproject.toml +40 -0
  23. dcc_mcp_speedtree-0.1.1/scripts/build_node_showcases.py +282 -0
  24. dcc_mcp_speedtree-0.1.1/scripts/check_wheel.py +94 -0
  25. dcc_mcp_speedtree-0.1.1/scripts/package_node_showcase.py +153 -0
  26. dcc_mcp_speedtree-0.1.1/scripts/render_node_showcases.py +143 -0
  27. dcc_mcp_speedtree-0.1.1/scripts/verify_node_showcases.py +158 -0
  28. dcc_mcp_speedtree-0.1.1/setup.cfg +4 -0
  29. dcc_mcp_speedtree-0.1.1/skills/speedtree-official/SKILL.md +28 -0
  30. dcc_mcp_speedtree-0.1.1/skills/speedtree-official/metadata/depends.md +2 -0
  31. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/__init__.py +25 -0
  32. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/__version__.py +1 -0
  33. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/bundle.py +67 -0
  34. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/capabilities.py +260 -0
  35. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/content.py +20 -0
  36. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/export.py +255 -0
  37. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/graph.py +411 -0
  38. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/handoff.py +50 -0
  39. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/node_tools.py +90 -0
  40. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/process.py +30 -0
  41. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/runtime.py +131 -0
  42. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/server.py +156 -0
  43. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/SKILL.md +29 -0
  44. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/discover_content.py +15 -0
  45. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_asset.py +15 -0
  46. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_capabilities.py +16 -0
  47. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_preset.py +15 -0
  48. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_runtime.py +31 -0
  49. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/inspect_unreal_project.py +15 -0
  50. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/scripts/plan_export.py +23 -0
  51. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-discovery/tools.yaml +144 -0
  52. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/SKILL.md +29 -0
  53. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/export_batch.py +27 -0
  54. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/export_status.py +14 -0
  55. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/plan_import.py +17 -0
  56. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/scripts/verify_export.py +22 -0
  57. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-export/tools.yaml +117 -0
  58. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/SKILL.md +36 -0
  59. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/discover_templates.py +17 -0
  60. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/edit_graph.py +17 -0
  61. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_authoring_catalog.py +17 -0
  62. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_graph.py +17 -0
  63. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/scripts/inspect_properties.py +17 -0
  64. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-nodes/tools.yaml +256 -0
  65. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-official/SKILL.md +28 -0
  66. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/skills/speedtree-official/metadata/depends.md +2 -0
  67. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree/unreal.py +26 -0
  68. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/PKG-INFO +119 -0
  69. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/SOURCES.txt +81 -0
  70. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/dependency_links.txt +1 -0
  71. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/entry_points.txt +6 -0
  72. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/requires.txt +6 -0
  73. dcc_mcp_speedtree-0.1.1/src/dcc_mcp_speedtree.egg-info/top_level.txt +1 -0
  74. dcc_mcp_speedtree-0.1.1/tests/test_bundle.py +26 -0
  75. dcc_mcp_speedtree-0.1.1/tests/test_capabilities.py +120 -0
  76. dcc_mcp_speedtree-0.1.1/tests/test_content.py +12 -0
  77. dcc_mcp_speedtree-0.1.1/tests/test_export.py +150 -0
  78. dcc_mcp_speedtree-0.1.1/tests/test_graph.py +207 -0
  79. dcc_mcp_speedtree-0.1.1/tests/test_process.py +65 -0
  80. dcc_mcp_speedtree-0.1.1/tests/test_runtime.py +27 -0
  81. dcc_mcp_speedtree-0.1.1/tests/test_server.py +24 -0
  82. dcc_mcp_speedtree-0.1.1/tests/test_skill_catalog.py +36 -0
  83. dcc_mcp_speedtree-0.1.1/tests/test_unreal.py +11 -0
@@ -0,0 +1,3 @@
1
+ recursive-include scripts *.py
2
+ recursive-include docs *.md *.json *.png *.gif
3
+ recursive-include skills *.md
@@ -0,0 +1,119 @@
1
+ Metadata-Version: 2.4
2
+ Name: dcc-mcp-speedtree
3
+ Version: 0.1.1
4
+ Summary: Local-first DCC-MCP adapter for SpeedTree official capabilities
5
+ Author-email: loonghao <hal.long@outlook.com>
6
+ License-Expression: MIT
7
+ Requires-Python: >=3.9
8
+ Description-Content-Type: text/markdown
9
+ Requires-Dist: dcc-mcp-core<1.0.0,>=0.20.22
10
+ Provides-Extra: test
11
+ Requires-Dist: pytest>=8; extra == "test"
12
+ Requires-Dist: ruff>=0.11; extra == "test"
13
+ Requires-Dist: build>=1; extra == "test"
14
+
15
+ # dcc-mcp-speedtree
16
+
17
+ Create and edit native SpeedTree generator graphs, regenerate them with the
18
+ licensed Modeler command-line exporter, and hand verified assets to another
19
+ DCC-MCP adapter. Graph authoring uses the observed SPM/STT file format and is
20
+ experimental; full live Modeler control is not yet available.
21
+
22
+ ## Native node showcase
23
+
24
+ ![Willow and grass created through successive generator operations](docs/images/native-node-workflow.gif)
25
+
26
+ The willow grows from trunk to primary branches, drooping branches, and leaf
27
+ cards. The grass adds stalk and frond generators, then edits the width curve
28
+ to taper the blades. Each step is a new SPM, regenerated by **SpeedTree Modeler
29
+ 10.1.0**. The diagram comes from the saved generator IDs and links.
30
+
31
+ | Native output | Generators | Vertices | Faces |
32
+ | --- | ---: | ---: | ---: |
33
+ | Willow | 5 | 7,092 | 6,166 |
34
+ | Grass | 3 | 27,540 | 59,400 |
35
+
36
+ These are procedural geometry studies. The images use unchanged exported OBJ
37
+ geometry with display materials in headless Blender; they are not Modeler
38
+ screenshots or native material acceptance. No UI automation builds either
39
+ asset. [Reproduce the workflow](docs/node-authoring.md) ·
40
+ [Operation and geometry evidence](docs/node-showcase-provenance.json) ·
41
+ [Native capability matrix](docs/native-capability-matrix.md).
42
+
43
+ ## Start
44
+
45
+ This is a source preview. Install the checkout with `python -m pip install -e .`,
46
+ then configure the installed Modeler executable:
47
+
48
+ ```powershell
49
+ $env:DCC_MCP_SPEEDTREE_EXECUTABLE = "C:/Applications/SpeedTree/SpeedTree_Modeler.exe"
50
+ dcc-mcp-speedtree
51
+ ```
52
+
53
+ The standalone service has its own lifetime and OS-assigned port. Discover it
54
+ with `dcc-mcp-cli --gateway local list`, then search and describe its tools.
55
+ Optional GUI binding uses `--pid <PID> --window-handle <HWND>` and validates
56
+ that the window belongs to the named executable. GUI actions must use the
57
+ project-owned `dcc-cua` / `ui-control` route with a fresh exact binding.
58
+
59
+ ## Agent workflow
60
+
61
+ Read the [capability audit](docs/capability-audit.md) for the complete tool chain
62
+ and the limits of modeling, materials, LOD, wind, collision, and cancellation.
63
+ Use `inspect_capabilities` for a machine-readable scope report without a GUI.
64
+
65
+ 1. `discover_templates` and `inspect_authoring_catalog` enumerate installed
66
+ generator templates and their stored properties. `inspect_graph` and
67
+ `inspect_properties` read the selected source. `edit_graph` adds, duplicates,
68
+ removes, connects, disconnects, renames, hides, or changes properties and
69
+ existing curve components, writing a **new** SPM/STT.
70
+ 2. `discover_content` locates installed SPM samples and Games/VFX presets;
71
+ `inspect_preset` reports the selected settings.
72
+ 3. `plan_export` checks an SPM, preset, format, and **new** output directory.
73
+ 4. `export_batch` exports 1–16 SPMs through `-export_game` or `-export`, with
74
+ `-export_options`. Supported extensions are `st9`, `st`, `fbx`, `obj`,
75
+ `abc`, and `usd`; availability still depends on product version/license.
76
+ 5. `export_status` reads progress while Core runs the job; Core cancellation
77
+ stops the owned export process (`DELETE /v1/jobs/{id}` on the owning service). `verify_export` checks the recorded file hashes before handoff. Each tree
78
+ lives in its own directory with its textures and material sidecar.
79
+ 6. `plan_import` prepares a verified handoff. Discover the destination adapter's importer, import into a new destination,
80
+ and read back geometry, materials, dependencies, transforms, and animation.
81
+
82
+ The [asset bundle contract](docs/asset-bundle.md) separates export evidence from
83
+ target import evidence. [Format and target coverage](docs/compatibility.md)
84
+ records the tested combinations and feature limits. The service never runs a
85
+ caller-supplied executable or shell command. Existing output directories are
86
+ rejected; timeout, failed exit, changed input, missing mesh, or missing explicit
87
+ material dependency stops the batch and preserves a partial manifest.
88
+
89
+ ## Unreal
90
+
91
+ ![Real SpeedTree source and Unreal Engine result](docs/images/speedtree-to-unreal.png)
92
+
93
+ The same Palm asset in Modeler 10.1 and UE 5.5, using native SpeedTree
94
+ materials after explicit unit, UV, and texture repairs on a duplicate.
95
+ The final mesh height is 12.34384 m; collision scale and dynamic wind remain unverified.
96
+ [Capture provenance and repair notes](docs/showcase.md).
97
+
98
+ Use the installed Unreal ST9 Games preset for a modern Unreal workflow.
99
+ `.spm` is the authoring source, not a Content Browser import format.
100
+ `inspect_unreal_project` reports descriptor entries only: a missing entry is
101
+ `null` because engine plugin defaults may enable it. Check installation and
102
+ loaded modules through `dcc-mcp-unreal`; configure missing plugins only after
103
+ the user authorizes the concrete plan. Configuration and restarts belong to
104
+ the target adapter. This service does not silently install or enable plugins.
105
+
106
+ After importing each ST9 via `unreal-assets.import_asset`, read back the mesh
107
+ and dependencies. Successful export or enabled plugins alone do not prove a
108
+ usable imported asset, correct wind, collision, or rendered appearance.
109
+
110
+ ## Official references
111
+
112
+ - [Command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html)
113
+ - [Games export options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html)
114
+ - [VFX formats and options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html)
115
+ - [Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html)
116
+
117
+ The repository contains no vendor binaries, licensed sample assets, SDK files,
118
+ or licensing material. Generated vendor sidecars can contain source-machine
119
+ paths; keep raw exports and diagnostics local unless reviewed for sharing.
@@ -0,0 +1,105 @@
1
+ # dcc-mcp-speedtree
2
+
3
+ Create and edit native SpeedTree generator graphs, regenerate them with the
4
+ licensed Modeler command-line exporter, and hand verified assets to another
5
+ DCC-MCP adapter. Graph authoring uses the observed SPM/STT file format and is
6
+ experimental; full live Modeler control is not yet available.
7
+
8
+ ## Native node showcase
9
+
10
+ ![Willow and grass created through successive generator operations](docs/images/native-node-workflow.gif)
11
+
12
+ The willow grows from trunk to primary branches, drooping branches, and leaf
13
+ cards. The grass adds stalk and frond generators, then edits the width curve
14
+ to taper the blades. Each step is a new SPM, regenerated by **SpeedTree Modeler
15
+ 10.1.0**. The diagram comes from the saved generator IDs and links.
16
+
17
+ | Native output | Generators | Vertices | Faces |
18
+ | --- | ---: | ---: | ---: |
19
+ | Willow | 5 | 7,092 | 6,166 |
20
+ | Grass | 3 | 27,540 | 59,400 |
21
+
22
+ These are procedural geometry studies. The images use unchanged exported OBJ
23
+ geometry with display materials in headless Blender; they are not Modeler
24
+ screenshots or native material acceptance. No UI automation builds either
25
+ asset. [Reproduce the workflow](docs/node-authoring.md) ·
26
+ [Operation and geometry evidence](docs/node-showcase-provenance.json) ·
27
+ [Native capability matrix](docs/native-capability-matrix.md).
28
+
29
+ ## Start
30
+
31
+ This is a source preview. Install the checkout with `python -m pip install -e .`,
32
+ then configure the installed Modeler executable:
33
+
34
+ ```powershell
35
+ $env:DCC_MCP_SPEEDTREE_EXECUTABLE = "C:/Applications/SpeedTree/SpeedTree_Modeler.exe"
36
+ dcc-mcp-speedtree
37
+ ```
38
+
39
+ The standalone service has its own lifetime and OS-assigned port. Discover it
40
+ with `dcc-mcp-cli --gateway local list`, then search and describe its tools.
41
+ Optional GUI binding uses `--pid <PID> --window-handle <HWND>` and validates
42
+ that the window belongs to the named executable. GUI actions must use the
43
+ project-owned `dcc-cua` / `ui-control` route with a fresh exact binding.
44
+
45
+ ## Agent workflow
46
+
47
+ Read the [capability audit](docs/capability-audit.md) for the complete tool chain
48
+ and the limits of modeling, materials, LOD, wind, collision, and cancellation.
49
+ Use `inspect_capabilities` for a machine-readable scope report without a GUI.
50
+
51
+ 1. `discover_templates` and `inspect_authoring_catalog` enumerate installed
52
+ generator templates and their stored properties. `inspect_graph` and
53
+ `inspect_properties` read the selected source. `edit_graph` adds, duplicates,
54
+ removes, connects, disconnects, renames, hides, or changes properties and
55
+ existing curve components, writing a **new** SPM/STT.
56
+ 2. `discover_content` locates installed SPM samples and Games/VFX presets;
57
+ `inspect_preset` reports the selected settings.
58
+ 3. `plan_export` checks an SPM, preset, format, and **new** output directory.
59
+ 4. `export_batch` exports 1–16 SPMs through `-export_game` or `-export`, with
60
+ `-export_options`. Supported extensions are `st9`, `st`, `fbx`, `obj`,
61
+ `abc`, and `usd`; availability still depends on product version/license.
62
+ 5. `export_status` reads progress while Core runs the job; Core cancellation
63
+ stops the owned export process (`DELETE /v1/jobs/{id}` on the owning service). `verify_export` checks the recorded file hashes before handoff. Each tree
64
+ lives in its own directory with its textures and material sidecar.
65
+ 6. `plan_import` prepares a verified handoff. Discover the destination adapter's importer, import into a new destination,
66
+ and read back geometry, materials, dependencies, transforms, and animation.
67
+
68
+ The [asset bundle contract](docs/asset-bundle.md) separates export evidence from
69
+ target import evidence. [Format and target coverage](docs/compatibility.md)
70
+ records the tested combinations and feature limits. The service never runs a
71
+ caller-supplied executable or shell command. Existing output directories are
72
+ rejected; timeout, failed exit, changed input, missing mesh, or missing explicit
73
+ material dependency stops the batch and preserves a partial manifest.
74
+
75
+ ## Unreal
76
+
77
+ ![Real SpeedTree source and Unreal Engine result](docs/images/speedtree-to-unreal.png)
78
+
79
+ The same Palm asset in Modeler 10.1 and UE 5.5, using native SpeedTree
80
+ materials after explicit unit, UV, and texture repairs on a duplicate.
81
+ The final mesh height is 12.34384 m; collision scale and dynamic wind remain unverified.
82
+ [Capture provenance and repair notes](docs/showcase.md).
83
+
84
+ Use the installed Unreal ST9 Games preset for a modern Unreal workflow.
85
+ `.spm` is the authoring source, not a Content Browser import format.
86
+ `inspect_unreal_project` reports descriptor entries only: a missing entry is
87
+ `null` because engine plugin defaults may enable it. Check installation and
88
+ loaded modules through `dcc-mcp-unreal`; configure missing plugins only after
89
+ the user authorizes the concrete plan. Configuration and restarts belong to
90
+ the target adapter. This service does not silently install or enable plugins.
91
+
92
+ After importing each ST9 via `unreal-assets.import_asset`, read back the mesh
93
+ and dependencies. Successful export or enabled plugins alone do not prove a
94
+ usable imported asset, correct wind, collision, or rendered appearance.
95
+
96
+ ## Official references
97
+
98
+ - [Command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html)
99
+ - [Games export options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html)
100
+ - [VFX formats and options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html)
101
+ - [Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html)
102
+
103
+ The repository contains no vendor binaries, licensed sample assets, SDK files,
104
+ or licensing material. Generated vendor sidecars can contain source-machine
105
+ paths; keep raw exports and diagnostics local unless reviewed for sharing.
@@ -0,0 +1,49 @@
1
+ # Asset bundle contract v1
2
+
3
+ `export-manifest.json` uses `schema: speedtree.export-batch.v1`. File paths in
4
+ `items[].mesh`, `items[].files[].path`, and material maps are relative to the
5
+ manifest directory. Move the whole bundle; resolve paths under that directory
6
+ and reject traversal. The tool response includes a local absolute manifest path.
7
+
8
+ The producer records exporter/source/preset SHA256 and byte counts, requested
9
+ format and preset mode, requested_units and requested_transform settings, requested tree count,
10
+ per-item status/exit code, and an inventory of emitted files. These hashes
11
+ identify inputs and detect changes; they do not certify licensing or trust.
12
+ Each successful item has a recognizable mesh header and nonempty output.
13
+ STMAT material records preserve map semantics and two-sided flags without
14
+ copying vendor `Source` paths into the manifest. Binary references still need
15
+ the target importer. Raw vendor sidecars are kept unchanged locally.
16
+
17
+ `status: exported` and `verify_export.verified: true` mean file-level checks
18
+ passed. `target_validation.status: not_run` is deliberately independent.
19
+ `dependencies.status` is `sidecar_verified` when explicit STMAT File references
20
+ exist, otherwise `requires_target_importer`. It never asserts full binary
21
+ texture dependency coverage. Preset unit/axis settings are requests; a target
22
+ must read its effective world bounds, units, and transforms back.
23
+
24
+ ## Consumer contract
25
+
26
+ A destination adapter should consume the resolved mesh and adjacent files,
27
+ import into a new destination by default, and produce a separate receipt keyed
28
+ by manifest hash and mesh hash. Include target application/version, importer
29
+ and plugin state, imported object identifiers, geometry/LOD counts, material
30
+ slots, missing references, effective transform, warnings, and per-feature
31
+ `verified`, `converted`, `unsupported`, or `not_checked` results. Do not rewrite
32
+ the producer manifest to turn file validation into target validation.
33
+
34
+ Use the target adapter's typed capability discovery rather than embedding
35
+ application commands in this package. Example routes: Unreal asset import for
36
+ ST9/ST, Blender interchange import for FBX/OBJ/Alembic/USD, and the discovered
37
+ Maya or 3ds Max importer for a compatible format. Missing plugins yield a
38
+ reviewable configuration plan; apply only within the target's user consent
39
+ contract. Importing a mesh never restores the editable SpeedTree generator.
40
+
41
+ ## Jobs and cancellation
42
+
43
+ The export tool runs as an asynchronous core job in process. Poll its returned
44
+ core job id using the advertised core polling contract; never resubmit a timed
45
+ out launch to poll it. `export_status` reads the atomic manifest for completed
46
+ count and per-tree states during execution. Cancel through the owning service's documented `DELETE /v1/jobs/{id}` endpoint or the gateway cancellation contract. Core cancellation is checked
47
+ before launch, between trees, and at most every 250 ms while waiting on the
48
+ owned exporter. Cancellation or timeout kills and reaps only that child,
49
+ leaves the partial output/manifest for diagnosis, and prevents the next tree.
@@ -0,0 +1,114 @@
1
+ # Capability audit
2
+
3
+ Audited against Modeler 10.1.0 on Windows; native graph coverage updated
4
+ 2026-09-10. This adapter covers experimental native file graph authoring,
5
+ official file export and destination handoff, **not the whole Modeler**.
6
+ `inspect_capabilities` reports implementation scope without requiring a GUI;
7
+ it is not a live document or license probe.
8
+
9
+ ## Exposure and packaging
10
+
11
+ Four packaged Skills contain sixteen adapter tools. Core job/skill lifecycle
12
+ and UI tools are shared infrastructure and are not counted as Modeler features.
13
+ Every listed tool has a committed input/output object schema and script in the
14
+ wheel. `scripts/check_wheel.py` installs the built wheel outside the checkout,
15
+ checks the imported module origin, discovers and loads all four Skills, and
16
+ calls the capability entry point. CI runs this gate after building the sdist
17
+ and wheel. The repository remains a source preview; building a wheel does not
18
+ mean it has been published to a package index.
19
+
20
+ The audit also replaced ineffective top-level safety fields with standard MCP
21
+ `annotations` hints. Read operations are now identified as read-only, while
22
+ batch export remains destructive and asynchronous. A registry-level regression
23
+ test and the installed-wheel gate check these annotations and all tool scripts.
24
+
25
+ | Implementation | Typed tool (Skill prefix omitted) | Skill | Runtime evidence / boundary |
26
+ | --- | --- | --- | --- |
27
+ | Capability status | `inspect_capabilities` | discovery | Available without a GUI; previously only reachable through GUI runtime inspection |
28
+ | Installed samples and presets | `discover_content` | discovery | Games and VFX presets; VFX counts now included |
29
+ | Asset fingerprint | `inspect_asset` | discovery | File size/hash; no SPM generator parsing |
30
+ | Preset properties | `inspect_preset` | discovery | Read-only INI sections, including requested animation options |
31
+ | Export preflight | `plan_export` | discovery | Existing SPM/preset and new output; does not prove license or preset effectiveness |
32
+ | Exact GUI binding | `inspect_runtime` | discovery | PID/HWND identity only; no live model inspection; separate GUI binding required |
33
+ | Unreal descriptor | `inspect_unreal_project` | discovery | Explicit entries only; absent plugin entry is unknown, not disabled |
34
+ | Official export | `export_batch` | export | Six formats exported; bounded batch, hashes, atomic manifest and partial failure evidence |
35
+ | Batch progress | `export_status` | export | Per-tree status; no vendor-internal percentage or restart recovery |
36
+ | File verification | `verify_export` | export | Hashes, headers, explicit STMAT references; not full binary dependency or animation acceptance |
37
+ | Destination handoff | `plan_import` | export | Verified files and required target readback; no destination mutation |
38
+ | Native generator graph | `inspect_graph` | nodes | Actual SPM/STT generators and links; no live document state |
39
+ | Generator properties | `inspect_properties` | nodes | Stored scalar fields and indexed spline components |
40
+ | Installed templates | `discover_templates` | nodes | Generator STT and project SPM files, discovered from installation |
41
+ | Generator catalog | `inspect_authoring_catalog` | nodes | 51 installed generator templates, 16 types; parse failures explicit |
42
+ | File graph authoring | `edit_graph` | nodes | Atomic operation batches to new files; seven native-exported showcase stages |
43
+
44
+ The routing-only `speedtree-official` Skill has no tools. It now declares the
45
+ SpeedTree family and its discovery/export dependencies. Its repository mirror
46
+ is retained for direct Skill consumers; the runtime reads the packaged copy.
47
+ Core's Python API loads this routing guide, but CLI 0.20.22 with Core 0.20.21 reported a 502 for
48
+ the zero-tool load even while the guide became loaded. This shared lifecycle
49
+ issue is distinct from executable Skill loading and remains a shared runtime
50
+ limitation; it is not masked by adding an artificial tool.
51
+ `select_samples`, runtime lifecycle functions, hashing, and sidecar readers
52
+ are library helpers, not missing independent editing features.
53
+
54
+ ## Feature limits
55
+
56
+ | Feature | Official boundary reviewed | Adapter coverage | Acceptance |
57
+ | --- | --- | --- | --- |
58
+ | Modeling / generator graph | Observed SPM/STT XML; no supported live Modeler authoring SDK identified locally | Experimental generator, link, scalar and curve-component file edits | Willow and grass stages regenerated by licensed Modeler CLI; no live document edits |
59
+ | Materials | CLI exports textures and STMAT; target scripts may reconstruct shaders | Sidecar inspection and file transport only | UE Palm required explicit material/UV repairs; no Modeler material editor |
60
+ | LOD | Games presets can request existing source LODs | Preset inspection and export | Three UE Palm LODs read back; no LOD authoring or transition playback test |
61
+ | Wind | VFX Wind preset requests point-cache animation; native games data is target-specific | Preset requests recorded; existing generator fields accessible | Dynamic output not established in the tests below; no Fan authoring |
62
+ | Collision | Authoring and target runtime are separate from file verification | No collision editing tool | Post-unit-conversion collision not accepted |
63
+ | Batch cancellation | Adapter owns the launched CLI child; Core owns the job | Core DELETE job route, no duplicate job manager | Active child termination verified; source GUI preserved in the prior live test |
64
+ | Import / plugin setup | Destination adapter and user authorization own configuration | Handoff only | No silent plugin install; target availability must be discovered |
65
+
66
+ Unsupported-by-this-adapter does not mean the vendor product lacks the feature.
67
+ Shader include files and an SDK export preset are not a Modeler authoring API.
68
+ No undocumented process injection or guessed function signatures are used.
69
+ The [native capability matrix](native-capability-matrix.md) records application
70
+ features beyond the generator graph and the verified entry needed for each gap.
71
+
72
+ ## Wind investigation
73
+
74
+ The installed `Wind.ini` requests wind, 30 FPS, five seconds, looping, no gusts,
75
+ and the current source wind strength. The existing `inspect_preset` tool reads
76
+ these settings, and `export_batch` records them as `requested_animation` while
77
+ leaving `animation_validation=requires_target_time_samples`.
78
+
79
+ Using that preset, both Games Palm and VFX Palm exported valid Alembic meshes.
80
+ Blender's official importer evaluated frames 1, 16, 31, 61, 91, and 151. All
81
+ position hashes were identical within each asset, with maximum displacement
82
+ zero; no mesh-sequence modifier was created. Games Palm FBX export produced
83
+ no MCX point-cache file. Moving the official options before the export command
84
+ also produced no cache. These results establish failure to obtain dynamic
85
+ output for these requests, not the root cause or universal lack of vendor wind
86
+ support. Source wind configuration, preset application, and target runtime wind
87
+ must be investigated separately. A static screenshot is not wind acceptance.
88
+
89
+ A separate UE 5.5 diagnostic used the unchanged native ST9 mesh data and
90
+ isolated material copies. The imported wind switches and packed wind UVs were
91
+ present, but sampled default driving scalars were zero. Explicit nonzero
92
+ material parameters produced changes in 45,699 and 45,305 pixels across two
93
+ fixed-camera frame pairs, confined to the tree with no background changes.
94
+ The stable zero-wind control changed zero pixels. This proves diagnostic GPU
95
+ wind activity after target-side overrides, not correct source wind export,
96
+ source fidelity, or approved artistic motion. The new twelve mesh/material/
97
+ texture packages were saved and reloaded with valid references.
98
+
99
+ The earlier static showcase was captured in a live editor session. On reopening
100
+ the original baseline, some material packages were missing; that capture must
101
+ not be used as proof of persistent material dependencies. The new diagnostic
102
+ uses separately saved dependencies and leaves the original baseline unchanged.
103
+
104
+ Official references: [Modeler CLI](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
105
+ [VFX export and animation](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html).
106
+ See [target compatibility](compatibility.md) for measured units and materials.
107
+
108
+ ## Cleanup scope
109
+
110
+ Only identified test/lint/bytecode caches and empty benchmark directories are
111
+ eligible for local cleanup after containment and ownership checks. Dirty source
112
+ files, source assets, exported bundles, acceptance records, distributable
113
+ archives, existing environments, and routing Skill mirrors are retained.
114
+ Local cleanup receipts are not included in the public package.
@@ -0,0 +1,79 @@
1
+ # Format and target coverage
2
+
3
+ Observed with SpeedTree Modeler 10.1.0 on Windows, 2026-09-07. A successful
4
+ run describes this licensed installation; it is not a guarantee for every
5
+ edition, subscription, or source asset. Each permitted export format below
6
+ was generated by the official CLI and checked for a recognizable file header,
7
+ nonempty mesh, file inventory hashes, and explicit material sidecar references
8
+ where present. Vendor assets and raw local logs are not distributed here.
9
+
10
+ | Format | Export evidence | Unreal 5.5 | Blender 5.2 | Maya 2026 |
11
+ | --- | --- | --- | --- | --- |
12
+ | ST9 | Palm, Oak, Conifer + textures | 3 StaticMeshes and material dependencies read back | Requires conversion | Requires conversion |
13
+ | ST | Palm + textures, through SpeedTree MCP | Not imported in this run | Requires conversion | Requires conversion |
14
+ | FBX | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces, 6 material slots | Same mesh counts; saved and reopened |
15
+ | OBJ | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
16
+ | Alembic | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
17
+ | USD | Palm; 6 materials, 37 map references | Not checked | Mesh read back: 6,081 vertices, 8,498 faces | Same mesh counts; saved and reopened |
18
+
19
+ 3ds Max/Houdini/Unity handoffs use the same bundle contract; destination validation is
20
+ owned by their adapters and is not claimed by this baseline. USD, Alembic, and
21
+ other importer availability must be discovered in the particular target.
22
+ GLTF/GLB, legacy SRT, STE, and XML are not export tool options in this release;
23
+ file discovery support does not imply verified export support.
24
+
25
+ ## Feature preservation
26
+
27
+ | Feature | Native ST9/ST route | FBX/OBJ route | Alembic/USD route |
28
+ | --- | --- | --- | --- |
29
+ | Geometry | Three ST9 meshes read back in UE | FBX and OBJ geometry read back in Blender | Alembic and USD geometry read back in Blender |
30
+ | Materials/textures | Engine importer generates materials | STMAT semantic maps retained; target shader conversion required | STMAT maps retained; shader conversion required |
31
+ | Transparent leaves | Palm appearance checked after explicit UV/material repairs on a duplicate | Opacity maps and two-sided metadata present; rendered result not checked | Same; cache import alone does not build leaf shaders |
32
+ | LOD | Palm has 3 UE mesh LODs: 8,498 / 5,396 / 2,346 triangles | Preset-dependent; no preservation claim for this VFX sample | No LOD preservation claim for this VFX sample |
33
+ | Wind/animation | Runtime-specific; dynamic playback not checked | Static sample; no wind transfer claim. OBJ is static geometry | Static sample; animated cache export requires a separate preset/test |
34
+ | Instances | No preservation claim | No preservation claim | No preservation claim |
35
+ | Units/axes | Explicit vertex conversion gives 12.34384 m on the repaired Palm duplicate | FBX encodes feet and gives 12.34384 m Blender height; OBJ needs explicit consumer normalization | USD encodes feet and gives the same Blender world dimensions; Alembic needs consumer normalization |
36
+ | Editable generators | Remain in original SPM | Not transferred | Not transferred |
37
+
38
+ Official references: [CLI](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
39
+ [VFX options](https://docs.unity3d.com/speedtree-modeler/manual/vfx-export-options.html),
40
+ [Games options](https://docs.unity3d.com/speedtree-modeler/manual/games-export-options.html),
41
+ [Unreal integration](https://docs.unity3d.com/speedtree-modeler/manual/import-to-unreal.html).
42
+ The feature table distinguishes configured intent and measured results; it
43
+ must not be interpreted as an animation, visual, or game-runtime acceptance.
44
+
45
+ ## Acceptance findings that remain open
46
+
47
+ All four interchange formats reconstruct the same Palm vertex geometry after
48
+ explicit mathematical unit/axis normalization. FBX and USD encode feet and
49
+ produce a 12.34384 m world height in Blender. OBJ and Alembic need consumer
50
+ unit/axis configuration. This run's preset requests for centimeter/Z-up were
51
+ not reflected in the output metadata; changing CLI argument order or setting
52
+ TransformScale=30.48 did not change the ST9 bounds.
53
+
54
+ UE 5.5 ST9 imports measured only 40.49815 cm tall. Its native ST9 factory path
55
+ does not use the legacy TreeScale option. Source-unit conversion therefore
56
+ requires a separately verified normalization step, not an assumed importer
57
+ flag. The baseline native materials resolved textures but rendered fallback
58
+ surfaces. A separate Palm duplicate now renders correct foliage after material
59
+ instance refresh, a corrected Subsurface map, and UV0 V inversion on all three
60
+ LODs. Build-scale settings alone did not survive the UV rebuild consistently;
61
+ explicit conversion of all three LODs' source vertices by 30.48 produced final
62
+ bounds of 1,234.383705 cm with build and actor scales both 1. Collision scale and
63
+ dynamic wind were not tested. See the [real capture and repair notes](showcase.md).
64
+
65
+ Blender detailed checks also found six empty Alembic material node graphs and
66
+ invalid OBJ normal image references with a trailing MTL bump option. Existing
67
+ sidecar references are complete, but this is not equivalent to correct target
68
+ shader reconstruction. Vendor-provided DCC importer scripts may help, but
69
+ must be discovered in the local installation and checked for target-version
70
+ compatibility; they are not redistributed by this adapter.
71
+
72
+ Maya 2026 independently measured the same 12.34384 m height for FBX and USD.
73
+ In its centimeter scenes, OBJ and Alembic were approximately 0.40498 m tall
74
+ along Z and require consumer unit/axis conversion. OBJ produced six invalid
75
+ texture paths equal to `1`, consistent with the trailing bump option; Alembic
76
+ used a default shader. USD's 23 image paths existed. FBX had 17 existing
77
+ relative image references and one empty file node, with runtime texture
78
+ resolution unverified. Saving and reopening preserved all four mesh counts;
79
+ Maya rendering, wind, and LOD behavior were not accepted by this test.
@@ -0,0 +1,58 @@
1
+ # Native capability coverage
2
+
3
+ Target: SpeedTree Modeler 10.1 on Windows. This inventory separates native
4
+ file access, official commands, and live Modeler commands. It does **not**
5
+ claim that every feature of the application has a callable authoring API.
6
+ No UI automation is used to fill native gaps.
7
+
8
+ ## Entry points and evidence
9
+
10
+ | Product capability | Native entry | Exposed implementation | Evidence / remaining boundary |
11
+ | --- | --- | --- | --- |
12
+ | Generator inventory | SPM/STT `Generators` | `inspect_graph`, `inspect_authoring_catalog` | 51 installed templates parsed; 16 generator types |
13
+ | Generator create/copy/delete/name/visibility | Generator XML and GUIDs | `edit_graph` | Validated file operations; Modeler export required |
14
+ | Generator connections | `Links` with source/target GUIDs | Connect/disconnect, cycle and reference checks | Reloaded output graph; staged exports |
15
+ | Branches, fronds, leaves | Generator properties | All stored property/component names accessible | Willow and grass native export cases |
16
+ | Base, reference, mesh branch, conversion, stitches | Installed generator templates | Template instantiation and stored properties | Structure exposed; separate geometry recipes not yet validated |
17
+ | Caps, fins, knots, zones, decals, mesh detail, targets | Installed generator templates | Template instantiation and stored properties | Structure exposed; separate geometry recipes not yet validated |
18
+ | Batched leaves | Installed generator template | Template instantiation and stored properties | Structure exposed; separate geometry recipe not yet validated |
19
+ | Distribution and random seeds | `Generation:*`, `Random Seeds:*` properties | Existing scalar/component editing | Vendor enums/ranges are not published in the XML |
20
+ | Profile and parent curves | Stored spline control points | Existing scalar control-point editing | No arbitrary curve point insertion/deletion yet |
21
+ | Wind, seasons, growth, LOD, UVs, normals, vertex colors | Stored generator property groups | Existing generator fields accessible | Field readback does not prove dynamic evaluation or final quality |
22
+ | Fan, global lighting, document controls | Separate SPM objects | Preserved, not exposed for mutation | Needs a typed object contract and host evaluation tests |
23
+ | Materials, textures, meshes, displacements, asset sets | `Assets` and external files | Existing exports/sidecar inspection | No complete asset-authoring or material-assignment transaction |
24
+ | Forces, hand drawing, individual generated-node edits | Separate authoring state / node overrides | Existing state preserved where unaffected | No callable live authoring integration verified |
25
+ | Collision generation | Modeler operation / saved collision objects | No native command exposed | Requires a verified command bridge or documented SDK |
26
+ | Ambient occlusion computation | Modeler operation | No native command exposed | Same boundary; export is not an AO command |
27
+ | Save and reopen authoring files | SPM/STT files | Exclusive new-file writes and parse readback | Does not update an already open document |
28
+ | VFX and games export | Official `-export`, `-export_game`, `-export_options` | Export, status, cancellation, verification | Six supported output extensions; product/license dependent |
29
+ | Batch control | Owned Modeler child + Core jobs | Progress, timeout, active-job cancellation | No vendor-internal progress or session reconstruction |
30
+ | Interactive viewport, selection, undo/redo, timeline playback | Live Modeler UI state | No native bridge verified | CUA canceled; not replaced by input automation |
31
+ | Modeler screenshot/viewport rendering | No reviewed CLI command | Not exposed | Showcase visualization must label exported-geometry renders honestly |
32
+ | Engine integration | Exported ST/ST9 and destination importer | Verified handoff/preflight | Destination owns import and acceptance |
33
+ | Licensing, preferences, application updates | Vendor-owned lifecycle | Not exposed as authoring mutations | Not evidence of a missing generator API |
34
+
35
+ `inspect_authoring_catalog` generates the installed generator inventory rather
36
+ than hard-coding a list of node types. New or unreadable formats are reported
37
+ as failures. Property enumeration reports stored fields, including components
38
+ of curves; it does not infer undocumented property meanings or legal ranges.
39
+
40
+ ## C++ / C# bridge boundary
41
+
42
+ The installed Modeler includes Qt libraries and external-DCC import scripts.
43
+ The reviewed installation contains no Modeler authoring headers, plugin SDK,
44
+ or documented command interface for live node mutations. Qt libraries are not
45
+ proof of an authoring API. The [Runtime SDK](https://docs.unity3d.com/speedtree-runtime-sdk)
46
+ is a separate runtime integration; an engine importer also cannot establish a
47
+ Modeler authoring interface.
48
+
49
+ A complete live bridge needs verified host commands and signatures, a version
50
+ handshake, main-thread dispatch, document/revision identity, typed arguments,
51
+ undo transactions, and authoritative post-operation state. Until that boundary
52
+ is available and tested, full native application coverage remains incomplete.
53
+ Adding a stub hook, guessed addresses, or synthetic success responses would
54
+ not close these gaps.
55
+
56
+ References: [Modeler manual](https://docs.unity3d.com/speedtree-modeler/manual/index.html),
57
+ [official command-line export](https://docs.unity3d.com/speedtree-modeler/manual/export-from-the-command-line.html),
58
+ [generator template commands](https://docs.unity3d.com/speedtree-modeler/manual/generation-editor-toolbar-reference.html).