Commit graph

28444 commits

Author SHA1 Message Date
SoftFever
4cc4da8868 fix flatpak CI build cache 2026-03-01 14:13:49 +08:00
SoftFever
9f5214d14d tweak: adjust max volumetric speed for PETG profiles to improve print quality (#12329)
* tweak: adjust max volumetric speed for PETG profiles to improve print quality
2026-03-01 14:13:48 +08:00
Argo
7e63fce706 Fix 3MF import crash for silent-mode machine limits with legacy vector sizes (#12289)
Some checks failed
Build all / Build Linux (push) Has been cancelled
Build all / Build Non-Linux (push) Has been cancelled
Build all / Flatpak (push) Has been cancelled
Build all / Unit Tests (push) Has been cancelled
Normalize printer_options_with_variant_2 (stride=2) machine limit vectors during preset merge to handle legacy 3MF/projects that store only a single (normal,silent) pair despite multiple printer variants, preventing set_with_restore() size-mismatch crashes.

Crash error message during 3MF import as project:

<img width="833" height="274" alt="image" src="https://github.com/user-attachments/assets/f92148a9-98c6-47b7-a0ab-d5ac8b1f2be4" />

3MF attached that causes the bug. 
[cube.3mf.zip](https://github.com/user-attachments/files/25318309/cube.3mf.zip)
2026-02-15 20:50:17 +08:00
Matthias Blaicher
380f4b4a18 Fix EGL/GLX mismatch causing blank 3D preview on Linux (#12308)
- Add configurable GLEW_USE_EGL option (default OFF) to match wxWidgets
- Explicitly set wxUSE_GLCANVAS_EGL=OFF for vendored wxWidgets build
- Add compile-time check to detect EGL/GLX backend mismatch between
  GLEW and wxWidgets, preventing silent rendering failures

The bug occurred when GLEW was compiled with EGL support (using
eglGetProcAddress) but wxWidgets created GLX contexts. This mismatch
caused OpenGL function pointers to fail loading, resulting in blank
3D model preview.

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-15 16:27:07 +08:00
SoftFever
240cf9ab5d bump version to 2.3.2-beta2 2026-02-15 14:31:57 +08:00
Branden Cash
05cb8b4d89 feat(MoonrakerPrinterAgent): support Happy Hare as alternative to AFC for filament sync (#12307)
# Description


# Screenshots/Recordings/Graphs


https://github.com/user-attachments/assets/5558b4be-24eb-4f2d-83fd-8482560a0014

<img width="445" height="285" alt="Screenshot 2026-02-14 at 7 31 57 PM" src="https://github.com/user-attachments/assets/e71fee66-05da-4f9c-8123-0f52e93f0ebb" />


## Tests

Removed configured filaments and pressed the sync button. Observed the filaments configured in my system were populated.
2026-02-15 14:31:29 +08:00
SoftFever
897a3e915f bump profile version to "02.03.02.40" (#12309) 2026-02-15 14:26:33 +08:00
Ian Bassi
586e96479a Linux: Repaired VFA tower (#12290)
* Update CalibUtils.cpp

* VFA.drc case to vfa.drc
2026-02-15 14:26:33 +08:00
Ian Bassi
0879b2079b Spanish minor update (#12268) 2026-02-15 14:26:33 +08:00
Ian Bassi
c4801250ea Spanish Update (#12254)
* Spanish Update
2026-02-15 14:26:33 +08:00
SoftFever
f0386d981f Revert "Switch to self hosted mac runner (#12024)"
Some checks failed
Build all / Build Linux (push) Has been cancelled
Build all / Build Non-Linux (push) Has been cancelled
Build all / Flatpak (push) Has been cancelled
Build all / Unit Tests (push) Has been cancelled
This reverts commit f1212be6bb.
2026-02-14 18:11:06 +08:00
Argo
cd5c8f2ad0 Ported Bambu Studio wipe tower interface features (with improved preheat and cooldown behaviour) - NEW (#12266)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
Wipe tower interface features and preheat fixes

Fresh PR branch rebuilt on upstream/main (squash of origin/BBL-studio-wipe-tower-merge) to avoid merge-history issues.
2026-02-13 22:57:55 +08:00
SoftFever
2d0a0568e7
Change SoftFever version from '2.3.2-dev' to '2.3.2-beta' 2026-02-13 19:43:45 +08:00
Yves
1952442e18
Restore select all plates as its own action (#12256)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
restore select all plates as its own function

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-13 16:24:59 +08:00
Boris Samorodov
5093a3dab3
Add Rectilinear Interlaced Support for Normal support type. Fix issue #9508. (#10739)
* Add Rectilinear Support for Normal support type. Fix issue #9508.

* Remove duplicate the rotation logic, use raft_interface_angle function.

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-13 15:30:53 +08:00
SoftFever
dfbdcad766 Revert "Raft, support interface fix and overhaul (#10947)"
This reverts commit 4692661631.
2026-02-13 15:22:03 +08:00
Kiss Lorand
4692661631
Raft, support interface fix and overhaul (#10947)
* Support interface fix

* Tree support true interlace

* remove pure format changes

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-13 14:34:12 +08:00
SoftFever
f681f7a2c0
Update more CHS and CHT translations (#12263) 2026-02-13 14:06:28 +08:00
Ian Bassi
f38324d521
Fix: Nozzle list (#11836)
* Fix extruder_id out-of-bounds in switch_excluder

Added a check to reset extruder_id to 0 if it exceeds the size of nozzle_volumes or extruders, preventing potential out-of-bounds access.

Co-Authored-By: Christopher R. Palmer <1305033+crpalmer@users.noreply.github.com>

* Add custom nozzle diameter option in sidebar

Ensures that if the actual nozzle diameter is not present in the list, it is added as a custom option. This improves user experience by allowing selection of non-standard nozzle diameters.

Refactor nozzle diameter selection logic in Sidebar

Simplified the logic for updating the extruder nozzle diameter combo box by removing redundant checks and streamlining the addition of custom nozzle diameters. This improves code clarity and ensures the actual nozzle diameter from the printer config is always considered.

Co-Authored-By: yw4z <yw4z@outlook.com>

* Prevent profile switch if selected diameter matches nozzle

Adds a check in Sidebar::priv::switch_diameter to avoid switching printer profiles when the selected diameter matches the current nozzle diameter in the configuration. This prevents unnecessary profile changes and improves user experience.

---------

Co-authored-by: Christopher R. Palmer <1305033+crpalmer@users.noreply.github.com>
Co-authored-by: yw4z <yw4z@outlook.com>
2026-02-13 12:24:24 +08:00
Ian Bassi
6c900535e5
Fix chinese-traditional (#12257)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
2026-02-12 18:12:21 -03:00
SoftFever
e090ec0e63 Update Chinese(Traditional) translation
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
2026-02-13 00:32:22 +08:00
Heiko Liebscher
1421d03394
fix typos for german (#12249) 2026-02-12 09:40:07 -03:00
SoftFever
d0f5b64428 Update Chinese (Simplified) localization for Orca Slicer
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
2026-02-12 16:49:06 +08:00
Alexandre Folle de Menezes
a0a84f7e2d
Adding more pt-BR translations (#12177)
Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-12 16:44:25 +08:00
Molly K
346361d634
Simplified Chinese translation improvement (minor update) (#12204)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
* Update OrcaSlicer_zh_CN.po

1

* Update OrcaSlicer_zh_CN.po

2

* Update OrcaSlicer_zh_CN.po

2.1

* Update OrcaSlicer_zh_CN.po

2.2

* fix error

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-12 08:53:53 +08:00
Jakub Hencl
652f180945
Czech New translation (#12241)
New translation OrcaSlicer

# Description

<!--
> Please provide a summary of the changes made in this PR. Include details such as:
  > * What issue does this PR address or fix?
  > * What new features or enhancements does this PR introduce?
  > * Are there any breaking changes or dependencies that need to be considered?
-->

# 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.
-->
2026-02-12 08:44:56 +08:00
Ian Bassi
68fdfcf0eb
BBS Port: Mesh Subdivision (#12150)
Ported from BBS
You can now right-click a part and choose Subdivide Part to apply Loop subdivision with multiple iterations. This is useful for models with low original mesh resolution.

> [!NOTE]
> 1. Only meshes without non-manifold edges are supported.
> 2. Color attributes will be lost after subdivision. We recommend subdividing first, then painting and applying colors.

Not perfect and it can break some features but a nice to have and we can improve it.
https://github.com/user-attachments/assets/33f10e49-f6dc-44d3-8c21-9e12e1fe23dc

Best case scenario a sphere:
Each picture is a Mesh subdivision step over the other
<img width="541" height="495" alt="260202_164257_orca-slicer" src="https://github.com/user-attachments/assets/e62b3f4d-ee6b-4451-95a4-40a154d3a405" />
<img width="541" height="495" alt="260202_164302_%pn" src="https://github.com/user-attachments/assets/f7399457-be8d-45e7-b93f-f42064dadd64" />
<img width="541" height="495" alt="260202_164306_%pn" src="https://github.com/user-attachments/assets/55370035-219f-4b7f-94f4-9b31733820d6" />
<img width="541" height="495" alt="260202_164310_%pn" src="https://github.com/user-attachments/assets/3be8c904-cc6f-4efe-b4f8-f390b50d310c" />
2026-02-12 08:42:01 +08:00
Dipl.-Ing. Raoul Rubien, BSc
aa8b8620da
Fixes 1 Bug and 8 Compiler Warnings (#10654)
* fixes: keys_map is initialized with itself [-Winit-self]

* fixes: operation on repeats may be undefined [-Wsequence-point]

* fixes: warning: suggest parentheses around && within || [-Wparentheses]

* fixes: moving brim_points to itself [-Wself-move]

* fixes: operation on unprintability may be undefined [-Wsequence-point]

* fixes: extra tokens at end of #endif directive [-Wendif-labels]

* fixes: converting to non-pointer type int from NULL [-Wconversion-null]

* review result: simplifies fix 'operation on repeats may be undefined'
2026-02-12 08:41:35 +08:00
SoftFever
8e84d21b7f Update unsigned studio dialog with LAN/Developer mode setup instructions
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
2026-02-12 01:37:56 +08:00
Kiss Lorand
5c9f6a82fc
Fix incorrect support style labels in unsaved-changes dialog for Tree supports (#12164) 2026-02-11 13:28:17 -03:00
yw4z
b02a50add0
Filament selection dialog > Switch to column browser UI with search boxes (#12167)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
* init

* update

* add ability to select / unselect filtered items

* update

* update

* match icon placements on filter / search boxes

* add clear button

* add ability to filter checked / unchecked items

* update

* update

* update

* update

* remove use of :has selector for better browser support

* increase contrast on light mode

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-11 17:42:57 +08:00
Yves
89eb0b26d1
Highlight selected objects (#12115)
# Description

The current bounding box selection display loses all usefulness once the furthest apart objects are selected.

This is especially noticeable on grid patterns, where nested unselected elements become indistinguishable after selecting all.

This PR implements a highlighting method that visually brightens individually selected objects.

# Screenshots/Recordings/Graphs

<img width="1845" height="829" alt="image" src="https://github.com/user-attachments/assets/a92a7176-182c-41e2-869e-badb220dfee2" />
Current 2.3.1: All but some objects are selected. Can you tell which ones?

<img width="2169" height="1042" alt="image" src="https://github.com/user-attachments/assets/c6c721d5-4f03-4c23-beff-b0acc0601568" />
Proposed PR: Slight lightening of selected objects

## Tests

Built on windows, tested with various colors and non-printable
2026-02-11 17:16:14 +08:00
Yves
08afbefa56
Change Ctrl+A behavior from all plates to current plate only (#12236)
Change CTRL-A behavior from ALL Plates to current plate only
2026-02-11 16:08:21 +08:00
discip
49413e7990
fixing typo in #12218 (#12239)
Change slope global use configuration to show overhang

Unfortunately there was a typo in #12218

This should fix it.
2026-02-11 16:07:23 +08:00
Heiko Liebscher
d06159a0c4
New locale for all translation of new features (#12217)
* build new locale for Translation new features

done for german

* fix: Update German translation for network connection error messages
2026-02-11 16:05:59 +08:00
Ocraftyone
0683013a7e
Improve the look of new version release notes (#12231)
# Description
Adds md4c to parse release notes to HTML

# Screenshots/Recordings/Graphs
<img width="695" height="580" alt="image" src="https://github.com/user-attachments/assets/8eaf2874-34f8-479a-b38c-2f9754297299" />

## Tests
Tested on Windows
2026-02-11 16:00:04 +08:00
Ian Bassi
cf31d05d26
Import step guide movement (#12235)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
2026-02-10 11:44:30 -03:00
Sabriel-Koh
9950662ddf
Fix: box selection selecting wrong object in orthogonal view (#12230)
# Description
When using box selection with the orthogonal view, unexpected objects end up getting selected.
Fixed by setting the selection camera to use the same view as the display camera.

Fixes #5895

# Screenshots/Recordings/Graphs
Bugged:

https://github.com/user-attachments/assets/e98fcbb1-0f01-43dd-a3d5-cb0af97e226e

Fixed:

https://github.com/user-attachments/assets/f84e801c-d595-4394-b42f-ed8758413980

## Tests
Tested the selection in both perspective and orthogonal.
2026-02-10 22:31:51 +08:00
SoftFever
55883bdb76 Revert "Improve the look of new version release notes (#12229)"
This reverts commit 38e67ff090.
2026-02-10 19:24:18 +08:00
Ocraftyone
38e67ff090
Improve the look of new version release notes (#12229)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
# Description
Adds md4c to parse release notes to HTML

# Screenshots/Recordings/Graphs

<img width="691" height="574" alt="image" src="https://github.com/user-attachments/assets/1ecd9bf4-6e26-4702-880e-c6f585c145ce" />


## Tests

Tested on Windows
2026-02-10 13:53:11 +08:00
Ocraftyone
abefb0e698
Fix thumbnail rendering in CLI (#12129)
* Fix thumbnail rendering in CLI

* Remove OSMesa context flag

* Add stringified error message for glfwInit and glewInit

* micro refactor

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-10 13:08:22 +08:00
Argo
ed3f0e2898
Fix issue #10971 (#12108)
Sorry had to re-create the PR as I did some chaos in my repo with CLI. xD

Fixes issue https://github.com/OrcaSlicer/OrcaSlicer/issues/10971

Description:
Fix wipe tower filament selection and clean up tool ordering. Added wipe_tower_filament handling to WipeTower2 (store config, mark non-selected tools as “soluble,” and use it in toolchange selection) and ensured the configured wipe‑tower extruder is included in the extruder list for ordering. Removed duplicated/merged tool‑ordering code (extra insert_wipe_tower_extruder definition, duplicate declaration, and redundant reorder block) so the tool order logic runs only once.

<img width="1819" height="799" alt="image" src="https://github.com/user-attachments/assets/cef39026-cf6a-46da-a87a-ef895774699f" />
2026-02-10 10:56:38 +08:00
paxx12
039a693b25
Update Snapmaker U1 printer profile and G-code sequences (#12219)
* Sync Snapmaker U1 profiles with upstream v2.2.1

* Customize Snapmaker U1 start gcode: auto bed leveling and adaptive mesh

* fix bed mesh min/max  regression issues

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-10 10:54:57 +08:00
Argo
ffc8a3e307
Adds (AMS) filament sync options: Only sync color / sync all (#12169)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
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" />
2026-02-10 09:12:30 +08:00
Sabriel-Koh
cae1567726
fix: Show Labels and Show Overhang toggles not being saved (#12218)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
* fix: Show Labels and Show Overhang toggles not being saved

* refactor: use get_bool and add comments
2026-02-09 22:27:03 +08:00
Derrick
e14e186bb7
Fix wipe tower loaded outside of plate boundaries (#12191)
* 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
2026-02-09 22:25:41 +08:00
yw4z
9604b01656
Fix: tool position window glitch on Linux (#12195)
fill buffer
2026-02-09 11:07:51 -03:00
Rodrigo Faselli
084c58f365
500C temp tower Calib (#12103)
* 500C temp tower

* better model

* draco temp tower

Co-Authored-By: Ian Bassi <ian.bassi@outlook.com>

---------

Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
2026-02-09 10:03:32 -03:00
Ian Bassi
ed1b03fe6d
Reduce Orca weight: Resources to Draco (#12194)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
# 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.
2026-02-09 10:48:29 +08:00
davyd
2f2f0df6af
feat: Add File header G-code option and print_time_sec/filament_length_m placeholders (#12186)
Some checks are pending
Build all / Build Linux (push) Waiting to run
Build all / Build Non-Linux (push) Waiting to run
Build all / Unit Tests (push) Blocked by required conditions
Build all / Flatpak (push) Waiting to run
## 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) |
|---|---|
| ![IMG_5285](https://github.com/user-attachments/assets/fdd2cc96-6593-4108-83f4-e272d5547467) | ![IMG_5286](https://github.com/user-attachments/assets/6cb4091a-4560-4596-93d9-49f2ff8f0a2b) |

## 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)
2026-02-08 23:56:28 +08:00