GUI silently discards a saved project's setting overrides unless the key is also listed in different_settings_to_system
Version: QIDIStudio 02.07.02.10 (Win64), GUI.
Mode: opening a .3mf project that has a modified project_settings.config (values that differ from its named system/user preset).
Summary
A project 3MF's Metadata/project_settings.config can contain a value that differs from its parent preset (named by print_settings_id) — for example the file literally states fill_density = "8%", layer_height = "0.2". On open, the GUI only re-applies overrides whose key is also present in the different_settings_to_system field (a ;-joined, 3-slot list aligned with inherits_group: process/filament/printer). If a key was changed in the JSON but its name was never added to different_settings_to_system, the GUI silently discards the value and rebuilds from the parent preset instead — no warning, no asterisk, no diff dialog. The dropdown/preset name shown is also just the parent preset's label, so the file can visibly say e.g. * 0.16mm Balanced Quality while actually slicing (headlessly, and until this bug, in the GUI too) at 0.20mm / 8% infill.
This is a genuine data-loss bug: a file that is correct on disk can silently print wrong the moment someone opens it in the GUI, with no visual indication anything changed.
Repro
- Take any project 3MF derived from a system preset.
- Hand-edit
Metadata/project_settings.config: change a value (e.g. fill_density) without adding its key to different_settings_to_system.
- Open the file in QIDIStudio GUI.
- Check the process settings panel — the field shows the parent preset's value, not the one written in the file, with no "modified" marker (orange dot / revert arrow).
Expected: every value literally present in project_settings.config is honored on open, or at minimum flagged as ignored.
Actual: unlisted keys are silently overwritten from the parent preset with no visual cue.
Additional related bug: switching the process preset dropdown discards ALL overrides at once
Even correctly-registered overrides (present in different_settings_to_system) are wiped in bulk if the user touches the process preset dropdown — selecting the same or any preset resets every project-level override back to that preset's stock values, no confirmation prompt.
Impact / cost
We hit both forms of this on a real production file: a bowl model built at 8% infill / 0.20mm opened at 15% / 0.16mm (471.6g/26.8h vs the intended 335.1g/14.7h) with zero indication anything was wrong — only caught because the GUI-open QA step happened to compare the reported slice weight against a recorded baseline.
Workaround (in use here)
When writing a project 3MF programmatically, register every overridden key in the correct different_settings_to_system slot (0=process, 1=filament, 2=printer) matching inherits_group, and verify by re-reading the written file. Confirm in the GUI by checking for the orange "modified" marker + revert arrow next to each value that's supposed to differ from the preset — a value can look right by coincidence if the preset's stock value happens to match.
Suggested fix
Either honor every explicit value in project_settings.config regardless of different_settings_to_system membership, or refuse to silently discard a value on open — surface a diff/confirmation dialog instead. At minimum, warn before a process-preset dropdown change wipes existing project overrides.
GUI silently discards a saved project's setting overrides unless the key is also listed in
different_settings_to_systemVersion: QIDIStudio 02.07.02.10 (Win64), GUI.
Mode: opening a
.3mfproject that has a modifiedproject_settings.config(values that differ from its named system/user preset).Summary
A project 3MF's
Metadata/project_settings.configcan contain a value that differs from its parent preset (named byprint_settings_id) — for example the file literally statesfill_density = "8%",layer_height = "0.2". On open, the GUI only re-applies overrides whose key is also present in thedifferent_settings_to_systemfield (a;-joined, 3-slot list aligned withinherits_group: process/filament/printer). If a key was changed in the JSON but its name was never added todifferent_settings_to_system, the GUI silently discards the value and rebuilds from the parent preset instead — no warning, no asterisk, no diff dialog. The dropdown/preset name shown is also just the parent preset's label, so the file can visibly say e.g.* 0.16mm Balanced Qualitywhile actually slicing (headlessly, and until this bug, in the GUI too) at 0.20mm / 8% infill.This is a genuine data-loss bug: a file that is correct on disk can silently print wrong the moment someone opens it in the GUI, with no visual indication anything changed.
Repro
Metadata/project_settings.config: change a value (e.g.fill_density) without adding its key todifferent_settings_to_system.Expected: every value literally present in
project_settings.configis honored on open, or at minimum flagged as ignored.Actual: unlisted keys are silently overwritten from the parent preset with no visual cue.
Additional related bug: switching the process preset dropdown discards ALL overrides at once
Even correctly-registered overrides (present in
different_settings_to_system) are wiped in bulk if the user touches the process preset dropdown — selecting the same or any preset resets every project-level override back to that preset's stock values, no confirmation prompt.Impact / cost
We hit both forms of this on a real production file: a bowl model built at 8% infill / 0.20mm opened at 15% / 0.16mm (471.6g/26.8h vs the intended 335.1g/14.7h) with zero indication anything was wrong — only caught because the GUI-open QA step happened to compare the reported slice weight against a recorded baseline.
Workaround (in use here)
When writing a project 3MF programmatically, register every overridden key in the correct
different_settings_to_systemslot (0=process, 1=filament, 2=printer) matchinginherits_group, and verify by re-reading the written file. Confirm in the GUI by checking for the orange "modified" marker + revert arrow next to each value that's supposed to differ from the preset — a value can look right by coincidence if the preset's stock value happens to match.Suggested fix
Either honor every explicit value in
project_settings.configregardless ofdifferent_settings_to_systemmembership, or refuse to silently discard a value on open — surface a diff/confirmation dialog instead. At minimum, warn before a process-preset dropdown change wipes existing project overrides.