structura-render 0.2.0__tar.gz → 0.2.2__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 (29) hide show
  1. {structura_render-0.2.0 → structura_render-0.2.2}/PKG-INFO +27 -19
  2. {structura_render-0.2.0 → structura_render-0.2.2}/README.md +24 -16
  3. {structura_render-0.2.0 → structura_render-0.2.2}/pyproject.toml +3 -3
  4. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/obj.py +15 -0
  5. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/PKG-INFO +27 -19
  6. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/requires.txt +2 -2
  7. {structura_render-0.2.0 → structura_render-0.2.2}/setup.cfg +0 -0
  8. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/__init__.py +0 -0
  9. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/assets.py +0 -0
  10. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/block_model.py +0 -0
  11. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_full_cube_list.py +0 -0
  12. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/build_opaque_blocks.py +0 -0
  13. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/full_cube_blocks.json +0 -0
  14. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/data/opaque_blocks.json +0 -0
  15. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/entity_shapes.py +0 -0
  16. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/full_cube.py +0 -0
  17. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/gltf.py +0 -0
  18. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/hero.py +0 -0
  19. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/legacy_input.py +0 -0
  20. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/mesh.py +0 -0
  21. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/projections.py +0 -0
  22. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/stl.py +0 -0
  23. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/textures.py +0 -0
  24. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/usdz.py +0 -0
  25. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render/usdz_variants.py +0 -0
  26. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/SOURCES.txt +0 -0
  27. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/dependency_links.txt +0 -0
  28. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/entry_points.txt +0 -0
  29. {structura_render-0.2.0 → structura_render-0.2.2}/src/structura_render.egg-info/top_level.txt +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: structura-render
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)
5
5
  Project-URL: Repository, https://github.com/kirimba1024/structura-render
6
6
  Requires-Python: >=3.9
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: structura-core<0.2,>=0.1.0
8
+ Requires-Dist: structura-core<0.3,>=0.2.0
9
9
  Requires-Dist: numpy<3,>=1.26
10
10
  Requires-Dist: Pillow<12,>=11
11
11
  Requires-Dist: scipy<2,>=1.13
@@ -27,7 +27,7 @@ Requires-Dist: pyvista<0.47,>=0.46; extra == "stl"
27
27
  Requires-Dist: trimesh<5,>=4.5; extra == "stl"
28
28
  Requires-Dist: networkx<4,>=3.2; extra == "stl"
29
29
  Provides-Extra: legacy
30
- Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
30
+ Requires-Dist: structura-core[legacy]<0.3,>=0.2.0; extra == "legacy"
31
31
 
32
32
  # structura-render
33
33
 
@@ -35,8 +35,8 @@ Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
35
35
  your own game's actual textures and block shapes, not guesses.**
36
36
 
37
37
  No fake textures, no hardcoded block shapes, no bundled game files. Point
38
- it at your own Minecraft client and get pixel-accurate PNGs and USDZ out
39
- the other end.
38
+ it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
39
+ (USDZ, glTF/GLB, OBJ or STL) out the other end.
40
40
 
41
41
  **This isn't a lookup table of ~50 common blocks with guessed shapes.**
42
42
  The resolver walks the same blockstate → multipart/variant → model → element
@@ -57,8 +57,8 @@ portals and fluids) share a compact textured compound-model layer.
57
57
  blockstate/model data and PNGs as the game. Dynamic blocks use their real
58
58
  entity textures on compact state-aware compound geometry.
59
59
  - **One mesh, every output.** Geometry is resolved once and shared between
60
- PNG renders and USDZ export, so what you preview is exactly what you get
61
- in 3D — nothing drifts between formats.
60
+ PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
61
+ preview is exactly what you get in 3D — nothing drifts between formats.
62
62
  - **Clean by design.** Zero Mojang assets in this repo or its releases —
63
63
  can't, EULA forbids it. You always supply your own client, so there's no
64
64
  legal grey area to worry about.
@@ -67,8 +67,8 @@ portals and fluids) share a compact textured compound-model layer.
67
67
  1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
68
68
  on us to add support.
69
69
  - **Light by default.** Core install is just NumPy, Pillow and SciPy.
