Files
OrcaSlicer/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json
SoftFever 92ea1ce57e Feat/update preset validator (#14507)
# Description

This PR expands profile validation so we can catch backward
compatibility issues with custom presets generated by older OrcaSlicer
releases. It also adds missing `renamed_from` metadata for presets that
were renamed or moved, so older user presets can resolve their original
parent names against the current system profiles.

## Background

Many users have reported missing preset issues after upgrading past
2.4.1. Investigation showed two common causes:

- preset lookup and compatibility checks did not always account for
`renamed_from`
- some renamed base presets were missing the old preset name in their
`renamed_from` metadata

The existing profile workflow validates the current system profile tree
and a single nightly-generated custom preset bundle. That is useful for
catching current profile errors, but it does not validate user presets
generated by older OrcaSlicer versions against the current system
profiles. As a result, older missing-parent compatibility gaps can slip
through.

## Changes

- Update `check_profiles.yml` to validate historical custom preset
fixtures from `OrcaSlicer/OrcaSlicer-profile-validator`.
- Download the fixture manifest from the public `fixture-archive`
release.
- Validate each `orca_custom_presets_<version>.zip` fixture
independently against the current PR's `resources/profiles`.
- Generate per-version validation logs and upload them as workflow
artifacts.
- Fail profile validation if any historical fixture version fails.
- Add missing `renamed_from` aliases for renamed/moved presets found by
the historical fixture validation.

## Profile Compatibility Fixes

This PR adds aliases for older parent names including:

- `0.20mm Bambu Support W @BBL X1C` -> `0.20mm Standard @BBL X1C`
- `Bambu PLA Impact @BBL X1C` -> `Bambu PLA Impact @System`
- `Ginger Generic rPLA` -> `Ginger Generic PLA`
- `Ginger Generic rPETG` -> `Ginger Generic PETG`
- legacy `Panchroma PLA Stain` BBL filament names -> current `Panchroma
PLA Satin` names
- legacy Elegoo casing/name variants such as `Elegoo RAPID PLA+`,
`Elegoo RAPID PETG`, `Elegoo RAPID PETG+`, and `Elegoo PETG Pro @System`

## Validation Flow

The custom preset validation step now:

1. Downloads `manifest.json` from the `fixture-archive` release.
2. Iterates over every fixture listed in the manifest.
3. Copies the current branch's `resources/profiles` into a temporary
profile tree.
4. Removes any existing `user` directory from that temporary tree.
5. Unzips exactly one historical fixture into the temporary tree.
6. Runs `OrcaSlicer_profile_validator -p <temp profile tree> -l 2`.
7. Writes a version-specific log and a consolidated summary.

This keeps validation scoped per fixture version and avoids mixing
generated user presets from different OrcaSlicer releases.

## Fixture Source

Historical fixtures are stored as public release assets in:

`OrcaSlicer/OrcaSlicer-profile-validator`, release tag `fixture-archive`

Each release asset is expected to be named like:

```text
orca_custom_presets_v2.4.1.zip
```

## Testing

Validated locally with:

- current system profile validation
- BBL filament subtype validation
- historical custom preset fixture validation
- extra profile JSON check in a clean profile tree

The affected historical fixture set passed after adding the missing
`renamed_from` aliases.

The release manifest controls which fixture versions are validated.
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
2026-07-06 12:27:47 +08:00

269 lines
8.7 KiB
JSON

{
"type": "process",
"name": "0.20mm Standard @Creality K1 SE",
"renamed_from": "0.20mm Fast @Creality K1 SE 0.4",
"inherits": "fdm_process_creality_common",
"from": "system",
"setting_id": "eR9pRC1qPENNx8U9",
"instantiation": "true",
"max_travel_detour_distance": "0",
"bottom_surface_pattern": "monotonic",
"bottom_shell_layers": "3",
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "50",
"internal_bridge_speed": "150%",
"brim_width": "5",
"brim_object_gap": "0.1",
"compatible_printers": [
"Creality K1 SE 0.4 nozzle"
],
"default_acceleration": "10000",
"bridge_no_support": "0",
"draft_shield": "disabled",
"elefant_foot_compensation": "0.15",
"outer_wall_line_width": "0.42",
"outer_wall_speed": "200",
"outer_wall_acceleration": "5000",
"inner_wall_acceleration": "5000",
"line_width": "0.42",
"infill_direction": "45",
"sparse_infill_density": "15%",
"sparse_infill_pattern": "grid",
"initial_layer_acceleration": "1000",
"initial_layer_line_width": "0.5",
"initial_layer_print_height": "0.2",
"initial_layer_speed": "60",
"gap_infill_speed": "250",
"infill_combination": "0",
"sparse_infill_line_width": "0.45",
"infill_wall_overlap": "30%",
"sparse_infill_speed": "270",
"interface_shells": "0",
"ironing_flow": "10%",
"ironing_spacing": "0.15",
"ironing_speed": "30",
"ironing_type": "no ironing",
"layer_height": "0.2",
"reduce_infill_retraction": "1",
"filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode",
"detect_overhang_wall": "1",
"overhang_1_4_speed": "0",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "25",
"overhang_4_4_speed": "10",
"only_one_wall_top": "1",
"inner_wall_line_width": "0.45",
"inner_wall_speed": "300",
"wall_loops": "2",
"raft_layers": "0",
"seam_position": "aligned",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",
"minimum_sparse_infill_area": "15",
"internal_solid_infill_line_width": "0.42",
"internal_solid_infill_speed": "250",
"initial_layer_infill_speed": "60",
"standby_temperature_delta": "-5",
"enable_support": "0",
"resolution": "0.012",
"support_type": "normal(auto)",
"support_style": "default",
"support_on_build_plate_only": "0",
"support_top_z_distance": "0.2",
"support_bottom_z_distance": "0.2",
"support_filament": "0",
"support_line_width": "0.42",
"support_interface_loop_pattern": "0",
"support_interface_filament": "0",
"support_interface_top_layers": "2",
"support_interface_bottom_layers": "2",
"support_interface_spacing": "0.5",
"support_expansion": "0",
"support_interface_speed": "80",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "150",
"support_threshold_angle": "30",
"support_object_xy_distance": "0.35",
"tree_support_branch_diameter": "2",
"tree_support_branch_angle": "45",
"tree_support_wall_count": "0",
"detect_thin_wall": "0",
"top_surface_pattern": "monotonicline",
"top_surface_line_width": "0.42",
"top_surface_acceleration": "2000",
"top_surface_speed": "150",
"top_shell_layers": "5",
"top_shell_thickness": "0.8",
"travel_acceleration": "10000",
"initial_layer_travel_speed": "100%",
"travel_speed": "500",
"enable_prime_tower": "1",
"wipe_tower_no_sparse_layers": "0",
"prime_tower_width": "35",
"xy_hole_compensation": "0",
"xy_contour_compensation": "0",
"gcode_label_objects": "1",
"precise_outer_wall": "0",
"accel_to_decel_enable": "1",
"accel_to_decel_factor": "50",
"acceleration_limit_mess_enable": "0",
"ai_infill": "0",
"alternate_extra_wall": "0",
"bottom_solid_infill_flow_ratio": "1",
"bridge_acceleration": "50%",
"bridge_angle": "0",
"bridge_density": "100%",
"brim_ears_detection_length": "1",
"brim_ears_max_angle": "125",
"brim_type": "auto_brim",
"counterbore_hole_bridging": "none",
"default_jerk": "10",
"detect_narrow_internal_solid_infill": "1",
"dont_filter_internal_bridges": "disabled",
"elefant_foot_compensation_layers": "1",
"enable_arc_fitting": "1",
"enable_overhang_speed": "1",
"enforce_support_layers": "0",
"ensure_vertical_shell_thickness": "ensure_all",
"exclude_object": "1",
"extra_perimeters_on_overhangs": "0",
"filter_out_gap_fill": "0",
"flush_into_infill": "0",
"flush_into_objects": "0",
"flush_into_support": "1",
"fuzzy_skin": "none",
"fuzzy_skin_first_layer": "0",
"fuzzy_skin_point_distance": "0.8",
"fuzzy_skin_thickness": "0.3",
"gap_fill_target": "everywhere",
"gcode_add_line_number": "0",
"gcode_comments": "0",
"hole_to_polyhole": "0",
"hole_to_polyhole_threshold": "0.01",
"hole_to_polyhole_twisted": "1",
"independent_support_layer_height": "1",
"infill_anchor": "400%",
"infill_anchor_max": "20",
"infill_jerk": "10",
"initial_layer_jerk": "10",
"initial_layer_min_bead_width": "85%",
"inner_wall_jerk": "10",
"internal_bridge_flow": "1",
"internal_solid_infill_acceleration": "100%",
"internal_solid_infill_pattern": "monotonic",
"ironing_angle": "90",
"ironing_pattern": "zig-zag",
"ironing_support_layer": "0",
"is_infill_first": "0",
"make_overhang_printable": "0",
"make_overhang_printable_angle": "55",
"make_overhang_printable_hole_size": "0",
"material_flow_dependent_temperature": "0",
"material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]",
"max_bridge_length": "10",
"max_volumetric_extrusion_rate_slope": "0",
"max_volumetric_extrusion_rate_slope_segment_length": "3",
"min_bead_width": "85%",
"min_feature_size": "25%",
"min_length_factor": "0.5",
"min_width_top_surface": "300%",
"minimum_support_area": "5",
"mmu_segmented_region_interlocking_depth": "0",
"mmu_segmented_region_max_width": "0",
"only_one_wall_first_layer": "0",
"ooze_prevention": "0",
"outer_wall_jerk": "8",
"overhang_reverse": "0",
"overhang_reverse_internal_only": "0",
"overhang_reverse_threshold": "50%",
"overhang_speed_classic": "0",
"overhang_totally_speed": "50",
"prime_tower_brim_width": "3",
"prime_tower_enhance_type": "chamfer",
"prime_volume": "45",
"print_flow_ratio": "1",
"print_order": "default",
"print_sequence": "by layer",
"raft_contact_distance": "0.1",
"raft_expansion": "1.5",
"raft_first_layer_density": "90%",
"raft_first_layer_expansion": "2",
"reduce_crossing_wall": "0",
"role_based_wipe_speed": "1",
"scarf_angle_threshold": "155",
"scarf_joint_flow_ratio": "1",
"scarf_joint_speed": "100%",
"scarf_overhang_threshold": "40%",
"seam_gap": "10%",
"seam_slope_conditional": "0",
"seam_slope_entire_loop": "0",
"seam_slope_inner_walls": "0",
"seam_slope_min_length": "20",
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "0",
"skirt_speed": "50",
"slice_closing_radius": "0.049",
"slicing_mode": "regular",
"slow_down_layers": "0",
"slowdown_for_curled_perimeters": "0",
"small_area_infill_flow_compensation": "0",
"small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"",
"small_perimeter_speed": "50%",
"small_perimeter_threshold": "0",
"solid_infill_filament": "1",
"sparse_infill_acceleration": "100%",
"sparse_infill_filament": "1",
"speed_limit_to_height_enable": "0",
"spiral_mode": "0",
"spiral_mode_max_xy_smoothing": "200%",
"spiral_mode_smooth": "0",
"staggered_inner_seams": "1",
"support_angle": "0",
"support_bottom_interface_spacing": "0.5",
"support_critical_regions_only": "0",
"support_interface_not_for_body": "1",
"support_interface_pattern": "auto",
"support_remove_small_overhang": "1",
"support_xy_overrides_z": "xy_overrides_z",
"thick_bridges": "0",
"thick_internal_bridges": "1",
"timelapse_type": "0",
"top_solid_infill_flow_ratio": "1",
"top_surface_jerk": "10",
"travel_jerk": "10",
"travel_speed_z": "0",
"tree_support_adaptive_layer_height": "1",
"tree_support_angle_slow": "25",
"tree_support_auto_brim": "1",
"tree_support_branch_angle_organic": "40",
"tree_support_branch_diameter_angle": "5",
"tree_support_branch_diameter_double_wall": "3",
"tree_support_branch_diameter_organic": "2",
"tree_support_branch_distance": "5",
"tree_support_branch_distance_organic": "1",
"tree_support_brim_width": "3",
"tree_support_tip_diameter": "0.8",
"tree_support_top_rate": "30%",
"wall_direction": "auto",
"wall_distribution_count": "1",
"wall_filament": "1",
"wall_generator": "classic",
"wall_sequence": "inner wall/outer wall",
"wall_transition_angle": "10",
"wall_transition_filter_deviation": "25%",
"wall_transition_length": "100%",
"wipe_before_external_loop": "0",
"wipe_on_loops": "0",
"wipe_speed": "80%",
"wipe_tower_bridging": "10",
"wipe_tower_cone_angle": "0",
"wipe_tower_extra_spacing": "100%",
"wipe_tower_rotation_angle": "0",
"wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70"
}