3D printing
Prompting chat assistants, code-CAD tools and AI 3D generators to design parts and models that actually print: the technologies and materials, the design rules an experienced maker checks, CAD workflows and file formats, slicer vocabulary, a four-prompt chain that takes a functional part from caliper measurements to a reviewed OpenSCAD or CadQuery model, and a prompt library for material choice, test coupons, slicer profiles, calibration, mesh cleanup, splitting and print diagnosis. The general method and the prompt skeleton are in Prompting fundamentals; generating meshes with AI is covered in AI 3D generation and cleaning them up in Modeling in Blender.
How experts think
- Design for the process. A printed part is built in layers on a flat bed. Its shape should follow from that: flat faces down, overhangs limited, no floating islands.
- Orientation first. Decide how the part sits on the bed before the details. Orientation sets strength, supports, surface finish and accuracy, and it often changes the design.
- Measure, don't guess. Calipers on the mating parts. Every fit dimension in a prompt should come from a measurement or a datasheet.
- Tolerances belong to your printer. Clearances vary by printer, material and slicer settings, so experts keep them as parameters and calibrate with a test coupon.
- Parametric everything. Dimensions as named variables, so the second print is a one-number change.
- Print the risky feature first. A thin slice through the hinge or thread, not the whole 6-hour part.
- Use hardware where it is better. Heat-set inserts, nuts, bolts, pins and bearings beat printed threads and axles.
- Function, material, design, slice, print, measure, adjust. In that order, in a loop.
Why orientation comes first, with the same bracket printed two ways:
Vocabulary
| Term | What it means | Say it like |
|---|---|---|
| FDM / FFF | fused deposition modeling / fused filament fabrication: a nozzle extrudes melted plastic filament layer by layer | "Design for FDM with a 0.4 mm nozzle" |
| Resin printing (SLA, MSLA, DLP) | light cures liquid photopolymer layer by layer | "This is for an MSLA resin printer; hollow it with drain holes" |
| SLS / MJF | powder-bed processes that fuse nylon powder; the loose powder supports the part | "Design for SLS nylon through a print service: no supports needed" |
| Slicer | software that turns a 3D model into layer-by-layer machine instructions (G-code) | "Give PrusaSlicer settings for this part" |
| Layer height | thickness of each layer | "0.2 mm layers; 0.12 mm for the visible face" |
| Line (extrusion) width | width of one extruded line, ≈ nozzle diameter or a little more | "Make walls a multiple of 0.45 mm line width" |
| Perimeters / walls | the outline loops of each layer | "Use 4 perimeters for strength" |
| Top and bottom layers | solid layers that close the part | "At least 5 top layers so the infill doesn't show" |
| Infill | the internal fill pattern and density | "20% gyroid infill" |
| Overhang | a surface that leans out over empty space | "No overhang steeper than 45° from vertical" |
| Support | sacrificial structure under overhangs | "Design so it prints with no supports" |
| Bridge | a horizontal span printed between two supports in mid-air | "Keep bridges under 10 mm" |
| Anisotropy | strength differs by direction; FDM parts are weakest between layers (along Z) | "Orient it so the bending load runs along the layers, not across them" |
| Clearance | the designed gap between mating parts | "0.3 mm clearance per side for a sliding fit" |
| Tolerance | how far a printed dimension may deviate from the design | "Assume ±0.2 mm in XY" |
| Press / sliding / loose fit | tight, smooth-moving and free-moving fits, from smallest to largest clearance | "Press fit for the bearing, sliding fit for the lid" |
| Elephant's foot | the first layers bulging outward from bed squish | "Add a 0.5 mm chamfer on all bottom edges" |
| Warping | corners lifting as plastic shrinks while cooling | "It's ABS: add a brim and round the corners" |
| Brim / raft / skirt | extra flat ring stuck to the part / a sacrificial base under it / an outline that only primes the nozzle | "Use a 5 mm brim, no raft" |
| First layer | the layer on the bed; most failures start here | "First layer 0.2 mm, slow" |
| Retraction | pulling filament back during travel moves to stop oozing | "Suggest retraction settings to fix stringing" |
| Stringing | thin hairs between parts from oozing | "Here's a photo of stringing: diagnose it" |
| Flow (extrusion multiplier) | scaling of how much plastic is pushed | "Walk me through a flow calibration" |
| Cooling | part fan speed; high for PLA, low for ABS and ASA | "Part cooling for PETG?" |
| Seam | where each layer loop starts and ends, leaving a line | "Put the seam on the back edge" |
| Fillet / chamfer | a rounded / angled edge | "Fillet internal corners 2 mm; chamfer bottom edges, don't fillet them" |
| Teardrop hole | a horizontal hole with a pointed top so it prints without support | "Make horizontal holes teardrop-shaped" |
| Print-in-place | a mechanism printed already assembled (hinges, chains) | "Print-in-place hinge with 0.4 mm clearance" |
| Heat-set insert | a brass threaded insert pressed in with a soldering iron | "Add bosses for M3 heat-set inserts; hole size from the insert datasheet" |
| Nut trap | a hexagonal pocket that holds a nut | "Add an M3 nut trap on the underside" |
| Manifold (watertight) | a closed mesh where every edge joins exactly two faces | "Check the mesh is manifold before slicing" |
| Non-manifold | holes, stray edges or faces that make inside and outside ambiguous | "List non-manifold problems and how to fix them in Blender" |
| Parametric | defined by named dimensions you can change | "Put every dimension in a variable at the top" |
| CSG | constructive solid geometry: shapes added and subtracted (union, difference) | "Build it in OpenSCAD with CSG, no imported meshes" |
| Hollowing / drain holes | emptying a resin part and adding holes so trapped resin can escape | "Hollow to 2 mm walls with two drain holes near the base" |
| Build volume | the largest part the printer can make | "My build volume is 250 × 210 × 220 mm; split if needed" |
Clearance is designed per side, so a hole grows by twice the gap:
Technologies
| Technology | How it works | Good for | Limits |
|---|---|---|---|
| FDM / FFF | heated nozzle extrudes thermoplastic filament | functional parts, enclosures, jigs, brackets, prototypes; cheap and fast to iterate | visible layer lines; weak in Z; overhangs need support; fine detail limited by nozzle (~0.4 mm) |
| SLA | a laser traces each layer in a resin vat | smooth, accurate small parts, dental and jewelry models | resin handling, washing and UV curing; brittle standard resins |
| MSLA | an LCD screen masks UV light to cure a whole layer at once | miniatures and figurines at high detail; affordable | same resin handling; build volume usually small |
| DLP | a projector cures each layer | fast, detailed small parts | as SLA |
| SLS | a laser sinters nylon powder; loose powder supports the part | strong nylon parts with complex geometry and no supports, usually via a print service | grainy surface; expensive machines; need escape holes for powder in hollows |
| MJF (HP Multi Jet Fusion) | inkjet agents plus infrared heat fuse nylon powder | production-quality nylon parts in batches via services | as SLS; usually gray, dyed black |
Metal printing (powder-bed fusion and others) exists mainly at service bureaus and has its own design rules; this sheet is about plastics.
Materials
Temperatures are typical starting ranges; the spool label or resin datasheet wins, and brands differ.
| Material | Nozzle °C | Bed °C | Properties | Use for | Watch for |
|---|---|---|---|---|---|
| PLA | ≈ 190–220 | ≈ 50–65 | stiff, easy, good detail | prototypes, display pieces, indoor jigs | softens around 55–60 °C (hot cars); brittle under impact; creeps under load |
| PETG | ≈ 220–250 | ≈ 70–90 | tougher, more heat and chemical resistant than PLA | functional parts, outdoor-ish use, containers | strings; bonds very strongly to smooth PEI beds (use a release layer such as glue stick) |
| ABS | ≈ 230–260 | ≈ 90–110 | tough, heat resistant to around 90–100 °C | car interiors, housings, parts to smooth with acetone | warps; fumes; needs an enclosure and ventilation |
| ASA | ≈ 240–265 | ≈ 90–110 | like ABS, but UV resistant | outdoor parts | as ABS |
| TPU | ≈ 210–245 | ≈ 40–70 | flexible, rubbery, rated by Shore hardness (for example 95A) | gaskets, bumpers, phone cases, feet | print slowly; direct-drive extruders cope best; strings |
| Nylon (PA) | ≈ 250–290 | ≈ 70–110 | tough, wear resistant, slippery | gears, hinges, living hinges, clips | absorbs moisture fast: dry before and during printing; warps |
| PC | ≈ 260–310 | ≈ 90–120 | very strong and heat resistant | demanding mechanical parts | hard to print; needs an enclosure and an all-metal hotend |
| Fiber-filled (CF, GF) | per base polymer | per base | stiffer, matte | stiff brackets, drone parts | abrasive: needs a hardened nozzle |
| Standard resin | prints at room temperature (often ≈ 20–30 °C) | n/a | very fine detail, smooth | miniatures, display models | brittle; wash in alcohol and UV-cure; toxic uncured |
| Tough / flexible / castable resins | per datasheet | n/a | engineering-like, rubbery or burns out cleanly | snap fits, seals, jewelry casting | slower, pricier; follow the maker's cure settings |
Design for additive manufacturing
Values are for FDM with a 0.4 mm nozzle unless noted; treat them as starting points to test on your printer.
| Rule | Typical value | Why | Say it like |
|---|---|---|---|
| Overhangs | up to ≈ 45° from vertical without support | each layer must rest mostly on the one below | "No unsupported overhang beyond 45° from vertical" |
| Bridges | short spans (under ≈ 5–10 mm) print cleanly | longer spans sag unless the slicer and cooling are tuned | "Keep bridges under 10 mm or add a sacrificial layer" |
| Supports | avoid by design; tree or organic supports when needed | they scar the surface and waste time | "Redesign so it prints support-free; say what you changed" |
| Wall thickness | ≥ 2 lines (≈ 0.8–0.9 mm); 1.2–2 mm or more for functional parts | thin walls are weak or skipped by the slicer | "Walls 2 mm, a multiple of 0.45 mm" |
| Minimum feature | ≈ the nozzle diameter in XY; resin goes far finer | the nozzle can't draw thinner than itself | "No feature thinner than 0.8 mm" |
| Holes | print slightly undersize; horizontal holes droop at the top | plastic shrinks and the hole top is an overhang | "Vertical holes +0.2 mm; horizontal holes teardrop; or drill to size" |
| Clearances | ≈ 0.1–0.2 mm press, ≈ 0.3 mm sliding, ≈ 0.4–0.5 mm loose or print-in-place (per side) | printers over- and under-extrude by tenths of a millimeter | "Expose clearance as a parameter, default 0.3 mm" |
| Orientation and anisotropy | layers are the weak plane | parts snap along layer lines | "Orient so the hook's bending load runs along the layers" |
| Infill | ≈ 15–20% for general parts; more walls before more infill for strength | perimeters carry most of the load | "4 walls and 25% gyroid rather than 60% infill" |
| Fillets and chamfers | chamfer edges on the bed; fillet internal corners | a bottom fillet is an overhang; sharp inner corners concentrate stress | "Chamfer bottom edges 0.5 mm, fillet inside corners 2 mm" |
| Elephant's foot | a 0.3–0.6 mm chamfer at the base, plus slicer compensation | the first layer squishes outward | "Add a bottom chamfer so it fits flush" |
| Warping | round corners, add a brim, use an enclosure for ABS, ASA, nylon | shrinkage pulls corners up | "Round the footprint corners to 5 mm" |
| Print-in-place | ≥ ≈ 0.3–0.5 mm gaps; nothing that fuses on the first layer | moving parts weld together if gaps are too small | "Print-in-place hinge, 0.4 mm gap, pin axis horizontal" |
| Threads | print only coarse threads, axis vertical; otherwise inserts or nuts | fine printed threads strip and print poorly | "Use M3 heat-set inserts instead of printed threads" |
| Splitting large models | split at flat, hidden faces with pins, dowels, keys or dovetails | parts must fit the build volume and print flat | "Split into parts under 200 mm with 4 mm alignment pin holes" |
| Resin hollowing | hollow walls a few mm thick, drain holes near the bottom; angle the part | trapped resin and suction forces cause failures | "Hollow to 2.5 mm, two drain holes, tilt 30°" |
CAD workflows
| Approach | Tools | Best for | How a chat model helps |
|---|---|---|---|
| Parametric solid modeling (sketches, constraints, features, history) | Autodesk Fusion, Onshape, FreeCAD, SolidWorks | mechanical parts, assemblies, precise fits | step-by-step instructions ("sketch on XY, constrain, extrude 20 mm"), formulas for parameters, debugging a broken feature; it can't click for you |
| Code-CAD | OpenSCAD (its own language, CSG), CadQuery and build123d (Python on the OpenCascade kernel, export STEP) | parametric parts you can describe in words; the best target for chat models because the output is text you can run and diff | writing and fixing the code; adding parameters; explaining errors |
| Mesh and sculpting | Blender, ZBrush, Nomad Sculpt | figurines, organic shapes, repairing AI meshes | Blender Python scripts, repair steps, scale and units |
| Beginner block modeling | Tinkercad | simple shapes, kids, first parts | instructions in plain steps |
| AI generators | text- or image-to-3D (Meshy, Tripo, Rodin, Hunyuan3D, TRELLIS and others; features change quickly) | figurines, props, organic decoration | writing the concept prompt; planning the cleanup |
Code-CAD is where prompting pays off most for functional parts: you can read the dimensions, change a number, run it and send the error or a screenshot back.
A parametric example
What to ask a model to produce, and what to look for when it does: every dimension a named parameter, units stated,
clearance exposed, derived values computed rather than typed, and the print orientation built in. The comment above
each parameter and the // [min:step:max] comments turn them into sliders in OpenSCAD's Customizer.
// Parametric box with friction-fit lid. Units: mm.
// inside length
inner_x = 60; // [20:1:200]
// inside width
inner_y = 40; // [20:1:200]
// inside height
inner_z = 25; // [10:1:100]
// wall thickness, a multiple of line width
wall = 2; // [1.2:0.2:4]
// floor thickness
floor_t = 2; // [1:0.2:4]
// fit gap per side; tune with a test print
clear = 0.3; // [0.1:0.05:0.6]
// height of the lid lip
lip_h = 6; // [3:1:15]
// outer corner radius
r = 3; // [0.5:0.5:8]
$fn = 48;
outer_x = inner_x + 2 * wall;
outer_y = inner_y + 2 * wall;
// rounded-rectangle slab, x by y, height h
module rounded(x, y, h, rad) {
linear_extrude(h)
offset(r = rad) offset(delta = -rad)
square([x, y]);
}
module box() {
difference() {
rounded(outer_x, outer_y, inner_z + floor_t, r);
translate([wall, wall, floor_t])
rounded(inner_x, inner_y, inner_z + 1,
max(r - wall, 0.01));
}
}
// lid prints plate-down, lip pointing up: no supports
module lid() {
lx = inner_x - 2 * clear;
ly = inner_y - 2 * clear;
rounded(outer_x, outer_y, wall, r);
translate([wall + clear, wall + clear, wall])
difference() {
rounded(lx, ly, lip_h, max(r - wall - clear, 0.01));
translate([wall, wall, -1])
rounded(lx - 2 * wall, ly - 2 * wall, lip_h + 2, 0.01);
}
}
box();
translate([0, outer_y + 10, 0]) lid();File formats
| Format | What it holds | Use it for | Watch for |
|---|---|---|---|
| STL | triangles only | the universal exchange format to slicers | no units (assumed mm), no color, no editable features |
| 3MF | zipped XML: meshes plus units, colors, materials, multiple objects, often slicer settings | sharing a ready-to-print project; modern slicers' native format | some older tools ignore the extras |
| STEP (.step, .stp) | exact CAD solids (ISO 10303), not triangles | editing in another CAD tool; print services; newer slicers import it | needs a CAD tool or slicer that reads it; meshes can't become true STEP |
| OBJ | mesh plus UVs and textures (with an MTL file) | color figurines, AI generator output | units ambiguous; often huge or tiny on import |
| G-code | machine instructions for one printer and material | sending to that printer | not portable between printers |
Slicers and settings
The common slicers are PrusaSlicer, OrcaSlicer, UltiMaker Cura and Bambu Studio (Bambu Studio started from PrusaSlicer, and OrcaSlicer from Bambu Studio). They share concepts but not names: Cura says "walls" where PrusaSlicer says "perimeters". Tell the model which slicer and version you use.
| Setting | What it does | Typical start (0.4 mm nozzle) | Say it like |
|---|---|---|---|
| Layer height | thickness per layer; at most ≈ 75% of nozzle diameter | 0.2 mm; 0.1–0.12 fine; 0.28 draft | "0.2 mm, variable layer height on the curved top" |
| First layer | height, speed, temperature and squish of layer one | ≈ 0.2 mm, slow | "My first layer has gaps: what to adjust?" |
| Perimeters / walls | number of outline loops | 2–4 | "4 walls for this bracket" |
| Top / bottom layers | solid skins | ≈ 4–6 | "Enough top layers to avoid pillowing" |
| Infill | density and pattern (grid, gyroid, cubic, lightning) | 15–20% | "Gyroid 20%" |
| Retraction | filament pull-back on travel | short on direct drive (≈ 0.5–2 mm), longer on Bowden (≈ 3–6 mm) | "Retraction test for PETG on a direct-drive extruder" |
| Flow | extrusion multiplier | calibrate, typically near 0.9–1.0 | "Flow calibration steps for OrcaSlicer" |
| Pressure / linear advance | compensates nozzle pressure for sharp corners and even lines | calibrate per filament | "Pressure advance calibration" |
| Cooling | part fan | high for PLA; low or off for ABS, ASA | "Fan settings for ASA in an enclosure" |
| Brim / raft / skirt | adhesion and priming | brim for warp-prone parts | "5 mm brim on the corners only" |
| Supports | type, interface, Z gap | tree/organic for figurines | "Organic supports, painted only under the chin" |
| Seam | where loops start | rear or aligned | "Seam on the hidden back corner" |
| Ironing | a hot pass over top surfaces to smooth them | top surfaces only | "Iron the lid top" |
| Modifiers | different settings inside a region | around holes or bosses | "More walls around the screw holes only" |
| Input shaping | firmware compensation for frame resonance | per printer | "Ringing after corners: is it resonance?" |
Troubleshooting from photos
Give the model a sharp, well-lit photo from several angles (include the first layer and a ruler or coin for scale), plus printer, slicer, material, temperatures, speeds and what changed since the last good print.
| Symptom | Likely causes | First thing to try |
|---|---|---|
| Stringing | nozzle too hot, short retraction, wet filament | lower temperature 5–10 °C, tune retraction, dry the filament |
| Warping, corners lifting | poor adhesion, drafts, high-shrink material | clean the bed, add a brim, enclosure, round the corners |
| Elephant's foot | first layer squished too much, bed too hot | raise Z offset slightly, slicer compensation, bottom chamfer |
| Under-extrusion (gaps, weak walls) | partial clog, wet filament, too fast, too cool | slow down, raise temperature, check the nozzle and extruder |
| Layer shift | loose belt, collision, too much acceleration | check belts and pulleys; look for curled edges the nozzle hit |
| Ringing / ghosting | frame resonance | input shaping, lower acceleration |
| Pillowing (bumps on top) | too few top layers, weak cooling | more top layers, more fan |
| Layer splitting | too cool, drafts (ABS, ASA) | enclosure, hotter nozzle, less fan |
| Spaghetti | part came loose | first layer and adhesion |
| Resin: part stuck to the film, not the plate | poor plate adhesion, too few bottom exposures, suction | level the plate, raise bottom exposure, angle and hollow |
Brief the model
Each input has a slot in the prompt skeleton (see Prompting fundamentals); the
Slot column says where it goes.
| Input | Why it matters | Example | Slot |
|---|---|---|---|
| Purpose and loads | sets material, orientation and wall thickness | "Holds a 1.5 kg tablet at 60° on a desk" | <context> |
| Measured mating dimensions | fits come from real numbers | "Shaft is 6.00 mm with a D-flat 4.5 mm across" | <context>; photos with a ruler in <materials> |
| Fit type per interface | press, sliding or loose need different clearances | "Press fit on the shaft, sliding fit on the lid" | <requirements> |
| Printer, nozzle, build volume | defines limits and splits | "Bed-slinger, 0.4 mm nozzle, 250 × 210 × 220 mm" | <context> |
| Material | heat, flexibility, warping | "PETG, will sit in a sunny window" | <context> |
| Hardware on hand | lets the design use it | "M3 × 10 screws, M3 heat-set inserts, 608 bearings" | <context> |
| Cosmetic face | the face to keep off the bed and away from supports | "The front must be clean" | <requirements> |
| Environment | outdoor UV, water, heat, food | "Outdoors, full sun" | <context> |
| Output format | code you can run and edit | "OpenSCAD, parameters at the top, Customizer comments" | <output_format> |
| Your skill level and tools | what explanations you need | "First time with OpenSCAD; I use PrusaSlicer 2.9" | <context> |
What to ask for
| Stage | Deliverables to ask for by name |
|---|---|
| Requirements | requirements list with numbers (loads, sizes, fits, environment); material recommendation with reasons; questions the model needs answered |
| Design | parametric OpenSCAD or CadQuery model; parameter table; print-orientation recommendation; hardware bill of materials; exploded description for multi-part designs |
| Validation | tolerance test coupon; a short test-slice of the critical feature; a printability review (overhangs, bridges, thin walls, supports) |
| Slicing | starting slicer profile for your slicer and material; modifier suggestions; estimated weak points |
| Printing and fixing | diagnosis from photos; calibration sequence for a new filament (temperature tower, retraction, flow, pressure advance) |
| Post-processing | support removal plan; sanding, priming and painting steps; insert installation; resin wash and cure; annealing notes (with the warning that parts shrink) |
| AI meshes | repair checklist; scale to a stated height; hollowing and drain holes; split plan with pins |
The prompt chain
The main deliverable is a functional printed part: from caliper measurements to a parametric OpenSCAD or CadQuery model with clearances, a print orientation and starting slicer settings, reviewed for printability before the first print. Run the four prompts in order and paste each answer into the next.
1. Interview
Use before any code: the model asks what an experienced designer asks before modeling a functional part.
<context>
I need a printed [part, e.g. replacement knob for a stove's D-shaft].
Printer: [printer: open FDM | enclosed FDM | MSLA resin | print service].
I'm new to CAD.
</context>
<task>
Interview me the way a designer scopes a functional printed part,
before any modeling. Don't design anything yet.
</task>
<requirements>
- At most 10 questions, grouped: function and loads; mating parts
and measurements; environment (heat, sun, water, food contact);
printer and material; hardware on hand.
- For each question: why it matters to the design, and typical
answers.
- Tell me exactly what to measure with calipers and how (e.g. a
shaft's diameter at three points, the D-flat across), to 0.05 mm.
</requirements>
<process>
Ask all the questions in one message, then stop and wait. When I
answer, restate the requirements as a numbered list with values,
write [NEEDS MEASUREMENT] for any dimension I haven't given, and
end with a list of the assumptions you made.
</process>2. Options
Use once the requirements are fixed: ways to make the part that differ in orientation, assembly or hardware.
<materials>
[paste the requirements list from stage 1]
</materials>
<task>
Propose [number of approaches: 2 | 3] materially different design
approaches for this part, so I can choose one to model.
</task>
<requirements>
- The approaches differ in how the part is made or held together:
one piece or two; printed threads, heat-set inserts or nut traps;
print orientation.
- For each: print orientation and why (layer direction vs. the
load); supports needed; material; hardware; fit and clearance per
interface; rough print time; the main way it fails.
- Apply the DfAM rules: overhangs within 45° of vertical, bridges
under about 10 mm, walls at least 2 lines wide.
- Never invent numbers, names, quotes or sources: write
[NEEDS MEASUREMENT] for missing dimensions and [NEEDS SOURCE] for
datasheet values.
</requirements>
<output_format>
A short section per approach, then a comparison table (strength,
printability, fit accuracy, print time, cost) and a recommendation.
</output_format>
<process>
Stop after the recommendation and wait for my choice. End with a
list of the assumptions you made.
</process>3. Produce
Use after you pick an approach: the full skeleton, filled in for a parametric model you can print and tune.
<materials>
[paste the requirements from stage 1 and the chosen approach from
stage 2; add photos of the mating parts next to a ruler]
</materials>
<context>
Part: [part, e.g. knob for a 6.0 mm D-shaft with a 4.5 mm flat].
Printer: [printer, e.g. bed-slinger, 0.4 mm nozzle, 250 × 210 ×
220 mm build volume].
Material: [material: PLA | PETG | ASA | TPU | nylon].
Slicer: [slicer and version, e.g. PrusaSlicer 2.9].
I'm new to [CAD tool: OpenSCAD | CadQuery | build123d]; comment the
code so I can change it.
</context>
<task>
Write a parametric model of this part in that CAD tool, with its
print orientation and starting slicer settings, ready for a test
print.
</task>
<requirements>
- Every dimension a named parameter at the top, with a comment and
units (mm); in OpenSCAD add Customizer ranges.
- One clearance parameter per interface, per side; default for
[fit: press ≈ 0.15 mm | sliding ≈ 0.3 mm | loose ≈ 0.45 mm].
A hole or slot grows by twice the clearance.
- Derived values computed from parameters, never typed in.
- Model it in print orientation, flat face on z = 0: no overhang
beyond 45° from vertical; horizontal holes teardrop-shaped;
bottom edges chamfered 0.5 mm (no bottom fillets); inside corners
filleted.
- Walls at least [minimum wall, e.g. 2 mm], a multiple of the line
width.
- Hardware sizes (insert holes, screw heads) from datasheets: write
[NEEDS SOURCE] if you don't have the datasheet value.
- CadQuery or build123d: only documented API calls; say which
version you assume; export STEP and STL.
- Never invent numbers, names, quotes or sources: write
[NEEDS MEASUREMENT] for any dimension I didn't give.
</requirements>
<quality_bar>
Before answering, check your draft against:
- Every fit dimension is my measurement plus the clearance, applied
on each side.
- In the chosen orientation the load runs along the layers, not
across them.
- It prints without supports, or the draft says where they go.
- Changing one parameter (e.g. the shaft diameter) updates
everything that depends on it.
- The code uses only real functions and would render cleanly.
</quality_bar>
<output_format>
The code in one block; a parameter table (name, value, what it
controls); the print orientation and why; a slicer settings table
(layer height, walls, top and bottom layers, infill, supports,
brim); the three features most likely to need tuning after a test
print.
</output_format>
<process>
Ask me up to 3 questions first if anything missing would change
your answer; otherwise go on. End with a list of the assumptions
you made.
</process>4. Review
Run this in a fresh chat with only the requirements and the design: a model reviewing its own draft shares its blind spots, so it rarely catches its own wrong clearance. The same prompt works on a model you downloaded.
<materials>
<brief>
[paste the requirements from stage 1]
</brief>
<design>
[paste the code and notes from stage 3, plus screenshots from three
angles in print orientation]
</design>
</materials>
<task>
Review this part for printability and fit before I print it, as a
DfAM review. Critique only: don't rewrite the code.
</task>
<requirements>
- Score each 1-5 with evidence from the code: dimensions vs.
measurements; parametric (one change propagates); fits and
clearances; orientation vs. loads; overhangs and supports; walls
and minimum features; hardware sizes; code correctness (real
functions, renders cleanly).
- Recompute every derived dimension yourself, including the
clearance on both sides of each hole and slot.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where a datasheet value is assumed.
</requirements>
<quality_bar>
Before answering, check your review against:
- Every score cites a line of code or a number.
- Each fix is concrete: a parameter value, a geometry change or a
slicer setting.
- It names the one feature to test-print first, as a thin slice.
</quality_bar>
<output_format>
A rubric table; fixes ranked by the risk of a failed or unusable
print; a 10-minute test print of the riskiest feature.
</output_format>
<process>
End with a list of the assumptions you made.
</process>Goals and loops
In an agent that runs commands and checks its own work, such as Claude Code, the Produce stage can run until it
measurably passes: /goal keeps starting turns until a condition holds, and /loop repeats a prompt or skill on
an interval. The checker reads only the conversation, so every condition below names a check whose output Claude
prints, the constraints that must survive, and a bound. How to write your own:
Goals and loops.
| Task | Completion condition |
|---|---|
| Parametric model | /goal openscad -o part.stl part.scad finishes with no WARNING lines (show its output), every dimension is a named parameter at the top, and python -c "import trimesh; print(trimesh.load('part.stl').is_watertight)" prints True; or stop after 15 turns |
| Tolerance test coupon | /goal the coupon script writes one STL per clearance from 0.1 to 0.5 mm in 0.1 mm steps (list the files and their sizes), each labeled with its clearance; or stop after 8 turns |
| Clean up a generated mesh | /goal the repaired model is one watertight body (print trimesh's is_watertight and body count) and its height is 120 mm ±0.5 at the intended orientation; or stop after 10 turns |
Loops that fit: during a long print, /loop 10m reading your printer's API (OctoPrint or Moonraker) to report progress and flag a temperature drop or a stalled job.
What a checker can't judge: fit, strength and surface finish. Only a test print in your material on your printer settles those.
Prompt library
One entry per deliverable. Quick is the minimum that still works; Full fills in the skeleton.
Material choice
Stage: options · Use when: you know what the part has to survive but not which plastic to print it in.
Quick
Compare [number: 2 | 3 | 4] materials for [part and conditions, e.g. a
bracket in a parked car, summer sun, light load] on heat, UV,
creep, ease of printing and what my printer needs (enclosure,
hardened nozzle, drying). Recommend one, then stop. Give typical
ranges only and say when the spool label or datasheet wins.Full
<materials>
[paste the spool labels or datasheets of filaments you already own]
</materials>
<context>
Part: [part and use, e.g. a hook for a garden hose, 3 kg, constant].
Where: [conditions: indoors | hot car | outdoor sun | wet | near food].
Printer: [printer, e.g. open-frame bed-slinger, brass 0.4 mm nozzle,
no enclosure].
</context>
<task>
Compare candidate materials for this part and recommend one, so I
buy the right filament before designing.
</task>
<requirements>
- Compare 2-4 of: PLA, PETG, ABS, ASA, TPU, nylon, PC,
fiber-filled, standard or tough resin.
- For each: heat resistance; UV and water; creep under a constant
load; layer adhesion; ease of printing; printer needs (enclosure,
all-metal hotend, hardened nozzle, drying).
- Temperatures as typical ranges only; the label or datasheet wins.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] for any property you can't support.
</requirements>
<quality_bar>
Before answering, check your draft against:
- The pick survives the worst condition I named (heat, sun, load).
- It prints on my printer as described, or says what to change.
- Food, child or safety use is flagged as needing a real test, not
settled by the material choice.
</quality_bar>
<output_format>
Comparison table (material, heat, UV and water, creep, ease,
printer needs), then the recommendation in two sentences.
</output_format>
<process>
Stop after the recommendation and wait. End with a list of the
assumptions you made.
</process>Tolerance test coupon
Stage: produce · Use when: first on any new printer, nozzle or filament, before you design anything that has to fit.
Quick
Write an OpenSCAD tolerance test: five 10 mm pins, and a bar with five
holes for per-side clearances of 0.1 to 0.5 mm (10.2 to 11.0 mm),
each value engraved, flat on the bed, no supports. Check that every
hole = pin + 2 × clearance, and tell me how to read the result as
press, sliding and loose fits.Full
<context>
Printer: [printer, e.g. bed-slinger, 0.4 mm nozzle].
Material: [material: PLA | PETG | ASA | TPU | nylon].
Slicer: [slicer and version, e.g. OrcaSlicer 2.3].
I'll use the result to set the clearance parameter in every design.
</context>
<task>
Write an OpenSCAD tolerance test coupon that shows which clearance
gives a press, sliding and loose fit on this printer.
</task>
<requirements>
- Five 10 mm pins, 8 mm tall, on a bar; a second bar 80 × 16 × 5 mm
with five through holes for per-side clearances of
[clearance steps, e.g. 0.1, 0.2, 0.3, 0.4, 0.5 mm], at the pins'
spacing.
- Engrave each clearance value beside its hole, 0.6 mm deep.
- Flat on the bed, no supports, bottom edges chamfered 0.4 mm.
- Pin diameter and the clearance list as parameters.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing.
</requirements>
<quality_bar>
Before answering, check your draft against:
- Each hole diameter = pin + 2 × clearance (10.2 to 11.0 mm with
the default steps).
- Both bars print in under about 30 minutes at normal settings.
- The engraved text is large enough to print (about 5 mm tall).
</quality_bar>
<output_format>
The code; then how to read the result, and how to measure the pins
with calipers to separate printer error from design error.
</output_format>
<process>
End with a list of the assumptions you made.
</process>Slicer profile for a part
Stage: produce · Use when: the model is done and you want starting settings for this part, material and slicer.
Quick
Give starting [slicer and version, e.g. PrusaSlicer 2.9] settings for
[part and use, e.g. a wall bracket holding 4 kg] in [material, e.g.
PETG], 0.4 mm nozzle: layer height, walls, top and bottom layers,
infill, supports, brim, seam, plus modifiers around the screw holes.
Use my slicer's own setting names and mark any you're unsure of.Full
<materials>
[paste or attach screenshots of the part in the slicer, or the code
and dimensions]
</materials>
<context>
Part: [part and use, e.g. a wall bracket holding 4 kg].
Material: [material, e.g. PETG]. Printer: [printer, e.g. direct-drive
bed-slinger, 0.4 mm nozzle]. Slicer: [slicer and version, e.g.
OrcaSlicer 2.3].
Priority: [priority: strength | surface finish | speed | accuracy].
</context>
<task>
Write a starting slicer profile for this part so the first print is
usable.
</task>
<requirements>
- Cover layer height, line width, walls, top and bottom layers,
infill density and pattern, supports (type and where), brim, seam
position and cooling; speeds only where they matter for this part.
- More walls before more infill for strength; modifiers for local
changes (around holes and bosses, the cosmetic face).
- Use my slicer's own name for each setting; write [VERIFY] where
you're unsure it exists in my version.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing.
</requirements>
<quality_bar>
Before answering, check your draft against:
- The settings serve my priority, and the trade-off is named.
- Layer height is at most about 75% of the nozzle diameter; walls
are a whole number of lines.
- The cosmetic face has no supports and no seam.
</quality_bar>
<output_format>
Table: setting (my slicer's name), value, why. Then the modifiers.
Then what to inspect on the first print.
</output_format>
<process>
Ask me up to 3 questions first if anything missing would change
your answer; otherwise go on. End with a list of the assumptions
you made.
</process>Filament calibration plan
Stage: produce · Use when: you open a new material or brand and prints look worse than before.
Quick
I switched to [material, e.g. a new brand of PETG] on [printer, e.g. a
direct-drive bed-slinger] with [slicer and version, e.g. OrcaSlicer
2.3]. Give the calibration sequence in order (temperature, flow,
pressure advance, retraction, max volumetric speed, cooling), one
variable per test, and say where each result goes in my slicer.Full
<context>
Material: [material, e.g. a new brand of PETG, opened today].
Printer: [printer and extruder, e.g. bed-slinger, direct drive, 0.4
mm brass nozzle]. Slicer: [slicer and version, e.g. OrcaSlicer 2.3].
Symptoms so far: [symptoms, e.g. stringing and rough overhangs].
</context>
<task>
Write a calibration sequence for this filament, in order, that ends
with a filament profile I can trust.
</task>
<requirements>
- Order: dry it first if it absorbs moisture; then temperature
tower; flow (extrusion multiplier); pressure or linear advance;
retraction; max volumetric speed; cooling.
- For each step: the test print (my slicer's built-in calibration
if it has one), what to look for, how to read it, where to save
the value.
- Use my slicer's own names; write [VERIFY] where you're unsure a
menu or setting exists in my version.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing.
</requirements>
<quality_bar>
Before answering, check your draft against:
- One variable per test, and each result is saved before the next.
- Temperatures start from the spool label's range.
- Firmware differences (pressure advance vs. linear advance) are
called out.
</quality_bar>
<output_format>
Numbered steps: test, settings, what good looks like, where to save
it. Then a one-line-per-step checklist to print and tick.
</output_format>
<process>
Ask me up to 3 questions first if anything missing would change
your answer; otherwise go on. End with a list of the assumptions
you made.
</process>AI mesh cleanup
Stage: produce · Use when: a text- or image-to-3D generator gave you a mesh you want to print.
Quick
I generated a figurine and exported [format: OBJ | GLB | STL]. Target:
[height, e.g. 75 mm] on [process: FDM 0.4 mm | MSLA resin]. Give the
Blender cleanup step by step: units and scale, non-manifold repair,
thin parts at final scale, a flat base, hollowing and drain holes for
resin, 3MF export. Name the menus; mark any you're unsure of.Full
<materials>
[paste or attach screenshots of the mesh from the front, side and
below, with its polygon count]
</materials>
<context>
Source: [tool and format, e.g. an image-to-3D generator, OBJ with
textures]. Target: [height, e.g. 75 mm tall] on
[process: FDM 0.4 mm | MSLA resin | SLS print service].
Blender: [Blender version, e.g. 4.5] with the 3D-Print Toolbox.
</context>
<task>
Write a step-by-step Blender plan that turns this mesh into a
printable file.
</task>
<requirements>
- Steps: units in mm and scale to the target height; fix
non-manifold edges, flipped normals, floaters and
self-intersections; find parts thinner than
[minimum thickness, e.g. 1.5 mm for FDM, 0.8 mm for resin] and
thicken or remove them; add a flat base; for resin, hollow to
about 2-2.5 mm walls with drain holes near the base; split with
alignment pins if it won't fit or needs fewer supports; export
3MF.
- Name the menus and operators; write [VERIFY] where you're unsure
they exist in my Blender version.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing.
</requirements>
<quality_bar>
Before answering, check your draft against:
- The plan ends with a manifold check that reports zero problems.
- Thickness is checked at the final printed scale, not on import.
- Resin parts have drain holes and no closed cavities.
</quality_bar>
<output_format>
Numbered steps, each with its operator and what to check before
moving on.
</output_format>
<process>
End with a list of the assumptions you made.
</process>Split a large model
Stage: produce · Use when: the model is bigger than your build volume or would need heavy supports in one piece.
Quick
My model is [model size, e.g. 320 × 180 × 260 mm]; my build volume is
[build volume, e.g. 250 × 210 × 220 mm]. Plan the split for
[process: FDM | resin]: cut planes on flat, hidden faces, alignment
(pins, keys or dovetails), glue gap, orientation per part. Check that
every part fits the build volume, brim included.Full
<materials>
[paste or attach screenshots of the model from three sides with its
overall dimensions]
</materials>
<context>
Model: [model, e.g. a 320 mm tall bust, decorative]. Build volume:
[build volume, e.g. 250 × 210 × 220 mm]. Process:
[process: FDM | MSLA resin]. Tools: [tools, e.g. Blender 4.5 and
PrusaSlicer 2.9].
</context>
<task>
Plan how to split this model into printable parts that align and
glue cleanly.
</task>
<requirements>
- Cut on flat, hidden faces, with as few parts as fit the build
volume and the fewest supports per part.
- Alignment: [alignment: 4 mm pins | dowels | keyed joints | dovetails],
with hole sizes using the clearance from my tolerance test.
- Glue gap 0.1-0.2 mm; print orientation for each part.
- Give the cut steps in Blender or the slicer's cut tool; write
[VERIFY] for any menu you're unsure of in my version.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing.
</requirements>
<quality_bar>
Before answering, check your draft against:
- Every part, with its brim, fits the build volume as oriented.
- No seam crosses a face that has to look clean.
- Pin holes allow for clearance on both sides.
</quality_bar>
<output_format>
Table: part, size as oriented, orientation, supports, alignment.
Then the cut steps.
</output_format>
<process>
End with a list of the assumptions you made.
</process>Print failure diagnosis
Stage: review · Use when: a print failed or looks wrong and you want to fix it in as few test prints as possible.
Quick
[paste or attach 2-4 sharp photos with a ruler: whole part, defect,
first layer] Printer [printer, e.g. bed-slinger, Bowden], slicer
[slicer and version, e.g. Cura 5.8], material [material, e.g. PETG],
settings [settings, e.g. 240/80 °C, 0.2 mm, 60 mm/s]. Name the defect,
rank causes, give one change per test print; never change two at once.Full
<materials>
[paste or attach 2-4 sharp, well-lit photos: the whole part, the
defect up close, the first layer, with a ruler or coin for scale]
</materials>
<context>
Printer: [printer and extruder, e.g. bed-slinger, Bowden extruder].
Slicer: [slicer and version, e.g. UltiMaker Cura 5.8].
Material: [material and storage, e.g. PETG, opened 3 months ago,
stored in the open]. Settings: [settings, e.g. nozzle 240 °C, bed
80 °C, 0.2 mm layers, 60 mm/s, retraction 5 mm, fan 50%].
Changed since the last good print: [changes, e.g. new spool, the
printer moved next to a window].
</context>
<task>
Diagnose this print from the photos and give me a test plan, so I
fix it in as few prints as possible.
</task>
<requirements>
- Name the defect by its standard term (stringing, warping,
elephant's foot, under-extrusion, layer shift, ringing, pillowing,
layer splitting).
- Rank the likely causes, saying which evidence in the photos or
settings points to each.
- One change per test print, in order, with the result to expect.
- Never invent numbers, names, quotes or sources: write
[NEEDS SOURCE] where support is missing, and [VERIFY] for any
setting name you're unsure of in my slicer version.
</requirements>
<quality_bar>
Before answering, check your draft against:
- The diagnosis matches what the photos show, not just the most
common defect.
- Cheap, reversible fixes (drying, cleaning the bed, temperature)
come before hardware changes.
- No test changes more than one setting.
</quality_bar>
<output_format>
Defect name; causes ranked with evidence; a numbered test plan
(change, why, expected result).
</output_format>
<process>
Ask me up to 3 questions first if anything missing would change
your answer; otherwise go on. End with a list of the assumptions
you made.
</process>Worked example
Weak prompt
Make me a phone stand I can 3D print.What's wrong
- No phone dimensions or case thickness, viewing angle or charging cable, so every size is a guess.
- No printer, material or slicer, so wall thickness and settings are generic.
- No fit or clearance, so the phone jams or rattles.
- Nothing about orientation, so the design probably needs supports and snaps along its layers.
- No output format: you get an essay or a description of an STL instead of code you can run.
Strong prompt
<context>
Printer: bed-slinger FDM, 0.4 mm nozzle, 250 × 210 × 220 mm build
volume. Material: PETG. Slicer: PrusaSlicer 2.9. First time with
OpenSCAD.
Phone in its case, measured with calipers: 78.2 mm wide, 11.8 mm
thick. It stands in portrait on a desk while charging over USB-C.
</context>
<task>
Write a parametric OpenSCAD phone stand that I can print and adjust
after one test print.
</task>
<requirements>
- Viewing angle 65° from horizontal. Lip 10 mm tall with a 14 × 8 mm
cable slot. Base 90 mm wide × 100 mm deep so it won't tip; two
10 mm recesses, 1 mm deep, for rubber feet.
- Parameters at the top with Customizer ranges: phone thickness,
clearance per side (default 0.5 mm, because the phone drops in),
angle, lip height, cable slot size, wall (default 3 mm).
- Print on its side so the layer lines run along the bending load,
with no supports; chamfer bed edges 0.5 mm; fillet the inside
corner where the back meets the base (r = 5 mm).
- Never invent numbers, names, quotes or sources: write
[NEEDS MEASUREMENT] for any dimension I haven't given.
</requirements>
<quality_bar>
Before answering, check your draft against:
- The phone slot = phone thickness + 2 × clearance.
- The phone's center of mass sits over the base, so it won't tip.
- No overhang beyond 45° in the print orientation.
- Every derived dimension is computed from parameters.
</quality_bar>
<output_format>
The code, then a parameter table, why that orientation, and
starting PrusaSlicer settings for PETG.
</output_format>
<process>
End with a list of the assumptions you made.
</process>What came back
Illustrative, abridged:
// Phone stand. Units: mm. Prints on its side.
phone_t = 11.8; // [8:0.1:16] phone thickness, in its case
clear = 0.5; // [0.2:0.1:1.5] clearance per side
angle = 65; // [50:1:80] viewing angle from horizontal
lip_h = 10; // [5:1:20] lip height
wall = 3; // [2:0.5:5] wall thickness
width = 90; // [70:1:120] stand width
slot_w = phone_t + clear; // phone slot
...
module profile() { ... } // side profile, in the XY plane
linear_extrude(width) profile(); // profile flat on the bed
Orientation: on its side, so each layer is the whole profile
and bending runs along the lines, not across them.
Tip check: the phone's center of mass is about 34 mm behind
the lip, well inside the 100 mm base.
PrusaSlicer 2.9, PETG: 0.2 mm layers, 4 perimeters, 5 top and
bottom layers, 20% gyroid, no supports, no brim.
Tune after a test print: clearance, lip height, angle.
Assumptions: the case has no ring grip; the desk is flat; ...How an expert judged it
- Parametric and orientation: pass. Named parameters with Customizer ranges and units, printed on its side so the layers carry the bending load. The tip check holds: the middle of a ≈ 160 mm phone sits 80 mm up the 65° back, ≈ 80 × cos 65° ≈ 34 mm behind the lip.
- Fit: fail.
slot_w = phone_t + clearadds the clearance once, although the comment says it is per side. The phone gets 0.25 mm a side instead of 0.5 mm, and slots print slightly small, so it may jam. This is the first<quality_bar>check, and the answer skipped it. Fix:slot_w = phone_t + 2 * clear. - Slicer settings: pass. They use PrusaSlicer's own names (perimeters, not walls) and match the part.
- What a pro would add: print a 10 mm wide slice of the profile first to test the slot before the 90 mm stand.
The follow-up
slot_w adds the clearance once, but clear is per side. Change it to
phone_t + 2 * clear and check every other fit in the code for the
same mistake. Then add a test_slice parameter that cuts the stand to
a 10 mm wide slice, so I can test the slot in a 15-minute print
before printing the whole stand.Judge the output
These checks are the same ones written into every <quality_bar> on this sheet, adapted to each deliverable; use the
table to judge what comes back.
| Check | The expert question | Red flag |
|---|---|---|
| Dimensions | do the numbers match your measurements, in mm? | magic numbers in the code; inches mixed in |
| Parametric | can you change one parameter and everything follows? | hard-coded positions that break when a size changes |
| Fits | is there an explicit clearance per interface, applied on both sides of each hole or slot? | parts designed exactly to size; a per-side clearance added once |
| Orientation | is the load running along the layers? | a hook or clip whose stress splits layers apart |
| Overhangs and supports | can it print support-free, or does it say where supports go? | floating geometry; 90° overhangs with no comment |
| Walls and features | nothing thinner than ≈ 2 lines; holes sized for the hardware | 0.5 mm walls; screw holes at nominal size |
| Hardware | inserts, nuts and screws modeled with real sizes from datasheets | printed M3 threads |
| Code runs | does it render without warnings? Did the model use real functions? | invented functions or library calls (common with CadQuery and build123d) |
| Mesh health (AI meshes) | manifold, scaled, thick enough, flat base | "should be printable" with no checks |
Follow-up critique prompts
- "List every hard-coded number in this code and turn the ones
that depend on other dimensions into derived values."
- "Which feature fails first under [load, e.g. 2 kg hanging from
the hook]? Change the orientation or geometry to fix it."
- "Where would a slicer add supports? Redesign to remove them."
- "Make a 10-minute test print of just the
[feature: hinge | thread | fit]."
- "Check this against the OpenSCAD documentation: is every
function and argument real?"
- "The lid is too tight by about 0.2 mm. Which parameters change,
and to what?"Pitfalls
- No measurements. "A knob for my oven" without the shaft diameter and flat is a guess.
- Zero clearance. Parts modeled exactly to size do not fit; holes print small.
- Clearance applied once. A per-side gap has to be added on both sides of a hole or slot.
- Ignoring orientation. Strong in CAD, snaps at the first layer line in use.
- Trusting library calls. Models invent CadQuery, build123d and OpenSCAD functions or arguments; run the code and paste errors back.
- Inches and millimeters mixed. Say "mm" once and check the scale in the slicer.
- AI meshes printed raw. Unscaled, non-manifold, with paper-thin swords and floaters.
- Changing five settings at once when troubleshooting, so you never learn which one fixed it.
- PLA in the sun. It softens in a hot car or window.
- Printed threads for everything. Use inserts or nuts for anything you will tighten repeatedly.
- Food and safety claims. "Food-safe filament" doesn't make layer lines or a brass nozzle food-safe; a model's reassurance isn't a test.
- Reviewing in the same chat. The model defends its own code; run the printability review in a fresh chat.
References
- OpenSCAD documentation (opens in a new tab) and cheat sheet (opens in a new tab): language reference and every built-in on one page
- OpenSCAD User Manual: Customizer (opens in a new tab): parameter comments that become sliders
- CadQuery documentation (opens in a new tab): Python code-CAD with STEP export
- build123d documentation (opens in a new tab): Python code-CAD on the OpenCascade kernel
- FreeCAD (opens in a new tab): open-source parametric CAD
- Prusa Knowledge Base: materials guide (opens in a new tab): print settings and properties per filament
- Prusa: Modeling with 3D printing in mind (opens in a new tab): design rules for FDM
- Hubs: How to design parts for FDM 3D printing (opens in a new tab): overhangs, bridges, holes, pins
- Formlabs: Guide to stereolithography (SLA) 3D printing (opens in a new tab): how resin printing works
- PrusaSlicer (opens in a new tab), OrcaSlicer (opens in a new tab) and UltiMaker Cura (opens in a new tab): common slicers
- Ellis' Print Tuning Guide (opens in a new tab): systematic calibration, from first layer to pressure advance
- Teaching Tech 3D Printer Calibration (opens in a new tab): step-by-step calibration with generated test prints
- Simplify3D: Print Quality Troubleshooting Guide (opens in a new tab): defects with photos, causes and fixes
- 3MF Consortium (opens in a new tab): the 3MF file format specification
- Blender 3D-Print Toolbox (opens in a new tab): manifold, thickness and overhang checks for meshes