Printy3D

Recipes

Repair

Repair rebuilds a model as one print-ready solid: holes closed, walls thick enough to print, narrow gaps filled, the textures projected back on. Every setting is optional; by default each comes from the engine's recommendation for your file.

Uploaded
Repaired
What a repair does. Left, the file as uploaded: three round holes through its surface, so it is not a solid. Right, a repair with only the print size set: one closed, watertight solid (3,038,596 faces), the holes capped with plain patches, the texture carried over round them. This copy of the vase has the holes cut in on purpose. Model: Vase, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D (holes cut by Printy3D)

Running a repair#

POST/v1/jobsjobs:write
curl -sS "$API/v1/jobs" -H "Authorization: Bearer $PRINTY3D_API_KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "input_file_id": "'"$FILE_ID"'",
    "recipe": "repair",
    "params": {
      "printer": "mimaki",
      "scale": {"mode": "target", "value": 6, "unit": "in"},
      "quality": "high"
    }
  }'

A repair takes minutes; poll it as described in Jobs & polling. Unknown parameters and values out of range are refused with 422 validation_failed before anything runs.

Where each setting comes from#

You only send what you want to decide. For every setting you leave out, the API takes, in this order:

  1. Your value, when you sent one.
  2. For wall_thickness_mm and clearance_mm: the printer's value, when you named one.
  3. The profile's value, for the fields a named profile fixes.
  4. With profile: "recommended" (the default): the engine's recommendation for this file, measured at the print size.
  5. The documented default listed below.

scale is the exception: unless you set it, every profile uses the engine's print-size window, so a model whose longest side is under 1 inch or over 20 inches is scaled to the nearest bound and anything in between keeps its size. Send {"mode": "none"} to keep the file's size exactly.

The result says what actually ran: result.applied.params holds every value and result.applied.sources where each came from (explicit, printer, profile, recommended or default). job.params echoes your request as you sent it.

Profiles#

profile"recommended" | "character" | "mechanical" | "vehicle" | "custom"default "recommended"

Chooses where the settings you leave unset come from. Any setting you send beside it overrides that one field.

profileForFixes
recommendedAny model (default)Nothing: every unset field takes the engine’s recommendation for your file.
characterFigures and organic modelsquality high, wall 0.7 mm, clearance 1.5 mm, cut_transparent and mix_textures on
mechanicalParts that must keep their gapsquality high, wall 1.0 mm, clearance 0, cut_transparent on, mix_textures off. Pair with preserve_shells to keep separate shells separate.
vehicleVehicles and hard-surface modelsquality high, wall 0.8 mm, clearance 1.0 mm, cut_transparent and mix_textures off
customFull controlNothing except scale: unset fields keep the documented defaults.

The named profiles also set hollow_mm 0, target_faces 0, close_holes_mm 0, preserve_shells false and all smoothing off. GET /v1/profiles returns these values.

recommended: 171.4 cm³
character: 174.1 cm³
mechanical: 54.2 cm³
vehicle: 174.8 cm³
custom: 176.4 cm³
Profiles. One file, one repair per profile, cut through the middle of the bus. This scan has an empty cabin. mechanical fills no gaps (clearance 0), so the cabin stays hollow. Every other profile fills narrow gaps, which seals the windows and doors, and the sealed cabin then comes out solid: over three times the volume. Printed volume under each. Model: Bus, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D

Printer#

printer"mimaki" | "fdm" | null

The printer the model is for. It fills wall_thickness_mm and clearance_mm when you leave them unset, ahead of the profile and the recommendation: mimaki (full-colour inkjet) 0.7 mm wall and 1.5 mm clearance, fdm 1.5 mm wall and 0.3 mm clearance.

For a STEP input only the wall is taken: a CAD design's gaps are intended, and clearance would close them.

printer: mimaki (wall 0.7 mm)
printer: fdm (wall 1.5 mm)
Printer presets. printer fills the wall and clearance you leave unset. Printed 100 mm wide, the three thinnest pins, shown here, are about 1.8, 1.2 and 0.95 mm thick. mimaki (full-colour inkjet) asks for a 0.7 mm wall, so they keep their sizes. fdm asks for 1.5 mm, so the two thinnest grow to it. fdm also fills only gaps up to 0.3 mm, mimaki up to 1.5 mm. Model: Test part with five round pins, Printy3D (generated), CC0 1.0

Size and quality#

quality"draft" | "standard" | "high"default "standard"

