Que fait Générateur de patrons de couture ?
Conçoit des patrons de couture paramétriquement (règles de construction, pas de génération d'images), vérifie qu'ils peuvent être cousus et produit des fichiers d'impression, un plan de coupe, la consommation de tissu et des instructions de couture. Tous les fichiers générés sont en anglais. Répondez à l'utilisateur dans la langue dans laquelle il écrit.
Constructions personnelles uniquement : ne jamais reconstruire ou copier des patrons commerciaux protégés. Lorsque l'utilisateur présente un vêtement de créateur, créez un patron original dans un style similaire pour un usage privé.
Installation (une fois)
pip install -r requirements.txt # numpy scipy shapely opencv-contrib-python-headless reportlab matplotlib pillow pypdf
Tous les scripts se trouvent dans scripts/ et sont appelés depuis ce répertoire ou avec leur chemin.
Flux de travail
1. Comprendre la demande
Identifiez : le vêtement et ses variantes, la taille ou les mesures, le tissu et son élasticité, l'aisance, le format de sortie. Photos ? → étape 3.
2. Questions : exactement UN tour, uniquement ce qui manque vraiment
Posez les points manquants en un seul message court, chacun avec une valeur par défaut (« Si vous ne dites pas le contraire, j'utiliserai … »). Éléments typiques :
- Vêtement et variantes (poches, poignets, longueur, capuche …)
- Taille (enfants 86–176, femmes 34–56, hommes 44–60) ou mensurations corporelles (taille, tour de poitrine, tour de taille, tour de hanches, entrejambe, longueur de côté, longueur de bras, tour de tête)
- Tissu (tissé / jersey / jersey avec élasthanne / interlock / sweat / polaire) et élasticité en %
- Aisance (ajusté / normal / large / surdimensionné ; pour les pantalons aussi sarouel)
- Format de sortie : rouleau (largeur en mm, défaut 610), A0, A1, A4 ou US Letter à assembler
- Machines : avec quelles machines ils cousent : machine à coudre (point zigzag ? point stretch ? ou point droit uniquement), aiguille double, surjeteuse, recouvreuse. Ignorez la question si le fichier d'atelier les contient déjà (
python scripts/profiles.py machines show) ou s'ils les ont déjà nommées. Défaut s'ils ne disent rien : une machine à coudre domestique avec point zigzag. - Marge de couture uniquement si cela compte pour eux (par défaut 1 cm, ourlets 2–2,5 cm ; avec une surjeteuse sur du jersey 7,5 mm automatiquement, 1,5 cm pour du tissé sur une machine à point droit uniquement, ou « aucune » pour tracer et ajouter la leur)
Ne demandez pas à nouveau ensuite ; résolvez tout point flou avec une valeur par défaut raisonnable et mentionnez-la dans le résultat.
Vêtements de poupée (poupée en tissu, peluche, poupée de mode ; hauteur 20–100 cm) : demandez plutôt la hauteur de la poupée (tête aux pieds) et, mesurés avec un mètre ruban ou une ficelle autour de la poupée : tour de poitrine, tour de taille, tour de hanches, tour de tête, longueur de bras (épaule à poignet), entrejambe et longueur de côté (taille à la plante des pieds). Seule la hauteur est obligatoire ; les valeurs manquantes suivent les proportions typiques des poupées en tissu. Ensuite : generate.py --doll --garment dress --measures '{"height": 45, "chest": 30, …}' (spécification "doll": true). Pris en charge : dress, skirt, pants_basic, tshirt_basic. Valeurs par défaut pour poupée (chacune peut être modifiée) : marge de couture 6 mm (5 mm pour moins de 30 cm), ourlets 10 mm, tissu tissé, aisance large, hauts et robes entièrement ouverts dans le dos (velcro/pressions, car une tête rembourrée passe rarement dans une encolure) avec une encolure liée par biais, pantalons avec un étroit tunnel élastique, pas de poches/poignets. Recommandez du coton fin, un point court et un produit anti-effilochage. Une poupée reçoit un profil avec profiles.py save rosa --measures '{…}' --kind doll. Détails : scripts/doll.py, references/size_tables.md (« Doll clothes »).
Machines : passez-les avec --machines sewing,overlocker,coverstitch (clés : sewing = point droit + zigzag, straight_only, stretch_stitch, twin_needle, overlocker, coverstitch ; les noms allemands comme Overlock, Coverlock, Zwillingsnadel fonctionnent aussi ; champ de spécification machines). Les machines appartiennent à la personne qui coud, donc la première fois qu'elles sont nommées, enregistrez-les une fois pour tous les futurs patrons : python scripts/profiles.py machines set sewing,overlocker (fichier d'atelier profiles/_machines.json ; un profil de mesures peut avoir ses propres --machines, et --machines prévaut sur les deux). Effets : les coutures en jersey à la surjeteuse obtiennent une marge de 7,5 mm (le couteau coupe), les coutures en tissé sur une machine à point droit uniquement 15 mm pour des coutures françaises (une --seam-allowance explicite prévaut toujours ; les vêtements de poupée conservent leurs 6 mm) ; chaque étape de couture et d'ourlet nomme la machine et le point ; les instructions obtiennent un tableau « Vos machines » (point, largeur/longueur, aiguille par type d'étape) et des conseils pour ce qui manque (par exemple une aiguille double au lieu d'une recouvreuse). Sans surjeteuse, rien ne manque : les coutures en jersey utilisent un zigzag étroit/point stretch. Un jersey sur une machine à point droit uniquement fonctionne mais est fragile : suggérez un tissu tissé ou la double rangée de longs points droits décrite dans les instructions. Pas de machine à coudre du tout (uniquement une surjeteuse) : --machines overlocker,hand (ou overlocker_only ; hand sans aucune clé de machine à coudre signifie « pas de machine à coudre »). Alors chaque couture est surjetée (marge de 7,5 mm, tissu tissé aussi) et chaque étape de point droit est faite à la main : surpiqûre → point arrière, ourlets/tunnels → point invisible, bâti → point de bâti, point d'arrêt à la main, extrémités d'élastique → une boîte de points à la main ; les étapes ajoutent des astuces pour la surjeteuse (épingles retirées avant le couteau, courbes lentement, chaînes de fil). Dans la réponse, mentionnez en une ligne comment le patron a été adapté à leurs machines.
Profils de mesures : lorsque l'utilisateur donne des mensurations pour une personne, proposez une fois de les sauvegarder (python scripts/profiles.py save lena --measures '{…}' --kind child). Les demandes ultérieures comme « un pantalon pour Lena » n'auront alors plus besoin de questions sur les mesures : generate.py --profile lena … (avertit si les mesures d'un enfant datent de plus de 6 mois ; voir references/size_tables.md).
3. Photos (optionnel)
Décidez d'abord quel mode s'applique (détails : references/photo_guide.md) :
Mode A : photo d'inspiration (portée, catalogue, Pinterest). Regardez la photo et remplissez le JSON des caractéristiques (schéma dans scripts/photo_analyze.py, chaque caractéristique avec value et confidence 0–1). Ensuite :
python scripts/photo_analyze.py features.json # texte de confirmation + module/options + « non couvert »
python scripts/photo_analyze.py --image flatlay.jpg # silhouette de pantalon automatiquement (proportions uniquement)
Affichez la liste des caractéristiques avec les confiances et demandez à l'utilisateur de confirmer (« Je vois … est-ce correct ? »). Nommez ouvertement les caractéristiques non couvertes et proposez l'alternative que le script imprime ; n'improvisez pas. Les mensurations corporelles viennent toujours de l'utilisateur, jamais d'une photo d'inspiration.
Mode B : copier un vêtement (posé à plat, photographié droit d'en haut, avec la carte de référence assets/reference-card.pdf ou un mètre pliant) : rétro-ingénierie.
cd scripts && python -m reverse.pipeline photo.jpg --type pants --out project/
Résultats : overlay_measurement.png (contour et mesures détectés ; montrez-le à l'utilisateur pour confirmer), reverse_report.md (graphe pièce/couture, rapport cible/réel/Δ écart, vérification de cousabilité) et project.json (conservez-le pour « comme la dernière fois, 2 tailles au-dessus » → reverse.pipeline.regrade("project.json", 2)). Les valeurs du mètre ruban fournies par l'utilisateur prévalent : photo_measure.measure(..., tape={"inseam": 48}). Si la carte est absente, la compétence dit exactement quoi faire. Les photos manquantes (par exemple pour la courbe d'enfourchure) sont listées par reverse.decompose.missing_photos. Tolérance : longueurs ± 1 cm, largeurs ± 2 %. Ensuite les fichiers d'impression :
python scripts/generate.py --project project/project.json --format roll610,a4 --out out/copy
Les vêtements de poupée peuvent aussi être copiés : ajoutez --doll (reverse.pipeline.run(..., doll=True)) ; le résultat a les marges pour poupée et une ouverture dans le dos, et generate.py --project l'imprime. Les hauts de poupée se mesurent mieux avec des manches longues (manches de poupée très courtes et larges : prenez la largeur de la manche avec un mètre ruban). Le mode B fonctionne pour les pantalons (--type pants) et pour les T-shirts / hauts raglan (--type top, module tshirt_basic). Pour les hauts, la photo donne la largeur de poitrine et d'ourlet, la longueur, la profondeur d'emmanchure, l'encolure avant (largeur et profondeur), la profondeur d'encolure arrière, le point d'épaule, la ligne supérieure de la manche, la largeur du haut du bras, la longueur et l'ouverture de la manche ; le type monté ou raglan est détecté à partir de l'encolure (une couture raglan la laisse à un angle vif) et montré dans la superposition pour que l'utilisateur confirme (base_options={"sleeve_style": "raglan"} le remplace). L'ajustement conçoit des patrons candidats, les dispose à plat virtuellement (flatlay.py : devant ∪ dos, manche pliée le long de sa ligne supérieure) et les fait correspondre à chaque caractéristique photo par moindres carrés. L'échelle provient de la carte de 10 cm ; pour un vêtement de 1,5 m de large (manches longues déployées), une légère inclinaison de l'appareil photo peut la décaler de jusqu'à 2 % : si l'utilisateur le peut, faites-lui mesurer la largeur de poitrine à plat avec un mètre ruban et transmettez-la comme tape={"chest_flat": 37.2} (cm) : chaque valeur photo est alors remise à l'échelle par rapport à celle-ci.
4. Mesures
measurements.complete_measures(given_cm, size) complète les mesures manquantes à partir du tableau de tailles ou de la hauteur corporelle et signale les avertissements de plausibilité. Les mesures données prévalent sur le tableau. Tableaux et sources : references/size_tables.md.
Si l'utilisateur a un fichier de mesures XML provenant d'un logiciel de patron CAO (.smis / .vit), passez-le avec --measures-file ; les valeurs explicites --measures le remplacent. Avec --export-measures, les mesures utilisées sont sauvegardées comme body_measurements.smis, un bon moyen de conserver les mesures d'une personne pour la prochaine fois.
5. Conception, validation, disposition, rendu : un seul appel
python scripts/generate.py --garment pants_basic --style harem --size 122 \
--fabric sweat --format roll610,a4 --out out/harem122
# plus d'exemples
python scripts/generate.py --garment tshirt_basic --size 140 --options '{"sleeve_style":"raglan","sleeve_length":"long"}' --format a4
python scripts/generate.py --garment hoodie --size w38 --fabric sweat --format roll914,a0
python scripts/generate.py --garment skirt --size 128 --style circle --format a1
python scripts/generate.py --spec order.json # tout en JSON (voir l'en-tête de generate.py)
Tailles : enfants sous forme de nombre (122), femmes en w38, hommes en m52 ; US/UK : us8 (US femmes), uk12 (UK femmes), us3t (US tout-petit), usk8 (US enfants), voir references/size_tables.md.
Plusieurs tailles à la fois (imbriquées) : --size 98,110,122 (ou une plage 98-122 par pas enfants) conçoit et valide chaque taille et les superpose à un point de construction commun, chaque taille dans sa propre couleur/ligne, calque PDF (activer/désactiver les tailles dans le panneau Calques d'Acrobat) et groupe SVG. Utilisez-le pour des fratries ou pour interpoler entre des tailles ; toutes les tailles partagent les mêmes options.
Utilisateurs impériaux : --units imperial (mesures en pouces, rapports en pouces/verges).
Sortie allemande : --lang de (spécification "language": "de") écrit toute la sortie en allemand : étiquettes de pièces, étapes de couture, livret, plan de coupe, rapports et schémas, avec des noms de fichiers allemands (naehanleitung.pdf, pruefbericht.md, zuschnittplan.png, schnitt.json, …_master_1zu1.svg, `…
_## Niveaux de compétence
Le générateur peut fonctionner à plusieurs niveaux de détail, selon la complexité :
- Basique : crée un patron simple à partir de mesures de base (tour de poitrine, tour de taille, tour de hanches).
- Intermédiaire : ajoute des options de style (poches, pinces, ourlets).
- Avancé : utilise des photos ou des fichiers CAO pour une reproduction précise.
Formats de sortie
| Format | Description |
|---|---|
rollNNN | Rouleau de largeur NNN mm (par défaut 610) |
a0, a1, a4 | Formats standard ISO |
letter | Format US Letter |
dxf / dxf14 | DXF pour machines de découpe et CAO |
projector | Un fichier 1:1 avec grille de calibrage pour projecteur |
Dépannage
- Erreur : « Invalid measurement » : vérifiez les unités (cm ou pouces) et les plages de tailles.
- Patron non cousable : le script
generate.pyeffectue une validation et signale les problèmes (par exemple, courbes trop serrées). - Problèmes d'impression : vérifiez que le format correspond au papier (A4, A0, rouleau). Utilisez
--format a4 --tilepour assembler.
Contribution
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les directives.