G9111 hat während des Auto-Levelings auf den höchsten Bett-Temp-Wert
aller Projekt-Filamente geheizt statt auf die Temp des aktiven Filaments.
Fixes#4 (OrcaSlicer-KX), related KX-Bridge-Release#96.
Ersetzt die orcaslicer.com/latest URL durch die Gitea API:
https://gitea.it-drui.de/api/v1/repos/viewit/OrcaSlicer-KX/releases/latest
Das Gitea-JSON hat dasselbe Format wie GitHub (tag_name, html_url,
prerelease) — der bestehende Parser in check_new_version_sf() funktioniert
ohne weitere Änderungen. Telemetrie-Query-Parameter und Upstream-Signaturen
werden nicht mehr angehängt.
Ersetzt alle OrcaSlicer-Logos durch das Orca-KX Fork-Logo (Kobra + Orca).
Betrifft: PNG-Icons (32/64/128/154/192px), Windows .ico, macOS .icns,
About-Dialog SVGs (light + dark) und Splash-Screen SVGs.
Empty AMS slots (is_tray_info_ready()==false) were included in
tray_filaments with id=0. The distance-map then stored tray_id=0 for
those slots, causing the greedy mapper to assign real project filaments
to the placeholder entry instead of their actual physical slot. On a
6-slot ACS/ACE with Slot 1 empty this shifted all mapped filaments by
one position.
Fix: skip any tray that is not ready (no color/type) before calling
_parse_tray_info() so only loaded slots enter the mapping pool.
Also keep index-alignment in get_ams_cobox_infos(): empty AMS entries
(filament_id empty) now push placeholder strings instead of being
silently skipped. This prevents the Overwriting-mode tab from accessing
m_ams_combo_info.ams_filament_colors at a shifted index, which caused
an out-of-bounds read and subsequent crash when switching sync modes
while a placeholder slot was present.
Fixes KX-Bridge-Release issue #67 comment #480 (slot-index shift +
Overwriting crash).
Two Moonraker user presets on different ports (:7125, :7126) share the
same printer agent type. switch_printer_agent() only called select_machine()
when the agent *type* changed — not when the host changed within the same
agent. A user→user preset switch therefore left the MachineObject pointing
at the first connected printer, causing AMS sync to always query the wrong
host.
Fix: when the agent type stays the same (and is not the BBL agent),
also call select_machine() so the host is re-resolved from the current
preset and set_selected_machine() reconnects to the correct Moonraker
instance.
Fixes: AMS Sync locked to first printer in multi-printer sessions (SirPeroples)
Adds .aliases = { "wall_filament", "wall_filament_id", "outer_wall_filament",
"perimeter_extruder" } to outer_wall_filament_id and .aliases = { "inner_wall_filament" }
to inner_wall_filament_id in PrintConfig.cpp so that old .3mf files using these legacy
keys do not throw UnknownOptionException on load.
Also corrects verify_build.sh CHECKS to search for "tray_sub_brands" (the actual binary
string) instead of the stale "filament_sub_brands".
Neue 2.4-stable-Linie auf frischem orca-upstream/release/v2.4 (2.4.0):
- KX-Moonraker-Bridge (MoonrakerPrinterAgent.cpp/.hpp) übernommen
- Preset.cpp: KX-filament_id-Patches per 3way auf neuen Upstream appliziert
(Upstream-Fixes 10.-21.06. erhalten)
- Issue #52: Vendor-Filter bei User-Presets überspringen
- AMS-Leerslot-Fix (DevFilaSystem.cpp + AMSItem.cpp): leerer Slot zeigt
kein altes Filament mehr
- About-Hinweis, verify_build.sh, Filament-Bridge-Doku, README
- Version 2.4.0-kx1
* fix profile reference for Creality
* fix profile reference for Blocks
* fix profile reference for OrcaArena
* fix profile reference for re3D
* fix profile reference for Chuanying
* fix profile reference for Prusa
* fix profile reference for Wanhao France
* fix profile reference for MagicMaker
* fix profile reference for Afinia
Remove the ABS/ABS+/PLA/TPU/Value ABS/Value PLA filament presets that referenced the non-existent "Afinia H400 Pro" printer. The real printer is "Afinia H+1(HS)", already served by the @HS filament variants.
* fix profile reference for Comgrow
Remove the orphaned "0.20mm Standard @Comgrow T500 1.0" process preset and its process_list entry. Its only compatible printer "Comgrow T500 1.0 nozzle" never existed (the T500 model defines nozzle diameters 0.4/0.6/0.8 only).
* always run check_preset_references
The 409 conflict notification, the force-push confirmation dialog, and the payload-too-large (413) dialog now name the affected preset. The name was already parsed from the conflict body but never surfaced. The account-level preset-limit message stays generic since it isn't about one specific preset.
* Fix reload from disk for STEP models after reopening a project (#12992)
reload_from_disk matched reloaded source volumes with an exact
source.input_file string comparison. After a project is saved and
reopened, the stored source path is only the filename (the default,
non-full-path save) while a freshly re-imported volume carries a full
path, so the comparison never matched: reload fell into fail_list and
the "locate file" dialog was effectively useless for STEP models.
Fall back to a case-insensitive filename comparison when the exact
paths differ, so the existing same-folder source lookup (and the
locate dialog) can reload the model. Projects that stored absolute
source paths still match exactly as before; no 3mf format change.
* Add Preferences option to store full source paths in projects
Expose the existing export_sources_full_pathnames setting (previously
only editable in the config file) as a checkbox under Preferences >
General > Project. Enabling it stores absolute source paths in saved
projects, so "Reload from disk" works when the source file is kept in
a different folder than the project (companion to #12992).
#14447 backported main's array-based calib.hpp accessors, which call
DynamicPrintConfig::get_abs_value_at() — a coFloats/coFloatsOrPercents-only
method that does not exist on release/v2.4. Here outer_wall_speed,
outer_wall_acceleration and initial_layer_speed are still scalar coFloat,
so the method is undefined and, if backported, would throw at runtime on
these scalar options. This broke the build (calib.hpp is included widely
via AppConfig.hpp).
Revert speed_first_layer/speed_perimeter/accel_perimeter to the scalar
option<ConfigOptionFloat>()->value form used before #14447. The actual
#14447 crash fix (line_width_first_layer zero-width fallback in calib.cpp)
is unaffected.
* fix: crash in Measure tool when a plain edge is the first selection
The SPHERE_2 gripper raycaster called get_feature_offset() on
.first.feature instead of .second.feature (copy-pasted from the SPHERE_1
block). Plain planar-border edges store no extra point, so the Edge
branch dereferenced an empty optional behind a release-stripped assert,
aborting on Flatpak and undefined behavior elsewhere.
Point the SPHERE_2 raycaster at .second.feature and fall the Edge branch
back to the edge midpoint.
Fixes#14018
{input_filename_base} is meant to be the saved project's file name. Before
saved; #13753 fixed it to use the project name. Some users relied on the old
behavior to get the part name into their output file name and had no
placeholder to recover it ({model_name} is the 3mf designer metadata, blank
for plain STL imports).
Add {first_object_name} as a dedicated placeholder for the first printable
object on the current plate, populated in update_object_placeholders()
independently of {input_filename_base}.
Closes#14493
Selecting the prime tower and rotating it (PageUp/PageDown) crashed.
Selection::notify_instance_update() indexed m_model->objects with the
wipe tower's synthetic id (>= 1000), which is not a ModelObject index,
so the lookup returned garbage and dereferencing it segfaulted.
do_rotate/do_scale/do_mirror already skip the wipe tower in their own
loops but all call this shared helper, so scale and mirror hit the same
fault. Selection::drop() had the same latent bug via a direct index.
Guard both with the >= 1000 check already used throughout the file.
Fixes#14498
* Support accessing `coFloatsOrPercents` values in gcode template (OrcaSlicer/OrcaSlicer#14522)
* Vector option values are separated by comma
* Fix wrong cast used for checking nullability
Fix network plug-in install failing when the plug-in DLL is in use (#14373)
Switching or reinstalling the Bambu network plug-in from a running
OrcaSlicer failed with "The plug-in file may be in use". install_plugin()
deleted each existing file before extracting the new one, and on Windows a
currently-loaded DLL (BambuSource.dll, or the legacy networking library)
cannot be removed or overwritten in place, so the whole install aborted.
Rename an in-use file aside to "<name>.old" before writing the new one: the
running module keeps mapping the renamed file while the new version is
extracted, so the install succeeds without having to unload the plug-in
first. Stale ".old" files are cleaned up at the start of on_init_network(),
before the plug-in is (re)loaded, so they do not accumulate.
# 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)
# Description
There is a bug that if user used to use legacy plugin, the
`NetworkAgent::use_legacy_network` will not be properly reset after user
install a newer plugin version through the plugin update dialog (ie, not
from selecting a plugin version from Preference screen). And in that
case Orca will download the legacy plugin but instead installing it with
a newer version suffix. So on next start up Orca can't find the plugin
because it tries to load using legacy version suffix instead.
This PR fixes it by getting rid of that error-prone static variable,
instead it always use the version number directly.
Fix#14373Fix#14441
# Screenshots/Recordings/Graphs
<!--
> Please attach relevant screenshots to showcase the UI changes.
> Please attach images that can help explain the changes.
-->
## Tests
<!--
> Please describe the tests that you have conducted to verify the
changes made in this PR.
-->
<!--
> A guide for users on how to download the artifacts from this PR.
-->
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
# Description
Fixes user filament presets that reference an old printer preset name in
`compatible_printers`, even when the current system printer preset
correctly declares that old name in `renamed_from`.
## Core Issue
`PresetCollection::find_preset()` was updated to resolve `renamed_from`,
but this specific failure does not go through `find_preset()`.
For root user filament presets with empty `inherits`, Orca infers
`compatible_printers` from the filament name suffix after `@`. For
example:
```json
"ELEGOO PLA Base @Elegoo Neptune 4 Pro (0.4 nozzle)"
```
loads with:
```json
"compatible_printers": ["Elegoo Neptune 4 Pro (0.4 nozzle)"]
```
The current system printer preset is named:
```text
Elegoo Neptune 4 Pro 0.4 nozzle
```
and has:
```json
"renamed_from": "Elegoo Neptune 4 Pro (0.4 nozzle)"
```
However, filament compatibility was doing a direct string comparison
against the active printer name. Since that compatibility path does not
call `find_preset()`, the `renamed_from` mapping was never considered.
## Fix
Teach printer compatibility checks to treat
`active_printer.preset.renamed_from` entries as aliases of the active
printer name.
This preserves existing user preset JSON and avoids rewriting
`compatible_printers`, while allowing old printer suffixes to remain
compatible with renamed system printer presets.
## Tests
<!--
> A guide for users on how to download the artifacts from this PR.
-->
[How to Download Pull Requests Artifacts for
Testing](https://www.orcaslicer.com/wiki/how_to_download_pr_artifacts)
WipeTowerIntegration::append_tcr processed filament_end_gcode with only
layer_num in its placeholder config, so a filament_end_gcode referencing
{layer_z} could not be evaluated and slicing aborted. This affects any
multi-filament print that routes tool changes through the prime/wipe tower
(for example a support filament on a Bambu printer); the same macro works
in machine_end_gcode and on the non-wipe-tower set_extruder path, which
both define layer_z.
Set layer_z to tcr.print_z, the value this function already provides to its
change_filament_gcode and tcr_rotated_gcode placeholders.
Fixes#10119
CalibPressureAdvancePattern::line_width_first_layer() returned the raw
initial_layer_line_width, so a value of 0 (which means "use the default")
fed 0 into the Flow spacing math and threw FlowErrorNegativeSpacing,
crashing the whole app when slicing a PA pattern calibration.
Mirror the guard already present in the sibling line_width(): when the
configured width is non-positive, fall back to auto_extrusion_width.
Add a libslic3r regression test covering the width resolution.
Fixes#13188
* validator: detect duplicate filament subtype per printer (opt-in)
A filament is matched from the AMS by (filament_id + printer compatibility);
if two compatible filament presets for one printer share a filament_id, the
match is ambiguous and the runtime silently picks whichever loads first.
Add PresetBundle::check_duplicate_filament_subtypes(), gated behind a new
has_errors(check_duplicate_filament_subtypes) parameter and the validator's
-f/--check_filament_subtypes flag (off by default). For each system printer it
groups its vendor's compatible filament presets by filament_id and errors on
any group of 2+, reporting each preset as a clickable file:// URI with a single
"how to fix" hint. CI runs it for BBL only (-v BBL -f) until the other vendors'
profiles are cleaned up.
* profiles: fix ambiguous BBL filament matches
Resolve the duplicate-filament-subtype errors flagged by the validator:
- align compatible_printers with Bambu Studio where Orca over-claimed a nozzle
that already has a dedicated preset (Bambu PLA Basic/Matte/ABS @BBL H2DP;
Bambu ASA/PETG HF @BBL H2DP 0.6 nozzle; Fiberon PETG-ESD @BBL X1)
- fix a copy-pasted printer name in Overture Matte PLA @BBL A1M 0.2 nozzle
- fix a wrong inherits in Panchroma PLA Silk @BBL X1C 0.2 nozzle (was inheriting
Panchroma PLA @base, giving it filament_id GFPM001 instead of GFPM004)
Bump BBL profile version.
* Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* profiles: enforce globally-unique, per-vendor-namespaced setting_id
Many non-Bambu vendors copied Bambu's generic setting_ids (GFSA04 alone
appeared in 1557 files), so setting_id was not globally unique. This
namespaces every vendor's ids and reserves Bambu/OrcaFilamentLibrary space.
- Reserve "G*" (Bambu) and "O*" (OrcaFilamentLibrary) id spaces.
- Assign each other vendor a 2-char prefix (first+last letter, collision
resolved) and renumber every instantiated preset to <PREFIX><NNNN>.
- Strip setting_id from base profiles (instantiation:false) per Bambu's
convention; assign one to instantiated presets that lacked it.
- Remove the pre-existing misspelled "settings_id" key (91 files).
- filament_id is left untouched (it is a per-material id).
- Add one-time migration script scripts/assign_vendor_setting_ids.py with a
persisted registry resources/profiles/vendor_prefixes.json. Re-runs freeze
existing ids; only new vendors/profiles get new ids.
- Bump version in each changed vendor index file.
- Extend scripts/orca_extra_profile_check.py with a CI guard: global
uniqueness, in-namespace, no base setting_id, no gaps, no settings_id typo.
7425 profile files changed across 61 vendors; 0 cross-vendor collisions;
validator clean; migration idempotent. BBL and OrcaFilamentLibrary id spaces
untouched.
* profiles: add setting_id authoring guide for new vendors / profiles
* profiles: drop in-repo README; setting_id guide now lives in the wiki
* profiles: derive setting_id deterministically from vendor/type/name
* bump profile version
* Resolve preset type based on nozle diameter if printer_variant is empty
* Fix incorectly resolving plastic type (PLA, ABS, etc.)
* Revert default print-variant handling as it can be not only nozzle diameter
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
* CrealityPrint: use printhost_port for WebView URL instead of hardcoded :4408
Fixes#4408 — when printhost_port is configured, use that port in the
Device WebView URL instead of always defaulting to :4408.
* CrealityPrint: remove hardcoded :4408 from Device WebView URL
Drop the CrealityPrint-specific get_print_host_webui override that
unconditionally appended :4408. The generic fallback in PrintHost
already uses print_host_webui/print_host config — users who need
Mainsail on port 4408 should set print_host_webui explicitly.
Fixes#4408