CommunityImagegithub.com

ezylevy/3d-stl

Deux points d'entrée, un standard de sortie : un STL étanche, un script paramétrique

Qu'est-ce que 3d-stl ?

Ce skill permet de générer des modèles 3D prêts à imprimer via deux routes distinctes : une route géométrique, basée sur des dimensions ou une description textuelle, et une route image, qui convertit une photo en relief ou lithophanie. Il garantit une sortie au format STL étanche, accompagnée d'un script paramétrique utilisant des flags argparse pour une régénération rapide, ainsi que d'une table de tranchage (slicer) optimisée. Le skill repose sur des bibliothèques spécialisées (trimesh, shapely, manifold3d pour la géométrie ; Pillow et numpy pour l'image) et inclut des fonctions de validation de maillage pour éviter les erreurs d'impression. Il est conçu pour être utilisé dans des environnements comme Claude Code ou tout assistant codant, et livre systématiquement un fichier STL, le script générateur, et des recommandations concrètes pour l'impression.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ezylevy/ezy-plugins/tree/HEAD/plugins/3d-stl/skills/3d-stl

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

3D STL

Deux points d'entrée, un standard de sortie : un STL étanche, un script paramétrique qui le régénère, et une table de tranchage qui garantit une impression réussie.

EntréeRouteBibliothèque
Dimensions, un objet décrit, un croquis en motsRoute géométriquescripts/partlib.py
Une photo ou un fichier imageRoute imagescripts/imagelib.py

Configuration pour la route géométrique :

pip install trimesh shapely manifold3d --break-system-packages -q

La route image nécessite uniquement Pillow et numpy — pas de bibliothèque de maillage, pas de booléens.


Route géométrique

1. Fixer les dimensions avant la modélisation

La majeure partie des reprises ici provient de l'ambiguïté, pas d'une mauvaise géométrie. Reformulez la pièce dans un petit tableau (dimension → valeur → source) et marquez tout ce que vous avez supposé. Surveillez particulièrement :

  • Taille extérieure vs. entraxes de montage. « 87 mm de large » et « 87 mm entre les vis » sont des pièces différentes — elles diffèrent d'une épaisseur de paroi. Demandez.
  • Une troisième dimension manquante. Un profilé plus une épaisseur ne donne que deux des trois ; choisissez une profondeur raisonnable, dites-le, et faites-en un indicateur.
  • Intention des fixations. « Vis de 5 mm » peut signifier des trous de dégagement pour des vis métalliques M5, des broches filetées imprimées, ou un insert à chaud. Trois modèles différents.
  • Matériel existant. Si la pièce s'accouple avec quelque chose qui existe déjà, son entraxe de trous et son épaisseur de matière sont des contraintes, pas des préférences.

Posez au maximum la ou les deux questions qui changent la géométrie ; supposez le reste, énoncez la supposition, et avancez.

2. Modéliser avec la bibliothèque

scripts/partlib.py fournit des constructeurs de profilés, extrude, threaded_rod, threaded_pin, hex_nut, place et finish. Importez-la plutôt que de réinventer le calcul de maillage — l'hélice du filetage est facile à obtenir de manière subtilement erronée.

scripts/example_handle.py est un exemple complet de pièce (poignée en pont + broches filetées intégrées + écrou correspondant). Copiez-le comme squelette pour une nouvelle pièce.

Écrivez le modèle comme un script paramétrique avec des flags argparse, jamais des nombres codés en dur. L'utilisateur demandera une variante dans les minutes qui suivent, et la réponse doit être une seule ligne de commande plutôt qu'un nouveau modèle. Remettez le script avec le STL.

3. Recettes de pièces courantes

PièceConstruite à partir de
Poignée en pont, support ⊓bridge_profile + extrude
Plaque plate avec trouspolygone shapely avec anneaux intérieurs + extrude
Broche, goujon, boulonthreaded_pin, puis place sur son axe
Écrou, douille filetéehex_nut, ou soustraire threaded_rod(clearance=…)
Entretoise, baguedeux cercles concentriques + extrude
Crochet, équerre en Lpolygone de la vue latérale + extrude, à plat sur le plateau
Boîtierboîte extérieure moins boîte intérieure ; rebord avec un jeu de 0,15 mm

Tout ce qui n'est pas listé reste un polygone, une extrusion et un booléen.


Route image

scripts/imagelib.py convertit une image en champ de hauteur et assemble un solide explicite en grille de sommets — surface supérieure, fond plat, quatre parois latérales. Il n'utilise pas de moteur booléen, ce qui explique pourquoi il ne tombe pas en panne sur des images grandes ou étranges.

python3 imagelib.py photo.jpg --mode lithophane --width 100 \
    --out stl_output/lithophane.stl
python3 imagelib.py logo.png --mode relief --width 80 --base 2 \
    --out stl_output/relief.stl
ModeCorrespondancez typique
reliefles pixels clairs montent0,6 → 4,0 mm, souvent sur une plaque --base
lithophaneles pixels foncés sont épais, donc cela brille en rétroéclairage0,8 → 3,0 mm, sans base
  • --res définit les échantillons sur le bord long (par défaut 200). Une résolution au-delà d'environ 0,4 mm par échantillon est gaspillée — la buse ne peut pas l'imprimer, et le fichier gonfle. Augmentez-la uniquement pour les grandes impressions.
  • Le contraste est automatiquement étiré au chargement ; une photo plate et à faible contraste produit une impression plate et décevante. Dites-le plutôt que de l'imprimer.
  • Les lithophanes préfèrent les visages et les sujets à fort contraste. Les paysages et les scènes chargées se transforment en bouillie.
  • check() vérifie que chaque arête apparaît exactement deux fois dans des directions opposées. Un simple comptage laisserait passer une paroi cousue à l'envers, ce qui produit un STL « valide » que le slicer retourne. Exécutez-le, signalez-le.

Finitions, pour les deux routes

Vérifiez d'abord : finish() (géométrie) et check() (image) rapportent la boîte englobante, l'étanchéité et le nombre de triangles. Comparez la boîte englobante avec les dimensions demandées — cela détecte immédiatement les erreurs de signe et de conversion d'unités. Ne présentez jamais un maillage qui n'est pas étanche.

Pour tout ce qui n'est pas visuellement évident — filetages, courbes, assemblages — effectuez un aperçu rapide avec matplotlib et regardez-le. Vingt secondes valent mieux qu'une impression de six heures d'une mauvaise forme.

Lisez references/design-rules.md avant de choisir l'orientation, le pas de vis ou les jeux. Il couvre la résistance dans le sens des couches, les profils de filetage imprimables, les tolérances d'ajustement, les pièces dérivées d'images et les modes de défaillance qui méritent d'être nommés.

La réponse doit contenir :

  1. Un tableau des dimensions, y compris les valeurs supposées.
  2. Toute décision prise pour le compte de l'utilisateur, avec sa raison. Si une fonctionnalité demandée est mécaniquement fragile, construisez ce qu'ils ont demandé et nommez la faiblesse avec une alternative concrète — ne remplacez jamais en silence.
  3. Une table de tranchage : hauteur de couche, parois, remplissage, supports (exactement où), matériau, et quelle face va sur le plateau et pourquoi.
  4. La commande en une ligne pour régénérer avec des nombres différents.
  5. Tout ce qui doit être confirmé avec le matériel existant avant impression.

Livrez les fichiers STL dans /mnt/user-data/outputs/ sur claude.ai, ou dans un dossier stl_output/ dans le répertoire de travail courant dans Claude Code, et présentez-les avec le script générateur. Les scripts se trouvent dans le dossier scripts/ de ce skill ; appelez-les par leur chemin complet ou copiez-les à côté du script de la pièce. Sur Windows, utilisez python au lieu de python3.

Assemblages multi-pièces

Lorsque des pièces s'accouplent (broche et écrou, couvercle et boîte, moitiés de charnière) :

  • générez les deux à partir de paramètres partagés dans un seul script — une valeur de jeu qui vit dans deux fichiers dérivera
  • dérivez la pièce femelle à partir de la même fonction que la pièce mâle, décalée d'un jeu, afin qu'elles ne puissent pas diverger
  • indiquez combien de chaque pièce imprimer, et suggérez une pièce de rechange pour la petite
  • lorsqu'un ajustement est incertain, proposez un test de tolérance : imprimez la petite pièce avec deux jeux et gardez celui qui tourne.

Skills associés