Type object
File match estampo.toml estampo.*.toml
Schema URL https://catalog.lintel.tools/schemas/schemastore/estampo-toml/latest.json
Source https://raw.githubusercontent.com/estampo/estampo/main/docs/estampo.schema.json

Validate with Lintel

npx @lintel/lintel check
Type: object

Configuration schema for estampo — the build system for reproducible 3D prints. See https://github.com/estampo/estampo

Properties

parts part[] required

List of parts to print. At least one is required.

minItems=1
name string

Project name. Used to prefix the output directory (e.g. estampo_output/my-project/).

output_dir string

Output directory path, relative to the config file.

Default: "estampo_output"
pipeline object

Pipeline stage configuration.

1 nested properties
stages string[]

Ordered list of pipeline stages to execute.

Default:
[
  "load",
  "arrange",
  "plate",
  "slice"
]
Examples: ["load","arrange","plate","slice"], ["load","arrange","plate","slice","pack"], ["load","arrange","plate","slice","resolve_templates","pack"]
plate object

Build plate dimensions.

2 nested properties
size number[]

Build plate dimensions in mm: [width, depth].

Default:
[
  256,
  256
]
Examples: [256,256], [220,220], [350,350]
minItems=2maxItems=2
padding number

Gap between parts in mm.

Default: 5.0
exclusiveMin=0
slicer object

Slicer engine configuration.

6 nested properties
engine string

Slicer engine. 'orca' = OrcaSlicer, 'cura' = CuraEngine.

Default: "orca"
Values: "orca" "cura"
version string

Pinned slicer version for reproducible builds. OrcaSlicer: '2.3.1'. CuraEngine: '5.12.0'.

Examples: "2.3.1", "5.12.0"
bed_type string

Bed surface type. Affects filament adhesion profiles.

Examples: "Textured PEI Plate", "Cool Plate", "Engineering Plate", "High Temp Plate"
profiles_dir string

Directory for pinned profiles, relative to config file.

Default: "profiles"
orca object

OrcaSlicer-specific configuration. Uses a profile chain: printer → process → filament(s).

7 nested properties
printer string

Machine profile name. Run 'estampo profiles list --engine orca --category machine' to see available profiles.

Examples: "Bambu Lab P1S 0.4 nozzle", "Bambu Lab A1 mini 0.4 nozzle", "Bambu Lab X1C 0.4 nozzle"
process string

Print quality/process profile name.

Examples: "0.20mm Standard @BBL X1C", "0.16mm Optimal @BBL X1C", "0.28mm Draft @BBL X1C"
filaments string[]

Filament profiles, one per AMS slot. Order matters: slot 1 = first entry.

Examples: ["Generic PLA @base"], ["Generic PLA @base","Generic PETG @base"]
slots Record<string, string>

Explicit AMS slot mapping. Keys are slot numbers (1-indexed as strings in TOML), values are filament profile names.

Examples: {"1":"Generic PLA @base","3":"Generic PETG @base"}
overrides Record<string, string | number | boolean>

Process profile setting overrides. Keys are OrcaSlicer setting names. For the full list of 113 process settings, see docs/orca-settings.json.

Examples: {"sparse_infill_density":"20%","sparse_infill_pattern":"gyroid","wall_loops":3,"enable_support":1,"support_threshold_angle":45,"support_type":"tree(auto)","layer_height":0.2,"initial_layer_print_height":0.28,"seam_position":"random","top_shell_layers":5,"bottom_shell_layers":4,"ironing_type":"top surface only","brim_type":"outer_only","brim_width":"5mm","outer_wall_speed":60,"inner_wall_speed":80,"sparse_infill_speed":100,"travel_speed":400,"bridge_speed":25,"enable_overhang_speed":1,"overhang_speed_classic":20,"line_width":0.42,"outer_wall_line_width":0.42,"inner_wall_line_width":0.45,"top_surface_line_width":0.42,"infill_combination":0,"detect_thin_wall":1,"only_one_wall_top":1,"reduce_crossing_wall":0,"max_travel_detour_distance":0,"retraction_length":"0.8","retraction_speed":"30","z_hop":"0.4","fan_min_speed":35,"fan_max_speed":100,"overhang_fan_speed":100,"overhang_fan_threshold":"25%","close_holes_standby_temperature":1,"skirt_loops":0,"skirt_distance":2,"raft_layers":0,"elefant_foot_compensation":0.1,"xy_hole_compensation":0,"xy_contour_compensation":0,"minimum_sparse_infill_area":15,"infill_anchor_max":20,"ensure_vertical_shell_thickness":"ensure_all","timelapse_type":0,"gcode_comments":0}
machine_overrides Record<string, string | number | boolean>

