Tech pack starter

Loading the tool. It runs fully in your browser, so the first load can take a minute or two while Python starts up. Later visits are faster.

Free tool, no login. If you want the full pack drafted from a sketch, Artifax does that.

pandas openpyxl """Tech pack starter. Pick a garment type and get a starting points of measure list, a starter bill of materials, a construction checklist and a blank spec sheet to download. Runs in the browser with Gradio-Lite (Pyodide). No login, no API. """ import csv import os import re import tempfile import gradio as gr import pandas as pd from openpyxl import Workbook from openpyxl.styles import Alignment, Font, PatternFill from garments import DEFAULT_SIZES, GARMENTS NOTE = ( "Starting template only. Every brand and factory has its own measuring " "manual, so check each point, tolerance and material with your technical " "designer and supplier before you send it." ) def parse_sizes(sizes_text): sizes = [s.strip() for s in re.split(r"[,;/]+", sizes_text or "") if s.strip()] return sizes or list(DEFAULT_SIZES) def pom_table(garment, unit, sizes): rows = [] for i, (name, how) in enumerate(GARMENTS[garment]["pom"], start=1): row = {"#": i, "Point of measure": name, "How to measure": how, f"Tolerance +/- ({unit})": ""} for s in sizes: row[s] = "" rows.append(row) return pd.DataFrame(rows) def bom_table(garment): rows = [ {"Category": cat, "Item": item, "Notes": notes, "Supplier": "", "Ref / article": "", "Color": "", "Qty per garment": "", "Placement": ""} for cat, item, notes in GARMENTS[garment]["bom"] ] return pd.DataFrame(rows) def construction_md(garment): lines = [f"- [ ] {step}" for step in GARMENTS[garment]["construction"]] return "\n".join(lines) def _slug(text): return re.sub(r"[^a-z0-9]+", "-", text.lower()).strip("-") def write_files(garment, unit, sizes, style, pom, bom): out_dir = tempfile.mkdtemp(prefix="techpack-") base = f"tech-pack-starter-{_slug(garment)}" csv_path = os.path.join(out_dir, base + "-pom.csv") pom.to_csv(csv_path, index=False, quoting=csv.QUOTE_MINIMAL) xlsx_path = os.path.join(out_dir, base + ".xlsx") wb = Workbook() head_font = Font(bold=True) head_fill = PatternFill("solid", fgColor="EEEEEE") wrap = Alignment(wrap_text=True, vertical="top") ws = wb.active ws.title = "Cover" cover = [ ("Tech pack starter", ""), ("Status", "STARTING TEMPLATE. Not approved for production."), ("Garment type", garment), ("Style name / number", style or ""), ("Season", ""), ("Brand", ""), ("Designer", ""), ("Technical designer", ""), ("Supplier / factory", ""), ("Size range", ", ".join(sizes)), ("Base size", ""), ("Unit", unit), ("Date", ""), ("Revision", "1"), ("Note", NOTE), ("Sketch", "Paste front and back flats here or on a new tab."), ] for r in cover: ws.append(r) ws["A1"].font = Font(bold=True, size=14) for row in ws.iter_rows(min_row=2): row[0].font = head_font for c in row: c.alignment = wrap ws.column_dimensions["A"].width = 24 ws.column_dimensions["B"].width = 80 def add_sheet(title, df, widths): sh = wb.create_sheet(title) sh.append(list(df.columns)) for c in sh[1]: c.font = head_font c.fill = head_fill for rec in df.itertuples(index=False): sh.append(list(rec)) for row in sh.iter_rows(): for c in row: c.alignment = wrap for i, w in enumerate(widths): sh.column_dimensions[chr(65 + i)].width = w sh.freeze_panes = "C2" if title == "Points of measure" else "A2" return sh add_sheet("Points of measure", pom, [5, 30, 60, 16] + [10] * len(sizes)) add_sheet("Bill of materials", bom, [12, 30, 50, 18, 16, 12, 14, 18]) cons = pd.DataFrame( [{"Step": s, "Stitch / seam type": "", "SPI": "", "Notes": "", "Done": ""} for s in GARMENTS[garment]["construction"]] ) add_sheet("Construction", cons, [70, 20, 8, 30, 8]) wb.save(xlsx_path) return csv_path, xlsx_path def build(garment, unit, sizes_text, style): if garment not in GARMENTS: raise gr.Error("Pick a garment type.") sizes = parse_sizes(sizes_text) pom = pom_table(garment, unit, sizes) bom = bom_table(garment) cons = construction_md(garment) csv_path, xlsx_path = write_files(garment, unit, sizes, style, pom, bom) pom_view = pom[["#", "Point of measure", "How to measure"]] bom_view = bom[["Category", "Item", "Notes"]] return pom_view, bom_view, cons, csv_path, xlsx_path INTRO = """ # Tech pack starter Pick a garment type. You get a points of measure list with a note on how to measure each one, a starter bill of materials and a construction checklist. Download the spec sheet as XLSX (cover, POM, BOM and construction tabs) or the POM list as CSV, then fill in your own measurements per size. **This is a starting template.** Check every point and tolerance against your own measuring manual and your factory before it goes into production. """ FOOTER = ( "Free tool, no login. If you want the full pack drafted from a sketch, " "[Artifax](https://streamoid.com/artifax) does that." ) with gr.Blocks(title="Tech pack starter") as demo: gr.Markdown(INTRO) with gr.Row(): garment = gr.Dropdown(list(GARMENTS.keys()), value="T-shirt (knit)", label="Garment type") unit = gr.Radio(["cm", "inch"], value="cm", label="Unit") with gr.Row(): sizes = gr.Textbox(value=", ".join(DEFAULT_SIZES), label="Sizes (comma separated)") style = gr.Textbox(label="Style name or number (optional)") go = gr.Button("Build starter tech pack", variant="primary") gr.Markdown("## Points of measure") pom_out = gr.Dataframe(wrap=True, interactive=False) gr.Markdown("## Starter bill of materials") bom_out = gr.Dataframe(wrap=True, interactive=False) gr.Markdown("## Construction and trims checklist") cons_out = gr.Markdown() gr.Markdown("## Download") with gr.Row(): csv_out = gr.File(label="POM list (CSV)") xlsx_out = gr.File(label="Spec sheet template (XLSX)") gr.Markdown(FOOTER) inputs = [garment, unit, sizes, style] outputs = [pom_out, bom_out, cons_out, csv_out, xlsx_out] go.click(build, inputs, outputs) demo.load(build, inputs, outputs) demo.launch() """Starter content for each garment type. Plain industry practice, kept generic on purpose. Every brand has its own measuring manual, so treat this as a starting template and adjust it. """ # Notes shared by several garments HPS_LENGTH = "From the high point shoulder (where the shoulder seam meets the neck edge) straight down to the bottom edge." CHEST = "Lay flat. Measure edge to edge 2.5 cm (1 in) below the armhole. Record as a half measure." HEM_SWEEP = "Lay flat, relaxed. Measure edge to edge along the bottom hem. For curved hems follow the curve." ACROSS_SHOULDER = "From shoulder point to shoulder point, straight across the back." SLEEVE_SP = "From the shoulder point along the top fold of the sleeve to the sleeve edge." ARMHOLE = "Straight line from the shoulder point to the underarm point." BICEP = "2.5 cm (1 in) below the underarm, perpendicular to the sleeve fold, edge to edge." NECK_WIDTH = "Seam to seam between the two high point shoulders, straight across." FRONT_NECK_DROP = "From an imaginary line between the high point shoulders straight down to the center front neck seam." BACK_NECK_DROP = "From an imaginary line between the high point shoulders straight down to the center back neck seam." GARMENTS = { "T-shirt (knit)": { "pom": [ ("Body length from HPS", HPS_LENGTH), ("Chest width", CHEST), ("Waist width", "Edge to edge at a set distance from HPS. Write that distance in the notes so every size is measured at the same point."), ("Bottom hem width", HEM_SWEEP), ("Across shoulder", ACROSS_SHOULDER), ("Armhole straight", ARMHOLE), ("Sleeve length from shoulder point", SLEEVE_SP), ("Bicep width", BICEP), ("Sleeve opening", "Edge to edge at the sleeve hem, relaxed."), ("Neck width", NECK_WIDTH), ("Front neck drop", FRONT_NECK_DROP), ("Back neck drop", BACK_NECK_DROP), ("Neck rib height", "Finished height of the neck rib, from the seam to the edge."), ("Hem height", "Finished height of the bottom hem, from the fold to the stitch line."), ], "bom": [ ("Fabric", "Self fabric", "Single jersey. Note fiber content, weight in GSM, width and finish."), ("Fabric", "Neck rib", "1x1 or 2x2 rib, matched to self color. Note content and GSM."), ("Trim", "Back neck tape", "Optional. Self fabric or woven tape covering the back neck seam."), ("Thread", "Sewing thread", "Spun or core spun polyester. Note ticket size and color match."), ("Label", "Main label", "Brand label. Note size, material and placement."), ("Label", "Care and content label", "Fiber content, care instructions and country of origin as required by the selling market."), ("Label", "Size label", "Or printed size in the neck label."), ("Packaging", "Hangtag and polybag", "Note barcode or SKU sticker and folding method."), ], "construction": [ "Shoulder seams joined with 4 thread overlock (stitch class 514), with tape or clear elastic to stop stretching.", "Neck rib attached with overlock, then coverstitched or topstitched around the neck.", "Sleeves set in with overlock. Note set in flat or set in round.", "Side seams closed with overlock.", "Sleeve and bottom hems finished with 2 needle coverstitch (stitch class 406). Note hem height.", "Specify stitches per inch for each seam and thread color match.", "Note print or embroidery placement with distance from HPS and from center front.", "Confirm shrinkage and torque tests on the fabric before cutting.", ], }, "Shirt (woven)": { "pom": [ ("Body length from HPS", HPS_LENGTH + " Some brands use center back length from the back neck seam instead. Pick one and keep it."), ("Chest width", CHEST), ("Waist width", "Edge to edge at a set distance from HPS. Record the distance in the notes."), ("Bottom hem width", HEM_SWEEP), ("Across shoulder", ACROSS_SHOULDER), ("Across back", "Straight across the back, armhole seam to armhole seam, at a set distance below the back neck seam."), ("Armhole straight", ARMHOLE), ("Sleeve length", "Shoulder point to cuff edge along the top fold. Some brands measure from center back neck. State which."), ("Bicep width", BICEP), ("Elbow width", "Edge to edge at a set distance from the shoulder point, perpendicular to the sleeve fold."), ("Cuff length", "Cuff buttoned, laid flat. From the fold to the edge, or measure open from button center to buttonhole end. State which."), ("Cuff height", "Finished height of the cuff."), ("Collar band length", "Center of the top button to the far end of the buttonhole, laid flat."), ("Collar band height", "Height at center back."), ("Collar point length", "From the collar seam to the collar point along the edge."), ("Front placket width", "Finished width of the button placket."), ("Chest pocket placement", "From HPS down to the pocket top, and from center front to the pocket edge."), ], "bom": [ ("Fabric", "Self fabric", "Woven shirting. Note content, weave, weight in GSM, width and finish."), ("Fabric", "Fusing for collar, band and cuffs", "Woven or non woven fusible. Note weight and fusing settings."), ("Trim", "Buttons", "Note material, ligne size, number of holes and count per garment including spares."), ("Trim", "Collar stays", "Optional, for some collar styles."), ("Thread", "Sewing thread", "Spun or core spun polyester. Note ticket size and color match."), ("Label", "Main label", "Note placement, usually center back yoke or neck."), ("Label", "Care and content label", "Fiber content, care instructions and country of origin as required."), ("Label", "Size label", "Size in neck or as a separate label."), ("Packaging", "Hangtag, tissue, clips and polybag", "Note folding method and board if used."), ], "construction": [ "Main seams in single needle lockstitch (stitch class 301). Note if side seams are flat felled or overlocked.", "Yoke attached, single or double yoke. Note if the yoke is self or contrast.", "Collar and band fused and topstitched. Note topstitch distance from edge.", "Front placket construction. Note if folded, French front or separate placket.", "Sleeve placket construction. Note type and length.", "Cuffs fused and attached. Note number of buttons and if adjustable.", "Buttonholes and buttons. Note count, direction of buttonholes and button sewing method.", "Hem finish. Note narrow rolled hem or turned hem and width.", "Specify stitches per inch. Woven shirts usually need a finer setting than knits.", ], }, "Dress (woven)": { "pom": [ ("Front length from HPS", HPS_LENGTH), ("Across shoulder", ACROSS_SHOULDER), ("Bust width", CHEST), ("Waist width", "Edge to edge at the waist seam, or at a set distance from HPS if there is no waist seam."), ("High hip width", "At a set distance below the waist. Record the distance."), ("Hip width", "At a set distance below the waist, usually the widest point. Record the distance."), ("Sweep", "Along the bottom hem following the curve, relaxed."), ("Armhole straight", ARMHOLE), ("Sleeve length", SLEEVE_SP + " Skip for sleeveless styles."), ("Bicep width", BICEP), ("Neck width", NECK_WIDTH), ("Front neck drop", FRONT_NECK_DROP), ("Back neck drop", BACK_NECK_DROP), ("Strap length", "For strap styles. End to end along the strap."), ("Zip length", "Visible or invisible zip, top stop to bottom stop."), ("Slit height", "From the hem up to the top of the slit, if any."), ], "bom": [ ("Fabric", "Self fabric", "Note content, weave or knit, weight in GSM, width and finish."), ("Fabric", "Lining", "Optional. Note content and weight."), ("Fabric", "Fusing", "For facings, zip area and neck. Note weight."), ("Trim", "Zip", "Invisible or metal or coil. Note length, gauge and puller."), ("Trim", "Hook and eye or button", "At the top of the zip or back neck."), ("Thread", "Sewing thread", "Note ticket size and color match."), ("Label", "Main label", ""), ("Label", "Care and content label", "Fiber content, care instructions and country of origin as required."), ("Label", "Size label", ""), ("Packaging", "Hangtag, hanger loops and polybag", "Note hanger loops if the dress hangs from them."), ], "construction": [ "Main seams in lockstitch (301), seam allowances overlocked or bound. Note seam allowance width.", "Darts or princess seams. Note position and pressing direction.", "Zip insertion. Note type and position.", "Neck and armhole finish. Note facing, binding or lining.", "Lining attached at neck and armholes, free hanging at hem or bagged out.", "Hem finish. Note blind hem, turned hem or narrow hem and width.", "Note pressing instructions for the final press.", ], }, "Trousers (woven)": { "pom": [ ("Waist relaxed", "Along the top of the waistband, edge to edge, with the waist fastened."), ("Waist stretched", "For elastic waists only. Fully stretched along the top edge."), ("High hip", "At a set distance below the top of the waistband. Record the distance."), ("Hip", "At a set distance below the top of the waistband, usually the widest point. Record the distance."), ("Front rise", "From the crotch seam junction up the front seam to the top of the waistband."), ("Back rise", "From the crotch seam junction up the back seam to the top of the waistband."), ("Inseam", "From the crotch seam junction down the inside leg seam to the hem."), ("Outseam", "Optional. From the top of the waistband down the side seam to the hem."), ("Thigh width", "2.5 cm (1 in) below the crotch point, perpendicular to the leg crease, edge to edge."), ("Knee width", "At a set distance down from the crotch point. Record the distance."), ("Leg opening", "Edge to edge at the hem, relaxed."), ("Waistband height", "Finished height of the waistband."), ("Fly length", "From the top of the waistband to the bottom of the fly stitching."), ("Front pocket opening", "Along the pocket edge from the waistband to the bottom of the opening."), ], "bom": [ ("Fabric", "Self fabric", "Note content, weave, weight in GSM, width and finish."), ("Fabric", "Pocketing", "Polycotton or cotton pocketing. Note weight."), ("Fabric", "Waistband fusing", "Note weight."), ("Trim", "Zip", "Fly zip. Note type, length and puller."), ("Trim", "Waistband button or hook and bar", ""), ("Trim", "Back pocket buttons", "Optional."), ("Thread", "Sewing thread", "Note ticket size and color match."), ("Label", "Main label", "Usually inside the back waistband."), ("Label", "Care and content label", "Fiber content, care instructions and country of origin as required."), ("Label", "Size label", ""), ("Packaging", "Hangtag and polybag", ""), ], "construction": [ "Main seams in lockstitch (301), allowances overlocked. Note if side seams are pressed open.", "Fly construction. Note left or right fly and topstitch shape.", "Front pockets. Note slant, on seam or quarter top, and pocket bag depth.", "Back pockets. Note welt type and placement from the waistband and center back.", "Waistband attached. Note belt loop count and placement.", "Crotch seam reinforced. Note bartack at fly and pocket corners.", "Hem finish. Note blind hem or turn up and width.", "Crease line pressing if required.", ], }, "Jeans (denim)": { "pom": [ ("Waist relaxed", "Along the top of the waistband, edge to edge, with the button closed."), ("High hip", "At a set distance below the top of the waistband. Record the distance."), ("Hip", "At a set distance below the top of the waistband. Record the distance."), ("Front rise", "From the crotch seam junction up the front seam to the top of the waistband."), ("Back rise", "From the crotch seam junction up the back seam to the top of the waistband."), ("Inseam", "From the crotch seam junction down the inside leg seam to the hem."), ("Thigh width", "2.5 cm (1 in) below the crotch point, perpendicular to the leg crease, edge to edge."), ("Knee width", "At a set distance down from the crotch point. Record the distance."), ("Leg opening", "Edge to edge at the hem, relaxed."), ("Waistband height", "Finished height of the waistband."), ("Back yoke height at center back", "From the bottom of the waistband to the yoke seam at center back."), ("Back yoke height at side seam", "From the bottom of the waistband to the yoke seam at the side seam."), ("Back pocket width and height", "Finished pocket, at the top edge and at center height."), ("Back pocket placement", "From the yoke seam and from center back to the pocket corner."), ("Coin pocket width and height", "Finished pocket."), ("Fly length", "From the top of the waistband to the bottom of the fly stitching."), ("Belt loop length and width", "Finished loop."), ], "bom": [ ("Fabric", "Self denim", "Note content, weight in oz per sq yd, width, stretch and shrinkage."), ("Fabric", "Pocketing", "Note content and weight. Often printed or contrast."), ("Trim", "Shank button", "Note size, finish and logo."), ("Trim", "Rivets", "Note size, finish and count. Placed at pocket stress points."), ("Trim", "Zip or button fly", "Note zip type, length and puller, or button count."), ("Trim", "Back waistband patch", "Leather, jacron or woven. Note size and placement."), ("Thread", "Topstitch thread", "Heavier contrast or tonal thread. Note ticket size and color."), ("Thread", "Construction thread", "Note ticket size and color."), ("Label", "Main label, care and content label, size label", "Care label must cover the wash."), ("Packaging", "Hangtag, size sticker and polybag", ""), ], "construction": [ "Inseam flat felled or overlocked. Note which.", "Outseam overlocked and topstitched. Note selvedge outseam if used.", "Back yoke and back rise in flat felled seams, usually double needle chainstitch (stitch class 401).", "Topstitching. Note number of rows, distance between rows and thread.", "Back pocket design stitching. Attach a drawing with measurements.", "Bartacks at belt loops, fly and pocket openings. Note count and placement.", "Waistband attached with chainstitch or lockstitch.", "Hem chainstitched or lockstitched. Note hem width.", "Wash standard. Attach the approved wash sample reference and shrinkage allowance.", ], }, "Hoodie (knit)": { "pom": [ ("Body length from HPS", HPS_LENGTH + " Include the bottom rib."), ("Chest width", CHEST), ("Bottom rib width relaxed", "Edge to edge along the rib, relaxed."), ("Bottom rib width stretched", "Edge to edge along the rib, fully stretched."), ("Bottom rib height", "Finished height of the rib."), ("Across shoulder", ACROSS_SHOULDER + " For raglan styles skip this and use sleeve length from center back."), ("Armhole straight", ARMHOLE), ("Sleeve length", SLEEVE_SP + " Include the cuff. For raglan styles measure from center back neck."), ("Bicep width", BICEP), ("Cuff width relaxed", "Edge to edge at the cuff, relaxed."), ("Cuff height", "Finished height of the cuff."), ("Neck width", NECK_WIDTH), ("Hood height", "From the HPS seam straight up to the top of the hood, laid flat."), ("Hood width", "Across the hood at its widest point, laid flat."), ("Hood opening", "Along the front edge of the hood, relaxed."), ("Kangaroo pocket width and height", "Finished pocket, at the top and bottom edges and at center height."), ("Kangaroo pocket placement", "From HPS down to the top of the pocket, centered on center front."), ("Drawcord length", "Total length including tips, measured flat."), ], "bom": [ ("Fabric", "Self fabric", "French terry or brushed fleece. Note content, weight in GSM, width and finish."), ("Fabric", "Rib for cuffs and bottom", "1x1 or 2x2 rib with elastane. Note content and GSM."), ("Fabric", "Hood lining", "Optional. Self or contrast jersey."), ("Trim", "Drawcord", "Note type, width, length and tips."), ("Trim", "Eyelets", "Metal eyelets or embroidered holes. Note size and finish."), ("Trim", "Zip", "Only for zip through styles. Note type, length and puller."), ("Thread", "Sewing thread", "Note ticket size and color match."), ("Label", "Main label, care and content label, size label", ""), ("Packaging", "Hangtag and polybag", "Note folding method."), ], "construction": [ "Main seams in 4 thread overlock (514).", "Hood seams. Note if the center seam is topstitched or covered.", "Hood attached to neck. Note if it overlaps at center front.", "Drawcord channel and eyelet placement from center front.", "Kangaroo pocket coverstitched or topstitched. Bartack the pocket openings.", "Rib cuffs and bottom rib attached with overlock. Note rib ratio to body.", "Note print or embroidery placement from HPS and center front.", "Check child safety rules for drawcords if the style is made in kids sizes.", ], }, "Swimwear (one piece)": { "pom": [ ("Center front length", "From the top edge at center front down to the crotch seam."), ("Center back length", "From the top edge at center back down to the crotch seam."), ("Torso length", "From the top of the shoulder strap down the front to the crotch seam. Record relaxed."), ("Bust width", "Edge to edge across the bust at the underarm, relaxed."), ("Waist width", "Edge to edge at the narrowest point, relaxed. Record the distance from the top edge."), ("Hip width", "Edge to edge at the top of the leg openings at the side seam, relaxed."), ("Leg opening relaxed", "Along the leg elastic edge, relaxed."), ("Leg opening stretched", "Along the leg elastic edge, fully stretched."), ("Side seam height", "From the top of the leg opening to the underarm along the side seam."), ("Crotch width", "Edge to edge across the gusset at its center."), ("Strap length", "Finished length end to end. Note if adjustable."), ("Strap width", "Finished width."), ("Back neckline drop", "For low back styles. From the top of the strap down to the lowest point at center back."), ], "bom": [ ("Fabric", "Self fabric", "Nylon or polyester with elastane. Note content, weight in GSM, stretch and chlorine resistance."), ("Fabric", "Lining", "Swim lining in front, or front and back. Note content and color."), ("Fabric", "Gusset lining", "Note content."), ("Trim", "Swim elastic", "Rubber or chlorine resistant elastic. Note width for leg, neck and armholes."), ("Trim", "Cups or foam", "Optional. Note shape, size by garment size and if removable."), ("Trim", "Sliders, rings or hooks", "Note material and finish. Must be salt and chlorine safe."), ("Thread", "Sewing thread", "Textured nylon or polyester for stretch seams."), ("Label", "Main label, care and content label, size label", "Often printed or heat transfer to stay comfortable."), ("Packaging", "Hygiene liner, hangtag and polybag", "Note hygiene liner placement in the crotch."), ], "construction": [ "Seams in stretch stitches such as overlock (514) so the seam stretches with the fabric.", "Elastic applied at leg, neck and armholes, turned and coverstitched or zigzag stitched. Note elastic ratio.", "Lining bagged out or caught in the elastic.", "Cups attached or pocketed if removable.", "Straps attached. Note fixed or adjustable and hardware placement.", "Check recovery after stretch and chlorine on the approved fabric.", "Record both relaxed and stretched measurements where the spec asks for them.", ], }, "Skirt (woven)": { "pom": [ ("Waist relaxed", "Along the top of the waistband, edge to edge, fastened."), ("High hip", "At a set distance below the top of the waistband. Record the distance."), ("Hip", "At a set distance below the top of the waistband. Record the distance."), ("Sweep", "Along the hem following the curve, relaxed."), ("Center front length", "From the top of the waistband down center front to the hem."), ("Center back length", "From the top of the waistband down center back to the hem."), ("Waistband height", "Finished height."), ("Zip length", "Top stop to bottom stop."), ("Slit or vent height", "From the hem up to the top of the slit or vent."), ], "bom": [ ("Fabric", "Self fabric", "Note content, weave, weight in GSM, width and finish."), ("Fabric", "Lining", "Optional."), ("Fabric", "Waistband fusing", ""), ("Trim", "Zip", "Invisible or coil. Note length and position."), ("Trim", "Hook and bar or button", ""), ("Thread", "Sewing thread", ""), ("Label", "Main label, care and content label, size label", ""), ("Packaging", "Hangtag, hanger loops and polybag", ""), ], "construction": [ "Main seams in lockstitch (301), allowances overlocked.", "Darts. Note position and length.", "Zip insertion and waistband attachment.", "Lining attached at waist, free at hem.", "Vent or slit construction. Note mitred corners if needed.", "Hem finish. Note blind hem or turned hem and width.", ], }, } DEFAULT_SIZES = ["XS", "S", "M", "L", "XL"]