CommunityImagegithub.com

Créateur de plans

Transforme un modèle 3D ou une image en plan technique fini, avec lignes cachées, cotes, repères et cartouche.

Qu'est-ce que Créateur de plans ?

La compétence accepte un GLB, glTF, OBJ, STL ou une photo, un rendu, un dessin ou un logo, puis le compose en plan ou en fond d'écran technique. Les styles bleu, graphite ou papier ajoutent lignes cachées, cotes, repères numérotés, tableau de specs et remarques. À utiliser quand le livrable doit se lire comme un dessin coté.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shrugg0/blueprint-maker/tree/HEAD

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

Blueprint Maker

Génère une planche de style blueprint (PNG, 1920x1080 par défaut) à partir de :

  • un modèle 3D -> vraies vues orthographiques avec lignes cachées : une grande vue 3/4 plus des vues latérale, de dessus et de face avec des lignes de cote mesurées (pipeline 3D), ou
  • une image 2D -> extraction de lignes avec contour de silhouette, dimensions de boîte englobante et légendes (pipeline 2D).

Les deux pipelines partagent un moteur de mise en page commun (cadre, panneaux, cartouche, ajustement du texte) afin que le résultat soit identique.

Ce qu'il peut et ne peut pas faire (dites-le à l'utilisateur le cas échéant)

  • Pas de fichier, pas de blueprint. Un objet décrit uniquement avec des mots ne peut pas être transformé en dessin précis. Demandez un modèle 3D ou une image. N'inventez pas de géométrie.
  • La 3D donne de vraies vues orthographiques ; la 2D ne le peut pas. Une seule photo a un seul point de vue, donc le pipeline 2D produit une seule vue en line art, pas de vues de face/côté/dessus.
  • La qualité des lignes dépend du maillage/de l'image. Les maillages extraits de jeux avec des centaines de milliers de triangles donnent des lignes denses ; c'est une bonne base automatique, pas une qualité d'illustration artisanale.
  • L'échelle est inconnue à moins que l'utilisateur ne la donne. Les dimensions sont en unités de modèle (u) ou en pixels (px) sauf si un scale_ref (une mesure réelle) est fourni. Ne présentez jamais une taille réelle devinée comme un fait.
  • Polices : le rendu de texte intégré utilise DejaVu (latin, grec, cyrillique). Le texte CJK/Arabe/Hébreu ne s'affichera pas correctement.
  • La mise en page est conçue pour le 16:9 (testé en 1920x1080, 2560x1440 et 1920x1200). D'autres ratios d'aspect étirent la disposition des panneaux ; vérifiez la sortie.
  • Les ressources extraites de jeux/films sont la propriété intellectuelle de quelqu'un. Très bien pour un fond d'écran personnel ; mentionnez de ne pas les redistribuer.