Machine profile overrides. For the full list of 84 machine settings, see docs/orca-settings.json.

Examples: {"nozzle_type":"hardened_steel","nozzle_diameter":"0.4","printable_area":"0x0,256x0,256x256,0x256","printable_height":256,"best_object_pos":"128x128","retract_before_wipe":"0","retract_when_changing_layer":"0","head_wrap_detect_zone":"0x0"}
filament_overrides Record<string, string | number | boolean>

Filament profile overrides. Applied to all filament slots. For the full list of 66 filament settings, see docs/orca-settings.json.

Examples: {"nozzle_temperature_initial_layer":"220","nozzle_temperature":"215","bed_temperature":"55","bed_temperature_initial_layer":"60","fan_cooling_layer_time":"60","slow_down_min_speed":"10","filament_max_volumetric_speed":"15","filament_retraction_length":"0.8","filament_density":"1.24","filament_cost":"25","filament_flow_ratio":"0.98","reduce_fan_stop_start_freq":1,"cool_plate_temp_initial_layer":"55","textured_plate_temp_initial_layer":"55"}
cura object

CuraEngine-specific configuration. Uses printer definition files (.def.json).

3 nested properties
printer string

CuraEngine printer definition name or ID. Can be a human name ('Ultimaker 2'), a definition ID ('ultimaker2'), or a path/URL to a .def.json file.

Examples: "Ultimaker 2", "bambox_p1s", "ultimaker_s5"
filaments string[]

Filament names for documentation and traceability.

Examples: ["PLA"], ["PETG","PLA"]
overrides Record<string, string | number | boolean>

CuraEngine setting overrides. Keys are CuraEngine setting names (different from OrcaSlicer names). For the full list of 711 settings, see docs/cura-settings.json.

Examples: {"layer_height":0.2,"layer_height_0":0.28,"infill_sparse_density":20,"infill_pattern":"gyroid","wall_line_count":3,"top_layers":5,"bottom_layers":4,"speed_print":60,"speed_travel":150,"speed_wall_0":30,"speed_wall_x":60,"speed_infill":80,"speed_topbottom":30,"speed_layer_0":20,"support_enable":true,"support_type":"everywhere","support_angle":45,"support_structure":"tree","support_tree_angle":45,"adhesion_type":"brim","brim_width":5,"skirt_line_count":3,"retraction_amount":0.8,"retraction_speed":30,"retraction_hop_enabled":true,"retraction_hop":0.4,"cool_fan_speed_min":100,"cool_fan_speed_max":100,"cool_min_layer_time":5,"line_width":0.4,"wall_line_width_0":0.4,"wall_line_width_x":0.4,"infill_line_width":0.4,"ironing_enabled":true,"ironing_pattern":"zigzag","material_print_temperature":215,"material_bed_temperature":55,"material_print_temperature_layer_0":220,"material_bed_temperature_layer_0":60,"z_seam_type":"sharpest_corner","fill_outline_gaps":true,"travel_avoid_other_parts":true,"raft_margin":5,"meshfix_union_all":true,"xy_offset":0,"hole_xy_offset":0}
filaments Record<string, string>

Material aliases. Map short names to full slicer profile names, then use the alias in [[parts]].filament.

Examples: {"structural":"Generic PETG-CF @base","decorative":"Generic PLA @base"}

Definitions

pipeline object

Pipeline stage configuration.

stages string[]

Ordered list of pipeline stages to execute.

Default:
[
  "load",
  "arrange",
  "plate",
  "slice"
]
Examples: ["load","arrange","plate","slice"], ["load","arrange","plate","slice","pack"], ["load","arrange","plate","slice","resolve_templates","pack"]
plate object

Build plate dimensions.

size number[]

Build plate dimensions in mm: [width, depth].

Default:
[
  256,
  256
]
Examples: [256,256], [220,220], [350,350]
minItems=2maxItems=2
padding number

Gap between parts in mm.

Default: 5.0
exclusiveMin=0
slicer object

Slicer engine configuration.

engine string

Slicer engine. 'orca' = OrcaSlicer, 'cura' = CuraEngine.

Default: "orca"
Values: "orca" "cura"
version string

Pinned slicer version for reproducible builds. OrcaSlicer: '2.3.1'. CuraEngine: '5.12.0'.

Examples: "2.3.1", "5.12.0"
bed_type string

Bed surface type. Affects filament adhesion profiles.

