simready-forge 0.1.0__tar.gz → 0.2.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.2.0/CHANGELOG.md +274 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/PKG-INFO +44 -2
- {simready_forge-0.1.0 → simready_forge-0.2.0}/README.md +42 -1
- simready_forge-0.2.0/docs/USAGE.md +1367 -0
- simready_forge-0.2.0/docs/assets/variants.webp +0 -0
- simready_forge-0.2.0/docs/plans/2026-11-02-comfyui-setup.md +367 -0
- simready_forge-0.2.0/docs/plans/2026-11-02-fit-plan.md +394 -0
- simready_forge-0.2.0/docs/plans/2026-11-02-live-variants.md +415 -0
- simready_forge-0.2.0/docs/plans/2026-11-02-scene-props.md +543 -0
- simready_forge-0.2.0/docs/plans/2026-11-02-variants.md +722 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-batch-catalogue.md +810 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-batch-ready.md +435 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-comfyui-models.md +289 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-empty-mode.md +307 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-families.md +916 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-library-writer.md +701 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-live-readings.md +282 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-material-library.md +1104 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-parallel-reviews.md +455 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-sub-assets.md +692 -0
- simready_forge-0.2.0/docs/plans/2026-11-03-tube-and-labels.md +237 -0
- simready_forge-0.2.0/docs/plans/2026-11-04-drive-sizing.md +143 -0
- simready_forge-0.2.0/docs/plans/2026-11-04-empty-beside-modes.md +294 -0
- simready_forge-0.2.0/docs/plans/2026-11-04-showcase-film.md +529 -0
- simready_forge-0.2.0/docs/plans/2026-11-05-floor-push-drive.md +124 -0
- simready_forge-0.2.0/docs/plans/2026-11-05-level-hinge.md +190 -0
- simready_forge-0.2.0/docs/plans/2026-11-05-tilted-box.md +171 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/plans/README.md +8 -5
- simready_forge-0.2.0/docs/reviews/2026-11-02-11-fit-plan-code.md +71 -0
- simready_forge-0.2.0/docs/reviews/2026-11-02-16-probe-crash-code.md +55 -0
- simready_forge-0.2.0/docs/reviews/2026-11-02-17-comfyui-setup-code.md +91 -0
- simready_forge-0.2.0/docs/reviews/2026-11-02-7-variants-code.md +207 -0
- simready_forge-0.2.0/docs/reviews/2026-11-02-9-one-clone-variable-code.md +47 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-20-scene-props-code.md +121 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-21-live-variants-code.md +119 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-22-32-code.md +59 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-23-batch-1.md +115 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-23-batch-code.md +141 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-26-sub-assets-code.md +86 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-27-comfyui-models-code.md +66 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-28-batch-0.md +233 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-28-batch-ready-code.md +59 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-37-parallel-reviews-code.md +91 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-42-live-readings-code.md +45 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-55-empty-mode-code.md +69 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-58-tube-and-labels-code.md +61 -0
- simready_forge-0.2.0/docs/reviews/2026-11-03-8-material-library-code.md +157 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-10-batch-2.md +155 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-10-showcase-film-code.md +128 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-61-empty-beside-modes-code.md +82 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-68-drive-sizing-code-r2.md +83 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-68-drive-sizing-code.md +36 -0
- simready_forge-0.2.0/docs/reviews/2026-11-04-71-test-speed-code.md +47 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-71-test-speed-code-r2.md +34 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-71-test-speed-code-r3.md +34 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-74-level-hinge-code.md +69 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-77-floor-push-drive-code-r2.md +63 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-77-floor-push-drive-code.md +22 -0
- simready_forge-0.2.0/docs/reviews/2026-11-05-81-tilted-box-code.md +35 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/reviews/README.md +1 -0
- simready_forge-0.2.0/docs/showcase/catalogue.yaml +148 -0
- simready_forge-0.2.0/docs/showcase/film.py +798 -0
- simready_forge-0.2.0/docs/showcase/film.yaml +123 -0
- simready_forge-0.2.0/docs/showcase/materials.yaml +268 -0
- simready_forge-0.2.0/plugin/README.md +37 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/pyproject.toml +20 -7
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/__init__.py +2 -1
- simready_forge-0.2.0/src/simready_forge/batch.py +1074 -0
- simready_forge-0.2.0/src/simready_forge/batch_audit.md +57 -0
- simready_forge-0.2.0/src/simready_forge/catalogue.py +484 -0
- simready_forge-0.2.0/src/simready_forge/cli.py +549 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/cost.py +60 -6
- simready_forge-0.2.0/src/simready_forge/examples/pipe.py +96 -0
- simready_forge-0.2.0/src/simready_forge/examples/pipe_materials.yaml +29 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/export.py +68 -29
- simready_forge-0.2.0/src/simready_forge/families.py +892 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/isaac_probe.py +25 -9
- simready_forge-0.2.0/src/simready_forge/isaac_review.py +1462 -0
- simready_forge-0.2.0/src/simready_forge/kit.py +4471 -0
- simready_forge-0.2.0/src/simready_forge/library.py +503 -0
- simready_forge-0.2.0/src/simready_forge/library_yaml.py +550 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/poses.py +86 -13
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/prefs.py +5 -2
- simready_forge-0.2.0/src/simready_forge/readback.py +339 -0
- simready_forge-0.2.0/src/simready_forge/review.py +1937 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/scan.py +63 -27
- simready_forge-0.2.0/src/simready_forge/scene.py +749 -0
- simready_forge-0.2.0/src/simready_forge/subassets.py +425 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/trellis.py +116 -27
- simready_forge-0.2.0/src/simready_forge/trellis_setup.py +1398 -0
- simready_forge-0.2.0/src/simready_forge/validate.py +721 -0
- simready_forge-0.2.0/src/simready_forge/variants.py +210 -0
- simready_forge-0.2.0/tests/conftest.py +65 -0
- simready_forge-0.2.0/tests/test_batch.py +878 -0
- simready_forge-0.2.0/tests/test_bench.py +834 -0
- simready_forge-0.2.0/tests/test_catalogue.py +337 -0
- simready_forge-0.2.0/tests/test_cli.py +397 -0
- simready_forge-0.2.0/tests/test_cost.py +162 -0
- simready_forge-0.2.0/tests/test_drive_hold.py +91 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_export.py +33 -1
- simready_forge-0.2.0/tests/test_families.py +946 -0
- simready_forge-0.2.0/tests/test_film.py +377 -0
- simready_forge-0.2.0/tests/test_floor_push.py +87 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_gate.py +198 -112
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_kit.py +110 -4
- simready_forge-0.2.0/tests/test_library.py +1599 -0
- simready_forge-0.2.0/tests/test_library_yaml.py +988 -0
- simready_forge-0.2.0/tests/test_overlay.py +1113 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_poses.py +14 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_prefs.py +10 -0
- simready_forge-0.2.0/tests/test_review.py +1268 -0
- simready_forge-0.2.0/tests/test_scan.py +693 -0
- simready_forge-0.2.0/tests/test_scene.py +998 -0
- simready_forge-0.2.0/tests/test_subassets.py +1020 -0
- simready_forge-0.2.0/tests/test_trellis.py +253 -0
- simready_forge-0.2.0/tests/test_trellis_setup.py +1597 -0
- simready_forge-0.2.0/tests/test_variants.py +3774 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tools/gate.py +179 -9
- simready_forge-0.1.0/CHANGELOG.md +0 -30
- simready_forge-0.1.0/docs/USAGE.md +0 -81
- simready_forge-0.1.0/plugin/README.md +0 -33
- simready_forge-0.1.0/src/simready_forge/cli.py +0 -221
- simready_forge-0.1.0/src/simready_forge/isaac_review.py +0 -420
- simready_forge-0.1.0/src/simready_forge/kit.py +0 -1047
- simready_forge-0.1.0/src/simready_forge/readback.py +0 -177
- simready_forge-0.1.0/src/simready_forge/review.py +0 -167
- simready_forge-0.1.0/src/simready_forge/validate.py +0 -66
- simready_forge-0.1.0/tests/conftest.py +0 -28
- simready_forge-0.1.0/tests/test_cli.py +0 -109
- simready_forge-0.1.0/tests/test_cost.py +0 -90
- simready_forge-0.1.0/tests/test_scan.py +0 -178
- simready_forge-0.1.0/tests/test_trellis.py +0 -35
- {simready_forge-0.1.0 → simready_forge-0.2.0}/.gitignore +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/LICENSE +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/icon.svg +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/joints.webp +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/logo-dark.svg +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/logo.svg +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/review-sheet.jpg +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/showcase.jpg +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/assets/social-preview.png +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/plans/2026-10-29-bootstrap.md +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/docs/releasing.md +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/examples/__init__.py +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/examples/cabinet.py +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/src/simready_forge/preview.py +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tests/test_drives.py +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tools/hooks.py +0 -0
- {simready_forge-0.1.0 → simready_forge-0.2.0}/tools/setup.py +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
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.2.0 (2026-11-05)
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **A mode option may hold nothing,** for an asset a scene takes away by its own variant: `placed: [on, off]` with
|
|
12
|
+
every body `only={"placed": "on"}`. `placed=off` holds no body, mesh, joint or articulation root; `validate`
|
|
13
|
+
records NVIDIA's RB.001 and VG.MESH.001 as expected there and passes it on everything else; the review, the switch
|
|
14
|
+
pass and the scene prop take it as any option. A default option that holds nothing is refused.
|
|
15
|
+
- **An option that holds nothing beside other mode sets:** `placed: [on, off]` beside `lid` and `condition`, a body
|
|
16
|
+
or part naming one more set (`only={"placed": "on", "lid": "on"}`). The asset is written whole inside `placed=on`,
|
|
17
|
+
and `validate`, the review and the switch pass take `placed=off` once, so the valve crate is checked in every
|
|
18
|
+
combination.
|
|
19
|
+
- **The report's variants table, switch line and FET_007 line come from the files:** `review.json`'s
|
|
20
|
+
`variants_table` and `switches.line` and `validate.json`'s `fet_007_line`, which `make`'s report copies whole, as it
|
|
21
|
+
copies the cost line.
|
|
22
|
+
- **The report's materials table and Library line come from the files too:** `structure.json`'s `materials_table`
|
|
23
|
+
and, with a library, `library_line`, copied whole by `make`'s report.
|
|
24
|
+
- **`review.showcase()` takes `titles` and `words`** for a script's own captions: an asset's title, and a slice's
|
|
25
|
+
second line. A tall frame's caption and framing fit its width.
|
|
26
|
+
|
|
27
|
+
- **Variants in the kit:** one asset switches between looks (colours, tints, finishes), modes (parts and bodies only
|
|
28
|
+
some options have, a door that starts open) and detail levels (high and low poly, a generated mesh at two
|
|
29
|
+
densities), as USD variant sets on its default prim. NVIDIA's validator, `inspect`, `poses` and the Isaac Sim
|
|
30
|
+
review check every option, and each option gets its own URDF and GLB (a start pose its GLB alone: URDF has
|
|
31
|
+
none). An asset without variants is unchanged.
|
|
32
|
+
- **`simready-forge trellis image --faces N`** writes each candidate at another face count too, the same shape with
|
|
33
|
+
its own texture atlas.
|
|
34
|
+
- **Variants in `/simready-forge:make`:** name them in the request ("in green, red or blue", "with the door open or
|
|
35
|
+
closed", "a high and a low poly version") and they go into the one asset; the critics judge every option, and the
|
|
36
|
+
report shows them side by side. `/simready-forge:review` checks every option of an asset with variant sets.
|
|
37
|
+
- **`simready-forge showcase`** renders a turntable of one or more assets in Isaac Sim, each variant option in turn
|
|
38
|
+
seen from the front, as a WebP and, with `ffmpeg`, an MP4.
|
|
39
|
+
- **`simready-forge trellis setup`** installs the local mesh generator on Windows or Linux with an NVIDIA GPU:
|
|
40
|
+
ComfyUI v0.43.2 with its own Python and PyTorch for CUDA 13.0, and the eight model files the kit's graphs load
|
|
41
|
+
(29.6 GB, resumable), each pinned to its Hugging Face commit and checked by its SHA-256. It says what it will
|
|
42
|
+
download, where, and under which licences before it starts. A ComfyUI you already have only gets the models;
|
|
43
|
+
`--start` starts it, and **`trellis stop`** ends it. **`trellis check`** says what a server lacks, the folder it
|
|
44
|
+
reads models from, and what to do. **`trellis setup --models DIR FILE ...`** adds just the named model files to the
|
|
45
|
+
folder a ComfyUI you run reads them from (Comfy Desktop's shared folder too), checked the same way.
|
|
46
|
+
- **`/simready-forge:make` offers that setup** when a request would take a generated mesh (a photo, or an organic
|
|
47
|
+
shape such as a shoe) and TRELLIS.2 isn't ready: set it up or start it now, set it up for next time, build in CAD,
|
|
48
|
+
or don't ask again (`trellis_offer=never`). A ComfyUI you already run here that lacks only models is offered just
|
|
49
|
+
those files, in the folder it reads them from. On a Mac, or with no NVIDIA GPU, it builds in CAD and names the way
|
|
50
|
+
that still works: a ComfyUI on a machine that has one, set by `comfyui_url` or `COMFYUI_URL`.
|
|
51
|
+
- **Labels per option:** `asset.label("caps", "off", on=["end_a", "end_b"])` gives a synthetic image of that
|
|
52
|
+
option its finding, `caps_off`: a semantic label that exists only while the option is selected, on the parts or
|
|
53
|
+
bodies that show it, and on the asset's root as `finding_asset`, which is all an instanced copy's image shows,
|
|
54
|
+
wherever the labelled part is there. The kit names every finding `<set>_<option>` (`rust_light`,
|
|
55
|
+
`cap_on_ground_on`), so findings from many assets read alike in one dataset; `finding=` is refused, and another
|
|
56
|
+
instance is a keyword of its own (`wear="worn"`). So `finding` masks the labelled part alone (the rust, the open end) and
|
|
57
|
+
`finding_asset` the whole copy. `on=asset` labels a state no one part shows, on the root alone; a part the option
|
|
58
|
+
removes is refused, with what to label instead.
|
|
59
|
+
- **The selection check:** `validate` compares every selection it checks with what the build script declared in
|
|
60
|
+
`structure.json` (each part there or not, its triangles, its labels, its material and look, the colliders the same
|
|
61
|
+
in every detail option), so a part that never goes, a level that never applies, a label that never shows or a
|
|
62
|
+
material never bound fails at once, with no renderer. An asset the kit didn't build is checked without the
|
|
63
|
+
script's half, and its report says so.
|
|
64
|
+
- **Live switches:** `simready-forge review --switches` switches every option while Isaac Sim runs and records how
|
|
65
|
+
many frames each switch takes to reach the renderer; a layout fault fails it, an Isaac Sim fault is recorded with
|
|
66
|
+
the workaround under which every switch showed. `make` runs it once on the final asset in every mode, `review`
|
|
67
|
+
after its review.
|
|
68
|
+
- **`simready-forge bench`** measures what each detail level costs a field of instanced copies of an asset, fresh
|
|
69
|
+
and switched live: load time, GPU memory, frame time, how fast a switch shows.
|
|
70
|
+
- **Scene props:** `scene` added to the formats (`formats=usd,urdf,glb,scene` in `/simready-forge:make`, or
|
|
71
|
+
`formats=usd,scene` for the USD and the scene prop alone; `save(formats=(..., "scene"))` in the kit) also writes
|
|
72
|
+
`<name>_exports/scene/<name>.usdc`: the validated and reviewed asset without its rigid bodies, mass,
|
|
73
|
+
articulation root or joints in any option, its geometry, materials, variant sets, colliders and pose options
|
|
74
|
+
kept, for a scene that places it thousands of times. `validate` on the asset checks it against the asset spec by
|
|
75
|
+
spec and writes `<name>.proof.json` beside it, which a scene's publish step reads (`docs/USAGE.md`). `inspect`
|
|
76
|
+
lists colliders that sit in no rigid body.
|
|
77
|
+
- **Material libraries in the kit:** `lib = asset.library("materials.usda")` and `asset.add(body, "tube", shape,
|
|
78
|
+
lib["steel_galvanised"])` bind a shared library's material by name. The package references each one it binds, in a
|
|
79
|
+
copy of those materials under `<name>/usd/materials/`, and writes none of their values; mass comes from the
|
|
80
|
+
library's density, and the GLB carries its colour, its numbers and an opacity map. An asset without a library is
|
|
81
|
+
unchanged.
|
|
82
|
+
- **Looks that rebind:** `asset.look(steel, "rust", "light", rebind=lib["steel_rust_light"])` binds a part to
|
|
83
|
+
another library material in one option, in every detail level and mode option, and two sets may rebind one part
|
|
84
|
+
(the one declared first wins where it rebinds it). `validate` checks the binding each selection shows, and that
|
|
85
|
+
every library material is still in the package's copy. `review --switches` checks each rebind reaches the
|
|
86
|
+
material binding Isaac Sim's Fabric holds, and records one that never does as an Isaac Sim fault.
|
|
87
|
+
- **Generated meshes under a library:** `asset.scan_material(scan, "paint", like="steel_paint_yellow")` keeps a
|
|
88
|
+
TRELLIS.2 mesh's baked atlas and takes its friction, density, sensor tokens and label from the library material,
|
|
89
|
+
through a reference to it; each detail level's atlas lands on it. A scan region bound to a library material gets
|
|
90
|
+
UVs in metres, and `structure.json` names the asset's own materials and the parts that bind them.
|
|
91
|
+
- **Scene props with a library:** with `asset.library(path, live="../../../materials/materials.usda")`, the scene
|
|
92
|
+
prop references the scene's own library at that path and carries none; without `live` it carries the package's
|
|
93
|
+
copy. Its proof names each material and the sha256 of the library the build read. `review` of it, its switch pass
|
|
94
|
+
and `bench` render it with the package's copy where the kit wrote it, and as it is where a scene placed it, the
|
|
95
|
+
scene's library giving its materials.
|
|
96
|
+
- **Looks on a generated mesh:** `asset.overlay("skin", "state", "rust_light", lib["steel_rust_light"], where=rust,
|
|
97
|
+
at=0.58)` lays a library material over part of a mesh where a field says, as a shell defined only in that option
|
|
98
|
+
at every detail level, with the finding label on the shell itself; `asset.look(paint, "state", "wet",
|
|
99
|
+
blend=lib["wet_film"], amount=0.55)` blends a `like=` atlas towards a library material all over. The atlas stays
|
|
100
|
+
under both. The field is read on a grid of the shell's own, a plane every half the part's middle extent (coarser at
|
|
101
|
+
each lower detail level), so a straight CAD tube, whose cut has points at its ends alone, shows a patch along it
|
|
102
|
+
with no rings in its own mesh: a 12 m DN100 pipe ringed for its rust had 55,684 triangles at full, and built plain
|
|
103
|
+
it has 3,268.
|
|
104
|
+
- **Material libraries in `/simready-forge:make`:** `library=<materials.usda>` in the request binds the asset's
|
|
105
|
+
materials from that library by name, the spec taking their values from it; rust, wet and grade states rebind to
|
|
106
|
+
another library material, or on a generated mesh lay one over it or blend towards it. With `scene` in the formats,
|
|
107
|
+
`library_live=<path>` makes the scene prop reference the scene's own library at that path. `make` checks the
|
|
108
|
+
library once and reuses its record until the library or the kit changes; a library that fails the check stops it
|
|
109
|
+
before the spec, with the check's message, and on an older kit it says so and builds with the asset's own
|
|
110
|
+
materials. The report gives each material's source, and `/simready-forge:review` checks an asset with a library
|
|
111
|
+
with its copy, and a scene prop delivered live where the scene placed it with the scene's library.
|
|
112
|
+
- **`simready-forge library <materials.usda>`** checks a material library against the kit's rules (`docs/USAGE.md`,
|
|
113
|
+
Material libraries) and validates a swatch of its materials with NVIDIA's validator; `--out DIR` keeps the record
|
|
114
|
+
as `materials.json`, reused while the library and the kit stay the same. `inspect` gives a texture read through a
|
|
115
|
+
`UsdTransform2d` its `st_scale`.
|
|
116
|
+
- **`simready-forge library --from <materials.yaml>`** writes a material library from a YAML list (each material's
|
|
117
|
+
colour, roughness, metallic, physics values and sensor tokens), with texture sets from ambientCG or Poly Haven
|
|
118
|
+
found in a folder you name (`--textures DIR`; the kit downloads nothing), each colour and roughness map scaled so
|
|
119
|
+
its mean is the YAML's value, each tiled at its own size in metres, or without textures (`--flat`). It checks the
|
|
120
|
+
library before it replaces the last good one, and refuses a YAML or a missing set naming every problem at once.
|
|
121
|
+
`make library=<materials.yaml>` writes it before the build and binds from it, with `library_textures=<dir>` for
|
|
122
|
+
the sets.
|
|
123
|
+
- **Families:** one build script whose sizes are named parameters writes a package per size (`family()`,
|
|
124
|
+
`sizes.json`, `family.json`), each validated in every selection and bound to a material library by name;
|
|
125
|
+
`validate <family folder>` checks every size and the family, `cost --family` gives a line per size, and `make`
|
|
126
|
+
builds a family when a request names several sizes, reviewing the smallest and the largest. The worked example is
|
|
127
|
+
a pipe in three sizes: `simready-forge example --show pipe`.
|
|
128
|
+
- **Sub-assets:** `asset.sub_asset(path, name, at=, turn=, only=)` puts another SimReady package inside an asset (a
|
|
129
|
+
drive in a tray, two trays in a cage), copied byte for byte into `usd/assets/<package>/` and referenced once by a
|
|
130
|
+
class prim each instance inherits, so no option switch opens a file. `asset.fixed()` mounts it where it is, or a
|
|
131
|
+
revolute or prismatic joint moves it; its mass counts, its detail set follows the asset's, its meshes reach the
|
|
132
|
+
URDF and the GLB, and `validate` passes it in every selection and says which copies are older than their source.
|
|
133
|
+
`/simready-forge:make uses=<path>` (or a request naming an existing asset) builds with that package instead of
|
|
134
|
+
modelling it again.
|
|
135
|
+
- **`simready-forge batch <catalogue.yaml>`** makes every entry of a catalogue with no one at the keyboard: one
|
|
136
|
+
headless `make` each, in a folder of its own, up to `--jobs` at once, with no entry started once the bill reaches
|
|
137
|
+
`--cap`. A rerun skips each entry made and validated and makes again, from an empty folder, one that failed or was
|
|
138
|
+
cut short. Each entry is checked from its files and audited by a session that only reads; the batch writes one
|
|
139
|
+
report, one contact sheet (every package, every option, its triangles) and one bill. The catalogue is the kit's own
|
|
140
|
+
schema (`docs/USAGE.md`, Making a batch from a catalogue), and `/simready-forge:make` checks one and gives the
|
|
141
|
+
command. `--audit <name>` audits an entry again on its `report.md` as corrected since, keeping the earlier audit
|
|
142
|
+
and its cost in the bill.
|
|
143
|
+
|
|
144
|
+
### Changed
|
|
145
|
+
|
|
146
|
+
- **`validate` compares each mesh's material by its path under the root,** so a sub-asset's `steel` is never taken
|
|
147
|
+
for the asset's own. An asset without sub-assets gets the same result.
|
|
148
|
+
- **`review.json`, `poses.json` and the probe key a joint or a body by its path under the root, less a `Joints`
|
|
149
|
+
scope:** two trays' latches are `tray_1/latch_hinge` and `tray_2/latch_hinge`, no longer one `latch_hinge`. Every
|
|
150
|
+
asset the kit builds keeps today's keys for its own joints and bodies. An asset the kit didn't build, with its
|
|
151
|
+
joints elsewhere, changes: an NVIDIA robot's `/robot/joints/elbow` is now `joints/elbow`, the key `poses --set`
|
|
152
|
+
takes.
|
|
153
|
+
- **The probe judges an asset with fixed joints as one asset** (its version 12): a mounted part is no longer a loose
|
|
154
|
+
body, so its tilt is the main body's and lift no longer lists it as left behind. `poses` carries a fixed joint's
|
|
155
|
+
child with its parent and counts the pair as jointed, and the review sizes a slide's drive to what is fixed on it.
|
|
156
|
+
|
|
157
|
+
- **Several Isaac Sim runs at once:** reviews, switch passes, probes and showcases on one machine no longer wait for
|
|
158
|
+
each other. Each Isaac Sim process waits until there is free RAM and GPU memory for it (6 GB and 4 GB), starts one
|
|
159
|
+
at a time, and runs again, up to 3 tries, when it crashes while others run. `SIMREADY_FORGE_GPU_RESERVE_GB` keeps
|
|
160
|
+
GPU memory free for another program's Kit. The bench still runs alone. Give each run its own `--out`: two into one
|
|
161
|
+
folder at once no longer take turns.
|
|
162
|
+
- **An Isaac Sim process whose log shows a `[Fatal]` line is ended at once,** as a crash, instead of holding its
|
|
163
|
+
memory until its timeout: Kit can outlive an "Out of resource descriptors" for minutes.
|
|
164
|
+
- **`validate` fails a state made by hiding:** a mesh shown in one selection and hidden in another, or a prim active
|
|
165
|
+
in one and inactive in another, fails the new `composition: hidden` row; a mesh hidden in every selection, such as
|
|
166
|
+
an invisible guide collider, still passes. No asset the kit writes meets it; a hand-edited or foreign asset that
|
|
167
|
+
makes a state by hiding now fails.
|
|
168
|
+
- **`inspect.json`'s texture records gain `bias`** where a texture node authors one, beside the `scale` they already
|
|
169
|
+
gave: a scan's normal map now shows its `bias` too.
|
|
170
|
+
- **A generated mesh's normals and UVs are written once per point,** not once per triangle corner: a TRELLIS.2 mesh
|
|
171
|
+
is already split at its UV seams, so every corner of a point had the same values. A 150,000-triangle scan's `.usda`
|
|
172
|
+
goes from 37.1 MB to 15.7 MB and its `.usdc` from 11.0 MB to 4.3 MB; the README's running shoe from 43.0 MB to
|
|
173
|
+
20.0 MB (`.usdc` 12.8 MB to 5.6 MB). Its GLB shares those vertices too. A CAD part stays per corner, and so do a
|
|
174
|
+
scan without UVs (it takes box-projected UVs) and a scan part whose `scan.uv` a script edits so one point's corners
|
|
175
|
+
differ. An asset built before keeps per-corner
|
|
176
|
+
values until its build script runs again.
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
|
|
180
|
+
- **A `box` collider fits a part turned in its body:** it was the box of the part's bounds square to its body's axes,
|
|
181
|
+
so a 30 mm leg splayed 15° collided as a slab 300 mm wide, and a stand's legs drawn inward met under its head at 3°
|
|
182
|
+
of 8. A part whose tightest box is under 90 % of that box now collides as its own hull, which stands on a foot
|
|
183
|
+
cut level; boards, slabs and posts square to their body keep their box.
|
|
184
|
+
- **`make` checks its report's sources before the session ends:** the report is written to
|
|
185
|
+
`<name>_reports/report.md`, one short refuter returns each figure with no source, a wrong value or the wrong
|
|
186
|
+
source, and the coordinator fixes them before giving it. A target only the spec gives, stated as measured, is one
|
|
187
|
+
of them.
|
|
188
|
+
- **`make`'s report states the joints as `review.json` gives them:** passed on each side driven, and which are short
|
|
189
|
+
or over, in place of a "within 15 % of target" no file holds, which every report in batch 2 copied and its audits
|
|
190
|
+
failed.
|
|
191
|
+
- **The batch's findings check takes `critic-fidelity (final)#1`** as citing `critic-fidelity#1`, the spelling a
|
|
192
|
+
`final.md` used.
|
|
193
|
+
- **`make`'s builder and coordinator run scripts from files,** never a heredoc piped into an interpreter, which hung a
|
|
194
|
+
Windows session until its 30-minute timeout.
|
|
195
|
+
|
|
196
|
+
- **The Isaac Sim review lifts an asset on a part that stands on the floor:** a table's screw foot, a jack or a
|
|
197
|
+
splaying leg had a drive sized to its own part, so it couldn't push the asset up: a levelling foot read 0 for -32 mm
|
|
198
|
+
and failed. Such a joint's drive now carries the rest of the asset too, damped for its own part and capped near what
|
|
199
|
+
it lifts, and the review doesn't hold that asset off the floor, so it lifts it as it moves. `review.json` gives the
|
|
200
|
+
mass it lifts (`lifts_kg`), whether the asset was held up (`held_up`), and in `held` the tilt of each body standing
|
|
201
|
+
on the floor, held or not.
|
|
202
|
+
- **The Isaac Sim review drives an asset's joints without throwing it, and holds each at its target:** a hinge's
|
|
203
|
+
drive was sized by the 3-D distance to its load, which gave an office chair's vertical seat swivel 546 N·m where
|
|
204
|
+
gravity puts none on it, and every target was set in one step, which threw the chair over. A hinge's drive is now
|
|
205
|
+
sized to the most torque gravity can put on its axis, so a level hinge whose load rests over it (a pallet jack's
|
|
206
|
+
upright tiller, a 1 m arm) holds its target when swung out. Each target moves over 2 s (3 s across the whole range),
|
|
207
|
+
and the asset is held 1 cm off the floor while its joints move, then set down: a loaded castor turned in place
|
|
208
|
+
scrubs, sticks and slips. A free hinge (`limits=None`) turns a quarter turn one way only, since it has no other side
|
|
209
|
+
to clear, and one that ends a turn round from its target reads as there; `poses` turns it the same way.
|
|
210
|
+
`review.json` gives each held body's tilt once each pass sets it down (`held`).
|
|
211
|
+
- **The Isaac Sim review reads a hinge resting past 180 degrees in its own range:** a container's door folded back to
|
|
212
|
+
-265 read as +95, so its reach looked 360 degrees short and the option failed. Its first reading is now the turn its
|
|
213
|
+
limits hold.
|
|
214
|
+
|
|
215
|
+
- **A tinted look switched live comes back:** after a live switch from a `tint=` option to the default, Isaac Sim's
|
|
216
|
+
RTX kept the tint on the base colour texture (a green shoe switched back from red rendered dark brown). Every option
|
|
217
|
+
of a set that tints now writes the texture's scale, the identity where it doesn't tint; rebuild an asset to get it.
|
|
218
|
+
- **`simready-forge bench` measures its field as a scene holds it:** its own count of Fabric's triangles read every
|
|
219
|
+
copy's faces, which makes RTX hold identical copies apart, so every state after a field's fresh load without
|
|
220
|
+
instancing was one the bench had changed (the shoe's 30 MB of geometry became 4.1 GB). It now counts those meshes
|
|
221
|
+
without reading them, and `bench.json` gives `gpu_geometry_mb`, Kit's figure for what the field's geometry costs.
|
|
222
|
+
- **The `comfyui_url` setting is read:** every `trellis` command, and `make`'s mesh jobs, use the server it names
|
|
223
|
+
unless `--server` or `COMFYUI_URL` says otherwise. Until now only `COMFYUI_URL` reached the client.
|
|
224
|
+
- **`make` asks how to run (round 1)** whenever none of those choices is remembered. Until now any remembered
|
|
225
|
+
setting, such as `comfyui_url`, skipped it.
|
|
226
|
+
- **A mesh job on a ComfyUI on another machine** no longer waits for an Isaac Sim review on this one, or holds one up:
|
|
227
|
+
only a ComfyUI here shares this machine's GPU.
|
|
228
|
+
- **`simready-forge qcode` waits out a busy Wikidata:** on HTTP 429 or 503 it waits as Wikidata's `Retry-After` asks,
|
|
229
|
+
else 10, 20, 40, then 80 s, and asks again, five tries in all, then exits with what Wikidata said. Until now a 429,
|
|
230
|
+
which many sessions on one address meet, ended in a traceback.
|
|
231
|
+
|
|
232
|
+
- **`simready-forge probe`** no longer passes on an earlier run's `probe.json` when this run wrote none: after Isaac
|
|
233
|
+
Sim crashed or was killed it took that file for this run's, and exited 0 on it even when it had recorded the crash.
|
|
234
|
+
A timeout is now reported too, instead of ending in a traceback.
|
|
235
|
+
- **A `make` with no one to answer runs to its report:** with `claude -p` and the setting `docs/USAGE.md` gives
|
|
236
|
+
(`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`, and longer command timeouts), every agent `make` starts and every
|
|
237
|
+
command runs in the foreground, and a fix round starts a fresh builder instead of resuming one in the background.
|
|
238
|
+
Until now such a run could end half-way, with its fixes unmade, and still exit 0.
|
|
239
|
+
- **Sonnet 5.5's cache reads are priced at $0.10 a million,** Anthropic's list price, not $0.20: a `cost.json` now
|
|
240
|
+
matches Claude Code's own figures for a Sonnet builder, and reads lower than one written before for the same work.
|
|
241
|
+
- **`make`'s report says what its cost leaves out:** `cost.json` runs from the session's first command, now the
|
|
242
|
+
clock, to its writing, so the report's own turns are in Claude Code's total but not in it. `simready-forge cost`
|
|
243
|
+
prints that as one line, also `cost.json`'s `line`, and the report copies it.
|
|
244
|
+
- **`make` keeps every critic finding in its round:** each critic's and the refuter's answer is saved as it came,
|
|
245
|
+
`round-<n>.md` has a row for each finding with its triage, and a build after the stop takes only what its rule
|
|
246
|
+
gives it. Until now a finding could drop out of a round's summary and never be fixed.
|
|
247
|
+
- **`make`'s report names the source of each number and fault:** each kind of figure has one file it comes from, a
|
|
248
|
+
figure the spec decided is called decided, not measured, a count is the file's own, and a Kit fault of the switch
|
|
249
|
+
pass is stated for the switches it names, not for every switch.
|
|
250
|
+
|
|
251
|
+
## 0.1.0 (2026-10-29)
|
|
252
|
+
|
|
253
|
+
The first version.
|
|
254
|
+
|
|
255
|
+
### Added
|
|
256
|
+
|
|
257
|
+
- **`/simready-forge:make`** turns a prompt or a photo into an NVIDIA SimReady asset: OpenUSD on the Robotics-Prop
|
|
258
|
+
4.0.0 profile with real dimensions, materials, physics materials, rigid bodies, colliders, mass and the joints the
|
|
259
|
+
real object has, checked by NVIDIA's validator, its joints measured in Isaac Sim, exported as URDF and GLB, with a
|
|
260
|
+
report of what it cost. Three modes: Quick (the builder alone), Standard (the default: the builder, then critics
|
|
261
|
+
until clean, 4 rounds at most) and Max (two or three builders and a blind judge, then critics and a refuter).
|
|
262
|
+
- **`/simready-forge:settings`** shows and changes the choices it remembers, such as the builder's and the critics'
|
|
263
|
+
models and effort, for a session, a project or always.
|
|
264
|
+
- **`/simready-forge:review`** validates and reviews an asset you already have, with critics.
|
|
265
|
+
- **The agents** `builder` (writes and runs the build script), `critic` (fresh eyes on the renders, the spec and the
|
|
266
|
+
measurements), `refuter` (checks the builder's report against the files) and `judge` (picks between candidates
|
|
267
|
+
blind, in Max mode).
|
|
268
|
+
- **The physics probe** (`simready-forge probe`): tilt, a hand's push on each part, lift and shake, 10 s at rest and
|
|
269
|
+
a box dropped on top, each measured against what the asset's own values predict.
|
|
270
|
+
- **`simready-forge poses`** checks the review's joint poses without Isaac Sim (overlaps, the ground, near misses,
|
|
271
|
+
openings that must stay empty), and **`simready-forge inspect`** reads a USD back for a refuter.
|
|
272
|
+
- **The `simready-forge` package and command line:** `validate`, `review`, `probe`, `poses`, `inspect`, `trellis`,
|
|
273
|
+
`views`, `qcode`, `prefs`, `cost` and `example`, and the kit's `Asset` for build scripts written by hand. Each asset is written as
|
|
274
|
+
`<name>/usd/<name>.usda`, with `<name>_exports/` and `<name>_reports/` beside it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: simready-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Turn a prompt or a photo into an NVIDIA SimReady asset: OpenUSD with materials, physics and joints
|
|
5
5
|
Project-URL: Homepage, https://github.com/serionist/simready-forge
|
|
6
6
|
Project-URL: Repository, https://github.com/serionist/simready-forge
|
|
@@ -25,6 +25,7 @@ Requires-Dist: matplotlib==3.11.2
|
|
|
25
25
|
Requires-Dist: numpy==2.5.4
|
|
26
26
|
Requires-Dist: physx-usd-schemas==25.11.2.72696984
|
|
27
27
|
Requires-Dist: pillow==13.0.0
|
|
28
|
+
Requires-Dist: pyyaml==6.0.3
|
|
28
29
|
Requires-Dist: scipy==1.18.1
|
|
29
30
|
Requires-Dist: simready-foundation-tier-core==2026.8.0
|
|
30
31
|
Requires-Dist: simready-validate==2026.8.0
|
|
@@ -67,6 +68,22 @@ A Claude Code plugin and a Python kit. One prompt or photo in; out comes:
|
|
|
67
68
|
- **OpenUSD** (NVIDIA SimReady, Robotics-Prop 4.0.0) with real dimensions, materials and physics
|
|
68
69
|
- **Every joint the real object has**, driven and measured in Isaac Sim
|
|
69
70
|
- **URDF and GLB** exports, a report, and the build script to tweak and rerun
|
|
71
|
+
- **A scene prop** (0.2.0 and later; add `scene` to the formats: `formats=usd,urdf,glb,scene`, or `formats=usd,scene`
|
|
72
|
+
for the USD and the scene prop alone): the same asset without bodies, mass or joints, in `.usdc`, for a scene that
|
|
73
|
+
places it thousands of times, checked against the build that was validated and reviewed
|
|
74
|
+
- **Library materials** (0.2.0 and later; `library=<materials.usda>`, or the YAML list a scene tunes them in,
|
|
75
|
+
`library=<materials.yaml>`, written into a library with its texture sets from a folder you name): the materials a
|
|
76
|
+
scene tunes once, bound by name and copied into the package, or referenced live by the scene prop
|
|
77
|
+
(`library_live=<path>`); a rust or wet state is another library material, and a generated mesh keeps its baked
|
|
78
|
+
texture under it
|
|
79
|
+
- **Families** (0.2.0 and later): several sizes of one object ("DN100, 300 and 600 pipes") from one script, a package
|
|
80
|
+
per size, each validated and bound to a material library by name; the smallest and the largest reviewed, the cost
|
|
81
|
+
counted once
|
|
82
|
+
- **Sub-assets** (0.2.0 and later; `uses=<path>`, or a request naming an asset you made): another package inside
|
|
83
|
+
this one, a drive in its tray, two trays in a cage, copied into the package and fixed or jointed where it goes,
|
|
84
|
+
modelled once
|
|
85
|
+
- **A batch from a catalogue** (0.2.0 and later; `simready-forge batch <catalogue.yaml>`): every entry made
|
|
86
|
+
unattended, one headless `make` each, resumable, with one report, one contact sheet and one bill
|
|
70
87
|
|
|
71
88
|
<p align="center">
|
|
72
89
|
<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%">
|
|
@@ -125,6 +142,31 @@ Eight cases (five prompts, three photos), judged the same way:
|
|
|
125
142
|
- Quick + Sonnet passes every physics check; the extra rounds buy fidelity.
|
|
126
143
|
- Probe misses are the same in every mode: no joint friction in the kit yet.
|
|
127
144
|
|
|
145
|
+
## Variants (0.2.0 and later)
|
|
146
|
+
|
|
147
|
+
Name the options in the request, and one asset holds them all, each validated and reviewed:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
/simready-forge:make an HDD tray, with or without its drive, in a high and a low poly version
|
|
151
|
+
/simready-forge:make a bedside cabinet, its door open or closed, with brass or steel knobs
|
|
152
|
+
/simready-forge:make running shoes in green, red or blue, with a high and a low poly version
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
<p align="center">
|
|
156
|
+
<img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/variants.webp" alt="An HDD tray with and without its drive and at a lower detail, a bedside cabinet with its door closed and open and its knobs in brass and steel, then a running shoe generated with TRELLIS.2 in green, red and blue and at a lower detail, each option seen across its front in Isaac Sim" width="80%">
|
|
157
|
+
<br><sub>Those three prompts' assets, each option seen across its front in turn: <code>simready-forge showcase</code>. The shoe's mesh came from TRELLIS.2, set up with <code>simready-forge trellis setup</code>.</sub>
|
|
158
|
+
</p>
|
|
159
|
+
|
|
160
|
+
| Kind | Asked as | Changes |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| look | "in green, red or blue", "brass or steel knobs" | colours, textures, finishes |
|
|
163
|
+
| mode | "with or without its drive", "its door open or closed" | which parts exist, where a jointed part starts |
|
|
164
|
+
| detail | "a high and a low poly version" | how finely the meshes are cut |
|
|
165
|
+
|
|
166
|
+
They are USD variant sets in one file: switch them in Isaac Sim, usdview or any USD tool. Every option is checked
|
|
167
|
+
switched live in Isaac Sim, and an option that shows a finding ("rust", "a cap missing") can carry its label for
|
|
168
|
+
synthetic images.
|
|
169
|
+
|
|
128
170
|
## Install
|
|
129
171
|
|
|
130
172
|
```text
|
|
@@ -136,7 +178,7 @@ Eight cases (five prompts, three photos), judged the same way:
|
|
|
136
178
|
|---|---|
|
|
137
179
|
| [uv](https://docs.astral.sh/uv/) | everything |
|
|
138
180
|
| 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) |
|
|
181
|
+
| ComfyUI + TRELLIS.2 | generated meshes (optional): from 0.2.0, `make` offers to install or start it when a request needs a mesh, and `trellis setup --start` does it by hand; a ComfyUI you already run is offered just the model files it lacks; one on another machine works too, set by the `comfyui_url` setting or `COMFYUI_URL`, which is how a Mac gets meshes |
|
|
140
182
|
|
|
141
183
|
Working on the kit itself? Set `SIMREADY_FORGE_DEV` to your clone.
|
|
142
184
|
|
|
@@ -31,6 +31,22 @@ A Claude Code plugin and a Python kit. One prompt or photo in; out comes:
|
|
|
31
31
|
- **OpenUSD** (NVIDIA SimReady, Robotics-Prop 4.0.0) with real dimensions, materials and physics
|
|
32
32
|
- **Every joint the real object has**, driven and measured in Isaac Sim
|
|
33
33
|
- **URDF and GLB** exports, a report, and the build script to tweak and rerun
|
|
34
|
+
- **A scene prop** (0.2.0 and later; add `scene` to the formats: `formats=usd,urdf,glb,scene`, or `formats=usd,scene`
|
|
35
|
+
for the USD and the scene prop alone): the same asset without bodies, mass or joints, in `.usdc`, for a scene that
|
|
36
|
+
places it thousands of times, checked against the build that was validated and reviewed
|
|
37
|
+
- **Library materials** (0.2.0 and later; `library=<materials.usda>`, or the YAML list a scene tunes them in,
|
|
38
|
+
`library=<materials.yaml>`, written into a library with its texture sets from a folder you name): the materials a
|
|
39
|
+
scene tunes once, bound by name and copied into the package, or referenced live by the scene prop
|
|
40
|
+
(`library_live=<path>`); a rust or wet state is another library material, and a generated mesh keeps its baked
|
|
41
|
+
texture under it
|
|
42
|
+
- **Families** (0.2.0 and later): several sizes of one object ("DN100, 300 and 600 pipes") from one script, a package
|
|
43
|
+
per size, each validated and bound to a material library by name; the smallest and the largest reviewed, the cost
|
|
44
|
+
counted once
|
|
45
|
+
- **Sub-assets** (0.2.0 and later; `uses=<path>`, or a request naming an asset you made): another package inside
|
|
46
|
+
this one, a drive in its tray, two trays in a cage, copied into the package and fixed or jointed where it goes,
|
|
47
|
+
modelled once
|
|
48
|
+
- **A batch from a catalogue** (0.2.0 and later; `simready-forge batch <catalogue.yaml>`): every entry made
|
|
49
|
+
unattended, one headless `make` each, resumable, with one report, one contact sheet and one bill
|
|
34
50
|
|
|
35
51
|
<p align="center">
|
|
36
52
|
<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%">
|
|
@@ -89,6 +105,31 @@ Eight cases (five prompts, three photos), judged the same way:
|
|
|
89
105
|
- Quick + Sonnet passes every physics check; the extra rounds buy fidelity.
|
|
90
106
|
- Probe misses are the same in every mode: no joint friction in the kit yet.
|
|
91
107
|
|
|
108
|
+
## Variants (0.2.0 and later)
|
|
109
|
+
|
|
110
|
+
Name the options in the request, and one asset holds them all, each validated and reviewed:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
/simready-forge:make an HDD tray, with or without its drive, in a high and a low poly version
|
|
114
|
+
/simready-forge:make a bedside cabinet, its door open or closed, with brass or steel knobs
|
|
115
|
+
/simready-forge:make running shoes in green, red or blue, with a high and a low poly version
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
<p align="center">
|
|
119
|
+
<img src="https://raw.githubusercontent.com/serionist/simready-forge/main/docs/assets/variants.webp" alt="An HDD tray with and without its drive and at a lower detail, a bedside cabinet with its door closed and open and its knobs in brass and steel, then a running shoe generated with TRELLIS.2 in green, red and blue and at a lower detail, each option seen across its front in Isaac Sim" width="80%">
|
|
120
|
+
<br><sub>Those three prompts' assets, each option seen across its front in turn: <code>simready-forge showcase</code>. The shoe's mesh came from TRELLIS.2, set up with <code>simready-forge trellis setup</code>.</sub>
|
|
121
|
+
</p>
|
|
122
|
+
|
|
123
|
+
| Kind | Asked as | Changes |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| look | "in green, red or blue", "brass or steel knobs" | colours, textures, finishes |
|
|
126
|
+
| mode | "with or without its drive", "its door open or closed" | which parts exist, where a jointed part starts |
|
|
127
|
+
| detail | "a high and a low poly version" | how finely the meshes are cut |
|
|
128
|
+
|
|
129
|
+
They are USD variant sets in one file: switch them in Isaac Sim, usdview or any USD tool. Every option is checked
|
|
130
|
+
switched live in Isaac Sim, and an option that shows a finding ("rust", "a cap missing") can carry its label for
|
|
131
|
+
synthetic images.
|
|
132
|
+
|
|
92
133
|
## Install
|
|
93
134
|
|
|
94
135
|
```text
|
|
@@ -100,7 +141,7 @@ Eight cases (five prompts, three photos), judged the same way:
|
|
|
100
141
|
|---|---|
|
|
101
142
|
| [uv](https://docs.astral.sh/uv/) | everything |
|
|
102
143
|
| 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) |
|
|
144
|
+
| ComfyUI + TRELLIS.2 | generated meshes (optional): from 0.2.0, `make` offers to install or start it when a request needs a mesh, and `trellis setup --start` does it by hand; a ComfyUI you already run is offered just the model files it lacks; one on another machine works too, set by the `comfyui_url` setting or `COMFYUI_URL`, which is how a Mac gets meshes |
|
|
104
145
|
|
|
105
146
|
Working on the kit itself? Set `SIMREADY_FORGE_DEV` to your clone.
|
|
106
147
|
|