---
title: "Print settings"
description: "A print setting is one combination of printer type, material, layer thickness, and setting variant that Formlabs ships, or a custom one saved in an .fps file."
url: https://developer.formlabs.com/core-concepts/print-settings/
---

# Print settings

A *print setting* holds the parameters a printer prints one material with, at one layer
thickness. Four values select one of the print settings Formlabs ships:

| Field | Meaning | Example |
| --- | --- | --- |
| `machine_type` | The printer type | `FORM-4-0`, the Form 4 and Form 4B |
| `material_code` | The material | `FLGPGR05`, Grey V5 |
| `layer_thickness_mm` | The layer thickness, in millimeters | `0.1` |
| `print_setting` | The setting variant for that material and thickness | `DEFAULT` |

A [scene](https://developer.formlabs.com/core-concepts/scene.md) carries one print setting for all its models, chosen on PreForm's
**Job Setup** screen, or with `create_scene`. A combination that isn't available in your PreForm instance is rejected. To select a print setting that is not shipped with PreForm you can [create or import a custom print setting in PreForm](#create-a-custom-setting-in-preform).

## List the print settings

The `list_print_settings` method returns every combination the running PreForm ships,
grouped by printer type and material:

```python
# Grouped by printer type, then material, then each material's variants.
catalog = preform.list_print_settings().to_dict()
for printer in catalog["printer_types"]:
    for material in printer["materials"]:
        for setting in material["material_settings"]:
            # scene_settings is what create_scene takes.
            print(printer["label"], material["label"], setting["label"],
                  setting["scene_settings"])
```

Each setting has a display `label`, such as `0.025 mm (Default settings)`, and its
`scene_settings` are the four fields `create_scene` takes. To list only what a connected printer accepts,
pass `compatible_with=` with the printer's serial name.

## List and check layer thicknesses

The `validate_print_setting` method answers which layer thicknesses a printer,
material, and print setting take, and whether one thickness works, without creating a
scene:

```python
# Without layer_thickness_mm, options lists every thickness the other three take.
thicknesses = preform.validate_print_setting(
    machine_type="FORM-4-0", material_code="FLGPGR05", print_setting="DEFAULT"
)
if thicknesses.options:
    print("Grey V5 on Form 4:", thicknesses.options.layer_thicknesses_mm)

# With all four, valid says whether that thickness prints.
check = preform.validate_print_setting(
    machine_type="FORM-4-0",
    material_code="FLGPGR05",
    print_setting="DEFAULT",
    layer_thickness_mm=0.05,
)
print("0.05 mm:", check.valid)
```

Leave out `layer_thickness_mm`, and `options.layer_thicknesses_mm` lists every
thickness Formlabs ships for the other three fields. Give all four, and `valid` says
whether that thickness is one of them. For a thickness with no print settings the result of the call is `false`.

## Create a custom setting in PreForm

A custom print setting starts as a copy of a Formlabs setting, which you change in
PreForm's Print Settings Editor:

1. In PreForm, click **Edit > Print Settings Editor**.
2. Click **New Print Setting**, choose the Formlabs setting to start from, and click
   **Copy & Edit Selected**.
3. Change the parameters. To rename the setting, click the pencil icon next to its name.
4. To use the setting on another computer, click the **Export Print Setting** icon next
   to it. PreForm saves it as an `.fps` file. In turn **Import FPS File** brings an `.fps` file
   into your PreForm's print settings list.

For more details, see
[Using the PreForm Print Settings Editor](https://formlabs.com/support/Using-the-Print-Settings-Editor/).

## Use a custom setting

The `create_scene` and `update_scene` methods take an `.fps` file as `fps_file`, in
place of the four print setting selection fields:

```python
# FPS is a custom setting exported from PreForm's Print Settings Editor.
scene = preform.create_scene(fps_file=FPS)
print(preform.get_scene(scene_id=scene.scene_id).scene_settings)
```

## Export the print setting embedded into a .form file

A `.form` file someone prepared in PreForm prints with the setting they chose, custom or
not. When you build jobs from a script to match such a file, open it and save its
setting with the `save_print_setting` method:

```python
# Open a job someone prepared in PreForm, and save the setting it prints with.
job = preform.open_form_file(file=FORM).scenes[0]
print(preform.get_scene_metadata(scene_id=job.scene_id)["PrintSettingsName"])
saved = str(Path(f"{Path(FORM).stem}.fps").resolve())
preform.save_print_setting(scene_id=job.scene_id, file=saved)

# Scenes the script builds take the same setting from the file.
batch = preform.create_scene(fps_file=saved)
```

The saved `.fps` file holds the scene's setting with any changes made in that scene. To move a folder of saved jobs to another setting, see the
[Print setting rollout](https://developer.formlabs.com/examples/print-setting-rollout.md) example script. For each
field and error code, see the [Print Settings](https://developer.formlabs.com/api-reference/print-settings.md)
endpoints.

## What's next

- [Model](https://developer.formlabs.com/core-concepts/model.md)
- [Print setting rollout](https://developer.formlabs.com/examples/print-setting-rollout.md)
- [Using the PreForm Print Settings Editor](https://formlabs.com/support/Using-the-Print-Settings-Editor/)
