{
    "id": "fdmprinter",
    "visible": false,
    "version": 1, 
    "name": "FDM Printer Base Description",
    "author": "Ultimaker B.V.",
    "manufacturer": "Ultimaker",
    "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",

    "add_pages": [],

    "machine_settings": {
        "machine_start_gcode": {
            "description": "Gcode commands to be executed at the very start - separated by \\n.",
            "default": "G28 ; Home\nG1 Z15.0 F6000 ;move the platform down 15mm\n;Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0",
            "global_only": true
        },
        "machine_end_gcode": {
            "description": "Gcode commands to be executed at the very end - separated by \\n.",
            "default": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
            "global_only": true
        },
        "material_bed_temp_wait": {
            "description": "Whether to insert a command to wait until the bed temperature is reached at the start.",
            "default": true,
            "global_only": true
        },
        "material_print_temp_wait": {
            "description": "Whether to insert a command to wait until the nozzle temperatures are reached at the start.",
            "default": true,
            "global_only": true
        },
        "material_print_temp_prepend": {
            "description": "Whether to include nozzle temperature commands at the start of the gcode. When the start_gcode already contains nozzle temperature commands Cura frontend will automatically disable this setting.",
            "default": true,
            "global_only": true
        },
        "material_bed_temp_prepend": {
            "description": "Whether to include bed temperature commands at the start of the gcode. When the start_gcode already contains bed temperature commands Cura frontend will automatically disable this setting.",
            "default": true,
            "global_only": true
        },
        "machine_width": {
            "description": "The width (X-direction) of the printable area.",
            "default": 100,
            "global_only": true
        },
        "machine_depth": {
            "description": "The depth (Y-direction) of the printable area.",
            "default": 100,
            "global_only": true
        },
        "machine_height": {
            "description": "The height (Z-direction) of the printable area.",
            "default": 100,
            "global_only": true
        },
        "machine_heated_bed": {
            "description": "Whether the machine has a heated bed present.",
            "default": false,
            "global_only": true
        },
        "machine_center_is_zero": {
            "description": "Whether the X/Y coordinates of the zero position of the printer is at the center of the printable area.",
            "default": false,
            "global_only": true
        },
        "machine_extruder_count": {
            "description": "Number of extruder trains. An extruder train is the combination of a feeder, bowden tube, and nozzle.",
            "default": 1,
            "global_only": true
        },
        "machine_nozzle_tip_outer_diameter": { 
            "description": "The outer diameter of the tip of the nozzle.",
            "default": 1,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_nozzle_head_distance": {
            "description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
            "default": 3,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_nozzle_expansion_angle": {
            "description": "The angle between the horizontal plane and the conical part right above the tip of the nozzle.",
            "default": 45,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_heat_zone_length": {
            "description": "The distance from the tip of the nozzle in which heat from the nozzle is transfered to the filament.",
            "default": 16,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_nozzle_heat_up_speed": {
            "description": "The speed (*C/s) by which the nozzle heats up averaged over the window of normal printing temperatures and the standby temperature.",
            "default": 2.0,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_nozzle_cool_down_speed": { 
            "description": "The speed (*C/s) by which the nozzle cools down averaged over the window of normal printing temperatures and the standby temperature.",
            "default": 2.0,
            "SEE_machine_extruder_trains": true,
            "global_only": true
        },
        "machine_gcode_flavor": {
            "description": "The type of gcode to be generated.",
            "default": "RepRap",
            "global_only": true
        },
        "machine_disallowed_areas": {
            "description": "A list of polygons with areas the print head is not allowed to enter.",
            "type": "polygons",
            "default": [],
            "global_only": true
        },
        "machine_platform_offset": {
            "description": "Where to display the platform mesh.",
            "default": [
                0,
                0,
                0
            ],
            "global_only": true
        },
        "machine_head_polygon": {
            "description": "A 2D silhouette of the print head.",
            "type": "polygon",
            "default": [
                [
                    -1,
                    1
                ],
                [
                    -1,
                    -1
                ],
                [
                    1,
                    -1
                ],
                [
                    1,
                    1
                ]
            ],
            "global_only": true
        },
        "machine_head_with_fans_polygon": {
            "description": "A 2D silhouette of the print head.",
            "type": "polygon",
            "default": [
                [
                    -20,
                    10
                ],
                [
                    10,
                    10
                ],
                [
                    10,
                    -10
                ],
                [
                    -20,
                    -10
                ]
            ],
            "global_only": true
        },
        "gantry_height": {
            "description": "The height difference between the tip of the nozzle and the gantry system (X and Y axes).",
            "default": 99999999999,
            "global_only": true
        }
    },
    "categories": {
        "machine": {
            "label": "Machine",
            "visible": true,
            "icon": "category_machine",
            "settings": {
                "machine_nozzle_size": {
                    "label": "Nozzle Diameter",
                    "description": "The inner diameter of the nozzle.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.4,
                    "min_value": "0.001",
                    "max_value_warning": "10",
                    "visible": false
                }
            },
            "global_only": true
        },
        "resolution": {
            "label": "Quality",
            "visible": true,
            "icon": "category_layer_height",
            "settings": {
                "layer_height": {
                    "label": "Layer Height",
                    "description": "The height of each layer, in mm. Normal quality prints are 0.1mm, high quality is 0.06mm. You can go up to 0.25mm with an Ultimaker for very fast prints at low quality. For most purposes, layer heights between 0.1 and 0.2mm give a good tradeoff of speed and surface finish.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.1,
                    "min_value": "0.001",
                    "min_value_warning": "0.04",
                    "max_value_warning": "0.8 * machine_nozzle_size",
                    "global_only": "True"
                },
                "layer_height_0": {
                    "label": "Initial Layer Height",
                    "description": "The layer height of the bottom layer. A thicker bottom layer makes sticking to the bed easier.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.3,
                    "min_value": "0.001",
                    "min_value_warning": "0.04",
                    "max_value_warning": "0.8 * machine_nozzle_size",
                    "visible": false,
                    "global_only": "True"
                },
                "line_width": {
                    "label": "Line Width",
                    "description": "Width of a single line. Each line will be printed with this width in mind. Generally the width of each line should correspond to the width of your nozzle, but for the outer wall and top/bottom surface smaller line widths may be chosen, for higher quality.",
                    "unit": "mm",
                    "min_value": "0.0001",
                    "min_value_warning": "0.2",
                    "max_value_warning": "2 * machine_nozzle_size",
                    "default": 0.4,
                    "type": "float",
                    "visible": false,
                    "inherit_function": "machine_nozzle_size",
                    "children": {
                        "wall_line_width": {
                            "label": "Wall Line Width",
                            "description": "Width of a single shell line. Each line of the shell will be printed with this width in mind.",
                            "unit": "mm",
                            "min_value": "0.0001",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "default": 0.4,
                            "type": "float",
                            "visible": false,
                            "children": {
                                "wall_line_width_0": {
                                    "label": "Outer Wall Line Width",
                                    "description": "Width of the outermost shell line. By printing a thinner outermost wall line you can print higher details with a larger nozzle.",
                                    "unit": "mm",
                                    "min_value": "0.0001",
                                    "min_value_warning": "0.2",
                                    "max_value_warning": "5",
                                    "default": 0.4,
                                    "type": "float",
                                    "visible": false
                                },
                                "wall_line_width_x": {
                                    "label": "Other Walls Line Width",
                                    "description": "Width of a single shell line for all shell lines except the outermost one.",
                                    "unit": "mm",
                                    "min_value": "0.0001",
                                    "min_value_warning": "0.2",
                                    "max_value_warning": "5",
                                    "default": 0.4,
                                    "type": "float",
                                    "visible": false
                                }
                            }
                        },
                        "skirt_line_width": {
                            "label": "Skirt line width",
                            "description": "Width of a single skirt line.",
                            "unit": "mm",
                            "min_value": "0.0001",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "default": 0.4,
                            "type": "float",
                            "visible": false, 
                            "global_only": true
                        },
                        "skin_line_width": {
                            "label": "Top/bottom line width",
                            "description": "Width of a single top/bottom printed line, used to fill up the top/bottom areas of a print.",
                            "unit": "mm",
                            "min_value": "0.0001",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "default": 0.4,
                            "type": "float",
                            "visible": false
                        },
                        "infill_line_width": {
                            "label": "Infill line width",
                            "description": "Width of the inner infill printed lines.",
                            "unit": "mm",
                            "min_value": "0.0001",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "default": 0.4,
                            "type": "float",
                            "visible": false
                        },
                        "support_line_width": {
                            "label": "Support line width",
                            "description": "Width of the printed support structures lines.",
                            "unit": "mm",
                            "min_value": "0.0001",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "default": 0.4,
                            "type": "float",
                            "visible": false,
                            "enabled": "support_enable",
                            "global_only": true
                        },
                        "support_roof_line_width": {
                            "label": "Support Roof line width",
                            "description": "Width of a single support roof line, used to fill the top of the support.",
                            "unit": "mm",
                            "default": 0.4,
                            "min_value": "0.0001",
                            "max_value_warning": "machine_nozzle_size * 2",
                            "type": "float",
                            "visible": false,
                            "enabled": "support_roof_enable",
                            "global_only": true
                        }
                    }
                }
            }
        },
        "shell": {
            "label": "Shell",
            "visible": true,
            "icon": "category_shell",
            "settings": {
                "shell_thickness": {
                    "label": "Shell Thickness",
                    "description": "The thickness of the outside shell in the horizontal and vertical direction. This is used in combination with the nozzle size to define the number of perimeter lines and the thickness of those perimeter lines. This is also used to define the number of solid top and bottom layers.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.8,
                    "min_value": "0",
                    "min_value_warning": "0.2",
                    "max_value_warning": "5",
                    "visible": false,
                    "children": {
                        "wall_thickness": {
                            "label": "Wall Thickness",
                            "description": "The thickness of the outside walls in the horizontal direction. This is used in combination with the nozzle size to define the number of perimeter lines and the thickness of those perimeter lines.",
                            "unit": "mm",
                            "default": 0.8,
                            "min_value": "0",
                            "min_value_warning": "0.2",
                            "max_value_warning": "5",
                            "type": "float",
                            "visible": true,
                            "children": {
                                "wall_line_count": {
                                    "label": "Wall Line Count",
                                    "description": "Number of shell lines. These lines are called perimeter lines in other tools and impact the strength and structural integrity of your print.",
                                    "default": 2,
                                    "min_value": "0",   
                                    "type": "int",
                                    "visible": false,
                                    "inherit_function": "1 if magic_spiralize else max(1, round((wall_thickness - wall_line_width_0) / wall_line_width_x) + 1)"
                                }
                            }
                        },
                        "alternate_extra_perimeter": {
                            "label": "Alternate Extra Wall",
                            "description": "Make an extra wall at every second layer, so that infill will be caught between an extra wall above and one below. This results in a better cohesion between infill and walls, but might have an impact on the surface quality.",
                            "type": "boolean",
                            "default": false,
                            "visible": false,
                            "inherit": false
                        },
                        "top_bottom_thickness": {
                            "label": "Bottom/Top Thickness",
                            "description": "This controls the thickness of the bottom and top layers. The number of solid layers put down is calculated from the layer thickness and this value. Having this value a multiple of the layer thickness makes sense. Keep it near your wall thickness to make an evenly strong part.",
                            "unit": "mm",
                            "default": 0.8,
                            "min_value": "0",
                            "max_value": "5",
                            "min_value_warning": "0.6",
                            "type": "float",
                            "visible": true,
                            "children": {
                                "top_thickness": {
                                    "label": "Top Thickness",
                                    "description": "This controls the thickness of the top layers. The number of solid layers printed is calculated from the layer thickness and this value. Having this value be a multiple of the layer thickness makes sense. Keep it near your wall thickness to make an evenly strong part.",
                                    "unit": "mm",
                                    "default": 0.8,
                                    "min_value": "0",
                                    "max_value_warning": "100",
                                    "type": "float",
                                    "visible": false,
                                    "children": {
                                        "top_layers": {
                                            "label": "Top Layers",
                                            "description": "This controls the number of top layers.",
                                            "default": 8,
                                            "min_value": "0",
                                            "max_value_warning": "100",
                                            "type": "int",
                                            "visible": false,
                                            "inherit_function": "0 if infill_sparse_density == 100 else math.ceil(parent_value / layer_height)"
                                        }
                                    }
                                },
                                "bottom_thickness": {
                                    "label": "Bottom Thickness",
                                    "description": "This controls the thickness of the bottom layers. The number of solid layers printed is calculated from the layer thickness and this value. Having this value be a multiple of the layer thickness makes sense. And keep it near to your wall thickness to make an evenly strong part.",
                                    "unit": "mm",
                                    "default": 0.6,
                                    "min_value": "0",
                                    "type": "float",
                                    "visible": false,
                                    "children": {
                                        "bottom_layers": {
                                            "label": "Bottom Layers",
                                            "description": "This controls the amount of bottom layers.",
                                            "min_value": "0",
                                            "default": 6,
                                            "type": "int",
                                            "visible": false,
                                            "inherit_function": "999999 if infill_sparse_density == 100 else math.ceil(parent_value / layer_height)"
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "remove_overlapping_walls_enabled": {
                    "label": "Remove Overlapping Wall Parts",
                    "description": "Remove parts of a wall which share an overlap which would result in overextrusion in some places. These overlaps occur in thin pieces in a model and sharp corners.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "children": {
                        "remove_overlapping_walls_0_enabled": {
                            "label": "Remove Overlapping Outer Wall Parts",
                            "description": "Remove parts of an outer wall which share an overlap which would result in overextrusion in some places. These overlaps occur in thin pieces in a model and sharp corners.",
                            "type": "boolean",
                            "default": false,
                            "visible": false,
                            "inherit": true
                        },
                        "remove_overlapping_walls_x_enabled": {
                            "label": "Remove Overlapping Other Wall Parts",
                            "description": "Remove parts of an inner wall which share an overlap which would result in overextrusion in some places. These overlaps occur in thin pieces in a model and sharp corners.",
                            "type": "boolean",
                            "default": true,
                            "visible": false,
                            "inherit": false
                        }
                    }
                },
                "travel_compensate_overlapping_walls_enabled": {
                    "label": "Compensate Wall Overlaps",
                    "description": "Compensate the flow for parts of a wall being laid down where there already is a piece of a wall. These overlaps occur in thin pieces in a model. Gcode generation might be slowed down considerably.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                },
                "fill_perimeter_gaps": {
                    "label": "Fill Gaps Between Walls",
                    "description": "Fill the gaps created by walls where they would otherwise be overlapping. This will also fill thin walls. Optionally only the gaps occurring within the top and bottom skin can be filled.",
                    "type": "enum",
                    "options": {
                        "nowhere": "Nowhere",
                        "everywhere": "Everywhere",
                        "skin": "Skin"
                    },
                    "default": "everywhere",
                    "visible": false,
                    "enabled": "remove_overlapping_walls_x_enabled"
                },
                "top_bottom_pattern": {
                    "label": "Bottom/Top Pattern",
                    "description": "Pattern of the top/bottom solid fill. This is normally done with lines to get the best possible finish, but in some cases a concentric fill gives a nicer end result.",
                    "type": "enum",
                    "options": {
                        "lines": "Lines",
                        "concentric": "Concentric",
                        "zigzag": "Zig Zag"
                    },
                    "default": "lines",
                    "visible": false
                },
                "skin_no_small_gaps_heuristic": {
                    "label": "Ignore small Z gaps",
                    "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such a case set this setting to false.",
                    "type": "boolean",
                    "default": true,
                    "visible": false
                },
                "skin_alternate_rotation": {
                    "label": "Alternate Skin Rotation",
                    "description": "Alternate between diagonal skin fill and horizontal + vertical skin fill. Although the diagonal directions can print quicker, this option can improve the printing quality by reducing the pillowing effect.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                },
                "skin_outline_count": {
                    "label": "Extra Skin Wall Count",
                    "description": "Number of lines around skin regions. Using one or two skin perimeter lines can greatly improve roofs which would start in the middle of infill cells.",
                    "default": 0,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "type": "int",
                    "visible": false
                },
                "xy_offset": {
                    "label": "Horizontal expansion",
                    "description": "Amount of offset applied to all polygons in each layer. Positive values can compensate for too big holes; negative values can compensate for too small holes.",
                    "unit": "mm",
                    "type": "float",
                    "min_value_warning": "-10",
                    "max_value_warning": "10",
                    "default": 0,
                    "visible": false
                },
                "z_seam_type": {
                    "label": "Z Seam Alignment",
                    "description": "Starting point of each path in a layer. When paths in consecutive layers start at the same point a vertical seam may show on the print. When aligning these at the back, the seam is easiest to remove. When placed randomly the inaccuracies at the paths' start will be less noticeable. When taking the shortest path the print will be quicker.",
                    "type": "enum",
                    "options": {
                        "back": "Back",
                        "shortest": "Shortest",
                        "random": "Random"
                    },
                    "default": "shortest",
                    "visible": false
                }
            }
        },
        "infill": {
            "label": "Infill",
            "visible": true,
            "icon": "category_infill",
            "settings": {
                "infill_sparse_density": {
                    "label": "Infill Density",
                    "description": "This controls how densely filled the insides of your print will be. For a solid part use 100%, for a hollow part use 0%. A value around 20% is usually enough. This setting won't affect the outside of the print and only adjusts how strong the part becomes.",
                    "unit": "%",
                    "type": "float",
                    "default": 20,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "children": {
                        "infill_line_distance": {
                            "label": "Line distance",
                            "description": "Distance between the printed infill lines.",
                            "unit": "mm",
                            "type": "float",
                            "default": 2,
                            "min_value": "0",
                            "visible": false,
                            "inherit_function": "0 if infill_sparse_density == 0 else (infill_line_width * 100) / infill_sparse_density"
                        }
                    }
                },
                "infill_pattern": {
                    "label": "Infill Pattern",
                    "description": "Cura defaults to switching between grid and line infill, but with this setting visible you can control this yourself. The line infill swaps direction on alternate layers of infill, while the grid prints the full cross-hatching on each layer of infill.",
                    "type": "enum",
                    "visible": false,
                    "options": {
                        "grid": "Grid",
                        "lines": "Lines",
                        "triangles": "Triangles",
                        "concentric": "Concentric",
                        "zigzag": "Zig Zag"
                    },
                    "default": "grid",
                    "inherit_function": "'lines' if infill_sparse_density > 25 else 'grid'"
                },
                "infill_overlap": {
                    "label": "Infill Overlap",
                    "description": "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill.",
                    "unit": "%",
                    "type": "float",
                    "default": 10,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "visible": false
                },
                "infill_wipe_dist": {
                    "label": "Infill Wipe Distance",
                    "description": "Distance of a travel move inserted after every infill line, to make the infill stick to the walls better. This option is similar to infill overlap, but without extrusion and only on one end of the infill line.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.04,
                    "min_value_warning": "0",
                    "max_value_warning": "machine_nozzle_size",
                    "visible": false
                },
                "infill_sparse_thickness": {
                    "label": "Infill Thickness",
                    "description": "The thickness of the sparse infill. This is rounded to a multiple of the layerheight and used to print the sparse-infill in fewer, thicker layers to save printing time.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.1,
                    "min_value": "0.0001",
                    "max_value_warning": "0.32",
                    "visible": false,
                    "inherit_function": "layer_height"
                },
                "infill_before_walls": {
                    "label": "Infill Before Walls",
                    "description": "Print the infill before printing the walls. Printing the walls first may lead to more accurate walls, but overhangs print worse. Printing the infill first leads to sturdier walls, but the infill pattern might sometimes show through the surface.",
                    "type": "boolean",
                    "default": true,
                    "visible": false
                }
            }
        },
        "material": {
            "label": "Material",
            "visible": true,
            "icon": "category_material",
            "settings": {
                "material_flow_dependent_temperature": {
                    "label": "Auto Temperature",
                    "description": "Change the temperature for each layer automatically with the average flow speed of that layer.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "enabled": "False",
                    "global_only": true
                },
                "material_print_temperature": {
                    "label": "Printing Temperature",
                    "description": "The temperature used for printing. Set at 0 to pre-heat yourself. For PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required.",
                    "unit": "°C",
                    "type": "float",
                    "default": 210,
                    "min_value": "0",
                    "max_value_warning": "260",
                    "enabled": "not (material_flow_dependent_temperature)"
                },
                "material_flow_temp_graph": {
                    "label": "Flow Temperature Graph",
                    "description": "Data linking material flow (in mm3 per second) to temperature (degrees Celsius).",
                    "unit": "",
                    "type": "string",
                    "default": "[[3.5,200],[7.0,240]]",
                    "enabled": "material_flow_dependent_temperature",
                    "global_only": true
                },
                "material_extrusion_cool_down_speed": {
                    "label": "Extrusion Cool Down Speed Modifier",
                    "description": "The extra speed by which the nozzle cools while extruding. The same value is used to signify the heat up speed lost when heating up while extruding.",
                    "unit": "°C/s",
                    "type": "float",
                    "default": 0.5,
                    "min_value": "0",
                    "max_value_warning": "10.0",
                    "global_only": "True",
                    "enabled": "material_flow_dependent_temperature or machine_extruder_count > 1",
                    "visible": false
                },
                "material_bed_temperature": {
                    "label": "Bed Temperature",
                    "description": "The temperature used for the heated printer bed. Set at 0 to pre-heat it yourself.",
                    "unit": "°C",
                    "type": "float",
                    "default": 60,
                    "min_value": "0",
                    "max_value_warning": "260",
                    "enabled": "machine_heated_bed",
                    "global_only": "True"
                },
                "material_diameter": {
                    "label": "Diameter",
                    "description": "The diameter of your filament needs to be measured as accurately as possible.\nIf you cannot measure this value you will have to calibrate it; a higher number means less extrusion, a smaller number generates more extrusion.",
                    "unit": "mm",
                    "type": "float",
                    "default": 2.85,
                    "min_value": "0.0001",
                    "min_value_warning": "0.4",
                    "max_value_warning": "3.5",
                    "global_only": "True"
                },
                "material_flow": {
                    "label": "Flow",
                    "description": "Flow compensation: the amount of material extruded is multiplied by this value.",
                    "unit": "%",
                    "default": 100,
                    "type": "float",
                    "min_value": "5",
                    "min_value_warning": "50",
                    "max_value_warning": "150"
                },
                "retraction_enable": {
                    "label": "Enable Retraction",
                    "description": "Retract the filament when the nozzle is moving over a non-printed area. Details about the retraction can be configured in the advanced tab.",
                    "type": "boolean",
                    "default": true,
                    "visible": true
                },
                "retraction_amount": {
                    "label": "Retraction Distance",
                    "description": "The amount of retraction: Set at 0 for no retraction at all. A value of 4.5mm seems to generate good results for 3mm filament in bowden tube fed printers.",
                    "unit": "mm",
                    "type": "float",
                    "default": 4.5,
                    "min_value_warning": "-0.0001",
                    "max_value_warning": "10.0",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable"
                },
                "retraction_speed": {
                    "label": "Retraction Speed",
                    "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 25,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable",
                    "children": {
                        "retraction_retract_speed": {
                            "label": "Retraction Retract Speed",
                            "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 25,
                            "min_value": "0",
                            "max_value_warning": "100",
                            "visible": false,
                            "enabled": "retraction_enable"
                        },
                        "retraction_prime_speed": {
                            "label": "Retraction Prime Speed",
                            "description": "The speed at which the filament is pushed back after retraction.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 25,
                            "min_value": "0",
                            "max_value_warning": "100",
                            "visible": false,
                            "enabled": "retraction_enable"
                        }
                    }
                },
                "retraction_extra_prime_amount": {
                    "label": "Retraction Extra Prime Amount",
                    "description": "The amount of material extruded after a retraction. During a travel move, some material might get lost and so we need to compensate for this.",
                    "unit": "mm³",
                    "type": "float",
                    "default": 0,
                    "min_value_warning": "-0.0001",
                    "max_value_warning": "5.0",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable"
                },
                "retraction_min_travel": {
                    "label": "Retraction Minimum Travel",
                    "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.",
                    "unit": "mm",
                    "type": "float",
                    "default": 1.5,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable"
                },
                "retraction_count_max": {
                    "label": "Maximum Retraction Count",
                    "description": "This setting limits the number of retractions occurring within the Minimum Extrusion Distance Window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.",
                    "default": 8,
                    "min_value": "0",
                    "max_value_warning": "20",
                    "type": "int",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable"
                },
                "retraction_extrusion_window": {
                    "label": "Minimum Extrusion Distance Window",
                    "description": "The window in which the Maximum Retraction Count is enforced. This value should be approximately the same as the Retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.",
                    "unit": "mm",
                    "type": "float",
                    "default": 4.5,
                    "min_value": "0",
                    "max_value_warning": "retraction_amount * 2",
                    "visible": false,
                    "inherit_function": "retraction_amount",
                    "enabled": "retraction_enable"
                },
                "retraction_hop": {
                    "label": "Z Hop when Retracting",
                    "description": "Whenever a retraction is done, the head is lifted by this amount to travel over the print. A value of 0.075 works well. This feature has a large positive effect on delta towers.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0,
                    "min_value_warning": "-0.0001",
                    "max_value_warning": "10",
                    "visible": false,
                    "inherit": false,
                    "enabled": "retraction_enable"
                }
            }
        },
        "speed": {
            "label": "Speed",
            "visible": true,
            "icon": "category_speed",
            "settings": {
                "speed_print": {
                    "label": "Print Speed",
                    "description": "The speed at which printing happens. A well-adjusted Ultimaker can reach 150mm/s, but for good quality prints you will want to print slower. Printing speed depends on a lot of factors, so you will need to experiment with optimal settings for this.",
                    "unit": "mm/s",
                    "type": "float",
                    "min_value": "0.1",
                    "max_value_warning": "150",
                    "default": 60,
                    "children": {
                        "speed_infill": {
                            "label": "Infill Speed",
                            "description": "The speed at which infill parts are printed. Printing the infill faster can greatly reduce printing time, but this can negatively affect print quality.",
                            "unit": "mm/s",
                            "type": "float",
                            "min_value": "0.1",
                            "max_value_warning": "150",
                            "default": 60,
                            "visible": false
                        },
                        "speed_wall": {
                            "label": "Shell Speed",
                            "description": "The speed at which the shell is printed. Printing the outer shell at a lower speed improves the final skin quality.",
                            "unit": "mm/s",
                            "type": "float",
                            "min_value": "0.1",
                            "max_value_warning": "150",
                            "default": 30,
                            "visible": false,
                            "inherit_function": "parent_value / 60 * 30",
                            "children": {
                                "speed_wall_0": {
                                    "label": "Outer Shell Speed",
                                    "description": "The speed at which the outer shell is printed. Printing the outer shell at a lower speed improves the final skin quality. However, having a large difference between the inner shell speed and the outer shell speed will effect quality in a negative way.",
                                    "unit": "mm/s",
                                    "type": "float",
                                    "min_value": "0.1",
                                    "max_value_warning": "150",
                                    "default": 30,
                                    "visible": false
                                },
                                "speed_wall_x": {
                                    "label": "Inner Shell Speed",
                                    "description": "The speed at which all inner shells are printed. Printing the inner shell faster than the outer shell will reduce printing time. It works well to set this in between the outer shell speed and the infill speed.",
                                    "unit": "mm/s",
                                    "type": "float",
                                    "min_value": "0.1",
                                    "max_value_warning": "150",
                                    "default": 60,
                                    "visible": false,
                                    "inherit_function": "speed_print"
                                }
                            }
                        },
                        "speed_topbottom": {
                            "label": "Top/Bottom Speed",
                            "description": "Speed at which top/bottom parts are printed. Printing the top/bottom faster can greatly reduce printing time, but this can negatively affect print quality.",
                            "unit": "mm/s",
                            "type": "float",
                            "min_value": "0.1",
                            "max_value_warning": "150",
                            "default": 30,
                            "visible": false,
                            "inherit_function": "parent_value / 60 * 30"
                        },
                        "speed_support": {
                            "label": "Support Speed",
                            "description": "The speed at which exterior support is printed. Printing exterior supports at higher speeds can greatly improve printing time. The surface quality of exterior support is usually not important anyway, so higher speeds can be used.",
                            "unit": "mm/s",
                            "type": "float",
                            "min_value": "0.1",
                            "max_value_warning": "150",
                            "default": 60,
                            "visible": false,
                            "inherit_function": "speed_print",
                            "enabled": "support_enable",
                            "children": {
                                "speed_support_lines": {
                                    "label": "Support Wall Speed",
                                    "description": "The speed at which the walls of exterior support are printed. Printing the walls at higher speeds can improve the overall duration.",
                                    "unit": "mm/s",
                                    "type": "float",
                                    "default": 60,
                                    "min_value": "0.1",
                                    "max_value_warning": "150",
                                    "visible": false,
                                    "inherit": true,
                                    "enabled": "support_roof_enable",
                                    "global_only": true
                                },
                                "speed_support_roof": {
                                    "label": "Support Roof Speed",
                                    "description": "The speed at which the roofs of exterior support are printed. Printing the support roof at lower speeds can improve overhang quality.",
                                    "unit": "mm/s",
                                    "type": "float",
                                    "default": 40,
                                    "min_value": "0.1",
                                    "max_value_warning": "150",
                                    "visible": false,
                                    "inherit": false,
                                    "enabled": "support_roof_enable",
                                    "inherit_function": "parent_value / 60 * 40",
                                    "global_only": true
                                }
                            }
                        }
                    }
                },
                "speed_travel": {
                    "label": "Travel Speed",
                    "description": "The speed at which travel moves are done. A well-built Ultimaker can reach speeds of 250mm/s, but some machines might have misaligned layers then.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 120,
                    "min_value": "0.1",
                    "max_value_warning": "300",
                    "inherit_function": "speed_print if magic_spiralize else 120",
                    "global_only": true
                },
                "speed_layer_0": {
                    "label": "Bottom Layer Speed",
                    "description": "The print speed for the bottom layer: You want to print the first layer slower so it sticks better to the printer bed.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 30,
                    "min_value": "0.1",
                    "max_value_warning": "300",
                    "visible": false
                },
                "skirt_speed": {
                    "label": "Skirt Speed",
                    "description": "The speed at which the skirt and brim are printed. Normally this is done at the initial layer speed, but sometimes you might want to print the skirt at a different speed.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 30,
                    "min_value": "0.1",
                    "max_value_warning": "300",
                    "visible": false,
                    "inherit_function": "speed_layer_0",
                    "global_only": true
                },
                "speed_slowdown_layers": {
                    "label": "Number of Slower Layers",
                    "description": "The first few layers are printed slower than the rest of the object, this to get better adhesion to the printer bed and improve the overall success rate of prints. The speed is gradually increased over these layers. 4 layers of speed-up is generally right for most materials and printers.",
                    "type": "int",
                    "default": 4,
                    "min_value": "0",
                    "max_value_warning": "300",
                    "visible": false,
                    "global_only": true
                }
            }
        },
        "travel": {
            "label": "Travel",
            "visible": true,
            "icon": "category_travel",
            "settings": {
                "retraction_combing": {
                    "label": "Enable Combing",
                    "description": "Combing keeps the head within the interior of the print whenever possible when traveling from one part of the print to another and does not use retraction. If combing is disabled, the print head moves straight from the start point to the end point and it will always retract.",
                    "type": "boolean",
                    "default": true,
                    "visible": false, 
                    "global_only": true
                },
                "travel_avoid_other_parts": {
                    "label": "Avoid Printed Parts",
                    "description": "Avoid other parts when traveling between parts.",
                    "type": "boolean",
                    "default": true,
                    "visible": false,
                    "enabled": "retraction_combing",
                    "global_only": "True",
                    "children": {
                        "travel_avoid_distance": {
                            "label": "Avoid Distance",
                            "description": "The distance to stay clear of parts which are avoided during travel.",
                            "unit": "mm",
                            "type": "float",
                            "default": 1.5,
                            "min_value": "0",
                            "max_value_warning": "machine_nozzle_tip_outer_diameter * 5",
                            "visible": false,
                            "inherit": false,
                            "enabled": "retraction_combing",
                            "global_only": "True"
                        }
                    }
                },
                "coasting_enable": {
                    "label": "Enable Coasting",
                    "description": "Coasting replaces the last part of an extrusion path with a travel path. The oozed material is used to lay down the last piece of the extrusion path in order to reduce stringing.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "global_only": true
                },
                "coasting_volume": {
                    "label": "Coasting Volume",
                    "description": "The volume otherwise oozed. This value should generally be close to the nozzle diameter cubed.",
                    "unit": "mm³",
                    "type": "float",
                    "default": 0.064,
                    "min_value": "0",
                    "max_value_warning": "2.0",
                    "visible": false,
                    "inherit": false,
                    "enabled": "coasting_enable",
                    "global_only": true
                },
                "coasting_min_volume": {
                    "label": "Minimal Volume Before Coasting",
                    "description": "The least volume an extrusion path should have to coast the full amount. For smaller extrusion paths, less pressure has been built up in the bowden tube and so the coasted volume is scaled linearly. This value should always be larger than the Coasting Volume.",
                    "unit": "mm³",
                    "type": "float",
                    "default": 0.8,
                    "min_value": "0",
                    "max_value_warning": "10.0",
                    "visible": false,
                    "enabled": "coasting_enable",
                    "global_only": true
                },
                "coasting_speed": {
                    "label": "Coasting Speed",
                    "description": "The speed by which to move during coasting, relative to the speed of the extrusion path. A value slightly under 100% is advised, since during the coasting move the pressure in the bowden tube drops.",
                    "unit": "%",
                    "type": "float",
                    "default": 90,
                    "min_value": "0.0001",
                    "max_value_warning": "100",
                    "visible": false,
                    "inherit": false,
                    "enabled": "coasting_enable",
                    "global_only": true
                }
            }
        },
        "cooling": {
            "label": "Cooling",
            "visible": true,
            "icon": "category_cool",
            "settings": {
                "cool_fan_enabled": {
                    "label": "Enable Cooling Fan",
                    "description": "Enable the cooling fan during the print. The extra cooling from the cooling fan helps parts with small cross sections that print each layer quickly.",
                    "type": "boolean",
                    "default": true,
                    "global_only": "True",
                    "children": {
                        "cool_fan_speed": {
                            "label": "Fan Speed",
                            "description": "Fan speed used for the print cooling fan on the printer head.",
                            "unit": "%",
                            "type": "float",
                            "min_value": "0",
                            "max_value": "100",
                            "default": 100,
                            "visible": false,
                            "inherit_function": "100.0 if parent_value else 0.0",
                            "global_only": "True",
                            "children": {
                                "cool_fan_speed_min": {
                                    "label": "Minimum Fan Speed",
                                    "description": "Normally the fan runs at the minimum fan speed. If the layer is slowed down due to minimum layer time, the fan speed adjusts between minimum and maximum fan speed.",
                                    "unit": "%",
                                    "type": "float",
                                    "min_value": "0",
                                    "max_value": "100",
                                    "default": 100,
                                    "visible": false,
                                    "global_only": "True"
                                },
                                "cool_fan_speed_max": {
                                    "label": "Maximum Fan Speed",
                                    "description": "Normally the fan runs at the minimum fan speed. If the layer is slowed down due to minimum layer time, the fan speed adjusts between minimum and maximum fan speed.",
                                    "unit": "%",
                                    "type": "float",
                                    "min_value": "0",
                                    "max_value": "100",
                                    "default": 100,
                                    "visible": false,
                                    "global_only": "True"
                                }
                            }
                        }
                    }
                },
                "cool_fan_full_at_height": {
                    "label": "Fan Full on at Height",
                    "description": "The height at which the fan is turned on completely. For the layers below this the fan speed is scaled linearly with the fan off for the first layer.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.5,
                    "min_value": "0",
                    "max_value_warning": "10.0",
                    "visible": false,
                    "global_only": "True",
                    "children": {
                        "cool_fan_full_layer": {
                            "label": "Fan Full on at Layer",
                            "description": "The layer number at which the fan is turned on completely. For the layers below this the fan speed is scaled linearly with the fan off for the first layer.",
                            "type": "int",
                            "default": 4,
                            "min_value": "0",
                            "max_value_warning": "100",
                            "visible": false,
                            "inherit_function": "int((parent_value - layer_height_0 + 0.001) / layer_height)",
                            "global_only": "True"
                        }
                    }
                },
                "cool_min_layer_time": {
                    "label": "Minimum Layer Time",
                    "description": "The minimum time spent in a layer: Gives the layer time to cool down before the next one is put on top. If a layer would print in less time, then the printer will slow down to make sure it has spent at least this many seconds printing the layer.",
                    "unit": "sec",
                    "type": "float",
                    "default": 5,
                    "min_value": "0",
                    "max_value_warning": "600",
                    "visible": false,
                    "global_only": "True"
                },
                "cool_min_layer_time_fan_speed_max": {
                    "label": "Minimum Layer Time Full Fan Speed",
                    "description": "The minimum time spent in a layer which will cause the fan to be at maximum speed. The fan speed increases linearly from minimum fan speed for layers taking the minimum layer time to maximum fan speed for layers taking the time specified here.",
                    "unit": "sec",
                    "type": "float",
                    "default": 10,
                    "min_value": "cool_min_layer_time",
                    "max_value_warning": "600",
                    "visible": false,
                    "global_only": "True"
                },
                "cool_min_speed": {
                    "label": "Minimum Speed",
                    "description": "The minimum layer time can cause the print to slow down so much it starts to droop. The minimum feedrate protects against this. Even if a print gets slowed down it will never be slower than this minimum speed.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 10,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "visible": false,
                    "global_only": "True"
                },
                "cool_lift_head": {
                    "label": "Lift Head",
                    "description": "Lift the head away from the print if the minimum speed is hit because of cool slowdown, and wait the extra time away from the print surface until the minimum layer time is used up.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "global_only": "True"
                },
                "draft_shield_enabled": {
                    "label": "Enable Draft Shield",
                    "description": "Enable exterior draft shield. This will create a wall around the object which traps (hot) air and shields against gusts of wind. Especially useful for materials which warp easily.",
                    "type": "boolean",
                    "default": false,
                    "global_only": true
                },
                "draft_shield_dist": {
                    "label": "Draft Shield X/Y Distance",
                    "description": "Distance of the draft shield from the print, in the X/Y directions.",
                    "unit": "mm",
                    "type": "float",
                    "min_value": "0",
                    "max_value_warning": "100",
                    "default": 10,
                    "visible": false,
                    "enabled": "draft_shield_enabled",
                    "global_only": true
                },
                "draft_shield_height_limitation": {
                    "label": "Draft Shield Limitation",
                    "description": "Whether or not to limit the height of the draft shield.",
                    "type": "enum",
                    "options": {
                        "full": "Full",
                        "limited": "Limited"
                    },
                    "default": "full",
                    "visible": false,
                    "enabled": "draft_shield_enabled",
                    "global_only": true
                },
                "draft_shield_height": {
                    "label": "Draft Shield Height",
                    "description": "Height limitation on the draft shield. Above this height no draft shield will be printed.",
                    "unit": "mm",
                    "type": "float",
                    "min_value": "0",
                    "max_value_warning": "30",
                    "default": 0,
                    "inherit_function": "9999 if draft_shield_height_limitation == 'full' and draft_shield_enabled else 0.0",
                    "visible": false,
                    "enabled": "draft_shield_height_limitation == \"limited\"",
                    "global_only": true
                }
            }
        },
        "support": {
            "label": "Support",
            "visible": true,
            "icon": "category_support",
            "settings": {
                "support_enable": {
                    "label": "Enable Support",
                    "description": "Enable exterior support structures. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.",
                    "type": "boolean",
                    "default": true
                },
                "support_type": {
                    "label": "Placement",
                    "description": "Where to place support structures. The placement can be restricted so that the support structures won't rest on the model, which could otherwise cause scarring.",
                    "type": "enum",
                    "options": {
                        "buildplate": "Touching Buildplate",
                        "everywhere": "Everywhere"
                    },
                    "default": "buildplate",
                    "enabled": "support_enable"
                },
                "support_angle": {
                    "label": "Overhang Angle",
                    "description": "The maximum angle of overhangs for which support will be added. With 0 degrees being vertical, and 90 degrees being horizontal. A smaller overhang angle leads to more support.",
                    "unit": "°",
                    "type": "float",
                    "min_value": "0",
                    "max_value": "90",
                    "default": 50,
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_xy_distance": {
                    "label": "X/Y Distance",
                    "description": "Distance of the support structure from the print in the X/Y directions. 0.7mm typically gives a nice distance from the print so the support does not stick to the surface.",
                    "unit": "mm",
                    "type": "float",
                    "min_value": "0",
                    "max_value_warning": "10",
                    "default": 0.7,
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_z_distance": {
                    "label": "Z Distance",
                    "description": "Distance from the top/bottom of the support to the print. A small gap here makes it easier to remove the support but makes the print a bit uglier. 0.15mm allows for easier separation of the support structure.",
                    "unit": "mm",
                    "type": "float",
                    "min_value": "0",
                    "max_value_warning": "10",
                    "default": 0.15,
                    "visible": false,
                    "enabled": "support_enable",

                    "children": {
                        "support_top_distance": {
                            "label": "Top Distance",
                            "description": "Distance from the top of the support to the print.",
                            "unit": "mm",
                            "min_value": "0",
                            "max_value_warning": "10",
                            "default": 0.15,
                            "type": "float",
                            "visible": false,
                            "enabled": "support_enable"
                        },
                        "support_bottom_distance": {
                            "label": "Bottom Distance",
                            "description": "Distance from the print to the bottom of the support.",
                            "unit": "mm",
                            "min_value": "0",
                            "max_value_warning": "10",
                            "default": 0.1,
                            "type": "float",
                            "visible": false,
                            "enabled": "support_enable"
                        }
                    }
                },
                "support_conical_enabled": {
                    "label": "Conical Support",
                    "description": "Experimental feature: Make support areas smaller at the bottom than at the overhang.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_conical_angle": {
                    "label": "Cone Angle",
                    "description": "The angle of the tilt of conical support. With 0 degrees being vertical, and 90 degrees being horizontal. Smaller angles cause the support to be more sturdy, but consist of more material. Negative angles cause the base of the support to be wider than the top.",
                    "unit": "°",
                    "type": "float",
                    "min_value": "-90",
                    "min_value_warning": "-45",
                    "max_value_warning": "45",
                    "max_value": "90",
                    "default": 30,
                    "visible": false,
                    "enabled": "support_conical_enabled and support_enable"
                },
                "support_conical_min_width": {
                    "label": "Minimal Width",
                    "description": "Minimal width to which conical support reduces the support areas. Small widths can cause the base of the support to not act well as foundation for support above.",
                    "unit": "mm",
                    "default": 3.0,
                    "min_value": "0",
                    "min_value_warning": "machine_nozzle_size * 3",
                    "max_value_warning": "100.0",
                    "type": "float",
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_bottom_stair_step_height": {
                    "label": "Stair Step Height",
                    "description": "The height of the steps of the stair-like bottom of support resting on the model. Small steps can cause the support to be hard to remove from the top of the model.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.3,
                    "min_value": "0",
                    "max_value_warning": "1.0",
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_join_distance": {
                    "label": "Join Distance",
                    "description": "The maximum distance between support blocks in the X/Y directions, so that the blocks will merge into a single block.",
                    "unit": "mm",
                    "type": "float",
                    "default": 2.0,
                    "min_value_warning": "0",
                    "max_value_warning": "10",
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_offset": {
                    "label": "Horizontal Expansion",
                    "description": "Amount of offset applied to all support polygons in each layer. Positive values can smooth out the support areas and result in more sturdy support.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.2,
                    "min_value_warning": "-0.5",
                    "max_value_warning": "5.0",
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_area_smoothing": {
                    "label": "Area Smoothing",
                    "description": "Maximum distance in the X/Y directions of a line segment which is to be smoothed out. Ragged lines are introduced by the join distance and support bridge, which cause the machine to resonate. Smoothing the support areas won't cause them to break with the constraints, except it might change the overhang.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.6,
                    "min_value": "0",
                    "max_value_warning": "1.0",
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_roof_enable": {
                    "label": "Enable Support Roof",
                    "description": "Generate a dense top skin at the top of the support on which the model sits.",
                    "type": "boolean",
                    "default": false,
                    "visible": true,
                    "enabled": "support_enable"
                },
                "support_roof_height": {
                    "label": "Support Roof Thickness",
                    "description": "The height of the support roofs.",
                    "unit": "mm",
                    "type": "float",
                    "default": 1,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "visible": false,
                    "enabled": "support_roof_enable"
                },
                "support_roof_density": {
                    "label": "Support Roof Density",
                    "description": "This controls how densely filled the roofs of the support will be. A higher percentage results in better overhangs, but makes the support more difficult to remove.",
                    "unit": "%",
                    "type": "float",
                    "default": 100,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "enabled":"support_roof_enable",
                    "global_only": true,
                    "children": {
                        "support_roof_line_distance": {
                            "label": "Support Roof Line Distance",
                            "description": "Distance between the printed support roof lines.",
                            "unit": "mm",
                            "type": "float",
                            "default": 0.4,
                            "min_value": "0",
                            "visible": false,
                            "inherit_function": "0 if parent_value == 0 else (support_roof_line_width * 100) / parent_value",
                            "enabled": "support_roof_enable",
                            "global_only": true
                        }
                    }
                },
                "support_roof_pattern": {
                    "label": "Support Roof Pattern",
                    "description": "The pattern with which the top of the support is printed.",
                    "type": "enum",
                    "visible": false,
                    "options": {
                        "lines": "Lines",
                        "grid": "Grid",
                        "triangles": "Triangles",
                        "concentric": "Concentric",
                        "zigzag": "Zig Zag"
                    },
                    "default": "concentric",
                    "enabled": "support_roof_enable",
                    "global_only": true
                },
                "support_use_towers": {
                    "label": "Use towers",
                    "description": "Use specialized towers to support tiny overhang areas. These towers have a larger diameter than the region they support. Near the overhang the towers' diameter decreases, forming a roof.",
                    "type": "boolean",
                    "default": true,
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_tower_diameter": {
                    "label": "Tower Diameter",
                    "description": "The diameter of a special tower.",
                    "unit": "mm",
                    "type": "float",
                    "default": 3.0,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "visible": false,
                    "enabled": "support_enable and support_use_towers",
                    "children": {
                        "support_minimal_diameter": {
                            "label": "Minimum Diameter",
                            "description": "Minimum diameter in the X/Y directions of a small area which is to be supported by a specialized support tower.",
                            "unit": "mm",
                            "type": "float",
                            "default": 3.0,
                            "min_value": "0",
                            "max_value_warning": "10",
                            "max_value": "support_tower_diameter",
                            "inherit": true,
                            "visible": false,
                            "enabled": "support_enable and support_use_towers"
                        }
                    }
                },
                "support_tower_roof_angle": {
                    "label": "Tower Roof Angle",
                    "description": "The angle of the rooftop of a tower. Larger angles mean more pointy towers.",
                    "unit": "°",
                    "type": "int",
                    "min_value": "0",
                    "max_value": "90",
                    "default": 65,
                    "visible": false,
                    "enabled": "support_enable"
                },
                "support_pattern": {
                    "label": "Pattern",
                    "description": "Cura can generate 3 distinct types of support structure. First is a grid based support structure which is quite solid and can be removed in one piece. The second is a line based support structure which has to be peeled off line by line. The third is a structure in between the other two; it consists of lines which are connected in an accordion fashion.",
                    "type": "enum",
                    "options": {
                        "lines": "Lines",
                        "grid": "Grid",
                        "triangles": "Triangles",
                        "concentric": "Concentric",
                        "zigzag": "Zig Zag"
                    },
                    "default": "zigzag",
                    "visible": false,
                    "enabled": "support_enable",
                    "global_only": true
                },
                "support_connect_zigzags": {
                    "label": "Connect ZigZags",
                    "description": "Connect the ZigZags. Makes them harder to remove, but prevents stringing of disconnected zigzags.",
                    "type": "boolean",
                    "default": true,
                    "visible": false,
                    "enabled": "support_enable",
                    "global_only": true
                },
                "support_infill_rate": {
                    "label": "Fill Amount",
                    "description": "The amount of infill structure in the support; less infill gives weaker support which is easier to remove.",
                    "unit": "%",
                    "type": "float",
                    "min_value": "0",
                    "max_value_warning": "100",
                    "default": 15,
                    "visible": false,
                    "enabled": "support_enable",
                    "global_only": true,
                    "children": {
                        "support_line_distance": {
                            "label": "Line distance",
                            "description": "Distance between the printed support lines.",
                            "unit": "mm",
                            "type": "float",
                            "min_value": "0",
                            "default": 2.66,
                            "visible": false,
                            "enabled": "support_enable",
                            "inherit_function": "(support_line_width * 100) / parent_value",
                            "global_only": true
                        }
                    }
                }
            }
        },
        "platform_adhesion": {
            "label": "Platform Adhesion",
            "visible": true,
            "icon": "category_adhesion",
            "settings": {
                "adhesion_type": {
                    "label": "Type",
                    "description": "Different options that help to improve priming your extrusion.\nBrim and Raft help in preventing corners from lifting due to warping. Brim adds a single-layer-thick flat area around your object which is easy to cut off afterwards, and it is the recommended option.\nRaft adds a thick grid below the object and a thin interface between this and your object.\nThe skirt is a line drawn around the first layer of the print, this helps to prime your extrusion and to see if the object fits on your platform.",
                    "type": "enum",
                    "options": {
                        "skirt": "Skirt",
                        "brim": "Brim",
                        "raft": "Raft"
                    },
                    "default": "skirt",
                    "global_only": "True"
                },
                "skirt_line_count": {
                    "label": "Skirt Line Count",
                    "description": "Multiple skirt lines help to prime your extrusion better for small objects. Setting this to 0 will disable the skirt.",
                    "type": "int",
                    "default": 1,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "enabled": "adhesion_type == \"skirt\"",
                    "global_only": "True",
                    "visible": false
                },
                "skirt_gap": {
                    "label": "Skirt Distance",
                    "description": "The horizontal distance between the skirt and the first layer of the print.\nThis is the minimum distance, multiple skirt lines will extend outwards from this distance.",
                    "unit": "mm",
                    "type": "float",
                    "default": 3,
                    "min_value_warning": "0",
                    "max_value_warning": "100",
                    "enabled": "adhesion_type == \"skirt\"",
                    "global_only": "True",
                    "visible": false
                },
                "skirt_minimal_length": {
                    "label": "Skirt Minimum Length",
                    "description": "The minimum length of the skirt. If this minimum length is not reached, more skirt lines will be added to reach this minimum length. Note: If the line count is set to 0 this is ignored.",
                    "unit": "mm",
                    "type": "float",
                    "default": 250,
                    "min_value": "0",
                    "min_value_warning": "25",
                    "max_value_warning": "2500",
                    "enabled": "adhesion_type == \"skirt\"",
                    "global_only": "True",
                    "visible": false
                },
                "brim_width": {
                    "label": "Brim Width",
                    "description": "The distance from the model to the end of the brim. A larger brim sticks better to the build platform, but also makes your effective print area smaller.",
                    "type": "float",
                    "unit": "mm",
                    "default": 5.0,
                    "min_value": "0.0",
                    "max_value_warning": "100.0",
                    "enabled": "adhesion_type == \"brim\"",
                    "global_only": "True",
                    "visible": true,
                    "children": {
                        "brim_line_count": {
                            "label": "Brim Line Count",
                            "description": "The number of lines used for a brim. More lines means a larger brim which sticks better to the build plate, but this also makes your effective print area smaller.",
                            "type": "int",
                            "default": 13,
                            "min_value": "0",
                            "max_value_warning": "300",
                            "inherit_function": "math.ceil(parent_value / skirt_line_width)",
                            "enabled": "adhesion_type == \"brim\"",
                            "global_only": "True",
                            "visible": false
                        }
                    }
                },
                "raft_margin": {
                    "label": "Raft Extra Margin",
                    "description": "If the raft is enabled, this is the extra raft area around the object which is also given a raft. Increasing this margin will create a stronger raft while using more material and leaving less area for your print.",
                    "unit": "mm",
                    "type": "float",
                    "default": 5,
                    "min_value_warning": "0",
                    "max_value_warning": "10",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_airgap": {
                    "label": "Raft Air-gap",
                    "description": "The gap between the final raft layer and the first layer of the object. Only the first layer is raised by this amount to lower the bonding between the raft layer and the object. Makes it easier to peel off the raft.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.35,
                    "min_value": "0",
                    "max_value_warning": "1.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": true
                },
                "raft_surface_layers": {
                    "label": "Raft Top Layers",
                    "description": "The number of top layers on top of the 2nd raft layer. These are fully filled layers that the object sits on. 2 layers result in a smoother top surface than 1.",
                    "type": "int",
                    "default": 2,
                    "min_value": "0",
                    "max_value_warning": "20",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": true
                },
                "raft_surface_thickness": {
                    "label": "Raft Top Layer Thickness",
                    "description": "Layer thickness of the top raft layers.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.1,
                    "min_value": "0",
                    "max_value_warning": "2.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_surface_line_width": {
                    "label": "Raft Top Line Width",
                    "description": "Width of the lines in the top surface of the raft. These can be thin lines so that the top of the raft becomes smooth.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.3,
                    "min_value": "0.0001",
                    "max_value_warning": "machine_nozzle_size * 2",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_surface_line_spacing": {
                    "label": "Raft Top Spacing",
                    "description": "The distance between the raft lines for the top raft layers. The spacing should be equal to the line width, so that the surface is solid.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.3,
                    "min_value": "0.0001",
                    "max_value_warning": "5.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "inherit_function": "raft_surface_line_width",
                    "global_only": "True",
                    "visible": false
                },
                "raft_interface_thickness": {
                    "label": "Raft Middle Thickness",
                    "description": "Layer thickness of the middle raft layer.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.27,
                    "min_value": "0",
                    "max_value_warning": "5.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_interface_line_width": {
                    "label": "Raft Middle Line Width",
                    "description": "Width of the lines in the middle raft layer. Making the second layer extrude more causes the lines to stick to the bed.",
                    "unit": "mm",
                    "type": "float",
                    "default": 1,
                    "min_value": "0.0001",
                    "max_value_warning": "machine_nozzle_size * 2",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_interface_line_spacing": {
                    "label": "Raft Middle Spacing",
                    "description": "The distance between the raft lines for the middle raft layer. The spacing of the middle should be quite wide, while being dense enough to support the top raft layers.",
                    "unit": "mm",
                    "type": "float",
                    "default": 1.0,
                    "min_value": "0",
                    "max_value_warning": "15.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_base_thickness": {
                    "label": "Raft Base Thickness",
                    "description": "Layer thickness of the base raft layer. This should be a thick layer which sticks firmly to the printer bed.",
                    "unit": "mm",
                    "type": "float",
                    "default": 0.3,
                    "min_value": "0",
                    "max_value_warning": "5.0",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_base_line_width": {
                    "label": "Raft Base Line Width",
                    "description": "Width of the lines in the base raft layer. These should be thick lines to assist in bed adhesion.",
                    "unit": "mm",
                    "type": "float",
                    "default": 1,
                    "min_value": "0.0001",
                    "max_value_warning": "machine_nozzle_size * 2",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_base_line_spacing": {
                    "label": "Raft Line Spacing",
                    "description": "The distance between the raft lines for the base raft layer. Wide spacing makes for easy removal of the raft from the build plate.",
                    "unit": "mm",
                    "type": "float",
                    "default": 3.0,
                    "min_value": "0.0001",
                    "max_value_warning": "100",
                    "enabled": "adhesion_type == \"raft\"",
                    "global_only": "True",
                    "visible": false
                },
                "raft_speed": {
                    "label": "Raft Print Speed",
                    "description": "The speed at which the raft is printed.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 30,
                    "min_value": "0.1",
                    "max_value_warning": "200",
                    "enabled": "adhesion_type == \"raft\"",
                    "inherit_function": "speed_print / 60 * 30",
                    "global_only": "True",
                    "visible": false,
                    "children": {
                        "raft_surface_speed": {
                            "label": "Raft Surface Print Speed",
                            "description": "The speed at which the surface raft layers are printed. These should be printed a bit slower, so that the nozzle can slowly smooth out adjacent surface lines.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 30,
                            "min_value": "0.1",
                            "max_value_warning": "100",
                            "enabled": "adhesion_type == \"raft\"",
                            "inherit_function": "parent_value",
                            "global_only": "True",
                            "visible": false
                        },
                        "raft_interface_speed": {
                            "label": "Raft Interface Print Speed",
                            "description": "The speed at which the interface raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 15,
                            "min_value": "0.1",
                            "max_value_warning": "150",
                            "enabled": "adhesion_type == \"raft\"",
                            "inherit_function": "0.5 * parent_value",
                            "global_only": "True",
                            "visible": false
                        },
                        "raft_base_speed": {
                            "label": "Raft Base Print Speed",
                            "description": "The speed at which the base raft layer is printed. This should be printed quite slowly, as the volume of material coming out of the nozzle is quite high.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 15,
                            "min_value": "0.1",
                            "max_value_warning": "200",
                            "enabled": "adhesion_type == \"raft\"",
                            "inherit_function": "0.5 * parent_value",
                            "global_only": "True",
                            "visible": false
                        }
                    }
                },
                "raft_fan_speed": {
                    "label": "Raft Fan Speed",
                    "description": "The fan speed for the raft.",
                    "unit": "%",
                    "type": "float",
                    "min_value": "0",
                    "max_value": "100",
                    "default": 100,
                    "global_only": "True",
                    "visible": false,
                    "enabled": "adhesion_type == \"raft\"",
                    "children": {
                        "raft_surface_fan_speed": {
                            "label": "Raft Surface Fan Speed",
                            "description": "The fan speed for the surface raft layers.",
                            "unit": "%",
                            "type": "float",
                            "min_value": "0",
                            "max_value": "100",
                            "default": 100,
                            "global_only": "True",
                            "visible": false,
                            "inherit": true,
                            "enabled": "adhesion_type == \"raft\""
                        },
                        "raft_interface_fan_speed": {
                            "label": "Raft Interface Fan Speed",
                            "description": "The fan speed for the interface raft layer.",
                            "unit": "%",
                            "type": "float",
                            "min_value": "0",
                            "max_value": "100",
                            "default": 100,
                            "global_only": "True",
                            "visible": false,
                            "inherit": true,
                            "enabled": "adhesion_type == \"raft\""
                        },
                        "raft_base_fan_speed": {
                            "label": "Raft Base Fan Speed",
                            "description": "The fan speed for the base raft layer.",
                            "unit": "%",
                            "type": "float",
                            "min_value": "0",
                            "max_value": "100",
                            "default": 100,
                            "global_only": "True",
                            "visible": false,
                            "inherit": true,
                            "enabled": "adhesion_type == \"raft\""
                        }
                    }
                }
            }
        },
        "meshfix": {
            "label": "Mesh Fixes",
            "visible": true,
            "icon": "category_fixes",
            "settings": {
                "meshfix_union_all": {
                    "label": "Union Overlapping Volumes",
                    "description": "Ignore the internal geometry arising from overlapping volumes and print the volumes as one. This may cause internal cavities to disappear.",
                    "type": "boolean",
                    "default": true,
                    "visible": false
                },
                "meshfix_union_all_remove_holes": {
                    "label": "Remove All Holes",
                    "description": "Remove the holes in each layer and keep only the outside shape. This will ignore any invisible internal geometry. However, it also ignores layer holes which can be viewed from above or below.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                },
                "meshfix_extensive_stitching": {
                    "label": "Extensive Stitching",
                    "description": "Extensive stitching tries to stitch up open holes in the mesh by closing the hole with touching polygons. This option can introduce a lot of processing time.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                },
                "meshfix_keep_open_polygons": {
                    "label": "Keep Disconnected Faces",
                    "description": "Normally Cura tries to stitch up small holes in the mesh and remove parts of a layer with big holes. Enabling this option keeps those parts which cannot be stitched. This option should be used as a last resort option when everything else fails to produce proper GCode.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                }
            }
        },
        "blackmagic": {
            "label": "Special Modes",
            "visible": true,
            "icon": "category_blackmagic",
            "settings": {
                "print_sequence": {
                    "label": "Print sequence",
                    "description": "Whether to print all objects one layer at a time or to wait for one object to finish, before moving on to the next. One at a time mode is only possible if all models are separated in such a way that the whole print head can move in between and all models are lower than the distance between the nozzle and the X/Y axes.",
                    "type": "enum",
                    "options": {
                        "all_at_once": "All at Once",
                        "one_at_a_time": "One at a Time"
                    },
                    "default": "all_at_once",
                    "visible": true,
                    "global_only": true
                },
                "magic_mesh_surface_mode": {
                    "label": "Surface Mode",
                    "description": "Print the surface instead of the volume. No infill, no top/bottom skin, just a single wall of which the middle coincides with the surface of the mesh. It's also possible to do both: print the insides of a closed volume as normal, but print all polygons not part of a closed volume as surface.",
                    "type": "enum",
                    "options": {
                        "normal": "Normal",
                        "surface": "Surface",
                        "both": "Both"
                    },
                    "default": "Normal",
                    "visible": false
                },
                "magic_spiralize": {
                    "label": "Spiralize Outer Contour",
                    "description": "Spiralize smooths out the Z move of the outer edge. This will create a steady Z increase over the whole print. This feature turns a solid object into a single walled print with a solid bottom. This feature used to be called Joris in older versions.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "global_only": "True"
                },
                "magic_fuzzy_skin_enabled": {
                    "label": "Fuzzy Skin",
                    "description": "Randomly jitter while printing the outer wall, so that the surface has a rough and fuzzy look.",
                    "type": "boolean",
                    "default": false,
                    "visible": false
                },
                "magic_fuzzy_skin_thickness": {
                    "label": "Fuzzy Skin Thickness",
                    "description": "The width within which to jitter. It's advised to keep this below the outer wall width, since the inner walls are unaltered.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.3,
                    "min_value": "0",
                    "max_value_warning": "wall_line_width_0",
                    "visible": false,
                    "enabled": "magic_fuzzy_skin_enabled"
                },
                "magic_fuzzy_skin_point_density": {
                    "label": "Fuzzy Skin Density",
                    "description": "The average density of points introduced on each polygon in a layer. Note that the original points of the polygon are discarded, so a low density results in a reduction of the resolution.",
                    "type": "float",
                    "unit": "1/mm",
                    "default": 1.25,
                    "min_value_warning": "0.1",
                    "max_value_warning": "10",
                    "max_value": "10000",
                    "visible": false,
                    "enabled": "magic_fuzzy_skin_enabled",
                    "children": {
                        "magic_fuzzy_skin_point_dist": {
                            "label": "Fuzzy Skin Point Distance",
                            "description": "The average distance between the random points introduced on each line segment. Note that the original points of the polygon are discarded, so a high smoothness results in a reduction of the resolution. This value must be higher than half the Fuzzy Skin Thickness.",
                            "type": "float",
                            "unit": "mm",
                            "default": 0.8,
                            "min_value_warning": "0.0001",
                            "max_value_warning": "10",
                            "inherit_function": "1/parent_value",
                            "visible": false,
                            "enabled": "magic_fuzzy_skin_enabled"
                        }
                    }
                },
                "wireframe_enabled": {
                    "label": "Wire Printing",
                    "description": "Print only the outside surface with a sparse webbed structure, printing 'in thin air'. This is realized by horizontally printing the contours of the model at given Z intervals which are connected via upward and diagonally downward lines.",
                    "type": "boolean",
                    "default": false,
                    "visible": false,
                    "global_only": "True"
                },
                "wireframe_height": {
                    "label": "WP Connection Height",
                    "description": "The height of the upward and diagonally downward lines between two horizontal parts. This determines the overall density of the net structure. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 3,
                    "min_value": "0.0001",
                    "max_value_warning": "20",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_roof_inset": {
                    "label": "WP Roof Inset Distance",
                    "description": "The distance covered when making a connection from a roof outline inward. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 3,
                    "min_value": "0",
                    "min_value_warning": "machine_nozzle_size",
                    "max_value_warning": "20",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "inherit_function": "wireframe_height",
                    "global_only": "True"
                },
                "wireframe_printspeed": {
                    "label": "WP speed",
                    "description": "Speed at which the nozzle moves when extruding material. Only applies to Wire Printing.",
                    "unit": "mm/s",
                    "type": "float",
                    "default": 5,
                    "min_value": "0.1",
                    "max_value_warning": "50",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True",
                    "children": {
                        "wireframe_printspeed_bottom": {
                            "label": "WP Bottom Printing Speed",
                            "description": "Speed of printing the first layer, which is the only layer touching the build platform. Only applies to Wire Printing.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 5,
                            "min_value": "0.1",
                            "max_value_warning": "50",
                            "visible": false,
                            "inherit": true,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        },
                        "wireframe_printspeed_up": {
                            "label": "WP Upward Printing Speed",
                            "description": "Speed of printing a line upward 'in thin air'. Only applies to Wire Printing.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 5,
                            "min_value": "0.1",
                            "max_value_warning": "50",
                            "visible": false,
                            "inherit": true,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        },
                        "wireframe_printspeed_down": {
                            "label": "WP Downward Printing Speed",
                            "description": "Speed of printing a line diagonally downward. Only applies to Wire Printing.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 5,
                            "min_value": "0.1",
                            "max_value_warning": "50",
                            "visible": false,
                            "inherit": true,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        },
                        "wireframe_printspeed_flat": {
                            "label": "WP Horizontal Printing Speed",
                            "description": "Speed of printing the horizontal contours of the object. Only applies to Wire Printing.",
                            "unit": "mm/s",
                            "type": "float",
                            "default": 5,
                            "min_value": "0.1",
                            "max_value_warning": "100",
                            "visible": false,
                            "inherit": true,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        }
                    }
                },
                "wireframe_flow": {
                    "label": "WP Flow",
                    "description": "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing.",
                    "unit": "%",
                    "default": 100,
                    "min_value": "0",
                    "max_value_warning": "100",
                    "type": "float",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True",
                    "children": {
                        "wireframe_flow_connection": {
                            "label": "WP Connection Flow",
                            "description": "Flow compensation when going up or down. Only applies to Wire Printing.",
                            "unit": "%",
                            "default": 100,
                            "min_value": "0",
                            "max_value_warning": "100",
                            "type": "float",
                            "visible": false,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        },
                        "wireframe_flow_flat": {
                            "label": "WP Flat Flow",
                            "description": "Flow compensation when printing flat lines. Only applies to Wire Printing.",
                            "unit": "%",
                            "default": 100,
                            "min_value": "0",
                            "max_value_warning": "100",
                            "type": "float",
                            "visible": false,
                            "enabled": "wireframe_enabled",
                            "global_only": "True"
                        }
                    }
                },
                "wireframe_top_delay": {
                    "label": "WP Top Delay",
                    "description": "Delay time after an upward move, so that the upward line can harden. Only applies to Wire Printing.",
                    "unit": "sec",
                    "type": "float",
                    "default": 0,
                    "min_value": "0",
                    "max_value_warning": "1",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_bottom_delay": {
                    "label": "WP Bottom Delay",
                    "description": "Delay time after a downward move. Only applies to Wire Printing.",
                    "unit": "sec",
                    "type": "float",
                    "default": 0,
                    "min_value": "0",
                    "max_value_warning": "1",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_flat_delay": {
                    "label": "WP Flat Delay",
                    "description": "Delay time between two horizontal segments. Introducing such a delay can cause better adhesion to previous layers at the connection points, while too long delays cause sagging. Only applies to Wire Printing.",
                    "unit": "sec",
                    "type": "float",
                    "default": 0.1,
                    "min_value": "0",
                    "max_value_warning": "0.5",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_up_half_speed": {
                    "label": "WP Ease Upward",
                    "description": "Distance of an upward move which is extruded with half speed.\nThis can cause better adhesion to previous layers, while not heating the material in those layers too much. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.3,
                    "min_value": "0",
                    "max_value_warning": "5.0",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_top_jump": {
                    "label": "WP Knot Size",
                    "description": "Creates a small knot at the top of an upward line, so that the consecutive horizontal layer has a better chance to connect to it. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.6,
                    "min_value": "0",
                    "max_value_warning": "2.0",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_fall_down": {
                    "label": "WP Fall Down",
                    "description": "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.5,
                    "min_value": "0",
                    "max_value_warning": "wireframe_height",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_drag_along": {
                    "label": "WP Drag along",
                    "description": "Distance with which the material of an upward extrusion is dragged along with the diagonally downward extrusion. This distance is compensated for. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.6,
                    "min_value": "0",
                    "max_value_warning": "wireframe_height",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_strategy": {
                    "label": "WP Strategy",
                    "description": "Strategy for making sure two consecutive layers connect at each connection point. Retraction lets the upward lines harden in the right position, but may cause filament grinding. A knot can be made at the end of an upward line to heighten the chance of connecting to it and to let the line cool; however, it may require slow printing speeds. Another strategy is to compensate for the sagging of the top of an upward line; however, the lines won't always fall down as predicted.",
                    "type": "enum",
                    "options": {
                        "compensate": "Compensate",
                        "knot": "Knot",
                        "retract": "Retract"
                    },
                    "default": "compensate",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_straight_before_down": {
                    "label": "WP Straighten Downward Lines",
                    "description": "Percentage of a diagonally downward line which is covered by a horizontal line piece. This can prevent sagging of the top most point of upward lines. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "%",
                    "default": 20,
                    "min_value": "0",
                    "max_value": "100",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_roof_fall_down": {
                    "label": "WP Roof Fall Down",
                    "description": "The distance which horizontal roof lines printed 'in thin air' fall down when being printed. This distance is compensated for. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 2,
                    "min_value_warning": "0",
                    "max_value_warning": "wireframe_roof_inset",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_roof_drag_along": {
                    "label": "WP Roof Drag Along",
                    "description": "The distance of the end piece of an inward line which gets dragged along when going back to the outer outline of the roof. This distance is compensated for. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 0.8,
                    "min_value": "0",
                    "max_value_warning": "10",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_roof_outer_delay": {
                    "label": "WP Roof Outer Delay",
                    "description": "Time spent at the outer perimeters of hole which is to become a roof. Longer times can ensure a better connection. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "sec",
                    "default": 0.2,
                    "min_value": "0",
                    "max_value_warning": "2.0",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                },
                "wireframe_nozzle_clearance": {
                    "label": "WP Nozzle Clearance",
                    "description": "Distance between the nozzle and horizontally downward lines. Larger clearance results in diagonally downward lines with a less steep angle, which in turn results in less upward connections with the next layer. Only applies to Wire Printing.",
                    "type": "float",
                    "unit": "mm",
                    "default": 1,
                    "min_value_warning": "0",
                    "max_value_warning": "10.0",
                    "visible": false,
                    "enabled": "wireframe_enabled",
                    "global_only": "True"
                }
            }
        }
    }
}