70
- PyVista/USD only get pulled in if you actually ask for hero renders or
71
- USDZ export.
70
+ PyVista and the format-specific libraries (USD, trimesh) only get pulled
71
+ in if you actually ask for hero renders or a given 3D export.
72
72
  - **Self-updating classification.** Which blocks are solid cubes (for
73
73
  occlusion) is computed from real model geometry, not a hand-maintained
74
74
  name list — it doesn't go stale as new blocks ship.
@@ -86,8 +86,15 @@ portals and fluids) share a compact textured compound-model layer.
86
86
  QA rather than looks.
87
87
  - **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
88
88
  of the finished structure — the kind of shot above.
89
- - **`usdz.py`** (`usdz` extra) — a textured 3D mesh for AR Quick Look or
90
- any USDZ viewer, from the same mesh builder as the hero renderer.
89
+ - **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
90
+ from the same mesh builder as the hero renderer.
91
+ - **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
92
+ (`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
93
+ other glTF-reading tool.
94
+ - **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
95
+ MeshLab and any classic 3D tool.
96
+ - **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
97
+ format doesn't have one), for 3D printing or any STL reader.
91
98
  - **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
92
99
  block classification, described above.
93
100
  - **`docs/block-render-audit-26.2.md`** — one row for every vanilla
@@ -99,17 +106,17 @@ portals and fluids) share a compact textured compound-model layer.
99
106
 
100
107
  ## Quick start
101
108
 
102
- No clone needed for either package, but `structura-core` isn't on PyPI yet,
103
- so `pip` can't resolve it as a transitive dependency — install it
104
- explicitly first, then `structura-render`:
105
-
106
109
  ```bash
107
110
  export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
108
- pip install 'git+https://github.com/kirimba1024/structura-core.git'
109
- pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
111
+ pip install "structura-render[usdz]"
110
112
  structura-render-hero structure.nbt preview.png
113
+ structura-export-usdz structure.nbt model.usdz
111
114
  ```
112
115
 
116
+ Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
117
+ for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
118
+ `structura-export-stl` follow the same `src dst` signature.
119
+
113
120
  Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
114
121
  Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
115
122
  separate conversion step:
@@ -134,5 +141,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
134
141
  in 1.21) and warns on stderr if it's missing, as a cheap signal that the
135
142
  pointed-at client predates 1.21 — not exhaustive, just a sanity check.
136
143
 
137
- Use the lighter `hero` extra when USDZ export isn't needed; plain
138
- projection rendering skips PyVista and OpenUSD entirely.
144
+ Use the lighter `hero` extra when no 3D export is needed; plain projection
145
+ rendering (`structura-render-projections`, no extra) skips PyVista and
146
+ every format-specific library entirely.
@@ -4,8 +4,8 @@
4
4
  your own game's actual textures and block shapes, not guesses.**
5
5
 
6
6
  No fake textures, no hardcoded block shapes, no bundled game files. Point
7
- it at your own Minecraft client and get pixel-accurate PNGs and USDZ out
8
- the other end.
7
+ it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
8
+ (USDZ, glTF/GLB, OBJ or STL) out the other end.
9
9
 
10
10
  **This isn't a lookup table of ~50 common blocks with guessed shapes.**
11
11
  The resolver walks the same blockstate → multipart/variant → model → element
@@ -26,8 +26,8 @@ portals and fluids) share a compact textured compound-model layer.
26
26
  blockstate/model data and PNGs as the game. Dynamic blocks use their real
27
27
  entity textures on compact state-aware compound geometry.
28
28
  - **One mesh, every output.** Geometry is resolved once and shared between
29
- PNG renders and USDZ export, so what you preview is exactly what you get
30
- in 3D — nothing drifts between formats.
29
+ PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
30
+ preview is exactly what you get in 3D — nothing drifts between formats.
31
31
  - **Clean by design.** Zero Mojang assets in this repo or its releases —
32
32
  can't, EULA forbids it. You always supply your own client, so there's no
33
33
  legal grey area to worry about.
@@ -36,8 +36,8 @@ portals and fluids) share a compact textured compound-model layer.
36
36
  1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
37
37
  on us to add support.
38
38
  - **Light by default.** Core install is just NumPy, Pillow and SciPy.
39
- PyVista/USD only get pulled in if you actually ask for hero renders or
40
- USDZ export.
39
+ PyVista and the format-specific libraries (USD, trimesh) only get pulled
40
+ in if you actually ask for hero renders or a given 3D export.
41
41
  - **Self-updating classification.** Which blocks are solid cubes (for
42
42
  occlusion) is computed from real model geometry, not a hand-maintained
43
43
  name list — it doesn't go stale as new blocks ship.
@@ -55,8 +55,15 @@ portals and fluids) share a compact textured compound-model layer.
55
55
  QA rather than looks.
56
56
  - **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
57
57
  of the finished structure — the kind of shot above.
58
- - **`usdz.py`** (`usdz` extra) — a textured 3D mesh for AR Quick Look or
59
- any USDZ viewer, from the same mesh builder as the hero renderer.
58
+ - **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
59
+ from the same mesh builder as the hero renderer.
60
+ - **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
61
+ (`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
62
+ other glTF-reading tool.
63
+ - **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
64
+ MeshLab and any classic 3D tool.
65
+ - **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
66
+ format doesn't have one), for 3D printing or any STL reader.
60
67
  - **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
61
68
  block classification, described above.
62
69
  - **`docs/block-render-audit-26.2.md`** — one row for every vanilla
@@ -68,17 +75,17 @@ portals and fluids) share a compact textured compound-model layer.
68
75
 
