simready-forge 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1,66 @@
1
+ """NVIDIA's official SimReady validator (simready-validate 2026.8) on profile Robotics-Prop 4.0.0."""
2
+
3
+ import json
4
+ from pathlib import Path
5
+
6
+ from .kit import PROFILE, PROFILE_VERSION
7
+
8
+
9
+ def feature_results(summary):
10
+ """{feature id: passed} from the validator's features summary."""
11
+ items = summary.items() if isinstance(summary, dict) else enumerate(summary or [])
12
+ out = {}
13
+ for key, value in items:
14
+ feature, passed = key, value
15
+ if isinstance(value, dict):
16
+ feature = value.get("id") or value.get("feature") or key
17
+ passed = value.get("passed", value.get("status"))
18
+ out[str(feature)] = passed
19
+ return out
20
+
21
+
22
+ def validate(asset, out=None, quiet=False):
23
+ """Validate a .usda; write <name>_reports/validate.json (or `out`) and return the summary."""
24
+ import simready.validate as sv
25
+
26
+ asset = Path(asset).resolve()
27
+ if out is None:
28
+ out = asset.parent.parent.parent / f"{asset.stem}_reports" / "validate.json"
29
+ out = Path(out)
30
+ out.parent.mkdir(parents=True, exist_ok=True)
31
+ sv.initialize(rules_and_requirements_paths=[], features_paths=[], profiles_paths=[])
32
+ config = sv.AssetValidationConfig(
33
+ asset_path=str(asset), profile_id=PROFILE, profile_version=PROFILE_VERSION, write_metadata=False
34
+ )
35
+ result = sv.validate_asset_list([config], report_file_path=str(out.with_suffix(".nvidia.json")))[0]
36
+ if result is None or not result.features_summary:
37
+ summary = {"asset": str(asset), "passed": False, "status": "no-result"}
38
+ else:
39
+
40
+ def record(item):
41
+ return {k: str(getattr(item, k)) for k in ("code", "message", "at") if getattr(item, k, None) is not None}
42
+
43
+ passed = bool(sv.features_summary_passed(result.features_summary) and not result.issues)
44
+ summary = {
45
+ "asset": str(asset),
46
+ "profile": f"{PROFILE}@{PROFILE_VERSION}",
47
+ "passed": passed,
48
+ "status": "passed" if passed else "failed",
49
+ "mandatory_failures": len(result.issues),
50
+ "optional_findings": len(result.soft_issues),
51
+ "features": feature_results(result.features_summary),
52
+ "mandatory": [record(i) for i in result.issues],
53
+ "optional": [record(i) for i in result.soft_issues],
54
+ }
55
+ out.write_text(json.dumps(summary, indent=1, default=str), encoding="utf-8")
56
+ if not quiet:
57
+ print(
58
+ f"{'PASSED' if summary['passed'] else 'FAILED'}: {summary.get('mandatory_failures')} mandatory failures, "
59
+ f"{summary.get('optional_findings')} optional findings (report: {out})"
60
+ )
61
+ features = sorted(k for k, v in summary.get("features", {}).items() if v is True)
62
+ if features:
63
+ print(" features passed: " + ", ".join(features))
64
+ for issue in summary.get("mandatory", [])[:25]:
65
+ print(f" [{issue.get('code', '')}] {issue.get('message', '')[:300]} at {issue.get('at', '')[:120]}")
66
+ return summary
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.5
2
+ Name: simready-forge
3
+ Version: 0.1.0
4
+ Summary: Turn a prompt or a photo into an NVIDIA SimReady asset: OpenUSD with materials, physics and joints
5
+ Project-URL: Homepage, https://github.com/serionist/simready-forge
6
+ Project-URL: Repository, https://github.com/serionist/simready-forge
7
+ Project-URL: Documentation, https://github.com/serionist/simready-forge/tree/main/docs
8
+ Project-URL: Issues, https://github.com/serionist/simready-forge/issues
9
+ Author: Soma Osvay
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: build123d,claude-code,isaac-sim,omniverse,openusd,robotics,simready,simulation,usd
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Multimedia :: Graphics :: 3D Modeling
20
+ Classifier: Topic :: Scientific/Engineering :: Physics
21
+ Requires-Python: <3.14,>=3.12
22
+ Requires-Dist: build123d==0.13.0
23
+ Requires-Dist: coacd==1.0.14
24
+ Requires-Dist: matplotlib==3.11.2
25
+ Requires-Dist: numpy==2.5.4
26
+ Requires-Dist: physx-usd-schemas==25.11.2.72696984
27
+ Requires-Dist: pillow==13.0.0
28
+ Requires-Dist: scipy==1.18.1
29
+ Requires-Dist: simready-foundation-tier-core==2026.8.0
30
+ Requires-Dist: simready-validate==2026.8.0
31
+ Requires-Dist: trimesh==5.2.0
32
+ Requires-Dist: usd-core==26.11
33
+ Requires-Dist: usd-profiles-nvidia==1.22.0
34
+ Requires-Dist: usd-validation-nvidia==1.22.0
35
+ Description-Content-Type: text/markdown
36
+
37
+ <h1 align="center">
38
+ <picture>
39
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/logo-dark.svg">
40
+ <img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/logo.svg" alt="simready-forge" width="520">
41
+ </picture>
42
+ </h1>
43
+
44
+ <p align="center"><b>Type what you want, or attach a photo. Get an NVIDIA SimReady asset that simulates.</b></p>
45
+
46
+ <p align="center">
47
+ <a href="https://github.com/serionist/simready-forge/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/serionist/simready-forge/actions/workflows/ci.yml/badge.svg?branch=main"></a>
48
+ <a href="https://github.com/serionist/simready-forge/actions/workflows/codeql.yml"><img alt="CodeQL" src="https://github.com/serionist/simready-forge/actions/workflows/codeql.yml/badge.svg?branch=main"></a>
49
+ <a href="https://github.com/serionist/simready-forge/blob/main/LICENSE"><img alt="Licence: MIT" src="https://img.shields.io/badge/licence-MIT-007ec6"></a>
50
+ <a href="https://www.python.org/"><img alt="Python 3.12 | 3.13" src="https://img.shields.io/badge/python-3.12%20%7C%203.13-3776ab?logo=python&logoColor=white"></a>
51
+ <a href="https://docs.anthropic.com/en/docs/claude-code"><img alt="Claude Code plugin" src="https://img.shields.io/badge/Claude%20Code-plugin-d97757"></a>
52
+ <a href="#how-an-asset-is-checked"><img alt="SimReady: Robotics-Prop 4.0.0" src="https://img.shields.io/badge/SimReady-Robotics--Prop%204.0.0-1f7a8c"></a>
53
+ <a href="https://openusd.org/"><img alt="OpenUSD" src="https://img.shields.io/badge/OpenUSD-26.11-4a4a4a"></a>
54
+ </p>
55
+
56
+ <p align="center">
57
+ <img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/showcase.jpg" alt="Eight assets made by simready-forge: a desk lamp, a rangefinder camera, a bottle, a nightstand, a running shoe, a pipe pile, a cable drum and a barricade" width="100%">
58
+ <br><sub>Eight assets made in Max mode, rendered in Isaac Sim by the review that checks them.</sub>
59
+ </p>
60
+
61
+ ```text
62
+ /simready-forge:make a 180 mm desk lamp with an adjustable arm, a weighted base and a translucent shade
63
+ ```
64
+
65
+ A Claude Code plugin and a Python kit. One prompt or photo in; out comes:
66
+
67
+ - **OpenUSD** (NVIDIA SimReady, Robotics-Prop 4.0.0) with real dimensions, materials and physics
68
+ - **Every joint the real object has**, driven and measured in Isaac Sim
69
+ - **URDF and GLB** exports, a report, and the build script to tweak and rerun
70
+
71
+ <p align="center">
72
+ <img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/joints.webp" alt="A desk lamp, a camera, a nightstand and a barricade, at rest and with every joint driven" width="80%">
73
+ <br><sub>At rest, then every joint driven: the review watches each mechanism move.</sub>
74
+ </p>
75
+
76
+ ## How it works
77
+
78
+ ```mermaid
79
+ flowchart LR
80
+ R["Prompt or photo"] --> S["Spec<br/>parts, joints,<br/>materials"]
81
+ S --> B["Builder<br/>build123d + kit,<br/>or TRELLIS.2"]
82
+ B --> V["NVIDIA validator"]
83
+ V --> I["Isaac Sim review<br/>every joint driven"]
84
+ I --> C["Critics + refuter"]
85
+ C -- "findings" --> B
86
+ C -- "clean" --> P["Package + report"]
87
+ ```
88
+
89
+ | Mode | What runs |
90
+ |---|---|
91
+ | **Quick** | one builder, one fix round at most |
92
+ | **Standard** | one builder, then critics and a refuter until clean (≤ 4 rounds) |
93
+ | **Max** | three builders, a blind judge picks one, then Standard on it |
94
+
95
+ Asked once, remembered per session, project or always. Override per run: `mode=max`, `builder=opus`, `effort=high`.
96
+
97
+ ## How an asset is checked
98
+
99
+ <p align="center">
100
+ <img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/review-sheet.jpg" alt="The Isaac review's contact sheet for a desk lamp: views at rest and with every joint driven, with each joint's measured reach" width="100%">
101
+ <br><sub>The Isaac review's contact sheet: at rest, every joint driven both ways, each joint's reach.</sub>
102
+ </p>
103
+
104
+ | Check | What it does |
105
+ |---|---|
106
+ | NVIDIA validator | [simready-validate](https://pypi.org/project/simready-validate/), profile Robotics-Prop 4.0.0 |
107
+ | Isaac review | RTX renders, every joint driven both ways, settle test |
108
+ | Physics probe | tilt, a hand's push on each part, lift and shake, a box on top |
109
+ | Poses | overlaps, the ground and openings, without Isaac |
110
+ | Critics + refuter | fresh eyes on the renders; every claim checked against the files |
111
+
112
+ ## Modes, measured
113
+
114
+ Eight cases (five prompts, three photos), judged the same way:
115
+
116
+ | Mode | Validator | Joint review | Drops (¼ h, 0.5 m) | Probe | Cost per asset |
117
+ |---|:---:|:---:|:---:|:---:|---|
118
+ | Quick, Sonnet builder | 8/8 | 8/8 | 8/8 · 8/8 | 5/8 | $2 – 7 |
119
+ | Quick, Opus builder | 8/8 | 8/8 | 6/8 · 7/8 | 4/8 | $5 – 16 |
120
+ | Standard, Sonnet builder | 8/8 | 8/8 | 8/8 · 7/8 | 4/8 | $7 – 26 |
121
+ | Standard, Opus builder | 8/8 | 8/8 | 7/8 · 7/8 | 5/8 | $15 – 34 |
122
+ | Standard, TRELLIS.2 meshes | 8/8 | 7/8 | 7/8 · 7/8 | 3/8 | $13 – 45 |
123
+ | Max | 8/8 | 8/8 | 7/8 · 8/8 | 4/8 | $21 – 67 |
124
+
125
+ - Quick + Sonnet passes every physics check; the extra rounds buy fidelity.
126
+ - Probe misses are the same in every mode: no joint friction in the kit yet.
127
+
128
+ ## Install
129
+
130
+ ```text
131
+ /plugin marketplace add serionist/simready-forge
132
+ /plugin install simready-forge@simready-forge
133
+ ```
134
+
135
+ | You need | For |
136
+ |---|---|
137
+ | [uv](https://docs.astral.sh/uv/) | everything |
138
+ | Isaac Sim 5.x / 6.x + NVIDIA RTX GPU | the review and the probe (else a software preview) |
139
+ | ComfyUI + TRELLIS.2 | generated meshes (optional) |
140
+
141
+ Working on the kit itself? Set `SIMREADY_FORGE_DEV` to your clone.
142
+
143
+ ## The kit, by hand
144
+
145
+ ```python
146
+ from build123d import Box, Pos
147
+ from simready_forge import Asset, validate
148
+
149
+ asset = Asset("storage_box", "simready_assets", label="box", qcode="Q188075", units="mm")
150
+ pine = asset.material("pine", color=(0.78, 0.62, 0.42), density=500, nonvisual=("wood", "none"))
151
+ box, lid = asset.body("box"), asset.body("lid")
152
+ asset.add(box, "box", Pos(0, 0, 150) * Box(400, 300, 300), pine, collider="box")
153
+ asset.add(lid, "lid", Pos(0, 0, 310) * Box(400, 300, 20), pine, collider="box")
154
+ asset.revolute("hinge", box, lid, anchor=(0, 150, 300), axis="X", limits=(-110, 0), hold=1)
155
+ validate(asset.save())
156
+ ```
157
+
158
+ ## Docs
159
+
160
+ [Usage](https://github.com/serionist/simready-forge/blob/main/docs/USAGE.md) · [Contributing](https://github.com/serionist/simready-forge/blob/main/CONTRIBUTING.md) · [Security](https://github.com/serionist/simready-forge/blob/main/SECURITY.md) ·
161
+ [Changelog](https://github.com/serionist/simready-forge/blob/main/CHANGELOG.md) · [Releasing](https://github.com/serionist/simready-forge/blob/main/docs/releasing.md)
162
+
163
+ ## Licence
164
+
165
+ [MIT](https://github.com/serionist/simready-forge/blob/main/LICENSE). Not affiliated with NVIDIA; SimReady, Omniverse and Isaac Sim are NVIDIA's trademarks.
@@ -0,0 +1,22 @@
1
+ simready_forge/__init__.py,sha256=-ptF5l_G03kyzs2kLvLa9argPtYSOH4OJhkaedFAUsU,474
2
+ simready_forge/cli.py,sha256=zyOT0lRQUsLf3-7ruOX6KPKdB1zbNlC37Ak2a11YO_Q,9169
3
+ simready_forge/cost.py,sha256=s1i2_Oea3MwvLCGQXfkL6EkWoweW6T0HbRRwmYYpDL0,4983
4
+ simready_forge/export.py,sha256=X-FfIRrJ6MVyMSN_LrItxDpGn7JxipG8c9krf-sdGRM,7807
5
+ simready_forge/isaac_probe.py,sha256=VIrOVD9DwLJEtfaNVSuivY8bZVoy-GUnhyq6NccM3HQ,38911
6
+ simready_forge/isaac_review.py,sha256=zSJaIddr_L1Sf1CgExt1loFoOBwsjwje3-MBnCXG2XQ,19971
7
+ simready_forge/kit.py,sha256=mJ7p-zKJKlNYmHrbzZazJV8JEXQa8XNEcPUXqT9s2qw,50577
8
+ simready_forge/poses.py,sha256=4zrvX-rWq5IRICtgR1kbeQoc6cO_vf0ggmVHoGmb2LU,14732
9
+ simready_forge/prefs.py,sha256=4siJRRst-SgLUcGsGka-u7rbDgSBozv7bnpfUfLtgE0,4006
10
+ simready_forge/preview.py,sha256=Yrtt3PjSQjP9NYFFvk-HNDqb_guaHl3fwivA75TOLBs,2979
11
+ simready_forge/readback.py,sha256=OLXmx3U7FBCUo5DIJEWnOF0HQgN8dwaBWmTttH12Vyg,7604
12
+ simready_forge/review.py,sha256=KLSQLxsmJVIYLKdgaTYKrLR8hPCHMqMqbI7vGQjMnS0,6780
13
+ simready_forge/scan.py,sha256=ce6nXQPi1cB7_HXuB5J5XzrcCDPG0PcLumEt5mrVK4Q,6188
14
+ simready_forge/trellis.py,sha256=naLKmnbyKGH7pkLp7dN8cFzLKHYMDPHT9QQgyZV6PYA,13854
15
+ simready_forge/validate.py,sha256=OutxD7rEhR7Ywa6toFPXeCY-akYgpYi53mfejiXrh00,2987
16
+ simready_forge/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ simready_forge/examples/cabinet.py,sha256=EpzapRZ3LlP6llG_Z8NJtOfbXH3g3ukZ95rc1lgoO5I,5422
18
+ simready_forge-0.1.0.dist-info/METADATA,sha256=DfixPbmTav21EX0KoKDziT50C41udykzWupc8oWYku4,8371
19
+ simready_forge-0.1.0.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
20
+ simready_forge-0.1.0.dist-info/entry_points.txt,sha256=5ovwqDQHqsLe7TnEs72e_uuTy8yJ9zBZRxX-WHXJCdk,59
21
+ simready_forge-0.1.0.dist-info/licenses/LICENSE,sha256=e2lbWThJjjhKF3ryLKZdVv0ID8xQ1cCu4SR8J8JdopY,1067
22
+ simready_forge-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.33.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ simready-forge = simready_forge.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Soma Osvay
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.