Compare commits

..
Author SHA1 Message Date
Hanif Koh 138fa26847 Support the 02.08.04 Bambu Network Plug-in Series
The 02.08.02 series appended queue_plate_id to PrintParams and nothing
after it changed the ABI OrcaSlicer calls, so adding the field brings
the current layout up to 02.08.04. Make 02.08.04 the latest series and
drop 02.08.01 from the whitelist: its PrintParams no longer matches, and
its malformed bind table is refused by dyld on macOS 27, so it cannot
load there. A stored 02.08.01 falls back to the latest series through
the existing unsupported-version path.
2026-10-06 17:20:11 +08:00
70 changed files with 96 additions and 589 deletions
+2 -7
View File
@@ -36,13 +36,8 @@ override is not available in these profiles. The source's `EXCLUDE_E_START` and
`EXCLUDE_E_END` internal markers become comments rather than printer commands.
Pressure-advance restoration and automatic pressure-advance emission use the
selected filament preset's settings. The INDX filament presets include
`fdm_filament_template_indx`, whose start G-code sets the filament's pressure
advance with `M572` and then starts the firmware's automatic calibration with
`M573 R`, the commands PrusaSlicer emits after a tool change; the station purge
disables pressure advance before it. The template also carries Prusa's
multi-tool ramming and a 10 mm³ minimal purge. These profiles do not impose
machine-owned filament overrides. Dock-fan control retains the source's material and layer
selected filament preset's settings. These profiles do not impose machine-owned
filament overrides. Dock-fan control retains the source's material and layer
conditions; shutdown parks the tool and turns off the used heaters and dock fan.
## Configuration boundaries
+37 -97
View File
@@ -1,6 +1,6 @@
{
"name": "Prusa",
"version": "02.04.00.16",
"version": "02.04.00.15",
"force_update": "0",
"description": "Prusa configurations",
"machine_model_list": [
@@ -1573,32 +1573,48 @@
],
"filament_list": [
{
"name": "Generic PC @Prusa",
"sub_path": "filament/Generic PC @Prusa.json"
"name": "Generic ASA @Prusa CORE One",
"sub_path": "filament/Generic ASA @Prusa CORE One.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One.json"
},
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_template_indx",
"sub_path": "filament/fdm_filament_template_indx.json"
"name": "Generic ASA @Prusa CORE One 0.6",
"sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json"
},
{
"name": "fdm_filament_template_nextruder_pet",
"sub_path": "filament/fdm_filament_template_nextruder_pet.json"
"name": "Generic ASA @Prusa CORE One 0.8",
"sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json"
},
{
"name": "fdm_filament_template_nextruder_pet_hf",
"sub_path": "filament/fdm_filament_template_nextruder_pet_hf.json"
"name": "Generic ASA @Prusa CORE One HF 0.4",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json"
},
{
"name": "fdm_filament_template_nextruder_pla",
"sub_path": "filament/fdm_filament_template_nextruder_pla.json"
"name": "Generic ASA @Prusa CORE One HF 0.5",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json"
},
{
"name": "fdm_filament_template_nextruder_pla_hf",
"sub_path": "filament/fdm_filament_template_nextruder_pla_hf.json"
"name": "Generic ASA @Prusa CORE One HF 0.6",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json"
},
{
"name": "Generic ASA @Prusa CORE One HF 0.8",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One 0.6",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One 0.8",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json"
},
{
"name": "fdm_filament_abs",
@@ -1648,22 +1664,6 @@
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One INDX",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One INDX.json"
},
{
"name": "Generic ASA @Prusa CORE One",
"sub_path": "filament/Generic ASA @Prusa CORE One.json"
},
{
"name": "Generic PC @Prusa MK4 MMU3",
"sub_path": "filament/Generic PC @Prusa MK4 MMU3.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One.json"
},
{
"name": "Generic ABS @Prusa MK3.5",
"sub_path": "filament/Generic ABS @Prusa MK3.5.json"
@@ -2160,38 +2160,6 @@
"name": "Generic TPU HF @Prusa MK3.5",
"sub_path": "filament/Generic TPU HF @Prusa MK3.5.json"
},
{
"name": "Generic ASA @Prusa CORE One 0.6",
"sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json"
},
{
"name": "Generic ASA @Prusa CORE One 0.8",
"sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json"
},
{
"name": "Generic ASA @Prusa CORE One HF 0.4",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json"
},
{
"name": "Generic ASA @Prusa CORE One HF 0.5",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json"
},
{
"name": "Generic ASA @Prusa CORE One HF 0.6",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json"
},
{
"name": "Generic ASA @Prusa CORE One HF 0.8",
"sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One 0.6",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One 0.8",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json"
},
{
"name": "Generic ABS @Prusa MK4S HF0.4",
"sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json"
@@ -2244,10 +2212,6 @@
"name": "Generic ABS HF @Prusa MINIIS 0.8",
"sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json"
},
{
"name": "Generic ASA @Prusa MK4 MMU3",
"sub_path": "filament/Generic ASA @Prusa MK4 MMU3.json"
},
{
"name": "Generic ASA @Prusa MK4S 0.6",
"sub_path": "filament/Generic ASA @Prusa MK4S 0.6.json"
@@ -2296,10 +2260,6 @@
"name": "Prusament ASA @CORE One HF 0.8",
"sub_path": "filament/Prusament ASA @CORE One HF 0.8.json"
},
{
"name": "Prusament ASA @MK4 MMU3",
"sub_path": "filament/Prusament ASA @MK4 MMU3.json"
},
{
"name": "Prusament ASA @MK4S 0.6",
"sub_path": "filament/Prusament ASA @MK4S 0.6.json"
@@ -2432,10 +2392,6 @@
"name": "Prusament PC Blend @CORE One HF 0.8",
"sub_path": "filament/Prusament PC Blend @CORE One HF 0.8.json"
},
{
"name": "Prusament PC Blend @MK4 MMU3",
"sub_path": "filament/Prusament PC Blend @MK4 MMU3.json"
},
{
"name": "Prusament PC Blend @MK4S 0.6",
"sub_path": "filament/Prusament PC Blend @MK4S 0.6.json"
@@ -2576,10 +2532,6 @@
"name": "Prusament PETG @CORE One HF 0.8",
"sub_path": "filament/Prusament PETG @CORE One HF 0.8.json"
},
{
"name": "Prusament PETG @MK4 MMU3",
"sub_path": "filament/Prusament PETG @MK4 MMU3.json"
},
{
"name": "Prusament PETG @MK4S 0.6",
"sub_path": "filament/Prusament PETG @MK4S 0.6.json"
@@ -2716,10 +2668,6 @@
"name": "Prusament PLA @CORE One HF 0.8",
"sub_path": "filament/Prusament PLA @CORE One HF 0.8.json"
},
{
"name": "Prusament PLA @MK4 MMU3",
"sub_path": "filament/Prusament PLA @MK4 MMU3.json"
},
{
"name": "Prusament PLA @MK4S 0.6",
"sub_path": "filament/Prusament PLA @MK4S 0.6.json"
@@ -2756,10 +2704,6 @@
"name": "Prusament rPLA @CORE One 0.8",
"sub_path": "filament/Prusament rPLA @CORE One 0.8.json"
},
{
"name": "Prusament rPLA @MK4 MMU3",
"sub_path": "filament/Prusament rPLA @MK4 MMU3.json"
},
{
"name": "Prusament rPLA @MK4S 0.6",
"sub_path": "filament/Prusament rPLA @MK4S 0.6.json"
@@ -2912,10 +2856,6 @@
"name": "Generic ABS @Prusa CORE One HF 0.8",
"sub_path": "filament/Generic ABS @Prusa CORE One HF 0.8.json"
},
{
"name": "Generic ABS @Prusa MK4 MMU3",
"sub_path": "filament/Generic ABS @Prusa MK4 MMU3.json"
},
{
"name": "Generic ASA @Prusa MK4S HF0.5",
"sub_path": "filament/Generic ASA @Prusa MK4S HF0.5.json"
@@ -2964,10 +2904,6 @@
"name": "Generic PETG @Prusa CORE One HF 0.8",
"sub_path": "filament/Generic PETG @Prusa CORE One HF 0.8.json"
},
{
"name": "Generic PETG @Prusa MK4 MMU3",
"sub_path": "filament/Generic PETG @Prusa MK4 MMU3.json"
},
{
"name": "Generic PLA @Prusa MK4S HF0.5",
"sub_path": "filament/Generic PLA @Prusa MK4S HF0.5.json"
@@ -3012,10 +2948,6 @@
"name": "Generic PLA @Prusa CORE One HF 0.8",
"sub_path": "filament/Generic PLA @Prusa CORE One HF 0.8.json"
},
{
"name": "Generic PLA @Prusa MK4 MMU3",
"sub_path": "filament/Generic PLA @Prusa MK4 MMU3.json"
},
{
"name": "Generic TPU @Prusa CORE One 0.6",
"sub_path": "filament/Generic TPU @Prusa CORE One 0.6.json"
@@ -3023,6 +2955,14 @@
{
"name": "Generic TPU @Prusa CORE One 0.8",
"sub_path": "filament/Generic TPU @Prusa CORE One 0.8.json"
},
{
"name": "Generic PC @Prusa",
"sub_path": "filament/Generic PC @Prusa.json"
},
{
"name": "Generic PLA Silk @Prusa CORE One INDX",
"sub_path": "filament/Generic PLA Silk @Prusa CORE One INDX.json"
}
],
"machine_list": [
@@ -7,9 +7,6 @@
"setting_id": "ASYz8yASE82tQDII",
"filament_id": "OFY9muEs",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "mzZCm8XDmAR23YR6",
"filament_id": "OFY9muEs",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "gJhX2KBpk4wfXIj0",
"filament_id": "OFY9muEs",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -5,9 +5,6 @@
"from": "system",
"setting_id": "JEatvybG9xIkrPk3",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_cost": [
"34.65"
],
@@ -6,9 +6,6 @@
"from": "system",
"setting_id": "0k31oXq1pLQsHvrj",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -1,19 +0,0 @@
{
"type": "filament",
"name": "Generic ABS @Prusa MK4 MMU3",
"inherits": "Generic ABS @Prusa MK4",
"from": "system",
"setting_id": "uFmixo2FX1yxNsDB",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_minimal_purge_on_wipe_tower": [
"35"
]
}
@@ -7,9 +7,6 @@
"setting_id": "eKDfiVRE59itoppm",
"filament_id": "OFLPAxz3",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "ZjHf5Vvtf4ESNnWb",
"filament_id": "OFLPAxz3",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "aRDgUgQJWdNDJx5c",
"filament_id": "OFLPAxz3",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -6,9 +6,6 @@
"from": "system",
"setting_id": "Q7fgojkHRZI0floy",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -1,19 +0,0 @@
{
"type": "filament",
"name": "Generic ASA @Prusa MK4 MMU3",
"inherits": "Generic ASA @Prusa MK4",
"from": "system",
"setting_id": "iq9bFkpmAOJ4ae4g",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_minimal_purge_on_wipe_tower": [
"35"
]
}
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Generic PC @Prusa MK4 MMU3",
"inherits": "Generic PC @Prusa",
"from": "system",
"setting_id": "qMawlK9QPI7DcF8I",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
]
}
@@ -7,9 +7,6 @@
"setting_id": "7oUyjvRHLH4bJyX0",
"filament_id": "OFYPdQJh",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "6HiIOGURZWwman1l",
"filament_id": "OFYPdQJh",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "KKiug7A9NOQPe1m7",
"filament_id": "OFYPdQJh",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -5,9 +5,6 @@
"from": "system",
"setting_id": "HbevqxqvYHuvRc3v",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_cost": [
"27.82"
],
@@ -6,9 +6,6 @@
"from": "system",
"setting_id": "W71PW5bpf7CV16D4",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"35"
],
@@ -1,19 +0,0 @@
{
"type": "filament",
"name": "Generic PETG @Prusa MK4 MMU3",
"inherits": "Generic PETG @Prusa MK4",
"from": "system",
"setting_id": "lBiZBFpSXZNIp5XG",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_minimal_purge_on_wipe_tower": [
"35"
]
}
@@ -8,16 +8,12 @@
"filament_id": "OFDSrzZ8",
"instantiation": "true",
"compatible_printers": [
"Prusa CORE One 0.6 nozzle",
"Prusa CORE One MMU3 0.6 nozzle"
"Prusa CORE One 0.6 nozzle"
],
"nozzle_temperature": [
"210"
],
"slow_down_layer_time": [
"15"
],
"filament_cooling_final_speed": [
"1.5"
]
}
@@ -7,9 +7,6 @@
"setting_id": "vniEPaoyABoAfLFa",
"filament_id": "OFDSrzZ8",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle",
"Prusa CORE One L HF 0.4 nozzle"
@@ -7,9 +7,6 @@
"setting_id": "NPEs4gtBlKWupYZX",
"filament_id": "OFDSrzZ8",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "SnfULjrWGCiA7ljq",
"filament_id": "OFDSrzZ8",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -27,8 +24,5 @@
],
"slow_down_min_speed": [
"15"
],
"filament_cooling_final_speed": [
"1.5"
]
}
@@ -5,9 +5,6 @@
"from": "system",
"setting_id": "4qjcaIf1vk3K1x4Z",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_cost": [
"25.4"
],
@@ -6,9 +6,6 @@
"from": "system",
"setting_id": "r2i4c7DsYXYIMVCX",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"chamber_temperature": [
"20"
],
@@ -20,7 +17,8 @@
"Prusa CORE One L 0.4 nozzle",
"Prusa CORE One MMU3 0.4 nozzle",
"Prusa CORE One MMU3 0.25 nozzle",
"Prusa CORE One MMU3 0.3 nozzle"
"Prusa CORE One MMU3 0.3 nozzle",
"Prusa CORE One MMU3 0.6 nozzle"
],
"fan_cooling_layer_time": [
"40"
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Generic PLA @Prusa MK4 MMU3",
"inherits": "Generic PLA @Prusa MK4",
"from": "system",
"setting_id": "kZvIh84niJ487FsY",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
]
}
@@ -29,8 +29,5 @@
],
"slow_down_layer_time": [
"15"
],
"filament_cooling_final_speed": [
"1.5"
]
}
@@ -5,9 +5,6 @@
"from": "system",
"setting_id": "eKla6su22rYaL9iz",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_flow_ratio": [
"1",
"1",
@@ -6,9 +6,6 @@
"from": "system",
"setting_id": "F9lNHyhZwZi7aD74",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"chamber_temperature": [
"20"
],
@@ -6,9 +6,6 @@
"setting_id": "tXktQXr79am1s5UL",
"filament_id": "OFmFwUWM",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "YbyojtjXvEtI4Tt3",
"filament_id": "OFmFwUWM",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "35H9TLr1p2Jy767g",
"filament_id": "OFmFwUWM",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "UUTjJ4Y8St3c87jD",
"filament_id": "OFmFwUWM",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -1,19 +0,0 @@
{
"type": "filament",
"name": "Prusament ASA @MK4 MMU3",
"inherits": "Prusament ASA @MK4",
"from": "system",
"setting_id": "IRJ2dtBgjCMfmpOH",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_minimal_purge_on_wipe_tower": [
"35"
]
}
@@ -7,9 +7,6 @@
"setting_id": "sNGgucQjiFXwuFkq",
"filament_id": "OF4MZtnE",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -6,9 +6,6 @@
"setting_id": "pEsP537TBR5kozQB",
"filament_id": "OFvDbkFq",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "3IfLi1ZVCKKbEBUW",
"filament_id": "OFvDbkFq",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "Q8qWw2G7l2UvxGut",
"filament_id": "OFvDbkFq",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "x1SkWhSSkVVIPwCF",
"filament_id": "OFvDbkFq",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Prusament PC Blend @MK4 MMU3",
"inherits": "Prusament PC Blend @MK4",
"from": "system",
"setting_id": "gmNuCspHHxgP6zH8",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
]
}
@@ -7,9 +7,6 @@
"setting_id": "B8Cm9l8i9osp5J2q",
"filament_id": "OFdO6vpt",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"40"
],
@@ -6,9 +6,6 @@
"setting_id": "lwT1VxW5OkY36kUX",
"filament_id": "OFkR8E2c",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "XAgW7fElXxhaKaBT",
"filament_id": "OFkR8E2c",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.5 nozzle"
],
@@ -6,9 +6,6 @@
"setting_id": "6aTGEZj2EmpTR1mu",
"filament_id": "OFkR8E2c",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.6 nozzle"
],
@@ -7,9 +7,6 @@
"setting_id": "LSvba9ds3XTwDMCG",
"filament_id": "OFkR8E2c",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"chamber_temperature": [
"35"
],
@@ -1,19 +0,0 @@
{
"type": "filament",
"name": "Prusament PETG @MK4 MMU3",
"inherits": "Prusament PETG @MK4",
"from": "system",
"setting_id": "7DQ6YEKyQKYDTKtE",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pet"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_minimal_purge_on_wipe_tower": [
"35"
]
}
@@ -6,9 +6,6 @@
"setting_id": "2viuOmBvXuQm2FwV",
"filament_id": "OFkR8E2c",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_flow_ratio": [
"1"
],
@@ -6,9 +6,6 @@
"setting_id": "mf4Muog4IcsgkYoA",
"filament_id": "OFnO4wnf",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla_hf"
],
"compatible_printers": [
"Prusa CORE One HF 0.4 nozzle",
"Prusa CORE One L HF 0.4 nozzle"
@@ -7,9 +7,6 @@
"setting_id": "PuujUMjNKLZvZNAH",
"filament_id": "OFnO4wnf",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"chamber_temperature": [
"20"
],
@@ -107,11 +104,5 @@
],
"slow_down_min_speed": [
"20"
],
"filament_unloading_speed": [
"100"
],
"filament_unloading_speed_start": [
"100"
]
}
@@ -1,22 +0,0 @@
{
"type": "filament",
"name": "Prusament PLA @MK4 MMU3",
"inherits": "Prusament PLA @MK4",
"from": "system",
"setting_id": "MsDcN4npnmLRXOjm",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
],
"filament_unloading_speed": [
"100"
],
"filament_unloading_speed_start": [
"100"
]
}
@@ -6,9 +6,6 @@
"setting_id": "B2UB9QUbbjpn12Ka",
"filament_id": "OFnO4wnf",
"instantiation": "true",
"include": [
"fdm_filament_template_indx"
],
"filament_flow_ratio": [
"1"
],
@@ -7,9 +7,6 @@
"setting_id": "085dGkrnPhatF07x",
"filament_id": "OFh7mvPO",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"chamber_temperature": [
"20"
],
@@ -108,11 +105,5 @@
],
"slow_down_min_speed": [
"20"
],
"filament_unloading_speed": [
"60"
],
"filament_unloading_speed_start": [
"60"
]
}
@@ -8,16 +8,12 @@
"instantiation": "true",
"compatible_printers": [
"Prusa CORE One 0.6 nozzle",
"Prusa CORE One HF 0.6 nozzle",
"Prusa CORE One MMU3 0.6 nozzle"
"Prusa CORE One HF 0.6 nozzle"
],
"filament_max_volumetric_speed": [
"14"
],
"slow_down_layer_time": [
"15"
],
"filament_cooling_final_speed": [
"1.5"
]
}
@@ -7,9 +7,6 @@
"setting_id": "Bw6H4vFnq7YExyLd",
"filament_id": "OFWRITFw",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"chamber_temperature": [
"20"
],
@@ -25,7 +22,8 @@
"Prusa CORE One HF 0.5 nozzle",
"Prusa CORE One MMU3 0.4 nozzle",
"Prusa CORE One MMU3 0.25 nozzle",
"Prusa CORE One MMU3 0.3 nozzle"
"Prusa CORE One MMU3 0.3 nozzle",
"Prusa CORE One MMU3 0.6 nozzle"
],
"fan_cooling_layer_time": [
"40"
@@ -1,16 +0,0 @@
{
"type": "filament",
"name": "Prusament rPLA @MK4 MMU3",
"inherits": "Prusament rPLA @MK4",
"from": "system",
"setting_id": "wKhvyGpgjmW6glLj",
"instantiation": "true",
"include": [
"fdm_filament_template_nextruder_pla"
],
"compatible_printers": [
"Prusa MK4 MMU3 0.4 nozzle",
"Prusa MK4 MMU3 0.6 nozzle",
"Prusa MK4 MMU3 HF0.4 nozzle"
]
}
@@ -1,21 +0,0 @@
{
"type": "filament",
"name": "fdm_filament_template_indx",
"from": "system",
"instantiation": "false",
"filament_multitool_ramming": [
"1"
],
"filament_multitool_ramming_flow": [
"30"
],
"filament_multitool_ramming_volume": [
"18"
],
"filament_minimal_purge_on_wipe_tower": [
"10"
],
"filament_start_gcode": [
"M572 S{pressure_advance[filament_extruder_id]} ; Pressure advance\nM573 R"
]
}
@@ -1,36 +0,0 @@
{
"type": "filament",
"name": "fdm_filament_template_nextruder_pet",
"from": "system",
"instantiation": "false",
"filament_ramming_parameters": [
"250 100 42.4194 42.4194 42.4194 42.4194 42.4194| 0.05 42.4387 0.45 42.4387 0.95 42.4387 1.45 42.4387 1.95 42.4387 2.45 42.4387 2.95 42.4387 3.45 42.4387 3.95 42.4387 4.45 42.4387 4.95 42.4387"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_unloading_speed": [
"60"
],
"filament_unloading_speed_start": [
"60"
],
"filament_cooling_moves": [
"3"
],
"filament_cooling_initial_speed": [
"5"
],
"filament_cooling_final_speed": [
"2.5"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"26.5"
]
}
@@ -1,9 +0,0 @@
{
"type": "filament",
"name": "fdm_filament_template_nextruder_pet_hf",
"from": "system",
"instantiation": "false",
"filament_ramming_parameters": [
"250 100 42.4194 42.4194| 0.05 42.4387 0.45 42.4387 0.95 42.4387 1.45 42.4387 1.95 42.4387 2.45 42.4387 2.95 42.4387 3.45 42.4387 3.95 42.4387 4.45 42.4387 4.95 42.4387"
]
}
@@ -1,36 +0,0 @@
{
"type": "filament",
"name": "fdm_filament_template_nextruder_pla",
"from": "system",
"instantiation": "false",
"filament_ramming_parameters": [
"250 100 40.1613 40.3548 40.4516 40.3548 40.2581| 0.05 40.1483 0.45 40.3419 0.95 40.3419 1.45 40.3419 1.95 40.3419 2.45 40.3419 2.95 40.3419 3.45 40.3419 3.95 40.3419 4.45 40.3419 4.95 40.3419"
],
"filament_loading_speed": [
"10"
],
"filament_loading_speed_start": [
"50"
],
"filament_unloading_speed": [
"40"
],
"filament_unloading_speed_start": [
"30"
],
"filament_cooling_moves": [
"2"
],
"filament_cooling_initial_speed": [
"10"
],
"filament_cooling_final_speed": [
"3.5"
],
"filament_stamping_distance": [
"45"
],
"filament_stamping_loading_speed": [
"29"
]
}
@@ -1,9 +0,0 @@
{
"type": "filament",
"name": "fdm_filament_template_nextruder_pla_hf",
"from": "system",
"instantiation": "false",
"filament_ramming_parameters": [
"250 100 39.871 39.871| 0.05 39.9547 0.45 39.9547 0.95 39.9547 1.45 39.9547 1.95 39.9547 2.45 39.9547 2.95 39.9547 3.45 39.9547 3.95 39.9547 4.45 39.9547 4.95 39.9547"
]
}
@@ -3,7 +3,7 @@
"name": "Prusa CORE One MMU3",
"bed_model": "coreone_bed.stl",
"bed_texture": "coreone.svg",
"default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One;Generic PLA @Prusa CORE One 0.6",
"default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One",
"family": "Prusa",
"hotend_model": "",
"machine_tech": "FFF",
@@ -16,7 +16,7 @@
],
"printer_model": "Prusa MK4 MMU3",
"default_filament_profile": [
"Generic PLA @Prusa MK4 MMU3"
"Generic PLA @System"
],
"default_print_profile": "0.20mm SPEED @MK4 MMU3 0.4",
"printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG"
@@ -17,7 +17,7 @@
"printer_model": "Prusa MK4 MMU3",
"printer_variant": "0.6",
"default_filament_profile": [
"Generic PLA @Prusa MK4 MMU3"
"Generic PLA @System"
],
"default_print_profile": "0.25mm SPEED @MK4 MMU3 0.6",
"printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG"
@@ -8,5 +8,5 @@
"bed_model": "mk4_bed.stl",
"bed_texture": "mk4is.svg",
"hotend_model": "",
"default_materials": "Generic PLA @Prusa MK4 MMU3;Generic PETG @Prusa MK4 MMU3;Generic ABS @Prusa MK4 MMU3"
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
}
@@ -16,7 +16,7 @@
],
"printer_model": "Prusa MK4 MMU3 HF",
"default_filament_profile": [
"Generic PLA @Prusa MK4 MMU3"
"Generic PLA @System"
],
"default_print_profile": "0.20mm SPEED @MK4 MMU3 HF0.4",
"printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK4MMU3\nPG\nHF_NOZZLE"
@@ -8,5 +8,5 @@
"bed_model": "mk4_bed.stl",
"bed_texture": "mk4is.svg",
"hotend_model": "",
"default_materials": "Generic PLA @Prusa MK4 MMU3;Generic PETG @Prusa MK4 MMU3;Generic ABS @Prusa MK4 MMU3"
"default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System"
}
+2 -1
View File
@@ -596,7 +596,8 @@ PrintParams_Legacy BBLNetworkPlugin::as_legacy(PrintParams& param)
}
// Every PrintParams field except the four the 02.08.01 series added
// (task_timelapse_use_internal, extruder_cali_manual_mode, svc_context, slicer_uid).
// (task_timelapse_use_internal, extruder_cali_manual_mode, svc_context, slicer_uid) and the
// queue_plate_id 02.08.02 appended.
PrintParams_0203 BBLNetworkPlugin::as_0203(PrintParams& param)
{
PrintParams_0203 p;
+7 -4
View File
@@ -336,6 +336,7 @@ struct PrintParams {
bool try_emmc_print;
std::string svc_context;
std::string slicer_uid;
std::string queue_plate_id;
};
struct TaskQueryParams
@@ -412,7 +413,7 @@ enum class NetworkAbi {
Unsupported, // no generation in this build can call it - never dispatch through it
Legacy, // 01.10.01: PrintParams_Legacy; send_message/send_message_to_printer take no flag
V0203, // 02.03.00: PrintParams_0203; bind takes no dev_model
Current, // 02.08.01: the layouts and signatures this build declares directly
Current, // 02.08.04: the layouts and signatures this build declares directly
};
struct NetworkLibraryVersion {
@@ -425,10 +426,12 @@ struct NetworkLibraryVersion {
};
// Every row names the generation that can call it, so a series can never be offered without a
// host-side ABI for it. Series with no generation - 02.01.01, 02.00.02 and older - must stay out;
// is_supported_network_version() is the gate that keeps them from loading.
// host-side ABI for it. Series with no generation - 02.08.01 (whose PrintParams lacks the
// queue_plate_id that 02.08.02 appended, and whose malformed bind table macOS 27 refuses to
// load), 02.01.01, 02.00.02 and older - must stay out; is_supported_network_version() is the
// gate that keeps them from loading.
static const NetworkLibraryVersion AVAILABLE_NETWORK_VERSIONS[] = {
{"02.08.01", "02.08.01", nullptr, true, nullptr, NetworkAbi::Current},
{"02.08.04", "02.08.04", nullptr, true, nullptr, NetworkAbi::Current},
{"02.03.00", "02.03.00", nullptr, false,
"An older plug-in series. Features that need newer plug-in support, such as print-failure "
"snapshots in the device error dialog, are unavailable.", NetworkAbi::V0203},
+36 -29
View File
@@ -78,31 +78,34 @@ TEST_CASE("Series and managed classification", "[NetworkVersions]")
TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; customs are surfaced", "[NetworkVersions]")
{
add_plugin("02.08.01.55"); // managed, same series -> folded into the 02.08.01 row
add_plugin("02.08.04.60"); // managed, same series -> folded into the 02.08.04 row
add_plugin("02.09.00.10"); // managed, unknown series -> not listed
add_plugin("02.08.01.55"); // managed, series this build no longer has an ABI for -> not listed
add_plugin("02.03.00.62"); // managed, older whitelisted series -> folded into 02.03.00
add_plugin("02.01.01.52"); // managed, series with no ABI in this build -> not listed
add_plugin("02.08.01_custom"); // custom, whitelisted series -> listed under it
add_plugin("02.08.01.52-dev"); // custom (dash-suffixed), whitelisted series -> listed
add_plugin("02.08.04_custom"); // custom, whitelisted series -> listed under it
add_plugin("02.08.04.52-dev"); // custom (dash-suffixed), whitelisted series -> listed
auto versions = get_all_available_versions();
// The specific managed build never gets its own row - the series represents it.
REQUIRE(count_version(versions, "02.08.01.55") == 0);
REQUIRE(count_version(versions, "02.08.01") == 1);
REQUIRE(count_version(versions, "02.08.04.60") == 0);
REQUIRE(count_version(versions, "02.08.04") == 1);
REQUIRE(count_version(versions, "02.09.00.10") == 0);
REQUIRE(count_version(versions, "02.08.01.55") == 0);
REQUIRE(count_version(versions, "02.08.01") == 0);
REQUIRE(count_version(versions, "02.03.00.62") == 0);
REQUIRE(count_version(versions, "02.03.00") == 1);
REQUIRE(count_version(versions, "02.01.01.52") == 0);
// Custom-named builds are distinct files kept under their own name.
REQUIRE(count_version(versions, "02.08.01_custom") == 1);
REQUIRE(count_version(versions, "02.08.01.52-dev") == 1);
REQUIRE(count_version(versions, "02.08.04_custom") == 1);
REQUIRE(count_version(versions, "02.08.04.52-dev") == 1);
// Newest series first, its customs nested under it (suffix sort: "" < ".52-dev" < "_custom"),
// then older series, legacy last.
REQUIRE(versions[0].version == "02.08.01");
REQUIRE(versions[1].version == "02.08.01.52-dev");
REQUIRE(versions[2].version == "02.08.01_custom");
REQUIRE(versions[0].version == "02.08.04");
REQUIRE(versions[1].version == "02.08.04.52-dev");
REQUIRE(versions[2].version == "02.08.04_custom");
REQUIRE(versions[3].version == "02.03.00");
REQUIRE(versions.back().version == BAMBU_NETWORK_AGENT_VERSION_LEGACY);
@@ -111,9 +114,9 @@ TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; cust
REQUIRE_FALSE(versions[3].is_latest);
// Customs sort/render nested under their series (non-empty suffix, base = the series).
REQUIRE(versions[1].base_version == "02.08.01");
REQUIRE(versions[1].base_version == "02.08.04");
REQUIRE_FALSE(versions[1].suffix.empty());
REQUIRE(versions[2].base_version == "02.08.01");
REQUIRE(versions[2].base_version == "02.08.04");
REQUIRE_FALSE(versions[2].suffix.empty());
// "(Latest)" is the series row, never a nested custom build.
@@ -123,20 +126,20 @@ TEST_CASE_METHOD(PluginFolderFixture, "Managed builds fold into the series; cust
REQUIRE_FALSE(versions[2].is_latest);
// The stored default that drives download and update-check decisions is now the series.
REQUIRE(std::string(get_latest_network_version()) == "02.08.01");
REQUIRE(std::string(get_latest_network_version()) == "02.08.04");
}
TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installed", "[NetworkVersions]")
{
add_plugin("02.08.01.55");
add_plugin("02.08.01_custom");
add_plugin("02.08.04.60");
add_plugin("02.08.04_custom");
// The loaded plug-in reports its full build (02.08.01.55); the series row is what gets marked.
// The loaded plug-in reports its full build (02.08.04.60); the series row is what gets marked.
{
auto versions = get_all_available_versions("02.08.01.55");
auto versions = get_all_available_versions("02.08.04.60");
int marked = 0;
for (const auto& info : versions)
if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.01"); }
if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.04"); }
REQUIRE(marked == 1);
}
@@ -152,10 +155,10 @@ TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installe
// A loaded custom build matches its own row, never the bare series.
{
auto versions = get_all_available_versions("02.08.01_custom");
auto versions = get_all_available_versions("02.08.04_custom");
int marked = 0;
for (const auto& info : versions)
if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.01_custom"); }
if (info.is_loaded) { ++marked; REQUIRE(info.version == "02.08.04_custom"); }
REQUIRE(marked == 1);
}
@@ -167,11 +170,11 @@ TEST_CASE_METHOD(PluginFolderFixture, "Only the loaded series is marked installe
TEST_CASE("Only whitelisted series pass the load gate", "[NetworkVersions]")
{
// Each whitelisted series, its builds, and custom-named builds of that series.
REQUIRE(is_supported_network_version("02.08.01"));
REQUIRE(is_supported_network_version("02.08.01.52"));
REQUIRE(is_supported_network_version("02.08.01.55"));
REQUIRE(is_supported_network_version("02.08.01_custom"));
REQUIRE(is_supported_network_version("02.08.01.52-dev"));
REQUIRE(is_supported_network_version("02.08.04"));
REQUIRE(is_supported_network_version("02.08.04.52"));
REQUIRE(is_supported_network_version("02.08.04.60"));
REQUIRE(is_supported_network_version("02.08.04_custom"));
REQUIRE(is_supported_network_version("02.08.04.52-dev"));
REQUIRE(is_supported_network_version("02.03.00"));
REQUIRE(is_supported_network_version("02.03.00.62"));
REQUIRE(is_supported_network_version("02.03.00.70"));
@@ -179,6 +182,9 @@ TEST_CASE("Only whitelisted series pass the load gate", "[NetworkVersions]")
REQUIRE(is_supported_network_version(BAMBU_NETWORK_AGENT_VERSION_LEGACY));
// Series whitelisted by previous Orca releases that no generation here can call.
REQUIRE_FALSE(is_supported_network_version("02.08.01"));
REQUIRE_FALSE(is_supported_network_version("02.08.01.55"));
REQUIRE_FALSE(is_supported_network_version("02.08.01_custom"));
REQUIRE_FALSE(is_supported_network_version("02.01.01.52"));
REQUIRE_FALSE(is_supported_network_version("02.00.02.50"));
@@ -198,9 +204,9 @@ TEST_CASE("Each version resolves to the ABI generation that can call it", "[Netw
{
// The generation is keyed on the series, so every build of a series - including the
// custom-named ones - resolves to the same one.
CHECK(network_plugin_abi("02.08.01") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.08.01.55") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.08.01.52-dev") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.08.04") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.08.04.60") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.08.04.52-dev") == NetworkAbi::Current);
CHECK(network_plugin_abi("02.03.00") == NetworkAbi::V0203);
CHECK(network_plugin_abi("02.03.00.62") == NetworkAbi::V0203);
CHECK(network_plugin_abi("02.03.00_custom") == NetworkAbi::V0203);
@@ -208,6 +214,7 @@ TEST_CASE("Each version resolves to the ABI generation that can call it", "[Netw
// Anything the load gate rejects must dispatch through nothing at all, rather than
// defaulting to a layout it does not share.
CHECK(network_plugin_abi("02.08.01.55") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.01.01.52") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.00.02.50") == NetworkAbi::Unsupported);
CHECK(network_plugin_abi("02.09.00.10") == NetworkAbi::Unsupported);
@@ -234,7 +241,7 @@ TEST_CASE_METHOD(PluginFolderFixture, "Legacy series never adopts discovered bui
// With nothing else on disk, the series holds "(Latest)" even though its library is
// not installed.
for (const auto& info : versions) {
if (info.version == "02.08.01") {
if (info.version == "02.08.04") {
REQUIRE(info.is_latest);
REQUIRE_FALSE(info.is_loaded);
}