Examples: "Textured PEI Plate", "Cool Plate", "Engineering Plate", "High Temp Plate"
profiles_dir string

Directory for pinned profiles, relative to config file.

Default: "profiles"
orca object

OrcaSlicer-specific configuration. Uses a profile chain: printer → process → filament(s).

7 nested properties
printer string

Machine profile name. Run 'estampo profiles list --engine orca --category machine' to see available profiles.

Examples: "Bambu Lab P1S 0.4 nozzle", "Bambu Lab A1 mini 0.4 nozzle", "Bambu Lab X1C 0.4 nozzle"
process string

Print quality/process profile name.

Examples: "0.20mm Standard @BBL X1C", "0.16mm Optimal @BBL X1C", "0.28mm Draft @BBL X1C"
filaments string[]

Filament profiles, one per AMS slot. Order matters: slot 1 = first entry.

Examples: ["Generic PLA @base"], ["Generic PLA @base","Generic PETG @base"]
slots Record<string, string>

Explicit AMS slot mapping. Keys are slot numbers (1-indexed as strings in TOML), values are filament profile names.

Examples: {"1":"Generic PLA @base","3":"Generic PETG @base"}
overrides Record<string, string | number | boolean>

Process profile setting overrides. Keys are OrcaSlicer setting names. For the full list of 113 process settings, see docs/orca-settings.json.

Examples: {"sparse_infill_density":"20%","sparse_infill_pattern":"gyroid","wall_loops":3,"enable_support":1,"support_threshold_angle":45,"support_type":"tree(auto)","layer_height":0.2,"initial_layer_print_height":0.28,"seam_position":"random","top_shell_layers":5,"bottom_shell_layers":4,"ironing_type":"top surface only","brim_type":"outer_only","brim_width":"5mm","outer_wall_speed":60,"inner_wall_speed":80,"sparse_infill_speed":100,"travel_speed":400,"bridge_speed":25,"enable_overhang_speed":1,"overhang_speed_classic":20,"line_width":0.42,"outer_wall_line_width":0.42,"inner_wall_line_width":0.45,"top_surface_line_width":0.42,"infill_combination":0,"detect_thin_wall":1,"only_one_wall_top":1,"reduce_crossing_wall":0,"max_travel_detour_distance":0,"retraction_length":"0.8","retraction_speed":"30","z_hop":"0.4","fan_min_speed":35,"fan_max_speed":100,"overhang_fan_speed":100,"overhang_fan_threshold":"25%","close_holes_standby_temperature":1,"skirt_loops":0,"skirt_distance":2,"raft_layers":0,"elefant_foot_compensation":0.1,"xy_hole_compensation":0,"xy_contour_compensation":0,"minimum_sparse_infill_area":15,"infill_anchor_max":20,"ensure_vertical_shell_thickness":"ensure_all","timelapse_type":0,"gcode_comments":0}
machine_overrides Record<string, string | number | boolean>

Machine profile overrides. For the full list of 84 machine settings, see docs/orca-settings.json.

Examples: {"nozzle_type":"hardened_steel","nozzle_diameter":"0.4","printable_area":"0x0,256x0,256x256,0x256","printable_height":256,"best_object_pos":"128x128","retract_before_wipe":"0","retract_when_changing_layer":"0","head_wrap_detect_zone":"0x0"}
filament_overrides Record<string, string | number | boolean>

Filament profile overrides. Applied to all filament slots. For the full list of 66 filament settings, see docs/orca-settings.json.

Examples: {"nozzle_temperature_initial_layer":"220","nozzle_temperature":"215","bed_temperature":"55","bed_temperature_initial_layer":"60","fan_cooling_layer_time":"60","slow_down_min_speed":"10","filament_max_volumetric_speed":"15","filament_retraction_length":"0.8","filament_density":"1.24","filament_cost":"25","filament_flow_ratio":"0.98","reduce_fan_stop_start_freq":1,"cool_plate_temp_initial_layer":"55","textured_plate_temp_initial_layer":"55"}
cura object

CuraEngine-specific configuration. Uses printer definition files (.def.json).

3 nested properties
printer string

CuraEngine printer definition name or ID. Can be a human name ('Ultimaker 2'), a definition ID ('ultimaker2'), or a path/URL to a .def.json file.

Examples: "Ultimaker 2", "bambox_p1s", "ultimaker_s5"
filaments string[]

Filament names for documentation and traceability.

Examples: ["PLA"], ["PETG","PLA"]
overrides Record<string, string | number | boolean>

