CommunityImagegithub.com

image-to-sculpt

Transforme une image (IA, rendu, photo d'une figurine ou d'un produit, dessin, ou simple idée) en une sculpture 3D étanche, vérifiée par rapport à l'image de référence et enregistrée étape par étape dans Blender.

Qu'est-ce que image-to-sculpt ?

Ce skill transforme une image unique de n'importe quel sujet en une sculpture 3D étanche et vérifiable dans Blender. À partir de l'image d'entrée, il extrait des cartes de profondeur, des normales et un masque de silhouette. Il génère ensuite des vues des faces cachées (jusqu'à 9 vues) qui sont recalées entre elles, puis construit un volume visuel par carvage et ajuste la surface par passes successives en minimisant l'erreur sur les normales, la silhouette et la profondeur de l'image source. Tout le processus (étapes de construction, ajustements, coupes) est enregistré et rejouable dans Blender, avec export final en GLB, OBJ, STL, et un timelapse vidéo. Le skill est fourni avec un CLI Python (`scripts/i2s.py`) qui orchestre les appels API, la registration, le carving, les vérifications et la production des rapports. Il est conçu pour les développeurs ou artistes 3D souhaitant obtenir un modèle prêt à l'emploi à partir d'une seule image, avec une preuve de fidélité à l'image de référence.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gokayfem/image-to-sculpt/tree/HEAD/skills/image-to-sculpt

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

Image en Sculpture (Image 2 Sculpt)

Une image en entrée, une sculpture en sortie que vous pouvez prouver : chaque surface visible sur l'image est ajustée aux normales, au contour et à la profondeur de cette image dans sa propre caméra. Chaque surface cachée provient de vues générées qui ont d'abord dû s'accorder entre elles. Chaque étape de la construction est enregistrée et rejouée dans Blender.

Routage des entrées

Toute entrée aboutit à la même structure de cas (i2s.py new CASE --input ...). Détails : references/inputs.md.

EntréeActionRemarques
Rendu d'un personnage/créature/objet ou image IAnew → runle chemin principal
Photo d'un objet réel (figurine, jouet, produit, statue)new --kind photo → runMoGe donne la focale et la profondeur réelles
PNG détouré avec transparencenew → runle canal alpha sert de masque ; pas d'appel de masque
Image chargée avec plusieurs élémentsprep --select "le dragon rouge"SAM-3 sélectionne le sujet
Dessin, croquis ou illustration simpleprep --restylenano banana le transforme d'abord en rendu 3D, en conservant la pose
Plusieurs photos du même objetviews --import DOSSIERvos photos remplacent les vues générées ; angles trouvés par recalage
Seulement une idéeimagine OUT.png "idée" → newun rendu complet et net pour commencer
Pas de clé APIun PNG détouré (+ vos propres vues)le travail en face avant fonctionne aussi : la silhouette est gonflée, la profondeur derrière est une estimation

Workflow

À chaque point de contrôle, affichez une image étiquetée (checks/sheet_*.png, la feuille de vues, une image du tourne-disque) : les images d'abord, les chiffres ensuite. Les corrections ajoutent des étapes ; rien de ce qui est enregistré n'est jamais modifié.

  1. Structure du dossier. i2s.py new CASE --input IMG --subject "courte phrase nominale". Regardez l'image et écrivez vous-même la phrase de sujet ("troll cartoon trapu", "figurine de hibou en céramique") : elle sera utilisée dans chaque prompt de vue. L'entrée est copiée avec son sha256 et remplie au rapport d'aspect du générateur le plus proche, de sorte que toutes les vues partagent le même objectif.
  2. Cartes avant. i2s.py prep CASE (masque, profondeur MoGe-3 + focale, normales Marigold ; unités normalisées par rapport au sujet). Vérifiez ref/front_mask.png et ref/front_normales.png avant de continuer. Mauvais sujet sélectionné → --select. Dessin → --restyle.
  3. Vues. i2s.py views CASE (9 vues + 1 mise de côté, ~2$ estimés ; --set minimal pour 5). Examinez chaque image générée : une pose modifiée, un membre supplémentaire ou un sujet coupé est une mauvaise vue. Le recalage rejettera les vues qui ne s'accordent pas (IoU < 0,80 par rapport à la coque des autres), mais dites ce que vous avez vu. Les régions qu'aucune vue ne voit nécessitent de nouvelles vues sous des angles qui les regardent (--angles "-30:25"), pas plus de lissage (references/views.md).
  4. Coque. i2s.py hull CASE : recalage de chaque vue (l'angle demandé n'est qu'un a priori : les inversions gauche/droite sont détectées, l'avant/arrière est conservé), recentrage, filtrage, le carvage enregistré, détection de symétrie. Lisez les angles recalés dans case.json ; i2s.py symmetry CASE on|off annule le plan de symétrie détecté.
  5. Ajustement. i2s.py fit CASE --stage all (formes → surface → détail, 38 passes enregistrées), puis cut (ouvre les espaces entre les doigts, les jambes, le bras et le corps que la photo montre), smooth (supprime les toiles et les taches), fit --stage polish. i2s.py run CASE exécute les étapes 2 à 8 dans l'ordre avec ce plan par défaut (references/fitting.md).
  6. Vérification et itération. i2s.py check CASE écrit une feuille par vue : référence, normales de référence, sculpture, erreur de normales, différence de silhouette. Cherchez les bosses, les toiles, les espaces manquants, les caractéristiques aplaties. Ciblez-les : parts CASE --prompt "mains" puis fit --stage focus --region mains, cut --region mains, smooth --region box:... (references/checking.md). Ne prétendez jamais avoir corrigé sans la feuille avant/après.
  7. Fin, Blender, films. finish (lissage des facettes, OBJ/STL), blender (chaque étape rejouée depuis la caméra de la photo, tourne-disque 360°, chaque vue, sculpt.blend, GLB), film (timelapse à deux panneaux qui se termine par le tour 360°, tourne-disque, feuille de vues, image hero) (references/blender-and-delivery.md).
  8. Rapport et arrêt. report écrit out/REPORT.md, out/index.html et le graphique par étape. Présentez le timelapse, la feuille de vues et le tableau mesuré, dites ce qui est faible, et arrêtez-vous. L'utilisateur décide de la suite.