69
76
  ## Quick start
70
77
 
71
- No clone needed for either package, but `structura-core` isn't on PyPI yet,
72
- so `pip` can't resolve it as a transitive dependency — install it
73
- explicitly first, then `structura-render`:
74
-
75
78
  ```bash
76
79
  export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
77
- pip install 'git+https://github.com/kirimba1024/structura-core.git'
78
- pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
80
+ pip install "structura-render[usdz]"
79
81
  structura-render-hero structure.nbt preview.png
82
+ structura-export-usdz structure.nbt model.usdz
80
83
  ```
81
84
 
85
+ Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
86
+ for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
87
+ `structura-export-stl` follow the same `src dst` signature.
88
+
82
89
  Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
83
90
  Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
84
91
  separate conversion step:
@@ -103,5 +110,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
103
110
  in 1.21) and warns on stderr if it's missing, as a cheap signal that the
104
111
  pointed-at client predates 1.21 — not exhaustive, just a sanity check.
105
112
 
106
- Use the lighter `hero` extra when USDZ export isn't needed; plain
107
- projection rendering skips PyVista and OpenUSD entirely.
113
+ Use the lighter `hero` extra when no 3D export is needed; plain projection
114
+ rendering (`structura-render-projections`, no extra) skips PyVista and
115
+ every format-specific library entirely.
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "structura-render"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
11
11
  dependencies = [
12
- "structura-core>=0.1.0,<0.2",
12
+ "structura-core>=0.2.0,<0.3",
13
13
  "numpy>=1.26,<3",
14
14
  "Pillow>=11,<12",
15
15
  "scipy>=1.13,<2",
@@ -21,7 +21,7 @@ usdz = ["pyvista>=0.46,<0.47", "usd-core>=26,<27"]
21
21
  gltf = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
22
22
  obj = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
23
23
  stl = ["pyvista>=0.46,<0.47", "trimesh>=4.5,<5", "networkx>=3.2,<4"]
24
- legacy = ["structura-core[legacy]>=0.1.0,<0.2"]
24
+ legacy = ["structura-core[legacy]>=0.2.0,<0.3"]
25
25
 
26
26
  [project.scripts]
27
27
  structura-render-projections = "structura_render.projections:main"
@@ -1,4 +1,5 @@
1
1
  import argparse
2
+ import re
2
3
  from pathlib import Path
3
4
 
4
5
  import numpy as np
@@ -11,6 +12,19 @@ from .mesh import build_textured_meshes, export_parts, flat_block_groups, voxel_
11
12
  from .textures import TextureBank
12
13
 
13
14
 
15
+ def add_alpha_maps(obj_path):
16
+ obj_text = obj_path.read_text()
17
+ mtllib = re.search(r"^mtllib (.+)$", obj_text, re.MULTILINE)
18
+ if not mtllib:
19
+ return
20
+ mtl_path = obj_path.parent / mtllib.group(1)
21
+ mtl_text = mtl_path.read_text()
22
+ mtl_text = re.sub(
23
+ r"^(map_Kd (.+))$", r"\1\nmap_d \2", mtl_text, flags=re.MULTILINE,
24
+ )
25
+ mtl_path.write_text(mtl_text)
26
+
27
+
14
28
  def main():
15
29
  parser = argparse.ArgumentParser()
16
30
  parser.add_argument("src")
@@ -40,6 +54,7 @@ def main():
40
54
  out_path.parent.mkdir(parents=True, exist_ok=True)
41
55
  resolver = trimesh.resolvers.FilePathResolver(str(out_path.parent))
42
56
  scene.export(str(out_path), resolver=resolver, write_texture=True)
57
+ add_alpha_maps(out_path)
43
58
  print(f"{out_path} parts={len(parts)}")
44
59
 
45
60
 
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: structura-render
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Minecraft block-model resolution, image rendering and 3D export (USDZ/glTF/OBJ/STL)
5
5
  Project-URL: Repository, https://github.com/kirimba1024/structura-render
6
6
  Requires-Python: >=3.9
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: structura-core<0.2,>=0.1.0
8
+ Requires-Dist: structura-core<0.3,>=0.2.0
9
9
  Requires-Dist: numpy<3,>=1.26
10
10
  Requires-Dist: Pillow<12,>=11
11
11
  Requires-Dist: scipy<2,>=1.13
@@ -27,7 +27,7 @@ Requires-Dist: pyvista<0.47,>=0.46; extra == "stl"
27
27
  Requires-Dist: trimesh<5,>=4.5; extra == "stl"
28
28
  Requires-Dist: networkx<4,>=3.2; extra == "stl"
29
29
  Provides-Extra: legacy
30
- Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
30
+ Requires-Dist: structura-core[legacy]<0.3,>=0.2.0; extra == "legacy"
31
31
 
32
32
  # structura-render
33
33
 
@@ -35,8 +35,8 @@ Requires-Dist: structura-core[legacy]<0.2,>=0.1.0; extra == "legacy"
35
35
  your own game's actual textures and block shapes, not guesses.**
36
36
 
37
37
  No fake textures, no hardcoded block shapes, no bundled game files. Point
38
- it at your own Minecraft client and get pixel-accurate PNGs and USDZ out
39
- the other end.
38
+ it at your own Minecraft client and get pixel-accurate PNGs and a 3D file
39
+ (USDZ, glTF/GLB, OBJ or STL) out the other end.
40
40
 
41
41
  **This isn't a lookup table of ~50 common blocks with guessed shapes.**
42
42
  The resolver walks the same blockstate → multipart/variant → model → element
@@ -57,8 +57,8 @@ portals and fluids) share a compact textured compound-model layer.
57
57
  blockstate/model data and PNGs as the game. Dynamic blocks use their real