CuraEngine setting overrides. Keys are CuraEngine setting names (different from OrcaSlicer names). For the full list of 711 settings, see docs/cura-settings.json.

Examples: {"layer_height":0.2,"layer_height_0":0.28,"infill_sparse_density":20,"infill_pattern":"gyroid","wall_line_count":3,"top_layers":5,"bottom_layers":4,"speed_print":60,"speed_travel":150,"speed_wall_0":30,"speed_wall_x":60,"speed_infill":80,"speed_topbottom":30,"speed_layer_0":20,"support_enable":true,"support_type":"everywhere","support_angle":45,"support_structure":"tree","support_tree_angle":45,"adhesion_type":"brim","brim_width":5,"skirt_line_count":3,"retraction_amount":0.8,"retraction_speed":30,"retraction_hop_enabled":true,"retraction_hop":0.4,"cool_fan_speed_min":100,"cool_fan_speed_max":100,"cool_min_layer_time":5,"line_width":0.4,"wall_line_width_0":0.4,"wall_line_width_x":0.4,"infill_line_width":0.4,"ironing_enabled":true,"ironing_pattern":"zigzag","material_print_temperature":215,"material_bed_temperature":55,"material_print_temperature_layer_0":220,"material_bed_temperature_layer_0":60,"z_seam_type":"sharpest_corner","fill_outline_gaps":true,"travel_avoid_other_parts":true,"raft_margin":5,"meshfix_union_all":true,"xy_offset":0,"hole_xy_offset":0}
orca_config object

OrcaSlicer-specific configuration. Uses a profile chain: printer → process → filament(s).

printer string

Machine profile name. Run 'estampo profiles list --engine orca --category machine' to see available profiles.

Examples: "Bambu Lab P1S 0.4 nozzle", "Bambu Lab A1 mini 0.4 nozzle", "Bambu Lab X1C 0.4 nozzle"
process string

Print quality/process profile name.

Examples: "0.20mm Standard @BBL X1C", "0.16mm Optimal @BBL X1C", "0.28mm Draft @BBL X1C"
filaments string[]

Filament profiles, one per AMS slot. Order matters: slot 1 = first entry.

Examples: ["Generic PLA @base"], ["Generic PLA @base","Generic PETG @base"]
slots Record<string, string>

Explicit AMS slot mapping. Keys are slot numbers (1-indexed as strings in TOML), values are filament profile names.

Examples: {"1":"Generic PLA @base","3":"Generic PETG @base"}
overrides Record<string, string | number | boolean>

Process profile setting overrides. Keys are OrcaSlicer setting names. For the full list of 113 process settings, see docs/orca-settings.json.

Examples: {"sparse_infill_density":"20%","sparse_infill_pattern":"gyroid","wall_loops":3,"enable_support":1,"support_threshold_angle":45,"support_type":"tree(auto)","layer_height":0.2,"initial_layer_print_height":0.28,"seam_position":"random","top_shell_layers":5,"bottom_shell_layers":4,"ironing_type":"top surface only","brim_type":"outer_only","brim_width":"5mm","outer_wall_speed":60,"inner_wall_speed":80,"sparse_infill_speed":100,"travel_speed":400,"bridge_speed":25,"enable_overhang_speed":1,"overhang_speed_classic":20,"line_width":0.42,"outer_wall_line_width":0.42,"inner_wall_line_width":0.45,"top_surface_line_width":0.42,"infill_combination":0,"detect_thin_wall":1,"only_one_wall_top":1,"reduce_crossing_wall":0,"max_travel_detour_distance":0,"retraction_length":"0.8","retraction_speed":"30","z_hop":"0.4","fan_min_speed":35,"fan_max_speed":100,"overhang_fan_speed":100,"overhang_fan_threshold":"25%","close_holes_standby_temperature":1,"skirt_loops":0,"skirt_distance":2,"raft_layers":0,"elefant_foot_compensation":0.1,"xy_hole_compensation":0,"xy_contour_compensation":0,"minimum_sparse_infill_area":15,"infill_anchor_max":20,"ensure_vertical_shell_thickness":"ensure_all","timelapse_type":0,"gcode_comments":0}
machine_overrides Record<string, string | number | boolean>

Machine profile overrides. For the full list of 84 machine settings, see docs/orca-settings.json.

Examples: {"nozzle_type":"hardened_steel","nozzle_diameter":"0.4","printable_area":"0x0,256x0,256x256,0x256","printable_height":256,"best_object_pos":"128x128","retract_before_wipe":"0","retract_when_changing_layer":"0","head_wrap_detect_zone":"0x0"}
filament_overrides Record<string, string | number | boolean>