Règles impératives

  • La photo régit ce qu'elle voit. Les vues générées ne remplissent que là où la photo ne voit pas ; leur profondeur n'est jamais utilisée (elle diffère de plusieurs centimètres entre les vues). Ne faites jamais la moyenne des normales d'une vue générée sur celles de la photo.
  • Recalez chaque vue ; ne faites jamais confiance à l'angle demandé. Les vues générées étaient décalées de 20 à 155° sur le troll, principalement des inversions gauche/droite. La recherche autorise ces inversions mais garde les vues avant devant et les vues arrière derrière (le dos d'un sujet symétrique a la même silhouette que son avant). Lisez les angles recalés dans case.json.
  • Filtrez avant de carver. Une vue qui ne s'accorde pas avec les autres montre un sujet ou une pose différents : rejetez-la (et dites-le) plutôt que de couper la sculpture avec elle.
  • Gardez une vue de côté. Elle ne déplace jamais la surface ; sa caméra est figée avant l'ajustement. Faites-en un rapport séparé des vues utilisées pour l'ajustement. Elle aussi est générée, donc elle mesure la cohérence, pas la vérité.
  • Mesurez, ne vous fiez pas qu'à l'œil. IoU, distance de contour, angle des normales, rugosité par rapport à la rugosité de la référence, profondeur de la photo. Un seul nombre ne représente jamais la "qualité" : rapportez-les côte à côte.
  • Les champs de distance restent exacts. Chaque opération re-distance la grille (distances exactes aux triangles dans une bande, EDT au-delà). Décaler un champ inexact, refléter le champ lui-même ou flouter les cibles de normales a créé des marches, des anneaux de moiré et des nez aplatis dans le cas sur lequel cela a été construit (references/lessons.md).
  • Enregistrez tout. Chaque carvage, passe, coupe et lissage est une étape dans build/steps/ et build/log.jsonl, rejouée dans Blender et montrée dans le timelapse. Ne modifiez jamais une étape enregistrée ; ajoutez-en une nouvelle.
  • Appels payants : chaque appel fal passe par le budget du cas (settings.budget_usd), son identifiant de requête est sauvegardé dans case.json avant d'attendre, et rien n'est soumis aveuglément. FAL_KEY n'est jamais imprimé ni écrit.
  • Retour visuel à chaque point de contrôle, et l'image 0 de chaque film est une vignette terminée.
  • Dites ce qui est inventé. Le dos d'un sujet vu seulement de face est une estimation du générateur.

Références

FichierLire quand
references/inputs.mdroutage d'une entrée inhabituelle ; masques, restyle, sélection, photos importées, idée seule
references/views.mdgénération, évaluation, recalage, filtrage et ajout de vues
references/fitting.mdce que fait une passe, étapes, paramètres, cut / smooth / focus, le plan par défaut
references/checking.mdlecture des feuilles de cartes et des métriques, la vue mise de côté, quoi corriger ensuite
references/blender-and-delivery.mdrejeu Blender, films, exports, le rapport, la page de révision
references/conventions.mdrepère monde, caméras, unités, formats de fichiers (pour écrire de nouveaux outils)
references/lessons.mdce qui a mal fonctionné sur les premiers cas et pourquoi les règles ci-dessus existent

Modèles : templates/CONTRACT.md (copié dans chaque cas), templates/acceptance.json (cibles).

Skills associés