Files
OrcaSlicer/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 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

113 lines
3.4 KiB
JSON

{
"type": "process",
"name": "0.16mm Optimal @Creality Ender3V3SE 0.4",
"renamed_from": "0.16mm Optimal @Creality Ender3V3SE",
"inherits": "fdm_process_creality_common",
"from": "system",
"setting_id": "jvnrh3jh6Btbs1Ja",
"instantiation": "true",
"adaptive_layer_height": "1",
"reduce_crossing_wall": "0",
"layer_height": "0.16",
"max_travel_detour_distance": "0",
"bottom_surface_pattern": "monotonic",
"bottom_shell_layers": "4",
"bottom_shell_thickness": "0",
"bridge_flow": "0.95",
"bridge_speed": "100",
"brim_type": "no_brim",
"brim_width": "5",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
"print_sequence": "by layer",
"default_acceleration": "2500",
"top_surface_acceleration": "2500",
"bridge_no_support": "0",
"draft_shield": "disabled",
"elefant_foot_compensation": "0",
"enable_arc_fitting": "0",
"outer_wall_line_width": "0.42",
"wall_infill_order": "inner wall/outer wall/infill",
"line_width": "0.46",
"infill_direction": "45",
"sparse_infill_density": "15%",
"sparse_infill_pattern": "crosshatch",
"initial_layer_acceleration": "500",
"travel_acceleration": "2500",
"inner_wall_acceleration": "2000",
"outer_wall_acceleration": "1000",
"initial_layer_line_width": "0.46",
"initial_layer_print_height": "0.2",
"infill_combination": "0",
"sparse_infill_line_width": "0.45",
"infill_wall_overlap": "15%",
"interface_shells": "0",
"ironing_flow": "15%",
"ironing_spacing": "0.1",
"ironing_speed": "20",
"ironing_type": "no ironing",
"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": "20",
"overhang_3_4_speed": "15",
"overhang_4_4_speed": "10",
"inner_wall_line_width": "0.45",
"wall_loops": "2",
"print_settings_id": "",
"raft_layers": "0",
"seam_position": "aligned",
"skirt_distance": "2",
"skirt_height": "2",
"skirt_loops": "0",
"minimum_sparse_infill_area": "10",
"internal_solid_infill_line_width": "0.42",
"spiral_mode": "0",
"standby_temperature_delta": "-5",
"enable_support": "0",
"resolution": "0.012",
"support_type": "normal(auto)",
"support_style": "grid",
"support_on_build_plate_only": "0",
"support_top_z_distance": "0.2",
"support_filament": "0",
"support_line_width": "0.38",
"support_interface_loop_pattern": "0",
"support_interface_filament": "0",
"support_interface_top_layers": "3",
"support_interface_bottom_layers": "-1",
"support_interface_spacing": "0.5",
"support_interface_speed": "100%",
"support_interface_pattern": "auto",
"support_base_pattern": "rectilinear",
"support_base_pattern_spacing": "2.5",
"support_speed": "50",
"support_threshold_angle": "30",
"support_object_xy_distance": "60%",
"tree_support_branch_angle": "40",
"tree_support_wall_count": "2",
"detect_thin_wall": "1",
"top_surface_pattern": "monotonicline",
"top_surface_line_width": "0.42",
"top_shell_layers": "6",
"top_shell_thickness": "0.8",
"initial_layer_speed": "30",
"initial_layer_infill_speed": "80",
"outer_wall_speed": "60",
"inner_wall_speed": "90",
"internal_solid_infill_speed": "180",
"top_surface_speed": "50",
"gap_infill_speed": "50",
"sparse_infill_speed": "180",
"travel_speed": "150",
"enable_prime_tower": "1",
"wipe_tower_no_sparse_layers": "0",
"prime_tower_width": "60",
"xy_hole_compensation": "0",
"xy_contour_compensation": "0",
"compatible_printers": [
"Creality Ender-3 V3 SE 0.4 nozzle"
]
}