Filament profile overrides. Applied to all filament slots. For the full list of 66 filament settings, see docs/orca-settings.json.

Examples: {"nozzle_temperature_initial_layer":"220","nozzle_temperature":"215","bed_temperature":"55","bed_temperature_initial_layer":"60","fan_cooling_layer_time":"60","slow_down_min_speed":"10","filament_max_volumetric_speed":"15","filament_retraction_length":"0.8","filament_density":"1.24","filament_cost":"25","filament_flow_ratio":"0.98","reduce_fan_stop_start_freq":1,"cool_plate_temp_initial_layer":"55","textured_plate_temp_initial_layer":"55"}
cura_config object

CuraEngine-specific configuration. Uses printer definition files (.def.json).

printer string

CuraEngine printer definition name or ID. Can be a human name ('Ultimaker 2'), a definition ID ('ultimaker2'), or a path/URL to a .def.json file.

Examples: "Ultimaker 2", "bambox_p1s", "ultimaker_s5"
filaments string[]

Filament names for documentation and traceability.

Examples: ["PLA"], ["PETG","PLA"]
overrides Record<string, string | number | boolean>

CuraEngine setting overrides. Keys are CuraEngine setting names (different from OrcaSlicer names). For the full list of 711 settings, see docs/cura-settings.json.

Examples: {"layer_height":0.2,"layer_height_0":0.28,"infill_sparse_density":20,"infill_pattern":"gyroid","wall_line_count":3,"top_layers":5,"bottom_layers":4,"speed_print":60,"speed_travel":150,"speed_wall_0":30,"speed_wall_x":60,"speed_infill":80,"speed_topbottom":30,"speed_layer_0":20,"support_enable":true,"support_type":"everywhere","support_angle":45,"support_structure":"tree","support_tree_angle":45,"adhesion_type":"brim","brim_width":5,"skirt_line_count":3,"retraction_amount":0.8,"retraction_speed":30,"retraction_hop_enabled":true,"retraction_hop":0.4,"cool_fan_speed_min":100,"cool_fan_speed_max":100,"cool_min_layer_time":5,"line_width":0.4,"wall_line_width_0":0.4,"wall_line_width_x":0.4,"infill_line_width":0.4,"ironing_enabled":true,"ironing_pattern":"zigzag","material_print_temperature":215,"material_bed_temperature":55,"material_print_temperature_layer_0":220,"material_bed_temperature_layer_0":60,"z_seam_type":"sharpest_corner","fill_outline_gaps":true,"travel_avoid_other_parts":true,"raft_margin":5,"meshfix_union_all":true,"xy_offset":0,"hole_xy_offset":0}
filament_aliases Record<string, string>

Material aliases. Map short names to full slicer profile names, then use the alias in [[parts]].filament.

Examples:
  • { "structural": "Generic PETG-CF @base", "decorative": "Generic PLA @base" }
part object

A part (mesh file) to include on the build plate.

file string required

Path to mesh file, relative to the config file. Supported formats: .stl, .3mf, .step, .stp, .obj

copies integer

Number of copies to arrange on the plate.

Default: 1
min=1
orient string

Part orientation on the build plate. Ignored if 'rotate' is set.

Default: "flat"
Values: "flat" "upright" "side" "upside-down"
rotate number[]

Custom rotation in degrees: [rx, ry, rz]. Overrides 'orient' if set.

Examples: [0,0,45], [90,0,0]
minItems=3maxItems=3
filament integer | string

Filament slot (integer, 1-indexed) or profile name/alias (string).

Default: 1
scale number

Uniform scale factor.

Default: 1.0
exclusiveMin=0
object string

Select a named object from a multi-object 3MF file.

sequence integer

Print order for sequential printing. Lower numbers print first.

Default: 1
min=1
filaments Record<string, integer | string>

Per-object filament overrides for multi-object 3MF. Maps object name to filament slot or name.

command_stage object

Custom command stage. Runs an external CLI tool as a pipeline stage. The section name must appear in [pipeline].stages.

command string required

Shell command to execute. Use {variable} for substitution. Available variables: name, output_dir, machine, engine, filament, filaments, input_3mf, sliced_3mf, sliced_dir, cura_settings, slicer_image.

output string

Output file path (supports variable substitution). If set, the stage returns this path for downstream use.

docker boolean

Run command inside a Docker container. Mounts the output directory at /work/output.

Default: false
image string

Docker image to use when docker=true. Falls back to the slicer image if not set.