Étape 0 - Rassemblez les entrées (demandez une seule fois, uniquement ce qui manque)

  1. Le fichier (modèle ou image).
  2. Le nom de l'objet et une description - ou proposez de la rédiger. La description doit correspondre à ce qui se trouve réellement dans le rendu (regardez-le d'abord). Une description d'un véhicule à roues sur une créature à quatre pattes détruit la crédibilité de la planche ; si le texte de l'utilisateur ne correspond pas à la géométrie, dites-le et réécrivez-le.
  3. La résolution de sortie et la zone de sécurité supérieure s'il s'agit d'un fond d'écran (une barre de bureau couvre le haut). Par défaut top_safe = 76 (le cadre commence 76 px plus bas en 1080p, laissant de la place pour une barre d'environ 1 cm sur un ordinateur portable). Si l'utilisateur donne des centimètres, convertissez : px_per_cm = largeur_écran_px / largeur_écran_cm (environ 36 px/cm sur un moniteur 24" 1080p, environ 56 px/cm sur un ordinateur portable 15,6"). Utilisez la hauteur de la barre en px + ~12.
  4. Style : blueprint (par défaut, bleu), graphite (foncé avec des lignes orange), paper (clair, imprimable).
  5. Langue du texte (anglais par défaut ; écrivez le texte de la spécification dans cette langue).

N'interrogez pas l'utilisateur : s'il en a déjà donné assez, poursuivez avec les valeurs par défaut et énoncez vos hypothèses.

Étape 1 - Configuration

pip install trimesh numpy scipy networkx pillow opencv-python-headless matplotlib --break-system-packages -q
# facultatif, uniquement pour les maillages > 700k faces : pip install fast-simplification --break-system-packages

Tous les scripts se trouvent dans scripts/ à côté de ce fichier. Remplacez SKILL_DIR par le dossier de la compétence.

Étape 2A - Modèle 3D

Inspectez (faites-le toujours en premier - une image, une commande)

python3 SKILL_DIR/scripts/blueprint3d.py inspect MODEL.glb --out /home/claude/insp

Ouvrez inspect.png avec view (c'est une seule planche contact) et lisez le texte imprimé :

  • Ligne du haut = projections brutes des axes : déterminez quel axe brut est vers le haut et dans quelle direction l'objet fait face.
  • Bas = la vue 3/4 avec candidats d'ancrage numérotés (jaune). La console liste chaque cand N avec sa position en pixels et canonique. La grille discrète est en pixels de référence 1500x860 (utilisable comme pick).

Indicateurs d'orientation (cadre canonique : +y vers le haut, l'avant de l'objet vers -x) : --up +Y (par défaut pour GLB/glTF ; +Z pour les autres formats) et --front -X|+X|+Z|-Z|.... L'indice imprimé nomme l'axe horizontal le plus long ; l'avant doit être à GAUCHE de la vue latérale, donc inversez le signe si la tête/l'avant est de l'autre côté. Si l'orientation était erronée, réexécutez inspect une fois avec d'autres valeurs. Mettez les valeurs finales dans la spécification sous les noms "up" et "front".

inspect prend également --az, --el (par défaut 58 / 20) et --k (nombre de candidats, par défaut 16). Utilisez les mêmes az/el de view dans la spécification, sinon les numéros de candidats ne correspondront pas.

Écrivez la spécification

Créez spec.json (schéma ci-dessous, exemple fonctionnel dans assets/example_spec_3d.json). Pour chaque légende, donnez un titre, une courte description et un point d'ancrage :

  • "cand": N - un candidat numéroté de inspect.png (le moins cher : pas de devinette de pixel). Les candidats sont répartis sur la surface visible, vérifiez donc que le point se trouve vraiment sur la partie que vous nommez ; si aucun candidat n'est assez proche, utilisez pick.
  • "pick": [px, py] - pixel dans la vue de référence 1500x860 (la grille dans inspect.png)
  • "extreme": "+x" | "-x" | "+y" | "-y" | "+z" | "-z" - point extrême dans le cadre canonique (l'avant est -x ; peut être caché derrière la géométrie)
  • "point": [x, y, z] - coordonnées canoniques exactes

Ne définissez pas "label" sauf si nécessaire : les positions des étiquettes sont ensuite choisies automatiquement (texte maintenu à l'écart de la silhouette du modèle et des autres étiquettes, colonnes ordonnées sur les côtés du panneau, repères courts sans croisement). "label": [x, y] (coordonnées de référence 1920x1080, panneau principal x 40-1290, y 96-826) force une position manuelle et est vérifié par l'audit ci-dessous.

Construisez

python3 SKILL_DIR/scripts/blueprint3d.py build MODEL.glb spec.json --out /mnt/user-data/outputs/blueprint.png

Les vues peintes sont mises en cache sur le disque (~/.cache/blueprint-maker, ou $BP_CACHE), indexées par modèle + vue + style. Changer le texte, les étiquettes, les légendes ou le contenu indépendant de la palette reconstruit en environ 2 s au lieu de repeindre ; --no-cache ou "cache": false désactive cela.

Mises en page : "layout": "multi" (par défaut : grande vue 3/4 + vues latérale/dessus/face + dimensions) ou "single" (juste la vue 3/4, plus large).

Verrouillage de la spécification (liaison entre la spécification et le modèle)

Les ancres écrites sous forme de cand, pick ou extreme n'ont de sens que pour le modèle, l'orientation et la vue sur lesquels elles ont été choisies. La première construction écrit <spec>.lock.json à côté de la spécification : le point 3D auquel chaque ancre a été résolue, une empreinte géométrique du modèle et les paramètres qui influencent les ancres (up, front, az/el de la vue, candidates, max_faces). Chaque construction ultérieure résout à nouveau les ancres et compare :

  • ancres déplacées (modèle, orientation ou vue différent(e)) -> la construction échoue avec error: spec is not bound to this model ..., nommant chaque légende et ce qui a changé. Réexécutez inspect avec les paramètres de la spécification, re-sélectionnez les ancres, puis construisez avec --relock (ou restaurez le modèle/paramètres d'origine) ;
  • modèle différent mais chaque ancre se trouve toujours au même endroit (par exemple une ré-exportation sans perte) -> WARNING: binding: ... ; vérifiez, puis --relock ;
  • vous avez modifié une ancre intentionnellement (mêmes modèle/paramètres) -> l'entrée de verrouillage est mise à jour silencieusement.

--no-lock ignore la vérification (déconseillé). Conservez le fichier de verrouillage avec la spécification (validez-le). Ne « corrigez » jamais une erreur de liaison en l'ignorant : les étiquettes pointeraient vers les mauvaises parties.

Étape 2B - Image 2D

python3 SKILL_DIR/scripts/blueprint2d.py inspect IMAGE.png --out /home/claude/insp

Lisez la couverture du masque imprimée (la suppression de l'arrière-plan fonctionne pour les arrière-plans unis ou les PNG transparents ; sinon elle signale "none"), puis view inspect.png : à gauche = la source avec une grille étiquetée en pixels source (pour point_px), à droite = ce que l'extracteur de lignes voit. Les étiquettes de légende sont également placées automatiquement ici (omettez "label").

Écrivez spec.json (voir assets/example_spec_2d.json) et construisez :

python3 SKILL_DIR/scripts/blueprint2d.py build IMAGE.png spec.json --out /mnt/user-data/outputs/blueprint.png

Réglages : "detail" 0.3 (propre, gras) à 0.8 (chargé) ; "mode": "edges" (Canny, photos/rendus) ou "sketch" (XDoG, art doux/faible contraste) ; "bg": "none" pour conserver tout le cadre, ou "mask": "path.png" pour une silhouette artisanale ; "crop": [x0,y0,x1,y1] pour isoler le sujet ; "fill" 0-1 pour la teinte translucide du corps.

Étape 3 - Vérifiez le résultat (ne sautez pas, mais restez économique)

Le constructeur imprime les lignes WARNING:. Lisez-les d'abord - il s'agit d'un audit automatique, vous n'avez donc généralement besoin de view le PNG qu'une seule fois, à la fin :

  • error: spec is not bound to this model - voir « Verrouillage de la spécification » ci-dessus ; c'est un échec dur, pas un avertissement.
  • layout: ... - texte de légende chevauchant le modèle, deux étiquettes qui se chevauchent, un repère qui croise le texte d'une autre étiquette / un autre repère / son propre texte, texte en dehors du panneau, texte sur la triade d'axes. Corrigez en supprimant le "label" manuel (laissez le placeur décider), en changeant l'ancre ou en raccourcissant le texte.
  • description / specs / notes: shrunk to Npx ou does NOT fit - raccourcissez le texte ou supprimez des lignes plutôt que d'accepter un texte illisible.

Ensuite, view le PNG final une fois et vérifiez ce que l'audit ne peut pas savoir :

  1. Modèle droit et orienté comme prévu dans toutes les vues ; dimensions plausibles.
  2. Chaque point de légende se trouve vraiment sur la partie que son texte nomme.
  3. La zone de sécurité supérieure est vide (utilisation comme fond d'écran).

Si quelque chose ne va pas, modifiez la spécification (ancres, view.az/view.el, longueur du texte, feature_deg) et reconstruisez ; avec le cache, cela prend quelques secondes. Total typique : 1 inspect + 1-2 constructions, 2-3 vues d'images.

Étape 4 - Livrez

Enregistrez dans /mnt/user-data/outputs/, appelez present_files, puis répondez brièvement. Dans la réponse, indiquez toujours :

  • les textes que vous avez inventés (descriptions, spécifications, remarques, fonctions de légende) par rapport à ce qui est mesuré à partir du fichier - l'utilisateur doit remplacer les affirmations techniques inventées qui lui tiennent à cœur ;
  • l'hypothèse d'unités/échelle ;
  • tout WARNING ou limitation visible (lignes denses, ancre cachée, ratio d'aspect).

Garder l'utilisation de jetons faible

  • Une image inspect, une view finale ; fiez-vous à l'audit imprimé plutôt que de revoir après chaque ajustement.
  • Utilisez des ancres cand et omettez label ; ne réglez pas manuellement les coordonnées des pixels.
  • Écrivez la spécification une fois, complètement (ancres, textes), puis construisez ; ne modifiez que les champs que l'audit ou la vue finale a signalés.

Rédaction du texte d'annotation

  • Décrivez uniquement ce qui est visible dans les rendus ; gardez les affirmations fonctionnelles plausibles et génériques. Si l'objet provient d'une franchise, n'indiquez pas de détails de lore dont vous n'êtes pas sûr.
  • Titres de légende : 2-4 mots. Texte de légende : une phrase courte (environ 70 caractères). Notes : 3-5 éléments courts. Description : environ 600-700 caractères. Lignes de spécification : valeur sous ~45 caractères.
  • Restez technique et cohérent : désignation, numéro de spécification, révision, unités.

Référence de spécification

Clés communes (les deux pipelines) :

clésignificationdéfaut
titlegrand titre dans le cartouche"UNTITLED"
subtitleligne sous le titre""
designationligne en gras en haut de la zone de description""
descriptionparagraphe pour la zone de description(zone omise)
specs[["Label","Value"], ...] pour le tableau des spécifications(omis)
notesliste de chaînes pour la zone des remarques (A, B, C...)(omis)
notes_titleen-tête de cette zone"DESIGN REMARKS" / "NOTES"
calloutsliste d'objets de légende (ci-dessous)aucun
spec_no, class, rev, sheet, scalechamps du cartouche (les champs vides sont ignorés)feuille "01 / 01", échelle "AS SHOWN"
fieldsremplacement complet des champs du cartouche : [["KEY","value"], ...]auto
width, heighttaille de sortie en px1920, 1080
top_safey (en 1080p) où le cadre commence ; laissez une barre de bureau dégagée76
paletteblueprint, graphite, paperblueprint
scale_ref`{"axis": "lengthheight

Uniquement 3D : up, front, layout (multi/single), view {"az": 58, "el": 20, "margin": 0.045}, candidates (k utilisé pour cand, défaut 16 ; doit être égal à inspect --k), feature_deg (seuil d'angle d'arête, défaut 38 ; augmentez à 50-60 pour moins de lignes), feature_deg_small (défaut 44, vues latérale/dessus/face), max_faces (défaut 700000), cache (défaut true).

Uniquement 2D : mode, detail, bg, mask, crop, fill, fit_subject (recadrer sur le sujet, défaut true), view_title, view_sub.

Objet de légende : {"title": "...", "desc": "..."} plus l'ancre - 3D : cand / pick / extreme / point ; 2D : point_px: [x, y] en pixels de l'image source - et éventuellement "label": [x, y] pour forcer une position manuelle.

Dépannage

  • Modèle de travers / à l'envers / tourné dans l'autre sens : réexécutez inspect avec --up / --front ; vérifiez la ligne du haut de inspect.png.
  • Juste un blob gris de lignes : augmentez feature_deg (50-65) ; pour un maillage très dense, définissez également max_faces plus bas (nécessite fast-simplification).
  • Pièces manquantes ou trous transparents : le maillage n'est pas étanche ou a des faces inversées ; le rendu de l'algorithme du peintre tolère cela, mais les parties internes des assets de jeu peuvent apparaître. Abaissez view.margin, ou essayez un az différent.
  • Très lent : les maillages au-dessus de ~700k faces sont simplifiés automatiquement si fast-simplification est installé ; sinon, une construction peut prendre des minutes.
  • Masque 2D erroné ou fragmenté : la couleur du sujet est trop proche de l'arrière-plan. Utilisez "bg": "none", un crop, ou fournissez un PNG mask (blanc = sujet).
  • Avertissements de texte : raccourcissez le texte ; ne réduisez pas les tailles de police manuellement.
  • Les numéros de candidats ne correspondent pas à l'image / spec is not bound to this model : le fichier modèle, up/front, la spécification view az/el ou candidates diffèrent de ceux pour lesquels la spécification a été écrite. Réexécutez inspect avec les paramètres de la spécification, re-sélectionnez les ancres, construisez avec --relock.
  • Le placement automatique des étiquettes échoue toujours ("no collision-free position") : trop de légendes ou trop longues pour le panneau ; raccourcissez les descriptions, supprimez des légendes ou utilisez "layout": "single" pour un panneau plus large.
  • Sortie obsolète après avoir modifié les scripts : la clé de cache inclut le code du rendu, mais en cas de doute, exécutez une fois avec --no-cache.

Fichiers

  • scripts/binding.py - verrouillage de la spécification (gère le fichier .lock)
  • scripts/blueprint3d.py - pipeline 3D (inspect + build)
  • scripts/blueprint2d.py - pipeline 2D (inspect + build)
  • scripts/layout.py - moteur de mise en page partagé (cadre, panneaux, cartouche, texte)
  • assets/ - exemples de spécifications et polices

Skills associés