58
58
  entity textures on compact state-aware compound geometry.
59
59
  - **One mesh, every output.** Geometry is resolved once and shared between
60
- PNG renders and USDZ export, so what you preview is exactly what you get
61
- in 3D — nothing drifts between formats.
60
+ PNG renders and every 3D export (USDZ, glTF, OBJ, STL), so what you
61
+ preview is exactly what you get in 3D — nothing drifts between formats.
62
62
  - **Clean by design.** Zero Mojang assets in this repo or its releases —
63
63
  can't, EULA forbids it. You always supply your own client, so there's no
64
64
  legal grey area to worry about.
@@ -67,8 +67,8 @@ portals and fluids) share a compact textured compound-model layer.
67
67
  1.21.1 and the newest 26.2. New blocks resolve automatically; no waiting
68
68
  on us to add support.
69
69
  - **Light by default.** Core install is just NumPy, Pillow and SciPy.
70
- PyVista/USD only get pulled in if you actually ask for hero renders or
71
- USDZ export.
70
+ PyVista and the format-specific libraries (USD, trimesh) only get pulled
71
+ in if you actually ask for hero renders or a given 3D export.
72
72
  - **Self-updating classification.** Which blocks are solid cubes (for
73
73
  occlusion) is computed from real model geometry, not a hand-maintained