The resolution of the rebuild. draft uses the engine's coarsest grid (100 layers) and a 2048 px texture, standard 500 layers and 4096 px, high 1000 layers (1500 when all smoothing is off) and 8192 px. Higher quality keeps more detail and takes longer.

draft: 100 layers, 2048 px, 968,166 faces
standard: 500 layers, 4096 px, 1,644,552 faces
high: 1000 layers, 8192 px, 3,285,966 faces
Quality. quality sets the engine's voxel grid and texture size. Look at the carving's edges; the wood grain sharpens only slightly: draft is fastest, high keeps the finest detail and costs the most run time. Model: Garuda and Vishnu, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
scale.mode"none" | "target" | "multiplier"default "none"

none keeps the file's size; target scales the model so its longest side is value unit; multiplier multiplies its size by value. Leaving scale out applies the print-size window described above.

scale.valuenumber | null> 0, ≤ 10,000

Required unless the mode is none.

scale.unit"mm" | "cm" | "in"default "mm"

Unit of a target value: millimetres, centimetres or inches.

Walls and gaps are millimetres of the printed object, so the print size matters: the engine measures and recommends for the size you will print. Inspect's recommended_by_scale gives a ready parameter set per size.

target 2 in (printed 51 mm wide)
target 10 in (printed 254 mm wide)
Print size. Walls and gaps are millimetres of the printed object, so the print size changes the result. Both repairs are drawn at the same on-screen size. At 2 in the three thinnest pins shrink below the 1 mm wall and grow to it, so they end up alike. At 10 in they are all thick enough already and keep their proportions. Model: Test part with five round pins, Printy3D (generated), CC0 1.0

Walls and gaps#

wall_thickness_mmnumberdefault 10–10

The minimum wall to enforce. Walls thinner than this are thickened so the print stays intact.

The engine may raise it: the wall is at least four voxels of its grid (a 0.7 mm request ran at 1.46 mm on a 20-inch print) and at most 10 % of the longest side. result.applied.wall_thickness_applied_mm reports the wall used and wall_thickness_clamped whether it differs from yours.

0.5 mm: 34.6 cm³
1.0 mm: 34.7 cm³
2.0 mm: 35.6 cm³
Wall thickness. Walls thinner than wall_thickness_mm are thickened to it, and thicker ones are left alone. Printed 120 mm tall, the chair's cross wires change little at 0.5 and 1 mm and fatten at 2 mm, while the thick legs barely change. Model: Patchwork Chair, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
clearance_mmnumberdefault 1.50–10

Gaps between surfaces narrower than this are filled and fused, so fingers, sleeves and props that nearly touch print as one solid instead of a fragile slit. Larger values fuse more; 0 keeps every gap. It can change far more than the gaps: when closing them seals a cavity, the cavity comes out solid. Use 0 to keep a hollow scan hollow.

0 mm: 50.9 cm³
1 mm: 174.3 cm³
3 mm on a car engine: filled gaps coloured
Clearance. Gaps narrower than clearance_mm are filled and fused. Left, the bus scan at 0 keeps every gap and its hollow cabin. Middle, at 1 mm the narrow gaps round the windows and doors close, and the sealed cabin comes out solid. Right, a different part: a car engine printed 60 mm tall, painted by how far 3 mm of clearance moved each point against 0. The narrow slots round the cylinders fill (up to 0.9 mm), the open bores stay. Model: Bus, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D; Car Engine, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
preserve_shellsbooleandefault false

Keep parts that do not touch as separate watertight shells, by skipping the step that closes small gaps. Off, parts that nearly touch merge into one solid. Parts that really touch merge either way, so this helps collections of separate parts more than tightly fitted assemblies.

preserve_shells: false, 3 shells
preserve_shells: true, 4 shells
Preserve shells. Off, a repair closes small gaps, so parts that nearly touch merge. On, it skips that step and parts that do not touch stay separate. This vase was cut into rings with gaps of 0.25 to 1.5 mm; each resulting shell has its own colour. The two narrowest gaps close either way and the 0.75 and 1.5 mm ones stay open either way; the 1 mm cut at the base of the neck stays open only with preserve_shells on. Parts that really touch merge either way. Model: Vase, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D (cut into rings by Printy3D)
hollow_mmnumberdefault 00–20

Hollow the model and keep a shell of this thickness; 0 keeps it solid. Hollowing saves material on large prints. Check whether your printing process needs drain holes.

0 (solid): 321.5 cm³
2 mm: 118.7 cm³
5 mm: 224.5 cm³
Hollowing. hollow_mm hollows the solid and keeps a shell of about that thickness; 0 keeps it solid. The volume under each is what you would print. Model: Christmas Bear, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D

