forge-data — searchable 3D reference
A curated, local dataset + a tiny BM25 search engine. It answers "give me a vetted starting
point / cross-check" fast — polycount budgets, texel densities, format decisions, headless CLI
flags, PBR presets — without spending model context on the entire corpus. It is the data layer
of the Forge suite; the other forge-* skills remain the authorities that make the actual craft
decisions.
Project memory: if FORGE.md exists at the project root, read it first — it carries the
confirmed tool choices, poly budget, texel density, render engine, PBR workflow, and output paths
for this project. forge-data answers "what is the standard starting point?"; FORGE.md answers
"what did we already decide for this project?"
Forge suite map
- forge — router / orchestrator (entry point for all 3D work)
- forge-brief — writes FORGE.md; extracts ATELIER.md brief
- forge-standards — authoritative 3D design-token rules (units, naming, pivots, budgets)
- forge-model — bpy / bmesh polygonal modelling
- forge-parametric — OpenSCAD / CadQuery / FreeCAD code-CAD
- forge-procedural — Geometry Nodes, SDF, L-systems, scatter
- forge-topology — retopo, decimation, LOD chains, boolean cleanup
- forge-uv — UV unwrap, seams, packing, texel density, UDIMs
- forge-material — PBR shading, Principled→glTF mapping
- forge-texture — baking (normal / AO / curvature / displacement) + procedural
- forge-light — lighting rigs, HDRI / IBL, color management (AgX / ACES)
- forge-render — headless Cycles renders, turntable + contact-sheet QA
- forge-rig — armatures, IK / FK, skinning / weights, blend shapes
- forge-animate — keyframes, F-curves, baking, skeletal + morph export
- forge-sim — cloth, rigid / soft / particles, hair / fur, fluids
- forge-export — format matrix, glTF / GLB / USD / FBX export, engine conventions
- forge-optimize — gltf-transform, Draco / Meshopt / KTX2, web delivery, atelier-webgl handoff
- forge-intake — photogrammetry, Gaussian splat / NeRF, AI text-to-3D cleanup
- forge-validate — manifold, normals, scale, polycount, UV overlap, glTF-Validator, render QA
- forge-data ← you are here (BM25 reference library)
Atelier seam: forge-export → forge-optimize → Skill(atelier-webgl)
When to query (and when not)
Use for: fast budget lookup (polycount / texel density for a given platform and asset class);
format selection (should this be FBX, GLB, or USD?); headless CLI flags for Blender / assimp /
gltf-transform; PBR channel-pack conventions (ORM layout, color-space rules); Windows gotcha
cross-checks before running a conversion.
Do not use for: making the final craft decision (use the responsible forge-* skill); reading
or auditing existing files (use Read tool or forge-validate); real-time rendering parameters
already locked in FORGE.md (read FORGE.md directly).
How to query (Windows: use python, not python3)
cd $CLAUDE_CONFIG_DIR/skills/forge-data/scripts
python search.py "<query>" --domain <domain> [-n 3]
python search.py "<query>" # auto-detect domain
python search.py "<query>" --json # machine-parseable output
Keep -n small (≤ 5). The --json flag bypasses per-field 300-char truncation — use only when
the caller needs structured data. Python is stdlib-only; no network calls.
Datasets → which Forge skill owns the decision
| Domain / file |
Gives you |
Decision owner |
--domain tools → tool-cheatsheet.csv |
Headless invocation patterns, when-to-use, gotcha per tool |
forge-model, forge-parametric, forge-render |
--domain polycount → polycount-budgets.csv |
LOD0–LOD3 triangle limits by asset class + platform |
forge-topology, forge-standards |
--domain texel → texel-density.csv |
px/m targets by platform tier + asset tier |
forge-uv, forge-standards |
--domain format → format-matrix.csv |
Format capabilities (geo/UV/PBR/rig/anim/morph), up-axis, unit, assimp support |
forge-export |
--domain material → material-presets.csv |
PBR preset values, ORM channel-pack layout, color-space rules |
forge-material |
--domain gotchas → gotchas.csv |
Topic → symptom → fix for Windows headless pitfalls |
ALL skills |
The flow
- Receive query from a sibling skill (e.g. forge-standards asks for mobile hero polycount,
forge-export asks for FBX vs GLB for a Unity target).
- Run
scripts/search.py with the relevant --domain and the query string. Keep -n ≤ 5.
- Read the structured output — check the Decision owner column; the result is a starting
point, not a binding rule.
- Cross-check FORGE.md — if the project has already locked a budget or format, that takes
precedence over the dataset default.
- Hand back the answer to the requesting skill. forge-data never makes the final decision
itself.
Run = call the Skill tool with the exact skill name. Writing "now run forge-export" in prose runs
nothing.
Deep references (load on demand)
Full copy-paste-ready detail lives in references/ — the SKILL.md body only carries pointers.
Load a reference file with Read when the summary row from a CSV search is not enough.
| File |
Contents |
references/tool-invocations.md |
Blender headless flags, OpenSCAD/FreeCAD/assimp CLI patterns, PowerShell wrappers, Windows gotchas |
references/budgets-and-standards.md |
Full polycount and texel-density tables, naming conventions, pivot rules, scale discipline, LOD ratios |
references/format-matrix.md |
Full format-capability table, conversion recipes, FBX unit scale fix, Blender↔glTF axis mapping |
references/pbr-and-material.md |
PBR theory, ORM channel-pack recipe, Principled→glTF mapping, color-space rules, texture suffixes |
references/web-delivery.md |
gltf-transform / gltfpack / toktx pipelines, KTX2 selection rules, web budget tiers, CWV alignment |
Operating principles
- Data layer, not decision layer. forge-data surfaces starting points; forge-standards,
forge-export, forge-material, and the other craft skills make binding decisions.
- FORGE.md wins. Any value already locked in the project memory file overrides a dataset
default. Always check FORGE.md before citing a search result as the answer.
- Stdlib only, no network. Every script is pure Python stdlib. Never make a network call
from a search or probe script.
- Keep tokens small. Keep
-n ≤ 5 and avoid --json unless the caller needs structured
data — search results enter the model's context and large payloads waste budget.
- 2-char tokens match. The BM25 tokenizer keeps
len(w) >= 2, so queries like "uv", "3d",
"ao", "gi", "lm" all resolve correctly.
1---2name: forge-data3description: forge-data — searchable 3D reference4---56# forge-data — searchable 3D reference78A curated, **local** dataset + a tiny BM25 search engine. It answers "give me a vetted *starting9point* / cross-check" fast — polycount budgets, texel densities, format decisions, headless CLI10flags, PBR presets — without spending model context on the entire corpus. It is the **data** layer11of the Forge suite; the other `forge-*` skills remain the authorities that make the actual craft12decisions.1314> **Project memory:** if **`FORGE.md`** exists at the project root, read it first — it carries the15> confirmed tool choices, poly budget, texel density, render engine, PBR workflow, and output paths16> for this project. forge-data answers "what is the standard starting point?"; FORGE.md answers17> "what did we already decide for this project?"1819---2021> **Forge suite map**22>23> - **forge** — router / orchestrator (entry point for all 3D work)24> - **forge-brief** — writes FORGE.md; extracts ATELIER.md brief25> - **forge-standards** — authoritative 3D design-token rules (units, naming, pivots, budgets)26> - **forge-model** — bpy / bmesh polygonal modelling27> - **forge-parametric** — OpenSCAD / CadQuery / FreeCAD code-CAD28> - **forge-procedural** — Geometry Nodes, SDF, L-systems, scatter29> - **forge-topology** — retopo, decimation, LOD chains, boolean cleanup30> - **forge-uv** — UV unwrap, seams, packing, texel density, UDIMs31> - **forge-material** — PBR shading, Principled→glTF mapping32> - **forge-texture** — baking (normal / AO / curvature / displacement) + procedural33> - **forge-light** — lighting rigs, HDRI / IBL, color management (AgX / ACES)34> - **forge-render** — headless Cycles renders, turntable + contact-sheet QA35> - **forge-rig** — armatures, IK / FK, skinning / weights, blend shapes36> - **forge-animate** — keyframes, F-curves, baking, skeletal + morph export37> - **forge-sim** — cloth, rigid / soft / particles, hair / fur, fluids38> - **forge-export** — format matrix, glTF / GLB / USD / FBX export, engine conventions39> - **forge-optimize** — gltf-transform, Draco / Meshopt / KTX2, web delivery, atelier-webgl handoff40> - **forge-intake** — photogrammetry, Gaussian splat / NeRF, AI text-to-3D cleanup41> - **forge-validate** — manifold, normals, scale, polycount, UV overlap, glTF-Validator, render QA42> - **forge-data** ← you are here (BM25 reference library)43>44> Atelier seam: **forge-export → forge-optimize → Skill(atelier-webgl)**4546---4748## When to query (and when not)4950**Use for:** fast budget lookup (polycount / texel density for a given platform and asset class);51format selection (should this be FBX, GLB, or USD?); headless CLI flags for Blender / assimp /52gltf-transform; PBR channel-pack conventions (ORM layout, color-space rules); Windows gotcha53cross-checks before running a conversion.5455**Do not use for:** making the final craft decision (use the responsible forge-* skill); reading56or auditing existing files (use Read tool or forge-validate); real-time rendering parameters57already locked in FORGE.md (read FORGE.md directly).5859---6061## How to query (Windows: use `python`, not `python3`)6263```64cd $CLAUDE_CONFIG_DIR/skills/forge-data/scripts65python search.py "<query>" --domain <domain> [-n 3]66python search.py "<query>" # auto-detect domain67python search.py "<query>" --json # machine-parseable output68```6970Keep `-n` small (≤ 5). The `--json` flag bypasses per-field 300-char truncation — use only when71the caller needs structured data. Python is stdlib-only; **no network calls**.7273---7475## Datasets → which Forge skill owns the decision7677| Domain / file | Gives you | Decision owner |78|---|---|---|79| `--domain tools` → `tool-cheatsheet.csv` | Headless invocation patterns, when-to-use, gotcha per tool | **forge-model**, **forge-parametric**, **forge-render** |80| `--domain polycount` → `polycount-budgets.csv` | LOD0–LOD3 triangle limits by asset class + platform | **forge-topology**, **forge-standards** |81| `--domain texel` → `texel-density.csv` | px/m targets by platform tier + asset tier | **forge-uv**, **forge-standards** |82| `--domain format` → `format-matrix.csv` | Format capabilities (geo/UV/PBR/rig/anim/morph), up-axis, unit, assimp support | **forge-export** |83| `--domain material` → `material-presets.csv` | PBR preset values, ORM channel-pack layout, color-space rules | **forge-material** |84| `--domain gotchas` → `gotchas.csv` | Topic → symptom → fix for Windows headless pitfalls | ALL skills |8586---8788## The flow89901. **Receive query from a sibling skill** (e.g. forge-standards asks for mobile hero polycount,91 forge-export asks for FBX vs GLB for a Unity target).922. **Run `scripts/search.py`** with the relevant `--domain` and the query string. Keep `-n ≤ 5`.933. **Read the structured output** — check the Decision owner column; the result is a *starting94 point*, not a binding rule.954. **Cross-check FORGE.md** — if the project has already locked a budget or format, that takes96 precedence over the dataset default.975. **Hand back the answer to the requesting skill.** forge-data never makes the final decision98 itself.99100Run = call the Skill tool with the exact skill name. Writing "now run forge-export" in prose runs101nothing.102103---104105## Deep references (load on demand)106107Full copy-paste-ready detail lives in `references/` — the SKILL.md body only carries pointers.108Load a reference file with `Read` when the summary row from a CSV search is not enough.109110| File | Contents |111|---|---|112| `references/tool-invocations.md` | Blender headless flags, OpenSCAD/FreeCAD/assimp CLI patterns, PowerShell wrappers, Windows gotchas |113| `references/budgets-and-standards.md` | Full polycount and texel-density tables, naming conventions, pivot rules, scale discipline, LOD ratios |114| `references/format-matrix.md` | Full format-capability table, conversion recipes, FBX unit scale fix, Blender↔glTF axis mapping |115| `references/pbr-and-material.md` | PBR theory, ORM channel-pack recipe, Principled→glTF mapping, color-space rules, texture suffixes |116| `references/web-delivery.md` | gltf-transform / gltfpack / toktx pipelines, KTX2 selection rules, web budget tiers, CWV alignment |117118---119120## Operating principles121122- **Data layer, not decision layer.** forge-data surfaces starting points; forge-standards,123 forge-export, forge-material, and the other craft skills make binding decisions.124- **FORGE.md wins.** Any value already locked in the project memory file overrides a dataset125 default. Always check FORGE.md before citing a search result as the answer.126- **Stdlib only, no network.** Every script is pure Python stdlib. Never make a network call127 from a search or probe script.128- **Keep tokens small.** Keep `-n ≤ 5` and avoid `--json` unless the caller needs structured129 data — search results enter the model's context and large payloads waste budget.130- **2-char tokens match.** The BM25 tokenizer keeps `len(w) >= 2`, so queries like "uv", "3d",131 "ao", "gi", "lm" all resolve correctly.