74
74
  name list — it doesn't go stale as new blocks ship.
@@ -86,8 +86,15 @@ portals and fluids) share a compact textured compound-model layer.
86
86
  QA rather than looks.
87
87
  - **`hero.py`** (`hero` extra) — one real-textured, real-lit PyVista render
88
88
  of the finished structure — the kind of shot above.
89
- - **`usdz.py`** (`usdz` extra) — a textured 3D mesh for AR Quick Look or
90
- any USDZ viewer, from the same mesh builder as the hero renderer.
89
+ - **`usdz.py`** (`usdz` extra) — a textured USDZ mesh for AR Quick Look,
90
+ from the same mesh builder as the hero renderer.
91
+ - **`gltf.py`** (`gltf` extra) — a textured `.glb`, for the web
92
+ (`<model-viewer>`, three.js), Android AR Scene Viewer, Blender and every
93
+ other glTF-reading tool.
94
+ - **`obj.py`** (`obj` extra) — textured Wavefront OBJ + MTL, for Blender,
95
+ MeshLab and any classic 3D tool.
96
+ - **`stl.py`** (`stl` extra) — binary STL geometry (no color/texture — the
97
+ format doesn't have one), for 3D printing or any STL reader.
91
98
  - **`build_full_cube_list.py` / `build_opaque_blocks.py`** — data-derived
92
99
  block classification, described above.
93
100
  - **`docs/block-render-audit-26.2.md`** — one row for every vanilla
@@ -99,17 +106,17 @@ portals and fluids) share a compact textured compound-model layer.
99
106
 
100
107
  ## Quick start
101
108
 
102
- No clone needed for either package, but `structura-core` isn't on PyPI yet,
103
- so `pip` can't resolve it as a transitive dependency — install it
104
- explicitly first, then `structura-render`:
105
-
106
109
  ```bash
107
110
  export STRUCTURA_MINECRAFT_ASSETS="$HOME/Library/Application Support/minecraft/versions/1.21.1/1.21.1.jar"
108
- pip install 'git+https://github.com/kirimba1024/structura-core.git'
109
- pip install "structura-render[usdz] @ git+https://github.com/kirimba1024/structura-render.git"
111
+ pip install "structura-render[usdz]"
110
112
  structura-render-hero structure.nbt preview.png
113
+ structura-export-usdz structure.nbt model.usdz
111
114
  ```
112
115
 
116
+ Swap `[usdz]` for `[gltf]`, `[obj]` or `[stl]` (or several, comma-separated)
117
+ for the other 3D formats — `structura-export-gltf`, `structura-export-obj`,
118
+ `structura-export-stl` follow the same `src dst` signature.
119
+
113
120
  Have a legacy `.schematic`/`.schem`/`.litematic` instead of Structure NBT?
114
121
  Add the `legacy` extra (`[usdz,legacy]`) and pass it straight in — no
115
122
  separate conversion step:
@@ -134,5 +141,6 @@ and isn't supported. On load, the package checks for `heavy_core` (added
134
141
  in 1.21) and warns on stderr if it's missing, as a cheap signal that the
135
142
  pointed-at client predates 1.21 — not exhaustive, just a sanity check.
136
143
 
137
- Use the lighter `hero` extra when USDZ export isn't needed; plain
138
- projection rendering skips PyVista and OpenUSD entirely.
144
+ Use the lighter `hero` extra when no 3D export is needed; plain projection
145
+ rendering (`structura-render-projections`, no extra) skips PyVista and
146
+ every format-specific library entirely.
@@ -1,4 +1,4 @@
1
- structura-core<0.2,>=0.1.0
1
+ structura-core<0.3,>=0.2.0
2
2
  numpy<3,>=1.26
3
3
  Pillow<12,>=11
4
4
  scipy<2,>=1.13
@@ -12,7 +12,7 @@ networkx<4,>=3.2
12
12
  pyvista<0.47,>=0.46
13
13
 
14
14
  [legacy]
15
- structura-core[legacy]<0.2,>=0.1.0
15
+ structura-core[legacy]<0.3,>=0.2.0
16
16
 
17
17
  [obj]
18
18
  pyvista<0.47,>=0.46