Skip to content

Commit 4d23e70

Browse files
TMHSDigitalclaude
andauthored
fix: close the mechanical audit issues (#196)
* fix: state the current security support policy The supported-versions table named 0.2.x while the repository is at 0.78.18, so it claimed support for releases eleven minors behind and none of the ones that exist. Replace it with the policy the project can actually keep: latest release only, no backports, no maintenance branches. The row points at VERSION rather than naming a number, so it cannot drift again on the next release. Adds the one-line reason there are no backports — this is content, not a runtime. Closes #186 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix: stop the gallery calling showcase pieces examples The gallery grid concatenates 51 examples and 26 showcase pieces, then labelled all 77 with the example noun: the count chip read "77 examples", every showcase card carried aria-label "<name> example detail page" and a "View example" link, each showcase detail page titled itself "<name> — Examples" and claimed "Rendered headless by the example itself", and the landing page offered to "Browse all 51 examples in the gallery" for a page holding 77 cards. The two categories are distinct everywhere else in the repository; the site was the last place conflating them. Derive the noun per entry from the `showcase` tag instead of hardcoding it (`kind_noun`), and split the counts: - count chip and its live-updating JS: "51 examples, 26 showcase pieces" - card aria-label and card link: "example" or "showcase piece" per card - showcase detail pages title as "— Showcase —" and credit "the showcase piece itself" - gallery title "Examples Gallery" -> "Examples and Showcase"; description now says showcase pieces share the grid and carry the tag - landing CTA names both counts - search placeholder, chip toolbar, and empty-state text no longer say "examples" for a grid holding both - the generator's summary line prints the breakdown Verified against the generated HTML, not the source JSON: 51 "example" and 26 "showcase piece" nouns on the index, correct titles on a showcase detail page and an example detail page, no residual "Examples Gallery" string, and dotted-path alt text still intact. Closes #187 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix: label PRs that touch examples and showcase label-sync.yml covered skills, rules, snippets, templates, docs, and .github but not examples/ or showcase/ — the two directories that carry the bulk of content work. A PR adding an example got no path label at all unless it also touched a README, and showcase PRs were labelled `documentation` for their README alone. Add both branches in the same shape as the existing ones. The `examples` and `showcase` labels have been created on the repository (green and purple); every label this workflow can now apply — skills, rules, snippets, templates, examples, showcase, documentation, ci — exists, so the `gh label create --force` fallback in the apply step stays a fallback rather than the thing that silently invents grey labels. Closes #188 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix: carve out check-only examples from the render requirement docs/new-example-prompt.md required every example to produce a deliberate render and wire gallery metadata and assets, with no exception. Eight of the 59 examples ship no render, no gallery.json entry, and no hero asset — an established, deliberate category the authoring prompt did not acknowledge, so the prompt described a rule the repository does not follow. CLAUDE.md stated it more strongly still: "their renders ship in the site gallery", of all 59. State the exception in both, keyed to a criterion rather than a list of the eight so it stays true as the set changes: an example is check-only when its witness is a data or state fact that no scene redesign can make visible — a datablock name, an RNA attribute's presence, a post-exit sidecar, a topology count, export metadata — so the render would be identical whether the API held or broke. The existing "redesign the scene until failure would be visible" instruction is the test to attempt first; the exception is for contracts that are invisible, not renders that are hard. CLAUDE.md now says 51 of 59 ship a render, and records that a check-only example wires only the plugin manifest entry, the smoke catalog row, and its README. Verified on disk: exactly eight examples have no gallery.json entry (coincident-vert-weld, eval-mesh-datablock-name, exit-pre-sidecar, gn-bundle-roundtrip, mesh-automasking-settings, ngon-triangulate, unapplied-scale-gltf, vse-linear-modifiers); all eight have a tests/smoke/catalog.json row, none takes --output, and each carries at least one falsifier flag. Smoke coverage is unaffected. Closes #146 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * fix: describe how the content is actually consumed The overview claimed the content is consumed by "any MCP-capable client". There is no MCP server in this repository and never has been: Cursor and Claude Code read the files directly from a checkout. The line promised a capability that does not exist, which is a defect rather than a wording preference — a reader evaluating the project would go looking for a server to register. Describe the real mechanism instead: Cursor applies rules/*.mdc by scope glob and takes skills by name; Claude Code reads skills/ and rules/ from the workspace or a referenced checkout; any agent that can read workspace files works the same way. `pages.yml` also path-filters on a `mcp-tools.json` that has never existed in this repository's history — it comes from the shared fleet site builder, which supports tool repos that do ship an MCP server. Filed separately rather than edited here. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * docs: say where to get Blender in the quick start The quick start hands the reader a `blender --background --python ...` command without ever saying where `blender` comes from or which versions the repository supports. The supported-versions table is further down the page and links nowhere. Add one bullet above the run command: the LTS download link, which of 5.2 and 4.5 is primary, and the macOS app-bundle path that trips people up when `blender` is not on PATH. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> * docs: introduce falsifiers in the README The falsifier is this repository's central convention — it is what makes a green example run evidence rather than decoration — and it appeared only in CLAUDE.md, CONTRIBUTING.md, and the PR template. A reader evaluating the project from the README never met the word, so the examples read as scripts that happen to print OK. Add a short section above Showcase: what a falsifier is, that it changes input so a real assertion fails rather than skipping the check, that all 59 examples carry one, and the concrete bmesh-gear case (`--no-extrude` breaks the closed-form topology match and exits 3). Names the three flags that are commonly mistaken for falsifiers and links to CONTRIBUTING.md for the exit-code model. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> --------- Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 6440e83 commit 4d23e70

86 files changed

Lines changed: 386 additions & 274 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/label-sync.yml‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ jobs:
4848
LABELS="$LABELS templates"
4949
fi
5050
51+
if echo "$FILES" | grep -q "^examples/"; then
52+
LABELS="$LABELS examples"
53+
fi
54+
55+
if echo "$FILES" | grep -q "^showcase/"; then
56+
LABELS="$LABELS showcase"
57+
fi
58+
5159
if echo "$FILES" | grep -qE "(README\.md|AGENTS\.md|CLAUDE\.md|ROADMAP\.md|CHANGELOG\.md|^docs/)"; then
5260
LABELS="$LABELS documentation"
5361
fi

‎CLAUDE.md‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,25 @@ AI asset pipeline track: `decimate_to_budget.py`, `convex_hull_collider.py`, `lo
105105
Runnable scripts at `examples/<name>/`, each asserting a real API contract with
106106
deterministic checks (exit non-zero on failure) and optionally rendering a still via
107107
`--output`. All of them run headless on Blender 5.2 LTS and 4.5 LTS in `blender-smoke.yml` (5.1 on the weekly cron, the `needs-5.1` PR label, or manual dispatch);
108-
their renders ship in the site gallery at `docs/gallery/`. `examples/gallery.json` is the
109-
gallery's source of truth. When authoring a new one, copy the anatomy of
108+
**51 of the 59 ship a render in the site gallery** at `docs/gallery/`. The other
109+
eight are **check-only**: they carry no `--output` path, no gallery entry, and no
110+
hero asset. The criterion is whether the contract is expressible in pixels. An
111+
example is check-only when its witness is a data or state fact that no scene
112+
redesign can make visible — a datablock name, an RNA attribute's presence, a
113+
post-exit sidecar, a topology count, export metadata — so a render would look
114+
identical whether the API held or broke. That is a category, not a shortcut: a
115+
subject whose render *could* be made legible must be rendered, per
116+
`docs/new-example-prompt.md`. Smoke coverage is unaffected; every check-only
117+
example still carries a `tests/smoke/catalog.json` row and a falsifier.
118+
`examples/gallery.json` is the
119+
gallery's source of truth. When authoring a new gallery example, copy the anatomy of
110120
`examples/bmesh-gear/` (script structure, README shape, dark-studio render recipe) and
111121
wire all of: gallery.json entry, `.cursor-plugin/plugin.json` examples array (CI-gated),
112122
a `tests/smoke/catalog.json` row, a README gallery row, hero webp (1280×720) in
113123
`docs/gallery/assets/` + preview webp (1200×675), then run `python scripts/build_gallery.py`.
124+
A check-only example wires only the `.cursor-plugin/plugin.json` entry, the
125+
`tests/smoke/catalog.json` row, and its README — it is deliberately absent from
126+
`examples/gallery.json` and `docs/gallery/`.
114127
Renders must conform to the gallery look spec at `docs/VISUAL-STYLE.md`.
115128
Render paths gate framing through the shared helper `examples/gallery_framing.py` —
116129
imported via a `__file__`-relative `sys.path` shim, the repo's only

‎README.md‎

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 59 examples, and 26 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4141

42-
The content is consumed by AI coding agents (Cursor, Claude Code, any MCP-capable client) when working on Blender add-ons, geometry nodes scripts, batch pipelines, or animation tooling. There is no build step. Edit the markdown and Python files directly.
42+
The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
4343

4444
| Layer | Role |
4545
| --- | --- |
@@ -58,6 +58,7 @@ git clone https://github.com/TMHSDigital/Blender-Developer-Tools.git
5858

5959
- **Cursor** — point Cursor at the checkout (or symlink `rules/` into your project). The `.mdc` rules apply automatically by glob scope; skills are referenced by name in chat.
6060
- **Claude Code** — copy `skills/` and `rules/` into your project workspace, or keep this repo as a checkout that Claude Code references directly.
61+
- **Get Blender** — download **5.2 LTS** (primary target) or **4.5 LTS** (supported fallback) from [blender.org/download/lts](https://www.blender.org/download/lts/); current stable lives at [blender.org/download](https://www.blender.org/download/). The `blender` command below is that binary — on macOS it is inside the app bundle at `/Applications/Blender.app/Contents/MacOS/Blender`.
6162
- **Run an example** — every example is a self-checking headless script (exit non-zero on failure, no GPU needed for the check):
6263

6364
```bash
@@ -72,6 +73,34 @@ blender --background --python examples/bmesh-gear/bmesh_gear.py --
7273
| Blender 5.1 | Prior stable (weekly cron; PR via `needs-5.1` or manual dispatch) |
7374
| Blender 4.5 LTS | Fallback supported (skills show both code paths where 4.x and 5.x APIs diverge) |
7475

76+
## Falsifiers
77+
78+
Every one of the 59 examples carries a **falsifier**: a flag that changes the
79+
input so a real assertion fails. It never disables the assertion, skips the
80+
check, or short-circuits to an error — it feeds the script something the
81+
contract says must not pass, and the same check that guards the happy path
82+
catches it.
83+
84+
```bash
85+
# The contract holds: exit 0
86+
blender --background --python examples/bmesh-gear/bmesh_gear.py --
87+
88+
# The falsifier: skip the extrude, so the topology no longer matches the
89+
# closed form. The topology check fires and the script exits 3.
90+
blender --background --python examples/bmesh-gear/bmesh_gear.py -- --no-extrude
91+
```
92+
93+
This is what makes a green run mean something. An assertion that has only
94+
ever passed witnesses nothing — it could be comparing a constant to itself.
95+
Proving each one fails once, on demand, is the difference between a test
96+
suite and a set of scripts that print "OK". Shipping an example requires
97+
demonstrating the falsifier's non-zero exit and reporting the measured error.
98+
99+
`--api`, `--check-pixels`, and `--output` are not falsifiers; they select a
100+
code path rather than break a contract. Full conventions, including the
101+
per-script exit-code model, are in
102+
[`CONTRIBUTING.md`](CONTRIBUTING.md#exit-codes).
103+
75104
## Showcase
76105

77106
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).

‎SECURITY.md‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,19 @@ Issues with the Blender Python API itself (`bpy`, `bmesh`, `bpy_extras`) belong
2626

2727
## Supported Versions
2828

29+
This is a content repository — Markdown, MDC, Python, and TOML files consumed
30+
directly by an AI agent. There is no installed runtime, no server, and no
31+
long-lived deployment to patch, so there are no maintenance branches and no
32+
backports.
33+
2934
| Version | Supported |
3035
|---------|-----------|
31-
| 0.2.x | Yes |
32-
| < 0.2.0 | No |
36+
| Latest release (see [`VERSION`](VERSION)) | Yes |
37+
| Any earlier release | No |
38+
39+
A confirmed fix lands on `main` and ships in the next release cut by
40+
`release.yml`. Consumers pin by tag or track `main`; the remedy in both cases
41+
is to move to the current release. Nothing older is patched in place.
3342

3443
## Response Timeline
3544

‎docs/gallery/anvil/index.html‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1" />
6-
<title>anvil — Examples — Blender Developer Tools</title>
6+
<title>anvil — Showcase — Blender Developer Tools</title>
77
<meta name="description" content="A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
88
<link rel="canonical" href="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/anvil/" />
99
<link rel="icon" href="../../assets/favicon.svg" type="image/svg+xml" />
1010
<meta name="theme-color" content="#1a1b1e" />
1111
<meta property="og:type" content="website" />
12-
<meta property="og:title" content="anvil — Examples — Blender Developer Tools" />
12+
<meta property="og:title" content="anvil — Showcase — Blender Developer Tools" />
1313
<meta property="og:description" content="A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
1414
<meta property="og:url" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/anvil/" />
1515
<meta property="og:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/anvil-hero.webp" />
1616
<meta name="twitter:card" content="summary_large_image" />
17-
<meta name="twitter:title" content="anvil — Examples — Blender Developer Tools" />
17+
<meta name="twitter:title" content="anvil — Showcase — Blender Developer Tools" />
1818
<meta name="twitter:description" content="A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
1919
<meta name="twitter:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/anvil-hero.webp" />
2020
<style>
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>
@@ -252,7 +252,7 @@ <h1>anvil</h1>
252252
<button class="detail-hero" id="heroZoom" type="button" aria-label="Zoom anvil render">
253253
<img src="../assets/anvil-hero.webp" alt="anvil render" width="1280" height="720" />
254254
</button>
255-
<p class="zoom-hint">Rendered headless by the example itself — click to zoom.</p>
255+
<p class="zoom-hint">Rendered headless by the showcase piece itself — click to zoom.</p>
256256
<div class="callout"><span class="tag">witnesses</span> Recomputed: 2988 tris, two materials with 1040 wood and 822 metal faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.621×0.414×0.489 m, LOD ratios in band, convex collider 134 tris, hygiene 0, 16 grounded staves, hoop bite 0.003 m, foot-on-head gap 0.003 m, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-staves 16; --float-anvil 17; --round-band 18.</div>
257257
<div class="runline">
258258
<pre id="runCmd">blender --background --python showcase/anvil/anvil.py --</pre>

‎docs/gallery/armature-bend/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>

‎docs/gallery/attribute-domain-shear/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>

‎docs/gallery/bake-normal-high-to-low/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>

‎docs/gallery/bmesh-gear/index.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>

‎docs/gallery/campfire/index.html‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
<head>
44
<meta charset="utf-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1" />
6-
<title>campfire — Examples — Blender Developer Tools</title>
6+
<title>campfire — Showcase — Blender Developer Tools</title>
77
<meta name="description" content="A procedural campfire through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
88
<link rel="canonical" href="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/campfire/" />
99
<link rel="icon" href="../../assets/favicon.svg" type="image/svg+xml" />
1010
<meta name="theme-color" content="#1a1b1e" />
1111
<meta property="og:type" content="website" />
12-
<meta property="og:title" content="campfire — Examples — Blender Developer Tools" />
12+
<meta property="og:title" content="campfire — Showcase — Blender Developer Tools" />
1313
<meta property="og:description" content="A procedural campfire through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
1414
<meta property="og:url" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/campfire/" />
1515
<meta property="og:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/campfire-hero.webp" />
1616
<meta name="twitter:card" content="summary_large_image" />
17-
<meta name="twitter:title" content="campfire — Examples — Blender Developer Tools" />
17+
<meta name="twitter:title" content="campfire — Showcase — Blender Developer Tools" />
1818
<meta name="twitter:description" content="A procedural campfire through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." />
1919
<meta name="twitter:image" content="https://tmhsdigital.github.io/Blender-Developer-Tools/gallery/assets/campfire-hero.webp" />
2020
<style>
@@ -239,7 +239,7 @@
239239
<body>
240240
<a class="skip" href="#main">Skip to content</a>
241241
<div class="topbar">
242-
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples Gallery</a>
242+
<a class="back" href="../"><span aria-hidden="true">&larr;</span> Examples and Showcase</a>
243243
<div class="topbar-right">
244244
<a class="ghlink" href="https://github.com/TMHSDigital/Blender-Developer-Tools">GitHub</a>
245245
</div>
@@ -252,7 +252,7 @@ <h1>campfire</h1>
252252
<button class="detail-hero" id="heroZoom" type="button" aria-label="Zoom campfire render">
253253
<img src="../assets/campfire-hero.webp" alt="campfire render" width="1280" height="720" />
254254
</button>
255-
<p class="zoom-hint">Rendered headless by the example itself — click to zoom.</p>
255+
<p class="zoom-hint">Rendered headless by the showcase piece itself — click to zoom.</p>
256256
<div class="callout"><span class="tag">witnesses</span> Recomputed: 2200 tris, three materials with 216 wood, 48 ash and 1304 stone faces, UVs in 0..1 with zero AABB overlap, outer AABB 0.807×0.808×0.404 m, LOD ratios in band, convex collider 198 tris, hygiene 0, 14 grounded bottom stones, teepee kiss 0.00001 m, course seat 0, non-empty glTF. --skip-decimate exits 9; --stray-vert 15; --lift-z/--short-stones 16; --float-logs 17; --gap-courses 18.</div>
257257
<div class="runline">
258258
<pre id="runCmd">blender --background --python showcase/campfire/campfire.py --</pre>

0 commit comments

Comments
 (0)