Surface and mesh#

close_holes_mmnumberdefault 00–2000

Holes whose perimeter is at most this many millimetres are capped before the model is rebuilt; 0 caps none. A hole left open still comes out closed, because every repair ends watertight, but as an uneven crater instead of a clean cap. The engine's recommendation is the largest hole's perimeter plus 10 %.

0 mm: none closed
30 mm: the small one closed
70 mm: two closed
150 mm: all closed
Close holes. Holes whose perimeter is at most close_holes_mm are capped flat before the model is rebuilt. This vase has three round holes, about 19, 50 and 94 mm round. A hole left open still comes out closed, because every repair ends watertight, but as an uneven crater; each step up here turns one more into a clean cap. Model: Vase, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D (holes cut by Printy3D)
target_facesintegerdefault 00–5,000,000

Reduce the result to about this many faces for a smaller file; 0 keeps the face count the rebuild produced. Fewer faces means less detail.

0 (keep): 1,644,552 faces
20,000 faces
2,000 faces
Target faces. 0 keeps the face count the reconstruction produced; a number reduces the mesh to about that many faces. Fewer faces make a smaller file, and at some point the shape shows it: the carving's curves turn into flat facets. Model: Garuda and Vishnu, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D

Smoothing#

The rebuild works on a voxel grid, which can leave small stair-steps on curved surfaces. Three settings smooth them; all are off in the named profiles.

smoothing.post_constructintegerdefault 00–50

Smoothing iterations on the output mesh after it is rebuilt. 0 keeps fine surface detail; higher values soften sharp edges. Expect a small effect on a clean model, and little more above about 30.

0
30
Where 30 changed the surface
Post-construct smoothing. Smoothing iterations on the rebuilt mesh. The effect is small on a clean model: here, at draft quality, 30 iterations move 0.2% of the surface by more than 0.1 mm, at most 0.4 mm, all on sharp edges (amber, right). Raising it from 30 to 50 changed almost nothing on this model. Use it to soften a rough result; do not expect it to reshape one. Model: Garuda and Vishnu, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
smoothing.clrintegerdefault 00–256

Smoothing inside the clearance stage. Higher values round off the areas that stage filled, and leave the rest of the surface alone; 0 keeps the finest detail. It does nothing when clearance_mm is 0 or the part has no narrow gaps.

0
128
Where 128 changed the surface
Clearance smoothing. Smooths only what the clearance stage changed, so with clearance_mm at 0, or on a part with no narrow gaps, it does nothing. On this engine with 3 mm of clearance, 128 rounds off the filled areas: 3.2% of the surface moves more than 0.5 mm, at most 3.3 mm (coloured, right), and the rest stays put. It defaults to 0, which keeps the finest detail. Model: Car Engine, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
smoothing.pre_smoothboolean | null

Subdivide the input before it is voxelized, which rounds off coarse facets and reduces stair-stepping. The extra faces are used while the model is rebuilt; the result's face count stays about the same. Unset keeps the engine's default, on; turn it off to keep sharp original edges and for LiDAR point clouds.

pre_smooth: false
pre_smooth: true
Pre-smoothing. Pre-smoothing subdivides the input before it is voxelized. On a coarse model the difference is large: off keeps every flat facet and hard edge of this 966-face head, on rounds off the crown, cheeks and jaw, though the eyes, brow and ear rim stay angular. Leave it off for hard-edged parts whose facets are the design. Model: Suzanne, the test head that ships with Blender, here with open holes, repaired with Printy3D

Textures#

Repairs keep colour: the texture of the input is projected onto the rebuilt surface and exported with it (the OBJ ZIP carries the MTL and the texture images, the GLB embeds them).

cut_transparentbooleandefault false

Cut away geometry behind transparent texture, so hair cards, lace and leaves keep their outline instead of printing as solid cards. Only fully transparent texels (alpha 0) in 8-bit RGBA textures count. An opening it cuts stays open when it can be seen and its mean width is at least 0.5 mm and at least twice clearance_mm; a narrower one is closed. A hole through a thin card or sheet leaves the material between the holes solid, so a lace card stays in one piece.

cut_transparent: false
cut_transparent: true
Cut transparent. Off, the fully transparent parts of a texture print as solid surface. On, the geometry under them is cut away, which is what hair cards and lace need. This copy of the vase has a lace pattern added to its texture's alpha channel; with it on, each opening is cut into the wall. Only fully transparent texels count, and only in 8-bit RGBA textures. Model: Vase, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D (lace pattern added by Printy3D)
mix_texturesbooleandefault false

