3d-print
Search-first 3D printing workflow — finds real specs before modeling, generates manifold-safe models for Bambu Studio / PrusaSlicer / Cura / Fusion 360
معلومات المصدر
- المستودع
- EdwinjJ1/3d-print-skill
- آخر نشاط في المصدر
- ١٠ مارس ٢٠٢٦ في ١٣:٥٣
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٢٧
- التفرعات
- ١
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- 3d-print
- version
- 0.2.0
- description
- Search-first 3D printing workflow — finds real specs before modeling, generates manifold-safe models for Bambu Studio / PrusaSlicer / Cura / Fusion 360
- triggers
- ["3D print","create STL","generate model for printing","design for 3D printing","make a 3D printable","print this part","3d printable","slicer","FDM","print bracket","print mount","print enclosure"]
# 3D Print Skill
## Purpose
Generate physically accurate, print-ready 3D models without fabricating dimensions.
Always search for real specs first. Never guess measurements.
---
## Workflow
### Step 1 — Search for real specs
First, try the local search script:
```bash
python3 scripts/search_specs.py "Canon EF 40mm f2.8 lens outer diameter"
```
**If the script returns no concrete millimeter values** (status: `no_instant_answer` or vague text),
do NOT stop. Use your own `search_web` tool to query the product's official datasheet,
spec page, or Wikipedia. Extract the three key numbers: outer dimension, inner dimension, height.
Only proceed to Step 2 once you have real numbers with a source you can cite.
All results are cached to `specs_cache.json`. On a cache hit, read the cached result and
extract dimensions directly — no re-search needed.
### Step 2 — Decide: preset or custom script
**Check if the request matches a preset:**
```bash
python3 scripts/generate_model.py --preset cube # 20mm calibration cube
python3 scripts/generate_model.py --preset tube # hollow cylinder
python3 scripts/generate_model.py --preset bracket # box with through-hole
```
**If the request does NOT match a preset** (e.g. "lens cap with snap-fit tabs",
"hook with chamfer", "enclosure with lip", "multi-part assembly"), write a custom
Python script on the fly. Use the pattern:
```python
import sys
sys.path.insert(0, "scripts")
import manifold3d as m3d
from generate_model import export_3mf, export_stl
from pathlib import Path
# --- build geometry using manifold3d primitives ---
# See references/manifold-examples.md for API reference:
# extrusion, revolve, hull, chamfer, loft, snap-fit tabs, threads
body = m3d.Manifold.cylinder(height=8.0, radius_low=34.0, circular_segments=64)
inner = m3d.Manifold.cylinder(height=8.2, radius_low=33.0, circular_segments=64)
result = body - inner.translate([0, 0, -0.1])
# --- export ---
out = Path("output")
export_3mf(result, out / "lens_cap.3mf", name="lens_cap")
export_stl(result, out / "lens_cap.stl")
```
Save the script as `output/<name>_build.py`, run it, then proceed to Step 3.
The `export_3mf` and `export_stl` functions from `generate_model.py` handle all
file-format details — just call them with the final `Manifold` object.
### Step 3 — Validate the mesh
```bash
python3 scripts/validate_mesh.py output/lens_cap.stl
```
**If validation fails**, do NOT just run `--fix` and move on.
Read the specific failing checks, trace them back to the geometry construction,
and fix the root cause in the build script. Common fixes:
- `watertight: FAIL` → a boolean operation left an open edge; add a small Z-offset
(e.g. `translate([0, 0, -0.1])`) on the subtracted body so it protrudes past the face
- `positive_volume: FAIL` → normals are inverted; the outer shell may be smaller than
the inner — check radii
- `no_degenerate_faces: FAIL` → a zero-thickness wall from a tight boolean;
add at least 0.4mm clearance between faces
After fixing, re-run the build script and re-validate. Repeat until all critical checks pass.
### Step 4 — Slice
Import `.3mf` into Bambu Studio / PrusaSlicer / Cura.
Expected: 0 non-manifold errors, 0 open edges.
---
## Spec Extraction from Cache
When `specs_cache.json` already contains an entry for the target part, load and extract
dimensions directly instead of re-running search:
```python
import json
cache = json.load(open("specs_cache.json"))
# find the entry whose query matches your part
# read result["answer"] or result["abstract"]
# parse out numeric values (mm) using your own reasoning
# map to: outer_diameter, inner_diameter, height, wall_thickness, etc.
```
Use your reasoning to map prose descriptions ("67.5mm filter thread") to the correct
variable in the build script. Do not ask the user to do this mapping manually.
---
## Reference Files
| File | Contents |
|------|----------|
| `references/formats.md` | STL vs 3MF vs STEP — when to use each |
| `references/tolerances.md` | FDM accuracy, shrinkage, fit clearances |
| `references/design-rules.md` | Manifold rules, wall thickness, overhang limits |
| `references/manifold-examples.md` | manifold3d API: extrusion, revolve, hull, chamfer, snap-fit, threads |
---
## Key Constraints
- **No fabricated dimensions** — search first, use real numbers with a cited source
- **manifold3d for all geometry** — guarantees no non-manifold edges
- **Custom script when no preset fits** — `generate_model.py` is a reference, not a limit
- **3MF primary output** — ISO/IEC 25422:2025, manifold-safe, Bambu/Prusa/Cura compatible
- **Fix root cause on validation failure** — do not rely on `--fix` alone
---
## Common Errors
| Error | Cause | Fix |
|-------|-------|-----|
| "244 non-manifold edges" in Bambu | numpy-stl or bad boolean | Regenerate with `manifold3d` |
| Hole too tight | FDM shrinks holes | Add +0.1–0.2mm radius compensation (tolerances.md) |
| Part snaps during press fit | No interference margin | 0.1–0.3mm interference (tolerances.md) |
| Overhangs fail | >45° without supports | Redesign or add supports in slicer |
| `watertight: FAIL` | Subtracted body flush with face | Add Z-offset of 0.1mm on subtracted body |
| `search_specs.py` returns empty | DuckDuckGo Instant Answer has no entry | Use `search_web` tool on manufacturer datasheet |
---
## Install
```bash
ln -sf /path/to/3d-print-skill ~/.claude/skills/3d-print
```
## Dependencies
```bash
pip install manifold3d trimesh numpy requests
```
عرض على GitHub