Printy3D

Tools

Geometry tools

Tools that change the mesh: cut it into pieces, mirror it, fill it with a lattice, add a label or clean off loose fragments. Each returns the new mesh as artifacts.

All five run as {"recipe": "tool", "tool": "<name>", "params": {…}}. Coordinates are the model's own, in millimetres. See what a tool returns.

cut#

Splits the model along one or more planes. Every plane cuts every piece it passes through, so several planes can give many pieces. A plane with a width and height is a rectangle centred on origin that cuts only the part of the model it touches.

params
{
  "planes": [
    { "origin": [0, 40, 0], "normal": [0, 1, 0] },
    { "origin": [22, 95, 4], "normal": [1, 0, 0], "width": 40, "height": 40 }
  ],
  "cap_holes": true,
  "keep_both_sides": true,
  "key_params": { "key_type": "pin" }
}
planesCuttingPlane[]required1–8 planes

The cuts to make, applied in order. At least one is required.

planes[].origin[x, y, z]required

A point on the plane (the centre of a rectangle).

planes[].normal[x, y, z]required

The plane's direction. Without keep_both_sides, the piece behind the plane (the side the normal points away from) is kept.

planes[].width, planes[].heightnumber> 0

Make the plane a rectangle of this size. Send both or neither. The cut inside the rectangle must separate the model; otherwise the job fails with "Plane N: the cut inside the plane's rectangle does not separate the model …".

planes[].u_axis[x, y, z]

The rectangle's width direction; its height runs along normal × u_axis. Only with width and height, and not parallel to normal. Left out, the engine picks one.

cap_holesbooleandefault true

Close each cut face so every piece is a closed solid.

keep_both_sidesbooleandefault false

Return every piece. Off, only the piece behind the plane is kept.

key_paramsobject

Alignment keys on the cut faces, so the pieces line up when glued. Applies to every plane. Fields you leave out take the engine defaults shown below.

key_params.key_typestringdefault "pin"

pin, dovetail, snap or puzzle; none adds no keys.

key_params.clearancenumberdefault 0.150–10

Gap between a key and its socket, in millimetres, added to the socket.

key_params.auto_countbooleandefault true

Let the engine choose how many keys fit the cut face.

key_params.fixed_countintegerdefault 20–64

The number of keys when auto_count is off.

key_params.pin_diameter, pin_depthnumberdefault 3, 4> 0, ≤ 50

Pin keys, in millimetres.

key_params.dovetail_width_base, dovetail_width_tip, dovetail_height, dovetail_depthnumberdefault 3, 5, 4, 4> 0, ≤ 100

Dovetail keys, in millimetres.

key_params.snap_stem_diameter, snap_head_diameter, snap_depthnumberdefault 2, 3.5, 4> 0, ≤ 50

Snap keys, in millimetres.

key_params.puzzle_width, puzzle_arm_width, puzzle_depthnumberdefault 4, 2, 3> 0, ≤ 100

Puzzle keys, in millimetres.

key_params.flipboolean

Accepted, but the current engine does not use it.

axis, position"x" | "y" | "z", numberdefault "y", 0.5

Accepted for compatibility but not used: the engine cuts along planes only.

Uploaded
keep_both_sides: false
keep_both_sides: true
Cut with one plane. One plane through the middle, normal +Y. keep_both_sides false returns only the piece behind the plane (the side the normal points away from, here the bottom half); true returns both pieces, drawn pulled apart. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
cap_holes: false
cap_holes: true
Cap holes. cap_holes closes the cut face so each piece is a closed solid. Off, the pieces are open shells where they were cut. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
Infinite plane
Rectangle 18 x 18 mm
Rectangle cut. A plane without width and height cuts through everything it crosses: here the coat and the lantern, so the gnome comes apart. With width and height it is a rectangle centred on origin and cuts only the section loops it touches: here the lantern, and the body stays whole. Pieces are drawn pulled apart, the plane in blue. Model: Garden Gnome, Poly Haven, https://polyhaven.com/a/garden_gnome, CC0 1.0
1 plane
2 planes
3 planes
Several planes. Every plane cuts every piece it passes through, so N planes can give more than N + 1 pieces. Pieces drawn exploded, one colour each. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
pin
dovetail
snap
puzzle
Alignment keys. key_params adds keys to the cut faces so the pieces line up when glued: pin, dovetail, snap or puzzle. Close-up of both cut faces side by side. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0

mirror#

Adds a mirrored copy of the model; the result holds the original and the copy.

params
{ "axis": "x", "auto_offset": true, "offset_mm": 5, "merge": true }
axis"x" | "y" | "z"default "x"

