This PR adds a new filament sync mode setting for device-based filament synchronization.
Users can now choose between syncing both filament preset + color (current behavior) or syncing color only, so calibrated local filament profiles are preserved while still updating slot colors from the printer.
It also includes small UI improvements for the new preference entry and sync status messaging.
<img width="665" height="671" alt="image" src="https://github.com/user-attachments/assets/23980846-0113-48ab-84aa-adf5cdab8ab6" />
* Add checks to snap wipe tower back to origin when it was loaded outside the plate boundary
* Fix Wipe Tower preview outside plate boundary and warning notification
- snaps wipe tower preview to nearest edge if it was loaded outside of plate boundary.
- Added warning notification to notify position change
# Description
Transforming internal 3D Files to DRC to reduce orca size
## Calibs
(Not counting temperature_tower)
Original 6,01 MB
Converted 1,57 MB
- Mesh (STL/3MF) to LossLess DRC
- SCV-V2 116kb -> 15kb
- fast_tower_test 66kb -> 9kb
- ringing_tower 172kb -> 22kb
- pressure_advance_test 124kb -> 16kb
- tower_with_seam 2kb -> 1kb
- retraction_tower 1.726kb -> 97kb (done at 25, if 0 = 212kb)
- ~~temperature_tower~~ Updated, fixed, wider range and Draco in: #12103 5.075kb -> 485kb
- vfa 1.453kb -> 179kb
- Step
- SpeedTestStructure 1.312kb -> 86kb
- Imported:
- Linear Deflection: 0.002
- Angle Deflection: 0.25
- Exported as LossLess DRC
## Handy Models
Original 4,66 MB
Converted 1,53 MB
- STL/3MF to LossLess DRC (Maybe reduce the bit depth???)
- 3DBenchy 2.417kb -> 570kb (done at 25, if 0 = 1.340kb)
- calicat 43kb -> 6kb
- ksr_fdmtest_v4 128kb -> 74kb
- Orca_stringhell 63kb -> 37kb
- OrcaToleranceTest 758kb -> 94kb
- Stanford_Bunny 755kb -> 187kb (done at 25, if 0 = 316kb)
- Voron_Design_Cube_v7 34kb -> 21kb
## Bit used
After some test with a lot of models and all possible combinations it's safe to say that >20 is BondingBox and mm3 volume the best it can.
So i used 25 just as a safe value in:
- Stanford_Bunny
- 3DBenchy
- retraction_tower
<img width="324" height="499" alt="imagen" src="https://github.com/user-attachments/assets/bb5000cf-c1fa-4153-af2f-691ea59bc254" />
<img width="324" height="499" alt="imagen" src="https://github.com/user-attachments/assets/f38e3528-0d05-4621-984e-f107a0eec91e" />
## MultiPart 3MF
Didint change them, too much trouble for small changes.
## Problem
Some Creality printers (e.g. Ender-3 V3 SE) rely on metadata comments in the first lines of G-code files to display print info on the screen (estimated time, filament usage, layer height). This follows a format originally used by Cura/Creality Print:
```
;FLAVOR:Marlin
;TIME:3708.97
;Filament used:6.21m
;Layer height:0.2
```
OrcaSlicer currently has no way to write content before the `HEADER_BLOCK` in the G-code output, and does not expose `print_time_sec` or `filament_length_m` as usable placeholders. As a result, these printers show zeroed-out print info on screen.
## Changes
### 1. New placeholders (post-processing)
Added two new G-code placeholders resolved during post-processing:
- `{print_time_sec}` — total estimated print time in seconds (double)
- `{filament_length_m}` — total filament length in meters (double)
These values are only available after G-code generation, so they use inline marker replacement (`@PRINT_TIME_SEC@`, `@FILAMENT_LENGTH_M@`) that `GCodeProcessor::run_post_process()` substitutes with actual computed values — the same pattern used by existing M73 and layer count placeholders.
### 2. New "File header G-code" option (`machine_top_gcode`)
Added a new G-code field in **Printer Settings > Machine G-code** that writes content at the very top of the output file, before `HEADER_BLOCK_START`. This allows users to add firmware-specific metadata that must appear in the first lines.
### 3. Creality Ender-3 V3 SE profile update
Pre-configured the Ender-3 V3 SE profiles (all 4 nozzle variants) with a default `machine_top_gcode` value matching the Cura-compatible header format, so print info displays correctly out of the box.
# Screenshots
| Before (current OrcaSlicer) | After (this PR) |
|---|---|
|  |  |
## Tests
- Sliced test model with Ender-3 V3 SE profile
- Verified G-code output contains correct values in first lines:
- `;TIME:` with actual print time in seconds
- `;Filament used:` with filament length in meters
- `;Layer height:` with correct layer height
- Verified `{print_time_sec}` and `{filament_length_m}` work in both Machine Start G-code and File header G-code fields
- Verified empty `machine_top_gcode` produces no extra output
- Built and tested on macOS (arm64)
* added option to save a profile as detached(no inheritance)
* Revert "added option to save a profile as detached(no inheritance)"
This reverts commit c1326c6dec.
* re-commiting the changes
* fixed conflicts with upstream
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
* Add read support for Google's Draco (.drc) format.
* Fix build on Linux
* Use boost instead of fstat.
* Switch to boost memory-mapped file to save RAM and potentially improve performance.
* Trim trailing whitespace.
* Initial Draco write support.
Currently always exports with 16-bit precision and speed 0 (best compression).
The back-end function does have arguments to specify them, it's just not hooked into the GUI.
* Add Draco to the About dialogue.
* Fix Linux compile (hopefully)
* Add an option to associate DRC files on Windows.
* Implement a Preferences option to set Draco position quantization bits
* Update src/slic3r/GUI/Preferences.cpp
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Some slight changes to ianalexis's suggestion.
* Implement a create_item_spinctrl() function for numeric inputs, and use that instead of create_item_input().
* Move "bits" to inside the spinctrl box.
* Refactor following yw4z's feedback
* Update src/slic3r/GUI/Preferences.cpp
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Change to 0 bits as the default setting for Draco export precision.
* Change to a lossy checkbox and a bits field with a range of 8-30.
* Proper SpinInput code from yw4z
* Revert "Proper SpinInput code from yw4z"
This reverts commit 7e9c85f31a.
* Revert "Change to a lossy checkbox and a bits field with a range of 8-30."
This reverts commit d642c9bcc0.
* Redo preferences based on SoftFever's feedback
* Refactor to minimize code duplication
* Fix padding
* Improve Draco export quality level tooltip clarity
Clarify that 0 means lossless compression (not uncompressed),
document the valid lossy range (8-30), and better explain the
tradeoff between file size and geometric detail.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
Closes#11726
# Description
Removed hardcoded 0.2mm layer height.
Now it will stay in with the user process.
Also corrected several config assignments to use print_config instead of obj->config for consistency.
## Note
Didn't change PA PATTERN because i don't know if it may impact the calibration results for this specific test.
Toolchanger printers with 4 tools were incorrectly treated as dual-nozzle (IDEX-style) printers in AMS Sync. So I was locked to just tool 1/2.
Adjusted AMS Sync to use dual-nozzle logic only for true 2-nozzle setups (nozzle_nums == 2 and filament_map in {1,2}), and route 3+ tool toolchangers through the generic mapping flow so all tool IDs are handled correctly.
Before:
<img width="2276" height="1738" alt="image" src="https://github.com/user-attachments/assets/ccebc020-37cf-4af6-8568-a9f331f6c08c" />
After:
<img width="2236" height="1662" alt="image" src="https://github.com/user-attachments/assets/030f49c3-463d-4355-95ba-ba8f95a01ecd" />
Tested on / with:
- Snamaker U1
- ARM macOS
# Description
Fixes the Setup Wizard getting stuck on the "Loading......" screen when
running on Wayland sessions.
**Root Cause:** When OrcaSlicer runs under XWayland (Wayland sessions
with `GDK_BACKEND=x11`), WebKit2GTK's compositing mode can fail
silently, causing the Setup Wizard WebView to freeze or render blank.
The JavaScript signal from C++ (`userguide_profile_load_finish`) either
fails to execute or its rendering result never displays, leaving users
permanently stuck.
**Solution:**
1. Set `WEBKIT_DISABLE_COMPOSITING_MODE=1` environment variable to force
software rendering for WebKit2GTK - this is the same fix used by
BambuStudio
2. Enable the 20-second timeout fallback in `load.js` so the wizard
proceeds automatically even if the C++ → JavaScript communication fails
**Files changed:**
- `src/OrcaSlicer.cpp` - Added `WEBKIT_DISABLE_COMPOSITING_MODE` env var
(4 lines)
- `resources/web/guide/0/load.js` - Enabled timeout fallback (2 lines)
# Screenshots/Recordings/Graphs
N/A - This is a Linux/Wayland-specific fix that addresses a rendering
issue. The visual result is simply that the Setup Wizard proceeds past
"Loading......" as expected.
## Tests
1. **On Wayland session (e.g., GNOME on Wayland):**
- Remove existing config (`~/.config/OrcaSlicer/`) to simulate first
launch
- Launch OrcaSlicer
- Verify Setup Wizard proceeds past "Loading......" to the actual wizard
page
2. **On X11 session:**
- Same test as above to verify no regression
3. **Verify env var is set:**
- Check that `WEBKIT_DISABLE_COMPOSITING_MODE=1` is in the process
environment on Linux builds
When running under XWayland (Wayland sessions with GDK_BACKEND=x11),
WebKit2GTK's compositing mode can fail silently, causing the Setup
Wizard WebView to freeze or render blank. This leaves users stuck on
the "Loading......" screen indefinitely.
Changes:
- Set WEBKIT_DISABLE_COMPOSITING_MODE=1 to force software rendering,
matching the fix used by BambuStudio
- Enable the 20-second timeout fallback in load.js so the wizard
proceeds even if the C++ -> JavaScript signal fails
* Fix active filament preset not matching wizard selection on first run
After completing the setup wizard with only a non-PLA filament selected
(e.g. Generic ABS), the active filament preset defaulted to Generic PLA
instead of the user's selection. This happened because load_presets()
falls back to Generic PLA when the initial printer differs from the
preferred printer, and the first_added_filament override was disabled.
Add post-load correction in apply_config() that switches the active
filament to the first compatible wizard-selected filament when the
current active filament is not in the wizard selection. Also fix the
guide JS (22.js, 23.js) to use the filalist attribute for building
the filament array, and add platform-specific build test commands to
CLAUDE.md.
* Replace @System filaments with vendor-specific overrides in wizard
When the wizard selects a generic filament like "Generic ABS @System",
check if a vendor-specific override exists (e.g. BBL "Generic ABS")
and use that instead. This ensures printer-tuned profiles are preferred,
preventing load_installed_filaments from adding unwanted BBL defaults.
When printers from the default bundle are also selected, both variants
are kept since those printers need the @System version.
Also adds diagnostic logging for filament loading in LoadProfileFamily.
* Guard against persisting presets for Default Printer and fix filament override logic
Prevent export_selections from saving stale preset settings for the
built-in "Default Printer" placeholder, which is only the initial state
before a real printer is loaded. Also require a non-default vendor printer
to be selected before replacing @System filaments with vendor-specific
overrides in the wizard, avoiding incorrect filament substitution when
only the default bundle is present.