Blend the model's material textures and colours into one combined texture. Useful when parts are coloured by a material colour rather than a texture.

mix_textures: false
mix_textures: true
Mix textures. On, a material's base colour is multiplied into its texture. Off, a textured material prints its texture alone. This copy of the vase has a blue base colour on its material: off, it is ignored; on, it tints the whole texture. Model: Vase, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D (blue base colour added by Printy3D)

Thin features#

thickness chooses how the wall stage measures and thickens walls, and whether thin beams are reinforced.

thickness.method"medial" | "lattice"default "medial"

medial measures every wall with the largest ball that fits inside it (independent of orientation and curvature), pushes the missing thickness out along the wall and caps it by the free room on each side, adding material only where a wall is too thin. lattice is the voxel heatmap method of the 3D Prep Pro pipeline.

method: medial, 21.4 cm³
method: lattice, 21.7 cm³
Where the two differ
Thickness method. medial measures every wall with the largest ball that fits inside it and adds material only where a wall is thinner than the target. lattice is a voxel method that reads how full a sphere round each point is. On this skull they agree on most of the surface and differ on thin bone: 18.3% of it by more than 0.1 mm (amber, right). Model: Goat Skull, Artec 3D (artec3d.com), CC BY 3.0 (creativecommons.org/licenses/by/3.0), repaired with Printy3D
thickness.structuralbooleandefault true

With medial, also thicken thin free-standing features (fingers, antennae, pins) at the root, where they would fail under tip_load_n at target_sf. Features braced at both ends, and features thick enough already, are left alone, so on many models it changes nothing.

structural: false
structural: true
Reinforce thin features. With structural on (medial only), a thin free-standing feature is thickened further at its root, until it would hold the tip load at the target safety factor. Here the two thinnest pins gain a thicker foot; the thick ones hold the load already. On the chair and the goat skull above it changed nothing at the default load: their thin parts are braced at both ends or thick enough. Model: Test part with five round pins, Printy3D (generated), CC0 1.0
thickness.tip_load_nnumberdefault 0.5> 0, ≤ 50

The handling load in newtons a thin feature's tip must hold. It is a guide, not yet calibrated against printed test pieces, and every result echoes it.

0.5 N
2 N
5 N
Tip load. The handling load (newtons) a thin feature's tip must hold. A larger load thickens the roots of more pins: from 2 N to 5 N only the fourth pin changes. The value is an uncalibrated guide and is echoed on every result. Model: Test part with five round pins, Printy3D (generated), CC0 1.0
thickness.target_sfnumberdefault 21–10

The safety factor a reinforced feature must reach under the tip load.

1
2
4
Target safety factor. How much stronger than the tip load a reinforced feature must be. 1 just holds the load; higher values thicken more. Model: Test part with five round pins, Printy3D (generated), CC0 1.0

The result#

A succeeded repair carries job.result, a before/after comparison, and its artifacts.

before, afterAnalysis

The analysis of the input and of the repaired mesh, with the same fields as an inspection.

issuesRepairIssue[]

Problems found in the input, each with severity (critical, warning, info), name, description and whether it was fixed.

improvementsstring[]

What changed, in words (for example the face-count change).

printability_scoreintegerrequired0–100

A simple 0–100 score of the repaired mesh: watertight, a single shell, a positive volume. It is not a shape-fidelity verdict.

qualityQualityAssessment

Observed failures of the result: failed when it is not watertight or has no volume; not_assessed or needs_review otherwise. Missing evidence is never reported as passed.

appliedAppliedRepair | null

The parameters that ran and the source of each, plus wall_thickness_applied_mm and wall_thickness_clamped.

output_bytesintegerrequired≥ 0

Size of the repaired output.

job.result.applied (abridged)
{
  "params": { "profile": "recommended", "printer": "mimaki", "quality": "high",
              "wall_thickness_mm": 0.7, "clearance_mm": 1.5, "close_holes_mm": 42.9, "...": "..." },
  "sources": { "quality": "explicit", "wall_thickness_mm": "printer", "clearance_mm": "printer",
               "close_holes_mm": "recommended", "hollow_mm": "default", "scale": "explicit" },
  "wall_thickness_applied_mm": 0.92,
  "wall_thickness_clamped": true
}

Artifacts: result_glb, result_obj_zip (OBJ, MTL and textures), measurements, analysis, analysis_before, and when produced texture, result_3mf and result_parts_zip (one OBJ per part of a STEP assembly). Need STL or PLY? Ask for an export.