The axis the copy is mirrored along.

auto_offsetbooleandefault true

Place the mirror plane at the model's edge, so the copy sits beside the original without overlapping.

offset_mmnumberdefault 0−10,000 to 10,000

With auto_offset, how far the mirror plane moves from the model's edge, so the gap between original and copy is twice this. Without it, the position of the mirror plane on the axis.

mergebooleandefault true

Return the original and the copy as one mesh. Off, they are two pieces.

flip_uvsbooleandefault false

Flip the copy's texture horizontally, so text in it does not read backwards.

axis: x
axis: y
axis: z
Mirror axis. The result holds the original and a mirrored copy. axis picks the direction of the mirror: x, y or z. With auto_offset (default) the copy sits beside the original without overlapping. Model: Garden Gnome, Poly Haven, https://polyhaven.com/a/garden_gnome, CC0 1.0
auto_offset, offset 0
auto_offset, offset 10 mm
auto_offset false, offset 0
Mirror placement. auto_offset true puts the mirror plane at the model's edge, so the copy touches the original; offset_mm moves the plane that far from the edge, so the gap is twice it: 20 mm here. auto_offset false mirrors about the plane at offset_mm on the axis, so a plane through the model makes the copy overlap it. Model: Garden Gnome, Poly Haven, https://polyhaven.com/a/garden_gnome, CC0 1.0
flip_uvs: false
flip_uvs: true
Flip UVs. A mirrored copy shows its texture mirrored too: lettering on it reads backwards. flip_uvs flips the copy's texture horizontally, so the lettering reads again. It flips across the whole texture, so it suits artwork that spans the texture: on a model whose texture is an atlas of separate parts, the colours land on the wrong parts. Model: Sign with lettering, Printy3D (generated), CC0 1.0

lattice#

Replaces the model's interior with a lattice, inside an optional outer shell: lighter prints that keep their outside.

params
{ "lattice_type": "gyroid", "cell_size_mm": 6, "shell_thickness_mm": 1.2, "band_thickness_mm": 4 }
lattice_type"gyroid" | "schwarz_p" | "bcc" | "octet" | "diamond"default "gyroid"

gyroid: smooth, curved minimal surface with no sharp corners, self-supporting on FDM. schwarz_p: minimal surface with a nested-cube look, strong in compression. bcc: struts from each cell corner to its centre. octet: dense, stiff cross-braced truss. diamond: tetrahedral struts.

cell_size_mmnumberdefault 5> 0, ≤ 100

Size of one repeating cell. Larger cells are fewer and bigger; smaller cells are finer, denser and heavier. 5–6 mm is a good default.

strut_thickness_mmnumberdefault 1> 0, ≤ 20

Strut diameter for bcc, octet and diamond. With a shell it is also the thickness of the gyroid and schwarz_p surfaces. Members too thin for the engine's grid are raised to what it can resolve: on a 120 mm part, 0.5 mm came out at about 0.94 mm.

shell_thickness_mmnumberdefault 0.60–20

With include_shell, the thickness of the outer wall. Without it, the thickness of the gyroid and schwarz_p surfaces.

include_shellbooleandefault true

Keep the model's outer surface as a closed shell around the lattice.

band_thickness_mmnumberdefault 00–100

0 fills the whole interior with lattice. Above 0, the lattice stays in a band this thick just inside the shell and the core comes out solid: a smaller mesh, not a lighter part. On the 120 mm bust below: 120 cm³ at 0, 140 cm³ at 3 mm, 129 cm³ at 6 mm.

interior_erosion_mmnumberdefault 00–50

Only with include_shell false: how far the lattice stays from the model's surface. With a shell it is ignored, because the wall thickness sets where the lattice starts.

material_color[r, g, b]each 0–1

Colour of the lattice.

