simready-forge 0.1.0__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.
- simready_forge-0.1.0/.gitignore +42 -0
- simready_forge-0.1.0/CHANGELOG.md +30 -0
- simready_forge-0.1.0/LICENSE +21 -0
- simready_forge-0.1.0/PKG-INFO +165 -0
- simready_forge-0.1.0/README.md +129 -0
- simready_forge-0.1.0/docs/USAGE.md +81 -0
- simready_forge-0.1.0/docs/assets/icon.svg +17 -0
- simready_forge-0.1.0/docs/assets/joints.webp +0 -0
- simready_forge-0.1.0/docs/assets/logo-dark.svg +20 -0
- simready_forge-0.1.0/docs/assets/logo.svg +20 -0
- simready_forge-0.1.0/docs/assets/review-sheet.jpg +0 -0
- simready_forge-0.1.0/docs/assets/showcase.jpg +0 -0
- simready_forge-0.1.0/docs/assets/social-preview.png +0 -0
- simready_forge-0.1.0/docs/plans/2026-10-29-bootstrap.md +105 -0
- simready_forge-0.1.0/docs/plans/README.md +68 -0
- simready_forge-0.1.0/docs/releasing.md +28 -0
- simready_forge-0.1.0/docs/reviews/README.md +52 -0
- simready_forge-0.1.0/plugin/README.md +33 -0
- simready_forge-0.1.0/pyproject.toml +152 -0
- simready_forge-0.1.0/src/simready_forge/__init__.py +14 -0
- simready_forge-0.1.0/src/simready_forge/cli.py +221 -0
- simready_forge-0.1.0/src/simready_forge/cost.py +120 -0
- simready_forge-0.1.0/src/simready_forge/examples/__init__.py +0 -0
- simready_forge-0.1.0/src/simready_forge/examples/cabinet.py +124 -0
- simready_forge-0.1.0/src/simready_forge/export.py +170 -0
- simready_forge-0.1.0/src/simready_forge/isaac_probe.py +785 -0
- simready_forge-0.1.0/src/simready_forge/isaac_review.py +420 -0
- simready_forge-0.1.0/src/simready_forge/kit.py +1047 -0
- simready_forge-0.1.0/src/simready_forge/poses.py +293 -0
- simready_forge-0.1.0/src/simready_forge/prefs.py +105 -0
- simready_forge-0.1.0/src/simready_forge/preview.py +74 -0
- simready_forge-0.1.0/src/simready_forge/readback.py +177 -0
- simready_forge-0.1.0/src/simready_forge/review.py +167 -0
- simready_forge-0.1.0/src/simready_forge/scan.py +129 -0
- simready_forge-0.1.0/src/simready_forge/trellis.py +378 -0
- simready_forge-0.1.0/src/simready_forge/validate.py +66 -0
- simready_forge-0.1.0/tests/conftest.py +28 -0
- simready_forge-0.1.0/tests/test_cli.py +109 -0
- simready_forge-0.1.0/tests/test_cost.py +90 -0
- simready_forge-0.1.0/tests/test_drives.py +165 -0
- simready_forge-0.1.0/tests/test_export.py +80 -0
- simready_forge-0.1.0/tests/test_gate.py +1371 -0
- simready_forge-0.1.0/tests/test_kit.py +327 -0
- simready_forge-0.1.0/tests/test_poses.py +158 -0
- simready_forge-0.1.0/tests/test_prefs.py +49 -0
- simready_forge-0.1.0/tests/test_scan.py +178 -0
- simready_forge-0.1.0/tests/test_trellis.py +35 -0
- simready_forge-0.1.0/tools/gate.py +1020 -0
- simready_forge-0.1.0/tools/hooks.py +190 -0
- simready_forge-0.1.0/tools/setup.py +190 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
*.pyo
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
.eggs/
|
|
9
|
+
*.egg
|
|
10
|
+
|
|
11
|
+
# Virtual environments
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
env/
|
|
15
|
+
|
|
16
|
+
# Assets the kit writes when run from a clone (examples, live tests)
|
|
17
|
+
simready_assets/
|
|
18
|
+
|
|
19
|
+
# Test results
|
|
20
|
+
.pytest_cache/
|
|
21
|
+
.coverage
|
|
22
|
+
.coverage.*
|
|
23
|
+
htmlcov/
|
|
24
|
+
|
|
25
|
+
# IDE
|
|
26
|
+
.idea/
|
|
27
|
+
.vscode/
|
|
28
|
+
*.swp
|
|
29
|
+
*.swo
|
|
30
|
+
*~
|
|
31
|
+
|
|
32
|
+
# OS
|
|
33
|
+
.DS_Store
|
|
34
|
+
Thumbs.db
|
|
35
|
+
|
|
36
|
+
# Claude Code local state: machine-specific settings and keys.
|
|
37
|
+
.claude/settings.local.json
|
|
38
|
+
.claude/worktrees/
|
|
39
|
+
CLAUDE.local.md
|
|
40
|
+
|
|
41
|
+
# Scratch files the skills write: review packs, issue and PR bodies.
|
|
42
|
+
.local/
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
What changed for people who use simready-forge, newest first. A change users notice adds its line under Unreleased in
|
|
4
|
+
the same PR; the release PR renames Unreleased to `## X.Y.Z (YYYY-MM-DD)`, which the gate's version check reads. The
|
|
5
|
+
format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
|
+
|
|
7
|
+
## 0.1.0 (2026-10-29)
|
|
8
|
+
|
|
9
|
+
The first version.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **`/simready-forge:make`** turns a prompt or a photo into an NVIDIA SimReady asset: OpenUSD on the Robotics-Prop
|
|
14
|
+
4.0.0 profile with real dimensions, materials, physics materials, rigid bodies, colliders, mass and the joints the
|
|
15
|
+
real object has, checked by NVIDIA's validator, its joints measured in Isaac Sim, exported as URDF and GLB, with a
|
|
16
|
+
report of what it cost. Three modes: Quick (the builder alone), Standard (the default: the builder, then critics
|
|
17
|
+
until clean, 4 rounds at most) and Max (two or three builders and a blind judge, then critics and a refuter).
|
|
18
|
+
- **`/simready-forge:settings`** shows and changes the choices it remembers, such as the builder's and the critics'
|
|
19
|
+
models and effort, for a session, a project or always.
|
|
20
|
+
- **`/simready-forge:review`** validates and reviews an asset you already have, with critics.
|
|
21
|
+
- **The agents** `builder` (writes and runs the build script), `critic` (fresh eyes on the renders, the spec and the
|
|
22
|
+
measurements), `refuter` (checks the builder's report against the files) and `judge` (picks between candidates
|
|
23
|
+
blind, in Max mode).
|
|
24
|
+
- **The physics probe** (`simready-forge probe`): tilt, a hand's push on each part, lift and shake, 10 s at rest and
|
|
25
|
+
a box dropped on top, each measured against what the asset's own values predict.
|
|
26
|
+
- **`simready-forge poses`** checks the review's joint poses without Isaac Sim (overlaps, the ground, near misses,
|
|
27
|
+
openings that must stay empty), and **`simready-forge inspect`** reads a USD back for a refuter.
|
|
28
|
+
- **The `simready-forge` package and command line:** `validate`, `review`, `probe`, `poses`, `inspect`, `trellis`,
|
|
29
|
+
`views`, `qcode`, `prefs`, `cost` and `example`, and the kit's `Asset` for build scripts written by hand. Each asset is written as
|
|
30
|
+
`<name>/usd/<name>.usda`, with `<name>_exports/` and `<name>_reports/` beside it.
|
|
@@ -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.
|
|
@@ -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,129 @@
|
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/logo-dark.svg">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/logo.svg" alt="simready-forge" width="520">
|
|
5
|
+
</picture>
|
|
6
|
+
</h1>
|
|
7
|
+
|
|
8
|
+
<p align="center"><b>Type what you want, or attach a photo. Get an NVIDIA SimReady asset that simulates.</b></p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<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>
|
|
12
|
+
<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>
|
|
13
|
+
<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>
|
|
14
|
+
<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>
|
|
15
|
+
<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>
|
|
16
|
+
<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>
|
|
17
|
+
<a href="https://openusd.org/"><img alt="OpenUSD" src="https://img.shields.io/badge/OpenUSD-26.11-4a4a4a"></a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<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%">
|
|
22
|
+
<br><sub>Eight assets made in Max mode, rendered in Isaac Sim by the review that checks them.</sub>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
/simready-forge:make a 180 mm desk lamp with an adjustable arm, a weighted base and a translucent shade
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
A Claude Code plugin and a Python kit. One prompt or photo in; out comes:
|
|
30
|
+
|
|
31
|
+
- **OpenUSD** (NVIDIA SimReady, Robotics-Prop 4.0.0) with real dimensions, materials and physics
|
|
32
|
+
- **Every joint the real object has**, driven and measured in Isaac Sim
|
|
33
|
+
- **URDF and GLB** exports, a report, and the build script to tweak and rerun
|
|
34
|
+
|
|
35
|
+
<p align="center">
|
|
36
|
+
<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%">
|
|
37
|
+
<br><sub>At rest, then every joint driven: the review watches each mechanism move.</sub>
|
|
38
|
+
</p>
|
|
39
|
+
|
|
40
|
+
## How it works
|
|
41
|
+
|
|
42
|
+
```mermaid
|
|
43
|
+
flowchart LR
|
|
44
|
+
R["Prompt or photo"] --> S["Spec<br/>parts, joints,<br/>materials"]
|
|
45
|
+
S --> B["Builder<br/>build123d + kit,<br/>or TRELLIS.2"]
|
|
46
|
+
B --> V["NVIDIA validator"]
|
|
47
|
+
V --> I["Isaac Sim review<br/>every joint driven"]
|
|
48
|
+
I --> C["Critics + refuter"]
|
|
49
|
+
C -- "findings" --> B
|
|
50
|
+
C -- "clean" --> P["Package + report"]
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
| Mode | What runs |
|
|
54
|
+
|---|---|
|
|
55
|
+
| **Quick** | one builder, one fix round at most |
|
|
56
|
+
| **Standard** | one builder, then critics and a refuter until clean (≤ 4 rounds) |
|
|
57
|
+
| **Max** | three builders, a blind judge picks one, then Standard on it |
|
|
58
|
+
|
|
59
|
+
Asked once, remembered per session, project or always. Override per run: `mode=max`, `builder=opus`, `effort=high`.
|
|
60
|
+
|
|
61
|
+
## How an asset is checked
|
|
62
|
+
|
|
63
|
+
<p align="center">
|
|
64
|
+
<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%">
|
|
65
|
+
<br><sub>The Isaac review's contact sheet: at rest, every joint driven both ways, each joint's reach.</sub>
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
| Check | What it does |
|
|
69
|
+
|---|---|
|
|
70
|
+
| NVIDIA validator | [simready-validate](https://pypi.org/project/simready-validate/), profile Robotics-Prop 4.0.0 |
|
|
71
|
+
| Isaac review | RTX renders, every joint driven both ways, settle test |
|
|
72
|
+
| Physics probe | tilt, a hand's push on each part, lift and shake, a box on top |
|
|
73
|
+
| Poses | overlaps, the ground and openings, without Isaac |
|
|
74
|
+
| Critics + refuter | fresh eyes on the renders; every claim checked against the files |
|
|
75
|
+
|
|
76
|
+
## Modes, measured
|
|
77
|
+
|
|
78
|
+
Eight cases (five prompts, three photos), judged the same way:
|
|
79
|
+
|
|
80
|
+
| Mode | Validator | Joint review | Drops (¼ h, 0.5 m) | Probe | Cost per asset |
|
|
81
|
+
|---|:---:|:---:|:---:|:---:|---|
|
|
82
|
+
| Quick, Sonnet builder | 8/8 | 8/8 | 8/8 · 8/8 | 5/8 | $2 – 7 |
|
|
83
|
+
| Quick, Opus builder | 8/8 | 8/8 | 6/8 · 7/8 | 4/8 | $5 – 16 |
|
|
84
|
+
| Standard, Sonnet builder | 8/8 | 8/8 | 8/8 · 7/8 | 4/8 | $7 – 26 |
|
|
85
|
+
| Standard, Opus builder | 8/8 | 8/8 | 7/8 · 7/8 | 5/8 | $15 – 34 |
|
|
86
|
+
| Standard, TRELLIS.2 meshes | 8/8 | 7/8 | 7/8 · 7/8 | 3/8 | $13 – 45 |
|
|
87
|
+
| Max | 8/8 | 8/8 | 7/8 · 8/8 | 4/8 | $21 – 67 |
|
|
88
|
+
|
|
89
|
+
- Quick + Sonnet passes every physics check; the extra rounds buy fidelity.
|
|
90
|
+
- Probe misses are the same in every mode: no joint friction in the kit yet.
|
|
91
|
+
|
|
92
|
+
## Install
|
|
93
|
+
|
|
94
|
+
```text
|
|
95
|
+
/plugin marketplace add serionist/simready-forge
|
|
96
|
+
/plugin install simready-forge@simready-forge
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
| You need | For |
|
|
100
|
+
|---|---|
|
|
101
|
+
| [uv](https://docs.astral.sh/uv/) | everything |
|
|
102
|
+
| Isaac Sim 5.x / 6.x + NVIDIA RTX GPU | the review and the probe (else a software preview) |
|
|
103
|
+
| ComfyUI + TRELLIS.2 | generated meshes (optional) |
|
|
104
|
+
|
|
105
|
+
Working on the kit itself? Set `SIMREADY_FORGE_DEV` to your clone.
|
|
106
|
+
|
|
107
|
+
## The kit, by hand
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
from build123d import Box, Pos
|
|
111
|
+
from simready_forge import Asset, validate
|
|
112
|
+
|
|
113
|
+
asset = Asset("storage_box", "simready_assets", label="box", qcode="Q188075", units="mm")
|
|
114
|
+
pine = asset.material("pine", color=(0.78, 0.62, 0.42), density=500, nonvisual=("wood", "none"))
|
|
115
|
+
box, lid = asset.body("box"), asset.body("lid")
|
|
116
|
+
asset.add(box, "box", Pos(0, 0, 150) * Box(400, 300, 300), pine, collider="box")
|
|
117
|
+
asset.add(lid, "lid", Pos(0, 0, 310) * Box(400, 300, 20), pine, collider="box")
|
|
118
|
+
asset.revolute("hinge", box, lid, anchor=(0, 150, 300), axis="X", limits=(-110, 0), hold=1)
|
|
119
|
+
validate(asset.save())
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Docs
|
|
123
|
+
|
|
124
|
+
[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) ·
|
|
125
|
+
[Changelog](https://github.com/serionist/simready-forge/blob/main/CHANGELOG.md) · [Releasing](https://github.com/serionist/simready-forge/blob/main/docs/releasing.md)
|
|
126
|
+
|
|
127
|
+
## Licence
|
|
128
|
+
|
|
129
|
+
[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,81 @@
|
|
|
1
|
+
# Using simready-forge
|
|
2
|
+
|
|
3
|
+
Ask for an asset in plain words, with a photo if you have one, and the `make` skill plans it, builds it, checks it and
|
|
4
|
+
reports. This page covers the skills, the choices, what comes out, and the kit for scripts written by hand.
|
|
5
|
+
|
|
6
|
+
## The skills
|
|
7
|
+
|
|
8
|
+
| Command | What it does |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `/simready-forge:make <what>` | plans, builds, validates, reviews and reports one asset |
|
|
11
|
+
| `/simready-forge:review <asset.usda>` | the validator, the Isaac review and the critics on an existing asset |
|
|
12
|
+
| `/simready-forge:settings` | shows and changes the remembered choices |
|
|
13
|
+
|
|
14
|
+
`make` also starts on its own when you ask Claude to make a SimReady, simulation-ready, 3D, CAD or USD asset.
|
|
15
|
+
|
|
16
|
+
## The choices
|
|
17
|
+
|
|
18
|
+
The first `make` asks how to run, once, and remembers the answers for the session, the project or always. Words in the
|
|
19
|
+
request override them for one run: `mode=max`, `builder=opus`, `effort=high`, `critics=3`, `geometry=hybrid`,
|
|
20
|
+
`trellis=high`, `formats=usd,urdf`, `articulation=main`, `out=assets/`.
|
|
21
|
+
|
|
22
|
+
| Choice | Values | Default |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| mode | `quick` (one builder, no critics, one fix round at most), `standard` (a builder, critics until clean), `max` (2-3 builders, a blind judge, critics, a refuter) | `standard` |
|
|
25
|
+
| builder and critic models | `sonnet`, `opus`, `haiku`, `fable`, or `inherit` (this session's) | Sonnet builds, Opus judges |
|
|
26
|
+
| builder effort | `low` to `max`, or `inherit` (this session's `/effort`) | `inherit` |
|
|
27
|
+
| critics | `none`, a number of rounds, or `auto` (until no blocker or major is left) | `auto`, at most 4 |
|
|
28
|
+
| geometry | `auto` (per part), `cad`, `mesh` (local TRELLIS.2), `hybrid` | `auto` |
|
|
29
|
+
| mesh effort | `low` (1 candidate), `medium` (2), `high` (4, denser) | `medium` |
|
|
30
|
+
| formats | `usd` always, plus `urdf`, `glb` | all three |
|
|
31
|
+
| mechanisms | `all` real ones, `main` ones, `static` | `all` |
|
|
32
|
+
|
|
33
|
+
## What comes out
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
simready_assets/
|
|
37
|
+
<name>/usd/<name>.usda the SimReady package (Robotics-Prop 4.0.0), with textures/ and .thumbs/
|
|
38
|
+
<name>_exports/urdf/<name>.urdf links, inertia, joints, OBJ visuals, STL colliders
|
|
39
|
+
<name>_exports/<name>.glb the rest pose with PBR materials
|
|
40
|
+
<name>_reports/ spec.md, structure.json, validate.json, review/, round-<n>.md, builder.md, cost.json
|
|
41
|
+
build_<name>.py the build script: change it and run it again
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
The report gives the bodies and joints with each joint's measured reach, the materials with their physics values, the
|
|
45
|
+
validator's verdict and the features it passed, the critics' rounds, the cost per role and what was simplified.
|
|
46
|
+
|
|
47
|
+
## Requirements
|
|
48
|
+
|
|
49
|
+
| What | For |
|
|
50
|
+
|---|---|
|
|
51
|
+
| [uv](https://docs.astral.sh/uv/) | everything: it fetches Python 3.12 and the kit |
|
|
52
|
+
| Isaac Sim (5.x or 6.x, its Python) | the RTX review and the PhysX checks; without it the review is a software preview and says physics was not checked |
|
|
53
|
+
| ComfyUI with TRELLIS.2 and Z-Image-Turbo | generated meshes (`geometry=mesh` or `hybrid`) |
|
|
54
|
+
|
|
55
|
+
The kit finds Isaac Sim's Python through `SIMREADY_FORGE_ISAAC`, `ISAACSIM_PYTHON` or the `isaac_python` setting, and
|
|
56
|
+
ComfyUI through `COMFYUI_URL` or the `comfyui_url` setting.
|
|
57
|
+
|
|
58
|
+
## The kit, for scripts written by hand
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
from build123d import Box, Pos
|
|
62
|
+
from simready_forge import Asset, validate
|
|
63
|
+
|
|
64
|
+
asset = Asset("storage_box", "simready_assets", label="box", qcode="Q188075", units="mm")
|
|
65
|
+
pine = asset.material(
|
|
66
|
+
"pine",
|
|
67
|
+
color=(0.78, 0.62, 0.42),
|
|
68
|
+
roughness=0.7,
|
|
69
|
+
friction=(0.5, 0.4),
|
|
70
|
+
restitution=0.1,
|
|
71
|
+
density=500,
|
|
72
|
+
nonvisual=("wood", "none"),
|
|
73
|
+
)
|
|
74
|
+
body = asset.body("box")
|
|
75
|
+
asset.add(body, "box", Pos(0, 0, 150) * Box(400, 300, 300), pine, collider="box")
|
|
76
|
+
validate(asset.save())
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`simready-forge example --show` prints a full example with a hinged door and a drawer; `simready-forge --help` lists
|
|
80
|
+
the commands (`validate`, `review`, `probe`, `poses`, `inspect`, `trellis`, `views`, `qcode`, `prefs`, `cost`,
|
|
81
|
+
`example`).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img" aria-label="simready-forge">
|
|
2
|
+
<g>
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="lid" x1="0" y1="0" x2="1" y2="1">
|
|
5
|
+
<stop offset="0" stop-color="#ffb35c"/><stop offset="1" stop-color="#f28c28"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
</defs>
|
|
8
|
+
<polygon points="28,64 64,84 64,122 28,102" fill="#1f7a8c"/>
|
|
9
|
+
<polygon points="64,84 100,64 100,102 64,122" fill="#14505c"/>
|
|
10
|
+
<polygon points="64,44 100,64 64,84 28,64" fill="#0c2e35"/>
|
|
11
|
+
<polygon points="64,44 100,64 82,30 46,10" fill="url(#lid)"/>
|
|
12
|
+
<path d="M 22 58 A 46 46 0 0 1 36 16" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
13
|
+
stroke-dasharray="2 7"/>
|
|
14
|
+
<path d="M 30 14 L 38 14 L 36 22" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
15
|
+
stroke-linejoin="round"/>
|
|
16
|
+
</g>
|
|
17
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="520" height="96" viewBox="0 0 520 96" role="img" aria-label="simready-forge">
|
|
2
|
+
<!-- The logo: the mark (icon.svg) and the wordmark; textLength keeps the wordmark's width whatever font the viewer has. -->
|
|
3
|
+
<g transform="translate(0 0) scale(0.75)">
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="lid" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffb35c"/><stop offset="1" stop-color="#f28c28"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
</defs>
|
|
9
|
+
<polygon points="28,64 64,84 64,122 28,102" fill="#1f7a8c"/>
|
|
10
|
+
<polygon points="64,84 100,64 100,102 64,122" fill="#14505c"/>
|
|
11
|
+
<polygon points="64,44 100,64 64,84 28,64" fill="#0c2e35"/>
|
|
12
|
+
<polygon points="64,44 100,64 82,30 46,10" fill="url(#lid)"/>
|
|
13
|
+
<path d="M 22 58 A 46 46 0 0 1 36 16" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
14
|
+
stroke-dasharray="2 7"/>
|
|
15
|
+
<path d="M 30 14 L 38 14 L 36 22" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"/>
|
|
17
|
+
</g>
|
|
18
|
+
<text x="112" y="64" font-family="Segoe UI, Helvetica Neue, Arial, sans-serif" font-size="50" font-weight="700"
|
|
19
|
+
textLength="400" lengthAdjust="spacingAndGlyphs" fill="#eef4f6">simready<tspan fill="#ffb35c">-forge</tspan></text>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="520" height="96" viewBox="0 0 520 96" role="img" aria-label="simready-forge">
|
|
2
|
+
<!-- The logo: the mark (icon.svg) and the wordmark; textLength keeps the wordmark's width whatever font the viewer has. -->
|
|
3
|
+
<g transform="translate(0 0) scale(0.75)">
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="lid" x1="0" y1="0" x2="1" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffb35c"/><stop offset="1" stop-color="#f28c28"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
</defs>
|
|
9
|
+
<polygon points="28,64 64,84 64,122 28,102" fill="#1f7a8c"/>
|
|
10
|
+
<polygon points="64,84 100,64 100,102 64,122" fill="#14505c"/>
|
|
11
|
+
<polygon points="64,44 100,64 64,84 28,64" fill="#0c2e35"/>
|
|
12
|
+
<polygon points="64,44 100,64 82,30 46,10" fill="url(#lid)"/>
|
|
13
|
+
<path d="M 22 58 A 46 46 0 0 1 36 16" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
14
|
+
stroke-dasharray="2 7"/>
|
|
15
|
+
<path d="M 30 14 L 38 14 L 36 22" fill="none" stroke="#f28c28" stroke-width="4" stroke-linecap="round"
|
|
16
|
+
stroke-linejoin="round"/>
|
|
17
|
+
</g>
|
|
18
|
+
<text x="112" y="64" font-family="Segoe UI, Helvetica Neue, Arial, sans-serif" font-size="50" font-weight="700"
|
|
19
|
+
textLength="400" lengthAdjust="spacingAndGlyphs" fill="#1b2a30">simready<tspan fill="#f28c28">-forge</tspan></text>
|
|
20
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|