gyroid
schwarz_p
bcc
octet
diamond
Lattice patterns. The five infill patterns at the same cell size (5 mm). gyroid and schwarz_p are smooth minimal surfaces; bcc, octet and diamond are strut lattices. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
3 mm
5 mm
10 mm
Cell size. The size of one repeating cell. Larger cells give fewer, bigger openings; smaller cells a finer, denser and heavier infill. At 3 mm, with the default 1 mm walls, the section nearly closes up. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
0.5 mm
1 mm
2 mm
Strut thickness. The diameter of the struts of bcc, octet and diamond lattices; with a shell, also the thickness of the gyroid and schwarz_p surfaces. A member too thin for the engine's grid is raised to what it can resolve: here 0.5 mm came out at about 0.94 mm, so 0.5 and 1 mm look alike and 2 mm is plainly thicker. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
include_shell: false
shell 0.6 mm
shell 2 mm
Outer shell. include_shell keeps the model's outer surface as a closed shell around the infill, shell_thickness_mm thick. Without it only the lattice is left. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
0 (fill)
3 mm
6 mm
Band thickness. 0 fills the whole interior with lattice. A value above 0 keeps the lattice in a band that thick just inside the shell, and the core comes out solid: a smaller mesh, not a lighter part. Cut through the 120 mm bust: 120 cm³ at 0, 140 cm³ at 3 mm, 129 cm³ at 6 mm. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
0 mm
2 mm
5 mm
Interior offset. Only with include_shell false: how far the lattice stays from the model's surface, drawn here in blue. With a shell it is ignored, because the wall thickness sets where the lattice starts. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0

label#

Adds text to the model at a point of its surface.

params
{ "text": "PART 7\nREV B", "position": [12.5, 30, 18], "mode": "engrave", "font_size_mm": 8, "depth_mm": 1 }
textstringrequired1–500 characters

The label. A newline starts a new line.

position[x, y, z]default [0, 0, 0]

Where the label goes; snapped to the nearest point of the surface.

direction[x, y, z]

The direction the label faces. Left out, the surface normal at position.

mode"snapoff" | "emboss" | "engrave" | "extrude"default "snapoff"

snapoff: a plate with the text, joined to the model by a thin cylinder you snap off after printing. emboss: flat letters on thin rods, standing clear of the surface. engrave: closed text geometry recessed into the surface. extrude: closed text geometry standing out of it.

font_size_mmnumberdefault 12> 0, ≤ 200

Text height.

depth_mmnumberdefault 0.5> 0, ≤ 50

How far the text goes into, or stands out of, the surface.

font_namestringdefault "default"letters, digits, space . _ -; ≤ 64

The font; default is a sans-serif.

rotation_anglenumberdefault 00–360

Rotation of the text on the surface, in degrees.

line_spacingnumberdefault 1.20.5–3

Space between lines, as a multiple of the font size.

text_alignment"left" | "center" | "right"default "center"

Alignment of the lines.

cylinder_radius_mm, cylinder_length_mmnumberdefault 0.5, 10radius ≤ 50, length ≤ 500

snapoff only: the connecting cylinder.

material_color[r, g, b]each 0–1

Colour of the label. Default red for engrave and extrude, grey for snapoff and emboss.

snapoff
emboss
engrave
extrude
Label modes. snapoff: a plate with the text, on a thin cylinder you snap off after printing. emboss: flat letters on thin rods, standing clear of the surface: 5 mm here. engrave: text recessed into the surface. extrude: text standing out of the surface. engrave and extrude are red unless material_color is set. Model: Flat plate, Printy3D (generated), CC0 1.0
6 mm
12 mm
24 mm
Font size. font_size_mm is the text height in millimetres of the model. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
0.5 mm
1.5 mm
3 mm
Text depth. depth_mm is how far engraved text goes into the surface (or extruded text stands out of it). Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0
left
center
right
Multi-line text. A newline in text starts a new line. text_alignment lines them up at position, which is the middle of this plate: left starts both lines there, center centres them on it and right ends them there. line_spacing, a multiple of the font size, spaces them. Model: Flat plate, Printy3D (generated), CC0 1.0
0°
45°
90°
Text rotation. rotation_angle turns the text on the surface, in degrees. Model: Marble Bust 01, Poly Haven, https://polyhaven.com/a/marble_bust_01, CC0 1.0

remove_small_parts#

Deletes loose pieces (stray fragments and specks) that are much smaller than the main part. A piece is kept when its face count reaches the threshold: the larger of min_faces and min_percent of the largest piece's face count.

params
{ "min_percent": 2 }
min_percentnumberdefault 1.00–100

Threshold as a share of the largest piece's faces. Lower keeps more small pieces.

min_facesintegerdefault 00–100,000,000

An absolute face-count threshold.

Uploaded
min_percent 1
min_percent 10
Remove small parts. Loose pieces with fewer faces than min_percent of the largest piece (or than min_faces) are deleted. 1 % removes the specks; 10 % also removes small separate parts. Model: Rubber Duck Toy, Poly Haven, https://polyhaven.com/a/rubber_duck_toy, CC0 1.0 (loose fragments: Printy3D (generated), CC0 1.0)

Keeping small parts on purpose#

Separate letters, buttons or small accessories are pieces too. Lower min_percent until they survive, or skip this tool for such models.