diff --git a/CHANGELOG.md b/CHANGELOG.md
index 45e38d59..2489d2ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,16 @@
 # Changelog
 
+## 04/10/2024 - v4.4.3
+
+- **File formats:**
+  - (Change) Rename file and class from `PhotonSFile` to `AnycubicPhotonSFile`
+  - (Change) Rename file and class from `PhotonWorkshopFile` to `AnycubicFile`
+  - (Change) Rename file and class from `CXDLPFile` to `CrealityCXDLPFile`
+  - (Change) Rename convert menu group from `CXDLP` to `Creality CXDLP`
+  - (Fix) CTB (Version 5): `NullReferenceException` when trying to convert from a file with a `null` MaterialName (#857)
+  - (Fix) Sanitize file version before convert the file to ensure capabilities (#934)
+  - (Fix) Unable to set the format version when converting from files with a version that match it own default version (#857)
+
 ## 14/09/2024 - v4.4.2
 
 - (Add) Tool - Redraw model: Add multiple operator modes (#926)
diff --git a/Directory.Build.props b/Directory.Build.props
index 32a9094c..2bb72c03 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -31,7 +31,7 @@
 
         <CommonPublishDir>$(MSBuildThisFileDirectory)publish</CommonPublishDir>
 
-        <UVtoolsVersion>4.4.2</UVtoolsVersion>
+        <UVtoolsVersion>4.4.3</UVtoolsVersion>
         <AvaloniaVersion>11.1.3</AvaloniaVersion>
     </PropertyGroup>
 
diff --git a/PrusaSlicer/printer/AnyCubic Photon D2.ini b/PrusaSlicer/printer/AnyCubic Photon D2.ini
index 08106b6b..33372d8d 100644
--- a/PrusaSlicer/printer/AnyCubic Photon D2.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon D2.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.0+win64 on 2022-09-15 at 21:20:12 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:39:46 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,130.56x0,130.56x73.44,0x73.44
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_D2\nFILEFORMAT_DL2P\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_D2\nFILEFORMAT_DL2P\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini
index 79a0039f..663bb387 100644
--- a/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon M3 Max.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:01:30 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:50 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,298.08x0,298.08x165.6,0x165.6
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_MAX\nFILEVERSION_516\nFILEFORMAT_PM3M\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_MAX\nFILEFORMAT_PM3M\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -37,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini
index 584780f7..1f053778 100644
--- a/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon M3 Plus.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:15:53 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:56 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,198.15x0,198.15x123.84,0x123.84
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PLUS\nFILEVERSION_516\nFILEFORMAT_PWMB\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PLUS\nFILEFORMAT_PWMB\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -37,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini b/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini
index f91522e6..643b261f 100644
--- a/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon M3 Premium.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.0+win64 on 2022-10-20 at 13:33:45 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:06 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,218.88x0,218.88x123.12,0x123.12
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PREMIUM\nFILEVERSION_517\nFILEFORMAT_PM3R\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3_PREMIUM\nFILEFORMAT_PM3R\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon M3.ini b/PrusaSlicer/printer/AnyCubic Photon M3.ini
index 55bbfb03..4c850f4e 100644
--- a/PrusaSlicer/printer/AnyCubic Photon M3.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon M3.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:25:49 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:45 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,163.84x0,163.84x102.4,0x102.4
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3\nFILEVERSION_516\nFILEFORMAT_PM3\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_M3\nFILEFORMAT_PM3\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -37,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini b/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini
index 18ba60b9..71249965 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono 2.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.2+win64 on 2023-05-06 at 19:20:44 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:41:15 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,143.36x0,143.36x89.6,0x89.6
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_2\nFILEFORMAT_PM3N\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_2\nFILEFORMAT_PM3N\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini b/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini
index d54a62ed..2948138c 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono 4K.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:08:09 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:16 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,134.4x0,134.4x84,0x84
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_4K\nFILEVERSION_516\nFILEFORMAT_PWMA\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_4K\nFILEFORMAT_PWMA\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -37,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini
index e2bdf2d1..ddf446a7 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.2+win64 on 2023-05-30 at 18:53:02 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:20 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,218.88x0,218.88x122.88,0x122.88
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5\nFILEVERSION_517\nFILEFORMAT_PM5\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5\nFILEFORMAT_PM5\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini
index f8c7045b..9d8a23d2 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5s Pro.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.7.1+win64 on 2024-02-29 at 00:07:42 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:27 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,223.64x0,223.64x126.976,0x126.976
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S_PRO\nFILEVERSION_518\nFILEFORMAT_M5SP\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S_PRO\nFILEFORMAT_M5SP\nFILEVERSION_518\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini b/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini
index 6173190d..8e353737 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono M5s.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.2+win64 on 2023-05-30 at 18:53:39 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:44:24 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,218.88x0,218.88x122.88,0x122.88
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S\nFILEVERSION_518\nFILEFORMAT_PM5S\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_M5S\nFILEFORMAT_PM5S\nFILEVERSION_518\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini
index 0b0514df..13e44b8d 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono SE.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:28 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:04 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\nFILEFORMAT_PWMS\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SE\nFILEFORMAT_PWMS\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini b/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini
index a609c94f..7c7414be 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono SQ.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:33 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:10 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,120x0,120x128,0x128
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SQ\nFILEFORMAT_PMSQ\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_SQ\nFILEFORMAT_PMSQ\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini
index da255634..56fa4192 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono X 6K.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.4.1+win64 on 2022-04-11 at 16:16:26 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:28 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,198.15x0,198.15x123.84,0x123.84
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6K\nFILEVERSION_516\nFILEFORMAT_PWMB\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6K\nFILEFORMAT_PWMB\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -37,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini
index fe8c30d6..a3af8c03 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono X 6Ks.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.2+win64 on 2023-05-29 at 15:55:25 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:41 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,195.84x0,195.84x122.4,0x122.4
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6Ks\nFILEVERSION_517\nFILEFORMAT_PX6S\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X_6Ks\nFILEFORMAT_PX6S\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini
index f318c291..94fce8bf 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono X.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono X.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:37 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:42:17 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,192x0,192x120,0x120
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\nFILEFORMAT_PWMX\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X\nFILEFORMAT_PWMX\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini b/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini
index da830a3e..c2920163 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono X2.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.5.0+win64 on 2022-10-20 at 13:33:53 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:01 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,196.61x0,196.61x122.88,0x122.88
@@ -27,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X2\nFILEVERSION_517\nFILEFORMAT_PMX2\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO_X2\nFILEFORMAT_PMX2\nFILEVERSION_517\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_120\nLiftSpeed_120\nRetractSpeed_120\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -38,5 +37,7 @@ relative_correction = 1,1
 relative_correction_x = 1
 relative_correction_y = 1
 relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Mono.ini b/PrusaSlicer/printer/AnyCubic Photon Mono.ini
index d1edc0f8..d86cb8cb 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Mono.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Mono.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:18 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:40:48 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\nFILEFORMAT_PWMO\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_MONO\nFILEFORMAT_PWMO\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_6\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon S.ini b/PrusaSlicer/printer/AnyCubic Photon S.ini
index 5a352a7a..2577cc32 100644
--- a/PrusaSlicer/printer/AnyCubic Photon S.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon S.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:49 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:10 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,68.04x0,68.04x120.96,0x120.96
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\nFILEFORMAT_PWS\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_S\nFILEFORMAT_PWS\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Ultra.ini b/PrusaSlicer/printer/AnyCubic Photon Ultra.ini
index 707f0498..1f04a466 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Ultra.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Ultra.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:53 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:21 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,102.4x0,102.4x57.6,0x57.6
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ULTRA\nFILEFORMAT_DLP\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ULTRA\nFILEFORMAT_DLP\nFILEVERSION_516\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_6\nLiftHeight_5\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon X.ini b/PrusaSlicer/printer/AnyCubic Photon X.ini
index a267b747..064a2b18 100644
--- a/PrusaSlicer/printer/AnyCubic Photon X.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon X.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:22:58 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:27 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,192x0,192x120,0x120
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\nFILEFORMAT_PWX\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_X\nFILEFORMAT_PWX\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nBottomLiftHeight_8\nLiftHeight_8\nBottomLiftSpeed_150\nLiftSpeed_150\nRetractSpeed_150\nBottomLightPWM_255\nLightPWM_255\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/PrusaSlicer/printer/AnyCubic Photon Zero.ini b/PrusaSlicer/printer/AnyCubic Photon Zero.ini
index 1627f91b..f61f55af 100644
--- a/PrusaSlicer/printer/AnyCubic Photon Zero.ini	
+++ b/PrusaSlicer/printer/AnyCubic Photon Zero.ini	
@@ -1,6 +1,5 @@
-# generated by PrusaSlicer 2.3.3+win64 on 2021-12-06 at 03:23:03 UTC
+# generated by PrusaSlicer 2.8.1+win64 on 2024-10-01 at 03:43:33 UTC
 absolute_correction = 0
-area_fill = 50
 bed_custom_model = 
 bed_custom_texture = 
 bed_shape = 0x0,55.4x0,55.4x98.63,0x98.63
@@ -17,6 +16,7 @@ elefant_foot_compensation = 0.2
 elefant_foot_min_width = 0.2
 fast_tilt_time = 5
 gamma_correction = 1
+high_viscosity_tilt_time = 10
 host_type = octoprint
 inherits = Original Prusa SL1
 max_exposure_time = 120
@@ -26,7 +26,7 @@ min_exposure_time = 1
 min_initial_exposure_time = 1
 print_host = 
 printer_model = SL1
-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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\nFILEFORMAT_PW0\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
+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_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTON_ZERO\nFILEFORMAT_PW0\nFILEVERSION_1\n\nSTART_CUSTOM_VALUES\nWaitTimeBeforeCure_2.5\nLiftHeight_6\nLiftingSpeed_60\nRetractSpeed_150\nEND_CUSTOM_VALUES
 printer_settings_id = 
 printer_technology = SLA
 printer_variant = default
@@ -34,5 +34,10 @@ printer_vendor =
 printhost_apikey = 
 printhost_cafile = 
 relative_correction = 1,1
+relative_correction_x = 1
+relative_correction_y = 1
+relative_correction_z = 1
+sla_archive_format = SL1
+sla_output_precision = 0.001
 slow_tilt_time = 8
-thumbnails = 224x168
+thumbnails = 224x168/PNG
diff --git a/README.md b/README.md
index 82945fce..06e3c699 100644
--- a/README.md
+++ b/README.md
@@ -117,6 +117,7 @@ But also, I need victims for test subject. Proceed at your own risk!
 - GR1 (GR1 Workshop)
 - CXDLP, CXDLPV4 (Creality Box)
 - GOO (Elegoo)
+- PRZ (Phrozen Sonic Mini 8K S)
 - LGS (Longer Orange 10), LGS30 (Longer Orange 30), LGS120 (Longer Orange 120), LGS4K (Longer Orange 4K & mono)
 - Flashforge SVGX
 - Anet N4, Anet N7
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 1ab91a1b..b4d23e58 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,7 +1,9 @@
-- (Add) Tool - Redraw model: Add multiple operator modes (#926)
-- (Fix) Tool - Redraw model: Redo (Ctrl + Shift + Z) would cause a crash
-- (Fix) Pixel Editor: Make the content scrollable when the window is resized to a smaller size
-- (Fix) Calibration - Exposure time finder: When the "Multiple exposures" panel is collapsed it become disabled and unusable
-- (Fix) Layer preview - Difference: Fixes the white background over black pixels
-- (Fix) macOS: Change title "Avalonia Application" to "UVtools" on some app managers
+- **File formats:**
+  - (Change) Rename file and class from `PhotonSFile` to `AnycubicPhotonSFile`
+  - (Change) Rename file and class from `PhotonWorkshopFile` to `AnycubicFile`
+  - (Change) Rename file and class from `CXDLPFile` to `CrealityCXDLPFile`
+  - (Change) Rename convert menu group from `CXDLP` to `Creality CXDLP`
+  - (Fix) CTB (Version 5): `NullReferenceException` when trying to convert from a file with a `null` MaterialName (#857)
+  - (Fix) Sanitize file version before convert the file to ensure capabilities (#934)
+  - (Fix) Unable to set the format version when converting from files with a version that match it own default version (#857)
 
diff --git a/Scripts/010 Editor/FileFormats.1pj b/Scripts/010 Editor/FileFormats.1pj
index d1a11aed..645c3545 100644
--- a/Scripts/010 Editor/FileFormats.1pj	
+++ b/Scripts/010 Editor/FileFormats.1pj	
@@ -19,6 +19,7 @@
  <file>goo.bt</file>
  <file>photons.bt</file>
  <file>PhotonWorkshop.bt</file>
+ <file>pwszScene.bt</file>
  <file>phz.bt</file>
  <file>svgx.bt</file>
 </_010editor_project>
diff --git a/Scripts/010 Editor/pwszScene.bt b/Scripts/010 Editor/pwszScene.bt
new file mode 100644
index 00000000..94611f66
--- /dev/null
+++ b/Scripts/010 Editor/pwszScene.bt	
@@ -0,0 +1,52 @@
+//------------------------------------------------
+//--- 010 Editor v13.0.2 Binary Template
+//
+//      File: pwsz
+//   Authors: Tiago Conceição
+//------------------------------------------------
+
+LittleEndian();
+
+enum <uint> BOOL { False, True };
+
+struct HEADER {
+    char Magic[16] <fgcolor=cBlack, bgcolor=cRed>; // ANYCUBIC-PWSZ
+    char Software[64] <fgcolor=cBlack, bgcolor=cRed>; // Identifies the generated software, company, name, eg: AnycubicPhotonWorkshop Exports
+    uint BinaryType <fgcolor=cBlack, bgcolor=cRed>; // 1: Pure Binary; 2: FPGA Debug; 3: FPGA Release. Firmware set to 3 (Default)
+    uint Version <fgcolor=cBlack, bgcolor=cRed>; // 1
+    uint SliceType <fgcolor=cBlack, bgcolor=cRed>; // Currently fixed at 0
+    uint ModelUnit <fgcolor=cBlack, bgcolor=cRed>; // 0: mm; 1: cm; 2: m; Currently fixed at 0
+    float PointRatio <fgcolor=cBlack, bgcolor=cRed>; // Currently fixed at 1.0f
+    uint LayerCount <fgcolor=cBlack, bgcolor=cRed>; 
+    float MinX <fgcolor=cBlack, bgcolor=cRed>; // 
+    float MinY <fgcolor=cBlack, bgcolor=cRed>; // 
+    float MinZ <fgcolor=cBlack, bgcolor=cRed>; // 
+    float MaxX <fgcolor=cBlack, bgcolor=cRed>; // 
+    float MaxY <fgcolor=cBlack, bgcolor=cRed>; // 
+    float MaxZ <fgcolor=cBlack, bgcolor=cRed>; // 
+    uint ModelStats <fgcolor=cBlack, bgcolor=cRed>; // Some status flags of the scene model
+    uint Padding[64] <fgcolor=cBlack, bgcolor=cRed>; // 
+    char Separator[4] <fgcolor=cBlack, bgcolor=cPurple>; // <---
+    uint LayerCount <fgcolor=cBlack, bgcolor=cGreen>; 
+} header;
+
+struct LAYER_DEF {
+    float Height <fgcolor=cWhite, bgcolor=cBlue>;
+    float Area <fgcolor=cWhite, bgcolor=cBlue>; // mm^2
+    float XMin <fgcolor=cWhite, bgcolor=cBlue>;
+    float YMin <fgcolor=cWhite, bgcolor=cBlue>;
+    float XMax <fgcolor=cWhite, bgcolor=cBlue>;
+    float YMax <fgcolor=cWhite, bgcolor=cBlue>;
+    uint ContourCount <fgcolor=cWhite, bgcolor=cBlue>;
+    float MaxContourArea <fgcolor=cWhite, bgcolor=cBlue>; // mm^2
+    uint Padding[8] <fgcolor=cWhite, bgcolor=cBlue>;
+};
+
+struct LAYERSDATA{
+        local uint i;
+        for( i = 0; i < header.LayerCount; i++ ){
+            LAYER_DEF layer;
+        }
+    } layers;
+    
+char EndMarker[4] <fgcolor=cBlack, bgcolor=cPurple>; // --->
\ No newline at end of file
diff --git a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs b/UVtools.Core/FileFormats/AnycubicFile.cs
similarity index 97%
rename from UVtools.Core/FileFormats/PhotonWorkshopFile.cs
rename to UVtools.Core/FileFormats/AnycubicFile.cs
index e79d82e0..82142bbd 100644
--- a/UVtools.Core/FileFormats/PhotonWorkshopFile.cs
+++ b/UVtools.Core/FileFormats/AnycubicFile.cs
@@ -23,7 +23,7 @@
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class PhotonWorkshopFile : FileFormat
+public sealed class AnycubicFile : FileFormat
 {
     #region Constants
     public const byte VERSION_1 = 1;       // 0x1
@@ -715,7 +715,7 @@ public void CopyTo(Layer layer)
             layer.LiftSpeed = SpeedConverter.Convert(LiftSpeed, SpeedUnit.MillimetersPerSecond, CoreSpeedUnit);
         }
 
-        public Mat Decode(PhotonWorkshopFile slicerFile, bool consumeData = true)
+        public Mat Decode(AnycubicFile slicerFile, bool consumeData = true)
         {
             var result = slicerFile.RleFormat == PhotonRleFormat.PWS ? DecodePWS(slicerFile) : DecodePW0(slicerFile);
             if (consumeData)
@@ -724,13 +724,13 @@ public Mat Decode(PhotonWorkshopFile slicerFile, bool consumeData = true)
             return result;
         }
 
-        public byte[] Encode(PhotonWorkshopFile slicerFile, Mat image)
+        public byte[] Encode(AnycubicFile slicerFile, Mat image)
         {
             EncodedRle = slicerFile.RleFormat == PhotonRleFormat.PWS ? EncodePWS(slicerFile, image) : EncodePW0(image);
             return EncodedRle;
         }
 
-        private unsafe Mat DecodePWS(PhotonWorkshopFile slicerFile)
+        private unsafe Mat DecodePWS(AnycubicFile slicerFile)
         {
             var image = EmguExtensions.InitMat(slicerFile.Resolution);
             var span = image.GetBytePointer();
@@ -786,7 +786,7 @@ private unsafe Mat DecodePWS(PhotonWorkshopFile slicerFile)
             return image;
         }
 
-        public unsafe byte[] EncodePWS(PhotonWorkshopFile slicerFile, Mat image)
+        public unsafe byte[] EncodePWS(AnycubicFile slicerFile, Mat image)
         {
             List<byte> rawData = new();
             var span = image.GetBytePointer();
@@ -857,7 +857,7 @@ void AddRep()
             return rawData.ToArray();
         }
 
-        private Mat DecodePW0(PhotonWorkshopFile slicerFile)
+        private Mat DecodePW0(AnycubicFile slicerFile)
         {
             var mat = slicerFile.CreateMat();
             var imageLength = mat.GetLength();
@@ -1185,27 +1185,27 @@ public override string ToString()
 
     public override FileExtension[] FileExtensions { get; } = {
 
-        new(typeof(PhotonWorkshopFile), "pws", "Photon / Photon S (PWS)"),
-        new(typeof(PhotonWorkshopFile), "pw0", "Photon Zero (PW0)"),
-        new(typeof(PhotonWorkshopFile), "pwx", "Photon X (PWX)"),
-        new(typeof(PhotonWorkshopFile), "dlp", "Photon Ultra (DLP)"),
-        new(typeof(PhotonWorkshopFile), "dl2p", "Photon Photon D2 (DL2P)"),
-        new(typeof(PhotonWorkshopFile), "pwmx", "Photon Mono X (PWMX)"),
-        new(typeof(PhotonWorkshopFile), "pmx2", "Photon Mono X2 (PMX2)"),
-        new(typeof(PhotonWorkshopFile), "pwmb", "Photon Mono X 6K / Photon M3 Plus (PWMB)"),
-        new(typeof(PhotonWorkshopFile), "px6s", "Photon Mono X 6Ks (PX6S)"),
-        new(typeof(PhotonWorkshopFile), "pwmo", "Photon Mono (PWMO)"),
-        new(typeof(PhotonWorkshopFile), "pm3n", "Photon Mono 2 (PM3N)"),
-        new(typeof(PhotonWorkshopFile), "pwms", "Photon Mono SE (PWMS)"),
-        new(typeof(PhotonWorkshopFile), "pwma", "Photon Mono 4K (PWMA)"),
-        new(typeof(PhotonWorkshopFile), "pmsq", "Photon Mono SQ (PMSQ)"),
-        new(typeof(PhotonWorkshopFile), "pm3", "Photon M3 (PM3)"),
-        new(typeof(PhotonWorkshopFile), "pm3m", "Photon M3 Max (PM3M)"),
-        new(typeof(PhotonWorkshopFile), "pm3r", "Photon M3 Premium (PM3R)"),
-        new(typeof(PhotonWorkshopFile), "pm5", "Photon Mono M5 (PM5)"),
-        new(typeof(PhotonWorkshopFile), "pm5s", "Photon Mono M5s (PM5s)"),
-        new(typeof(PhotonWorkshopFile), "m5sp", "Photon Mono M5s Pro (M5sp)"),
-        new(typeof(PhotonWorkshopFile), "pwc", "Anycubic Custom Machine (PWC)"),
+        new(typeof(AnycubicFile), "pws", "Photon / Photon S (PWS)"),
+        new(typeof(AnycubicFile), "pw0", "Photon Zero (PW0)"),
+        new(typeof(AnycubicFile), "pwx", "Photon X (PWX)"),
+        new(typeof(AnycubicFile), "dlp", "Photon Ultra (DLP)"),
+        new(typeof(AnycubicFile), "dl2p", "Photon Photon D2 (DL2P)"),
+        new(typeof(AnycubicFile), "pwmx", "Photon Mono X (PWMX)"),
+        new(typeof(AnycubicFile), "pmx2", "Photon Mono X2 (PMX2)"),
+        new(typeof(AnycubicFile), "pwmb", "Photon Mono X 6K / Photon M3 Plus (PWMB)"),
+        new(typeof(AnycubicFile), "px6s", "Photon Mono X 6Ks (PX6S)"),
+        new(typeof(AnycubicFile), "pwmo", "Photon Mono (PWMO)"),
+        new(typeof(AnycubicFile), "pm3n", "Photon Mono 2 (PM3N)"),
+        new(typeof(AnycubicFile), "pwms", "Photon Mono SE (PWMS)"),
+        new(typeof(AnycubicFile), "pwma", "Photon Mono 4K (PWMA)"),
+        new(typeof(AnycubicFile), "pmsq", "Photon Mono SQ (PMSQ)"),
+        new(typeof(AnycubicFile), "pm3", "Photon M3 (PM3)"),
+        new(typeof(AnycubicFile), "pm3m", "Photon M3 Max (PM3M)"),
+        new(typeof(AnycubicFile), "pm3r", "Photon M3 Premium (PM3R)"),
+        new(typeof(AnycubicFile), "pm5", "Photon Mono M5 (PM5)"),
+        new(typeof(AnycubicFile), "pm5s", "Photon Mono M5s (PM5s)"),
+        new(typeof(AnycubicFile), "m5sp", "Photon Mono M5s Pro (M5sp)"),
+        new(typeof(AnycubicFile), "pwc", "Anycubic Custom Machine (PWC)"),
         //new(typeof(PhotonWorkshopFile), "pwmb", "Photon M3 Plus (PWMB)"),
     };
     
@@ -1906,7 +1906,7 @@ public AnyCubicMachine PrinterModel
     #endregion
 
     #region Constructors
-    public PhotonWorkshopFile()
+    public AnycubicFile()
     {
     }
     #endregion
diff --git a/UVtools.Core/FileFormats/PhotonSFile.cs b/UVtools.Core/FileFormats/AnycubicPhotonSFile.cs
similarity index 99%
rename from UVtools.Core/FileFormats/PhotonSFile.cs
rename to UVtools.Core/FileFormats/AnycubicPhotonSFile.cs
index 42de5ddd..a6e32a3c 100644
--- a/UVtools.Core/FileFormats/PhotonSFile.cs
+++ b/UVtools.Core/FileFormats/AnycubicPhotonSFile.cs
@@ -20,7 +20,7 @@
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class PhotonSFile : FileFormat
+public sealed class AnycubicPhotonSFile : FileFormat
 {
     #region Constants
     public const byte RLEEncodingLimit = 128;
@@ -250,7 +250,7 @@ public Mat Decode(bool consumeRle = true)
     public override string ConvertMenuGroup => "Chitubox";
 
     public override FileExtension[] FileExtensions { get; } = {
-        new(typeof(PhotonSFile), "photons", "Chitubox PhotonS"),
+        new(typeof(AnycubicPhotonSFile), "photons", "Chitubox PhotonS"),
     };
 
     public override PrintParameterModifier[] PrintParameterModifiers { get; } =
@@ -384,7 +384,7 @@ public override float MaterialMilliliters
     #endregion
 
     #region Constructors
-    public PhotonSFile()
+    public AnycubicPhotonSFile()
     {
         ResolutionX = RESOLUTION_X;
         ResolutionY = RESOLUTION_Y;
diff --git a/UVtools.Core/FileFormats/PWSZFile.cs b/UVtools.Core/FileFormats/AnycubicZipFile.cs
similarity index 65%
rename from UVtools.Core/FileFormats/PWSZFile.cs
rename to UVtools.Core/FileFormats/AnycubicZipFile.cs
index e5600c06..e6e8faeb 100644
--- a/UVtools.Core/FileFormats/PWSZFile.cs
+++ b/UVtools.Core/FileFormats/AnycubicZipFile.cs
@@ -6,6 +6,9 @@
  *  of this license document, but changing it is not allowed.
  */
 
+using BinarySerialization;
+using Emgu.CV;
+using Emgu.CV.CvEnum;
 using System;
 using System.Drawing;
 using System.IO;
@@ -13,14 +16,17 @@
 using System.Runtime.InteropServices;
 using System.Text.Json;
 using System.Text.Json.Serialization;
+using System.Threading.Tasks;
 using UVtools.Core.Converters;
+using UVtools.Core.EmguCV;
 using UVtools.Core.Extensions;
 using UVtools.Core.Layers;
 using UVtools.Core.Operations;
+using static UVtools.Core.FileFormats.AnycubicFile;
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class PWSZFile : FileFormat
+public sealed class AnycubicZipFile : FileFormat
 {
     #region Sub classes
 
@@ -280,6 +286,117 @@ public void Update()
             OS = RuntimeInformation.RuntimeIdentifier;
         }
     }
+
+    public sealed class SceneLayerDef
+    {
+        [FieldOrder(0)] public float Height { get; set; }
+
+        [FieldOrder(1)] public float Area { get; set; }
+
+        [FieldOrder(2)] public float XMin { get; set; }
+
+        [FieldOrder(3)] public float YMin { get; set; }
+
+        [FieldOrder(4)] public float XMax { get; set; }
+
+        [FieldOrder(5)] public float YMax { get; set; }
+
+        [FieldOrder(6)] public uint ContourCount { get; set; }
+
+        [FieldOrder(7)] public float MaxContourArea { get; set; }
+
+        [FieldOrder(8)] [FieldCount(8)] public uint[] Padding { get; set; } = new uint[8];
+
+        public override string ToString()
+        {
+            return
+                $"{nameof(Height)}: {Height}, {nameof(Area)}: {Area}, {nameof(XMin)}: {XMin}, {nameof(YMin)}: {YMin}, {nameof(XMax)}: {XMax}, {nameof(YMax)}: {YMax}, {nameof(ContourCount)}: {ContourCount}, {nameof(MaxContourArea)}: {MaxContourArea}, {nameof(Padding)}: {Padding}";
+        }
+    }
+
+    public sealed class SceneManifest
+    {
+        public const string MAGIC = "ANYCUBIC-PWSZ";
+
+        [FieldOrder(0)]
+        [FieldLength(16)]
+        [SerializeAs(SerializedType.TerminatedString)]
+        public string Magic { get; set; } = MAGIC;
+
+        [FieldOrder(1)]
+        [FieldLength(64)]
+        [SerializeAs(SerializedType.TerminatedString)]
+        public string Software { get; set; } = About.SoftwareWithVersionArch;
+
+        /// <summary>
+        /// 1: Pure Binary<br/>
+        /// 2: FPGA Debug<br/>
+        /// 3: FPGA Release. Firmware set to 3 (Default)
+        /// </summary>
+        [FieldOrder(2)] public uint BinaryType { get; set; } = 3;
+
+        [FieldOrder(3)] public uint Version { get; set; } = 1;
+
+        [FieldOrder(4)] public uint SliceType { get; set; }
+
+        /// <summary>
+        /// 0: mm<br/>
+        /// 1: cm<br/>
+        /// 2: m
+        /// </summary>
+        [FieldOrder(5)] public uint ModelUnit { get; set; }
+
+        [FieldOrder(6)] public float PointRatio { get; set; } = 1f;
+
+        [FieldOrder(7)] public uint LayerCount { get; set; }
+
+        [FieldOrder(8)] public float XMin { get; set; }
+
+        [FieldOrder(9)] public float YMin { get; set; }
+
+        [FieldOrder(10)] public float ZMin { get; set; }
+
+        [FieldOrder(11)] public float XMax { get; set; } = 1;
+
+        [FieldOrder(12)] public float YMax { get; set; }
+
+        [FieldOrder(13)] public float ZMax { get; set; }
+
+        /// <summary>
+        /// Some status flags of the scene model
+        /// </summary>
+        [FieldOrder(14)] public uint ModelStats { get; set; }
+
+        [FieldOrder(15)] [FieldCount(64)] public uint[] Padding { get; set; } = new uint[64];
+
+        [FieldOrder(16)] [FieldLength(4)] public string Separator { get; set; } = "<---";
+
+        [FieldOrder(17)] public uint LayerDefCount { get; set; }
+
+        [FieldOrder(18)][FieldCount(nameof(LayerDefCount))] public SceneLayerDef[] LayersDef { get; set; } = Array.Empty<SceneLayerDef>();
+
+        [FieldOrder(19)] [FieldLength(4)] public string EndMarker { get; set; } = "--->";
+
+        public void Update(FileFormat slicerFile)
+        {
+            Software = About.SoftwareWithVersionArch;
+            var rect = slicerFile.BoundingRectangleMillimeters;
+            rect.Offset(slicerFile.DisplayWidth / -2f, slicerFile.DisplayHeight / -2f);
+            XMin = (float)Math.Round(rect.X, 4);
+            YMin = (float)Math.Round(rect.Y, 4);
+            XMax = (float)Math.Round(rect.Right, 4);
+            YMax = (float)Math.Round(rect.Bottom, 4);
+
+            ZMin = 0;
+            ZMax = slicerFile.PrintHeight;
+        }
+
+        public override string ToString()
+        {
+            return
+                $"{nameof(Magic)}: {Magic}, {nameof(Software)}: {Software}, {nameof(BinaryType)}: {BinaryType}, {nameof(Version)}: {Version}, {nameof(SliceType)}: {SliceType}, {nameof(ModelUnit)}: {ModelUnit}, {nameof(PointRatio)}: {PointRatio}, {nameof(LayerCount)}: {LayerCount}, {nameof(XMin)}: {XMin}, {nameof(YMin)}: {YMin}, {nameof(ZMin)}: {ZMin}, {nameof(XMax)}: {XMax}, {nameof(YMax)}: {YMax}, {nameof(ZMax)}: {ZMax}, {nameof(ModelStats)}: {ModelStats}, {nameof(Padding)}: {Padding}, {nameof(Separator)}: {Separator}, {nameof(LayerDefCount)}: {LayerDefCount}, {nameof(LayersDef)}: {LayersDef}, {nameof(EndMarker)}: {EndMarker}";
+        }
+    }
     #endregion
 
     #region Constants
@@ -295,6 +412,7 @@ public void Update()
     public PrintInfoManifest PrintInfoSettings { get; set; } = new ();
     public LayersControllerManifest LayersSettings { get; set; } = new ();
     public SoftwareInfoManifest SoftwareInfoSettings { get; set; } = new ();
+    public SceneManifest SceneSettings { get; set; } = new ();
 
     public override FileFormatType FileType => FileFormatType.Archive;
 
@@ -330,10 +448,24 @@ public override PrintParameterModifier[] PrintParameterModifiers
     public override string ConvertMenuGroup => "Anycubic Photon Workshop";
 
     public override FileExtension[] FileExtensions { get; } = {
-        new(typeof(PWSZFile), "pm7", "Photon Mono M7 (PM7)"),
-        new(typeof(PWSZFile), "pwsz", "Photon Mono M7 Pro (PWSZ)")
+        new(typeof(AnycubicZipFile), "pm7", "Photon Mono M7 (PM7)"),
+        new(typeof(AnycubicZipFile), "pwsz", "Photon Mono M7 Pro (PWSZ)")
     };
 
+    /*public override uint[] AvailableVersions { get; } = { 1 };
+
+    public override uint DefaultVersion => 1;
+
+    public override uint Version
+    {
+        get => SceneSettings.Version;
+        set
+        {
+            base.Version = value;
+            SceneSettings.Version = base.Version;
+        }
+    }*/
+
     public override uint ResolutionX
     {
         get => Settings.MachineType.ResolutionX;
@@ -364,6 +496,12 @@ public override float MachineZ
         set => base.MachineZ = Settings.MachineType.MachineZ = value;
     }
 
+    public override uint LayerCount
+    {
+        get => base.LayerCount;
+        set => base.LayerCount = SceneSettings.LayerCount = SceneSettings.LayerDefCount = base.LayerCount;
+    }
+
     public override string MachineName
     {
         get => Settings.MachineType.Name;
@@ -382,18 +520,94 @@ public override string MachineName
 
 
     public override object[] Configs => new object[] { 
-        Settings, PrintInfoSettings, SoftwareInfoSettings
+        Settings, PrintInfoSettings, SoftwareInfoSettings, SceneSettings
     };
 
     #endregion
 
     #region Constructor
-    public PWSZFile()
+    public AnycubicZipFile()
     { }
     #endregion
 
     #region Methods
 
+    // PW0
+    private Mat DecodeLayerRle(byte[] encodedRle)
+    {
+        var mat = CreateMat();
+        var imageLength = mat.GetLength();
+
+        int pixelPos = 0;
+        for (int i = 0; i < encodedRle.Length; i++)
+        {
+            byte b = encodedRle[i];
+            int code = b >> 4;
+            int repeat = b & 0xf;
+            byte color;
+            switch (code)
+            {
+                case 0x0:
+                    color = 0;
+                    i++;
+                    //reps = reps * 256 + EncodedRle[i];
+                    if (i >= encodedRle.Length)
+                    {
+                        repeat = imageLength - pixelPos;
+                        break;
+                    }
+
+                    repeat = (repeat << 8) + encodedRle[i];
+                    break;
+                case 0xf:
+                    color = 255;
+                    i++;
+                    //reps = reps * 256 + EncodedRle[i];
+                    if (i >= encodedRle.Length)
+                    {
+                        repeat = imageLength - pixelPos;
+                        break;
+                    }
+
+                    repeat = (repeat << 8) + encodedRle[i];
+                    break;
+                default:
+                    color = (byte)((code << 4) | code);
+                    if (i >= encodedRle.Length)
+                    {
+                        repeat = imageLength - pixelPos;
+                    }
+                    break;
+            }
+
+            //color &= 0xff;
+
+            if (pixelPos + repeat > imageLength)
+            {
+                mat.Dispose();
+                throw new FileLoadException($"Image ran off the end: {pixelPos} + {repeat} = {pixelPos + repeat}, expecting: {imageLength}");
+            }
+
+            // We only need to set the non-zero pixels
+            mat.FillSpan(ref pixelPos, repeat, color);
+
+
+            if (pixelPos == imageLength)
+            {
+                //i++;
+                break;
+            }
+        }
+
+        if (pixelPos > 0 && pixelPos != imageLength)
+        {
+            mat.Dispose();
+            throw new FileLoadException($"Image ended short: {pixelPos}, expecting: {imageLength}");
+        }
+
+        return mat;
+    }
+
     protected override void OnBeforeEncode(bool isPartialEncode)
     {
         Settings.MachineType.PixelWidthMicrons = PixelWidthMicrons;
@@ -439,6 +653,8 @@ protected override void OnBeforeEncode(bool isPartialEncode)
 
             minHeight += relativeZ;
         }
+
+        SceneSettings.Update(this);
     }
 
     protected override void EncodeInternally(OperationProgress progress)
@@ -446,12 +662,54 @@ protected override void EncodeInternally(OperationProgress progress)
         using var outputFile = ZipFile.Open(TemporaryOutputFileFullPath, ZipArchiveMode.Create);
 
         EncodeAllThumbnailsInZip(outputFile, "preview_images/preview_{0}.png", progress);
-        //EncodeLayersInZip(outputFile, IndexStartNumber.One, progress);
-
+        
         outputFile.CreateEntryFromSerializeJson(SettingsFileName, Settings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent);
         outputFile.CreateEntryFromSerializeJson(PrintInfoFileName, PrintInfoSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent);
         outputFile.CreateEntryFromSerializeJson(LayersFileName, LayersSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent);
         outputFile.CreateEntryFromSerializeJson(SoftwareInfoFileName, SoftwareInfoSettings, ZipArchiveMode.Create, JsonExtensions.SettingsIndent);
+
+        SceneSettings.LayersDef = new SceneLayerDef[LayerCount];
+        var pixelArea = PixelArea;
+
+        progress.Reset(OperationProgress.StatusEncodeLayers, LayerCount);
+        foreach (var batch in BatchLayersIndexes())
+        {
+            Parallel.ForEach(batch, CoreSettings.GetParallelOptions(progress), layerIndex =>
+            {
+                progress.PauseIfRequested();
+
+                var layer = this[layerIndex];
+                using var mat = layer.LayerMatModelBoundingRectangle;
+
+                var rect = layer.BoundingRectangleMillimeters;
+                rect.Offset(DisplayWidth / -2f, DisplayHeight / -2f);
+
+                using var contours = new EmguContours(mat.RoiMat, RetrType.External);
+
+                SceneSettings.LayersDef[layerIndex] = new SceneLayerDef
+                {
+                    Height = this[layerIndex].PositionZ,
+                    Area = layer.GetArea(),
+                    XMin = (float)Math.Round(rect.X, 4),
+                    YMin = (float)Math.Round(rect.Y, 4),
+                    XMax = (float)Math.Round(rect.Right, 4),
+                    YMax = (float)Math.Round(rect.Bottom, 4),
+                    ContourCount = (uint)contours.ExternalContoursCount,
+                    MaxContourArea = (float)Math.Round(contours.MaxSolidArea * pixelArea, 4)
+                };
+
+                progress.LockAndIncrement();
+            });
+
+            foreach (var layerIndex in batch)
+            {
+                progress.PauseOrCancelIfRequested();
+            }
+        }
+
+        using var memoryStream = new MemoryStream();
+        Helpers.Serializer.Serialize(memoryStream, SceneSettings);
+        outputFile.CreateEntryFromContent(SceneFileName, memoryStream, ZipArchiveMode.Create);
     }
 
     protected override void DecodeInternally(OperationProgress progress)
@@ -527,9 +785,25 @@ protected override void DecodeInternally(OperationProgress progress)
             }
         }
 
+        entry = inputFile.GetEntry(SceneFileName);
+        if (entry is not null)
+        {
+            try
+            {
+                using var stream = entry.Open();
+                SceneSettings = Helpers.Deserialize<SceneManifest>(stream);
+            }
+            catch (Exception e)
+            {
+                Clear();
+                throw new FileLoadException($"Unable to deserialize '{entry.Name}'\n{e}", FileFullPath);
+            }
+        }
+
         DecodeAllThumbnailsFromZip(inputFile, progress, "preview_");
 
         Init((uint)LayersSettings.Count);
+        progress.Reset(OperationProgress.StatusDecodeLayers, LayerCount);
 
         float positionZ = 0;
         for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
@@ -544,7 +818,30 @@ protected override void DecodeInternally(OperationProgress progress)
                 LiftSpeed = SpeedConverter.Convert(LayersSettings.Layers[layerIndex].LiftSpeed, FormatSpeedUnit, CoreSpeedUnit)
             };
         }
-        //DecodeLayersFromZip(inputFile, IndexStartNumber.One, progress);
+
+        if (DecodeType == FileDecodeType.Full)
+        {
+            Parallel.For(0, LayerCount, CoreSettings.GetParallelOptions(progress), layerIndex =>
+            {
+                progress.PauseIfRequested();
+                byte[] encodedRle;
+                lock (Mutex)
+                {
+                    entry = inputFile.GetEntry($"layer_images/layer_{layerIndex}.pwszImg");
+                    if (entry is null)
+                    {
+                        Clear();
+                        throw new FileLoadException($"Layer image {layerIndex} is missing in the file.", FileFullPath);
+                    }
+
+                    using var stream = entry.Open();
+                    encodedRle = stream.ToArray();
+                }
+
+                this[layerIndex].LayerMat = DecodeLayerRle(encodedRle);
+                progress.LockAndIncrement();
+            });
+        }
 
         UpdateGlobalPropertiesFromLayers();
     }
diff --git a/UVtools.Core/FileFormats/CTBEncryptedFile.cs b/UVtools.Core/FileFormats/CTBEncryptedFile.cs
index 69b47986..2a3765c7 100644
--- a/UVtools.Core/FileFormats/CTBEncryptedFile.cs
+++ b/UVtools.Core/FileFormats/CTBEncryptedFile.cs
@@ -1028,7 +1028,7 @@ public override float MaterialMilliliters
     public override string? MaterialName
     {
         get => ResinParametersSettings.ResinName;
-        set => base.MaterialName = ResinParametersSettings.ResinName = value!;
+        set => base.MaterialName = ResinParametersSettings.ResinName = value ?? string.Empty;
     }
 
     public override float MaterialGrams
diff --git a/UVtools.Core/FileFormats/ChituboxFile.cs b/UVtools.Core/FileFormats/ChituboxFile.cs
index 738cc680..9a6269c0 100644
--- a/UVtools.Core/FileFormats/ChituboxFile.cs
+++ b/UVtools.Core/FileFormats/ChituboxFile.cs
@@ -1620,7 +1620,7 @@ public override float MaterialMilliliters
     public override string? MaterialName
     {
         get => ResinParametersSettings.ResinName;
-        set => base.MaterialName = ResinParametersSettings.ResinName = value!;
+        set => base.MaterialName = ResinParametersSettings.ResinName = value ?? string.Empty;
     }
 
     public override float MaterialGrams
@@ -1716,28 +1716,33 @@ private void SanitizeMagicVersion()
             if (FileEndsWith(".v2.ctb"))
             {
                 HeaderSettings.Magic = MAGIC_CTB;
-                HeaderSettings.Version = 2;
+                Version = 2;
             }
             else if (FileEndsWith(".v3.ctb"))
             {
                 HeaderSettings.Magic = MAGIC_CTB;
-                HeaderSettings.Version = 3;
+                Version = 3;
             }
             else if (FileEndsWith(".v4.ctb"))
             {
                 HeaderSettings.Magic = MAGIC_CTBv4;
-                HeaderSettings.Version = 4;
+                Version = 4;
+            }
+            else if (FileEndsWith(".v5.ctb"))
+            {
+                HeaderSettings.Magic = MAGIC_CTBv4;
+                Version = 5;
             }
             else if (FileEndsWith(".gktwo.ctb"))
             {
                 HeaderSettings.Magic = MAGIC_CTBv4_GKtwo;
-                HeaderSettings.Version = 4;
+                Version = 4;
             }
         }
         else if (FileEndsWith(".cbddlp") || FileEndsWith(".photon"))
         {
             HeaderSettings.Magic = MAGIC_CBDDLP;
-            if (HeaderSettings.Version > 2) HeaderSettings.Version = 2;
+            if (Version > 2) Version = 2;
         }
     }
 
@@ -1786,7 +1791,7 @@ protected override void EncodeInternally(OperationProgress progress)
         }
         else // IsCbddlp
         {
-            //HeaderSettings.Version = 2;
+            //Version = 2;
             HeaderSettings.EncryptionKey = 0; // Force disable encryption
             HeaderSettings.SlicerOffset = 0;  // Force remove SlicerInfo for cbddlp
             HeaderSettings.SlicerSize = 0;
diff --git a/UVtools.Core/FileFormats/CXDLPFile.cs b/UVtools.Core/FileFormats/CrealityCXDLPFile.cs
similarity index 99%
rename from UVtools.Core/FileFormats/CXDLPFile.cs
rename to UVtools.Core/FileFormats/CrealityCXDLPFile.cs
index 3229c766..7041bf28 100644
--- a/UVtools.Core/FileFormats/CXDLPFile.cs
+++ b/UVtools.Core/FileFormats/CrealityCXDLPFile.cs
@@ -29,7 +29,7 @@
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class CXDLPFile : FileFormat
+public sealed class CrealityCXDLPFile : FileFormat
 {
     #region Constants
 
@@ -391,10 +391,10 @@ public override string ToString()
 
     public override FileFormatType FileType => FileFormatType.Binary;
 
-    public override string ConvertMenuGroup => "CXDLP";
+    public override string ConvertMenuGroup => "Creality CXDLP";
 
     public override FileExtension[] FileExtensions { get; } = {
-        new(typeof(CXDLPFile), "cxdlp", "Creality CXDLP"),
+        new(typeof(CrealityCXDLPFile), "cxdlp", "Creality CXDLP"),
     };
 
     public override SpeedUnit FormatSpeedUnit => SpeedUnit.MillimetersPerSecond;
diff --git a/UVtools.Core/FileFormats/CXDLPv1File.cs b/UVtools.Core/FileFormats/CrealityCXDLPv1File.cs
similarity index 99%
rename from UVtools.Core/FileFormats/CXDLPv1File.cs
rename to UVtools.Core/FileFormats/CrealityCXDLPv1File.cs
index 5bcbdea8..e7096178 100644
--- a/UVtools.Core/FileFormats/CXDLPv1File.cs
+++ b/UVtools.Core/FileFormats/CrealityCXDLPv1File.cs
@@ -22,7 +22,7 @@
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class CXDLPv1File : FileFormat
+public sealed class CrealityCXDLPv1File : FileFormat
 {
     #region Constants
     private const byte HEADER_SIZE = 9; // CXSW3DV2
@@ -311,10 +311,10 @@ public void Validate()
 
     public override FileFormatType FileType => FileFormatType.Binary;
 
-    public override string ConvertMenuGroup => "CXDLP";
+    public override string ConvertMenuGroup => "Creality CXDLP";
 
     public override FileExtension[] FileExtensions { get; } = {
-        new(typeof(CXDLPv1File), "v1.cxdlp", "Creality CXDLPv1"),
+        new(typeof(CrealityCXDLPv1File), "v1.cxdlp", "Creality CXDLPv1"),
     };
 
     public override PrintParameterModifier[] PrintParameterModifiers { get; } =
diff --git a/UVtools.Core/FileFormats/CXDLPv4File.cs b/UVtools.Core/FileFormats/CrealityCXDLPv4File.cs
similarity index 99%
rename from UVtools.Core/FileFormats/CXDLPv4File.cs
rename to UVtools.Core/FileFormats/CrealityCXDLPv4File.cs
index fc01b3d5..eff2a86c 100644
--- a/UVtools.Core/FileFormats/CXDLPv4File.cs
+++ b/UVtools.Core/FileFormats/CrealityCXDLPv4File.cs
@@ -25,7 +25,7 @@
 
 namespace UVtools.Core.FileFormats;
 
-public sealed class CXDLPv4File : FileFormat
+public sealed class CrealityCXDLPv4File : FileFormat
 {
 
     #region Constants
@@ -477,7 +477,7 @@ public void CopyTo(Layer layer)
             layer.WaitTimeAfterLift = RestTimeAfterLift;
         }
 
-        public Mat Decode(CXDLPv4File parent, LayerDef layerDef, uint layerIndex)
+        public Mat Decode(CrealityCXDLPv4File parent, LayerDef layerDef, uint layerIndex)
         {
             if (layerDef.DataType > 0)
             {
@@ -556,7 +556,7 @@ public Mat Decode(CXDLPv4File parent, LayerDef layerDef, uint layerIndex)
             return mat;
         }
 
-        public unsafe byte[] Encode(CXDLPv4File parent, Mat image, uint layerIndex)
+        public unsafe byte[] Encode(CrealityCXDLPv4File parent, Mat image, uint layerIndex)
         {
             List<byte> rawData = new();
             byte color = byte.MaxValue >> 1;
@@ -662,10 +662,10 @@ public override string ToString()
 
     public override FileFormatType FileType => FileFormatType.Binary;
 
-    public override string ConvertMenuGroup => "CXDLP";
+    public override string ConvertMenuGroup => "Creality CXDLP";
 
     public override FileExtension[] FileExtensions { get; } = {
-        new(typeof(CXDLPv4File), "cxdlpv4", "Creality CXDLPv4"),
+        new(typeof(CrealityCXDLPv4File), "cxdlpv4", "Creality CXDLPv4"),
     };
 
     public override PrintParameterModifier[] PrintParameterModifiers =>
@@ -1068,7 +1068,7 @@ public override string MachineName
     #endregion
 
     #region Constructors
-    public CXDLPv4File()
+    public CrealityCXDLPv4File()
     {
         Previews = new Preview[ThumbnailCountFileShouldHave];
     }
diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs
index 8c3b4bb6..a312542e 100644
--- a/UVtools.Core/FileFormats/FileFormat.cs
+++ b/UVtools.Core/FileFormats/FileFormat.cs
@@ -483,11 +483,11 @@ public PrintParameterModifier Clone()
         new ChituboxZipFile(), // Zip
         new ChituboxFile(), // cbddlp, cbt, photon
         new CTBEncryptedFile(), // encrypted ctb
-        new PhotonSFile(), // photons
+        new AnycubicPhotonSFile(), // photons
         new PHZFile(), // phz
-        new PhotonWorkshopFile(), // PSW
+        new AnycubicFile(), // PSW
 #if DEBUG
-        new PWSZFile(), // PWSZ
+        new AnycubicZipFile(), // PWSZ
 #endif
         new CWSFile(), // CWS
         new AnetFile(), // Anet N4, N7
@@ -495,8 +495,8 @@ public PrintParameterModifier Clone()
         new VDAFile(), // VDA
         new VDTFile(), // VDT
         //new CXDLPv1File(),   // Creality Box v1
-        new CXDLPFile(), // Creality Box
-        new CXDLPv4File(), // Creality Box
+        new CrealityCXDLPFile(), // Creality Box
+        new CrealityCXDLPv4File(), // Creality Box
         new NanoDLPFile(), // NanoDLP
         new KlipperFile(), // Klipper
 
@@ -4457,18 +4457,8 @@ public void Encode(string? fileFullPath, OperationProgress? progress = null)
         var tempFile = TemporaryOutputFileFullPath;
         if (File.Exists(tempFile)) File.Delete(tempFile);
 
-        // Sanitize Version
-        if (AvailableVersionsCount > 0)
-        {
-            var possibleVersions = GetAvailableVersionsForExtension(FileExtension);
-            if (possibleVersions.Length > 0)
-            {
-                if (!possibleVersions.Contains(Version)) // Version not found on possible versions, set to last
-                {
-                    Version = possibleVersions[^1];
-                }
-            }
-        }
+        // Sanitize Version after file name is set
+        SanitizeVersion();
 
         // Make sure thumbnails are all set, otherwise clone/create them
         SanitizeThumbnails(FileType != FileFormatType.Archive);
@@ -6279,11 +6269,13 @@ public void SaveAs(string? filePath = null, OperationProgress? progress = null)
         if (!convertSlicerFile.OnBeforeConvertFrom(this)) return null;
         if (!OnBeforeConvertTo(convertSlicerFile)) return null;
 
-        if (version > 0 && version != DefaultVersion)
+        if (version > 0 && version != convertSlicerFile.Version)
         {
             convertSlicerFile.Version = version;
         }
 
+        convertSlicerFile.SanitizeVersion();
+
         convertSlicerFile.SuppressRebuildPropertiesWork(() =>
         {
             convertSlicerFile.Init(CloneLayers());
@@ -7420,6 +7412,29 @@ public bool Sanitize()
         return appliedCorrections;
     }
 
+    /// <summary>
+    /// Sanitize version and return true if a correction has been applied
+    /// </summary>
+    /// <returns>True if one or more corrections has been applied, otherwise false</returns>
+    public bool SanitizeVersion()
+    {
+        // Sanitize Version
+        if (AvailableVersionsCount > 0)
+        {
+            var possibleVersions = GetAvailableVersionsForExtension(FileExtension);
+            if (possibleVersions.Length > 0)
+            {
+                if (!possibleVersions.Contains(Version)) // Version not found on possible versions, set to last
+                {
+                    Version = possibleVersions[^1];
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     /// <summary>
     /// Rebuild layer properties based on slice settings
     /// </summary>
diff --git a/UVtools.Core/FileFormats/KlipperFile.cs b/UVtools.Core/FileFormats/KlipperFile.cs
index 2398541a..55945daf 100644
--- a/UVtools.Core/FileFormats/KlipperFile.cs
+++ b/UVtools.Core/FileFormats/KlipperFile.cs
@@ -489,7 +489,7 @@ public override float MaterialCost
     public override string? MaterialName
     {
         get => HeaderSettings.MaterialName;
-        set => base.MaterialName = HeaderSettings.MaterialName = value;
+        set => base.MaterialName = HeaderSettings.MaterialName = value ?? string.Empty;
     }
 
     public override string MachineName
diff --git a/UVtools.Core/FileFormats/VDTFile.cs b/UVtools.Core/FileFormats/VDTFile.cs
index df42956c..38da7266 100644
--- a/UVtools.Core/FileFormats/VDTFile.cs
+++ b/UVtools.Core/FileFormats/VDTFile.cs
@@ -612,6 +612,8 @@ protected override bool OnBeforeConvertTo(FileFormat output)
             output.Version = (uint)fileVersion;
         }
 
+        output.LayerImageFormat = LookupCustomValue(SL1File.Keyword_LayerImageFormat, output.LayerImageFormat);
+
         return true;
     }
 
diff --git a/UVtools.Core/UVtools.Core.csproj b/UVtools.Core/UVtools.Core.csproj
index 0b1de9a8..362bcd5e 100644
--- a/UVtools.Core/UVtools.Core.csproj
+++ b/UVtools.Core/UVtools.Core.csproj
@@ -22,8 +22,8 @@
 	<ItemGroup>
 		<PackageReference Include="AnimatedGif" Version="1.0.5" />
 		<PackageReference Include="BinarySerializer" Version="8.6.4.1" />
-		<PackageReference Include="CommunityToolkit.Diagnostics" Version="8.3.1" />
-		<PackageReference Include="CommunityToolkit.HighPerformance" Version="8.3.1" />
+		<PackageReference Include="CommunityToolkit.Diagnostics" Version="8.3.2" />
+		<PackageReference Include="CommunityToolkit.HighPerformance" Version="8.3.2" />
 		<PackageReference Include="Emgu.CV" Version="4.9.0.5494" />
 		<PackageReference Include="Emgu.CV.runtime.mini.macos" Version="4.9.0.5494" />
 		<PackageReference Include="Emgu.CV.runtime.mini.ubuntu-x64" Version="4.9.0.5494" />
diff --git a/UVtools.UI/UserSettings.cs b/UVtools.UI/UserSettings.cs
index 92e093f8..ec79ba5f 100644
--- a/UVtools.UI/UserSettings.cs
+++ b/UVtools.UI/UserSettings.cs
@@ -1994,7 +1994,7 @@ public static void Load()
                                     };
                                     foreach (var slicerFile in FileFormat.AvailableFormats)
                                     {
-                                        if (slicerFile is not PhotonWorkshopFile) continue;
+                                        if (slicerFile is not AnycubicFile) continue;
                                         application.CompatibleExtensions += slicerFile.GetFileExtensions(string.Empty, ";");
                                     }
 
diff --git a/documentation/UVtools.Core.xml b/documentation/UVtools.Core.xml
index 8f92f340..103ef319 100644
--- a/documentation/UVtools.Core.xml
+++ b/documentation/UVtools.Core.xml
@@ -2345,6 +2345,277 @@
             White pixels region (border including corner pixels)
             </summary>
         </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.Mark">
+            <summary>
+            Gets the file mark placeholder
+            Fixed to "ANYCUBIC"
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.Version">
+            <summary>
+            Gets the file format version
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.NumberOfTables">
+            <summary>
+            Gets the area num
+            4 for v1, 5 for v515, 8 for v516?
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.HeaderAddress">
+            <summary>
+            Gets the header start address
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.SoftwareAddress">
+            <summary>
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.PreviewAddress">
+            <summary>
+            Gets the preview start offset
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.LayerImageColorTableAddress">
+            <summary>
+            Spotted on version 515 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.LayerDefinitionAddress">
+            <summary>
+            Gets the layer definition start address
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.ExtraAddress">
+            <summary>
+            Spotted on version 516 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.MachineAddress">
+            <summary>
+            Spotted on version 516 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.LayerImageAddress">
+            <summary>
+            Gets layer image start address
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.ModelAddress">
+            <summary>
+            Spotted on version 517 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.SubLayerDefinitionAddress">
+            <summary>
+            Spotted on version 518 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.FileMark.Preview2Address">
+            <summary>
+            Spotted on version 518 only
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.IncludeBaseTableLength">
+            <summary>
+            Gets or sets whatever to include the base table length into <see cref="P:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.TableLength"/>
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.DefaultTableName">
+            <summary>
+            Name of this table
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.TableName">
+            <summary>
+            Gets the section name placeholder
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.TableLength">
+            <summary>
+            Gets the length of this section
+            </summary>
+        </member>
+        <member name="M:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.GetWholeTableLength">
+            <summary>
+            Gets the absolute size of the table including base and derived
+            </summary>
+        </member>
+        <member name="M:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.GetDerivedTableLength">
+            <summary>
+            Gets the absolute size of the derived table
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.GetFinalTableLength">
+            <summary>
+            Gets the absolute size to set in this table
+            </summary>
+            <returns></returns>
+        </member>
+        <member name="M:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.Validate(System.Boolean,System.Int32)">
+            <summary>
+            Validates this table
+            </summary>
+            <param name="validateName">True to validate the name, otherwise false</param>
+            <param name="lengthOffset">Offset to length</param>
+            <exception cref="T:System.IO.FileLoadException"></exception>
+        </member>
+        <member name="M:UVtools.Core.FileFormats.AnycubicFile.AnycubicNamedTable.ValidateExpecting(System.Int32,System.Boolean)">
+            <summary>
+            Validates this table
+            </summary>
+            <param name="length">Length to expect</param>
+            <param name="validateName">True to validate the name, otherwise false</param>
+            <exception cref="T:System.IO.FileLoadException"></exception>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.LayerHeight">
+            <summary>
+            Layer height in mm
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.LiftSpeed">
+            <summary>
+            Gets the lift speed in mm/s
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.RetractSpeed">
+            <summary>
+            Gets the retract speed in mm/s
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.PriceCurrencySymbol">
+            <summary>
+            24 00 00 00 $ or ¥ C2 A5 00 00 or € = E2 82 AC 00
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.PerLayerOverride">
+            <summary>
+            80
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.TransitionLayerCount">
+            <summary>
+            spotted on 516
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.TransitionLayerType">
+            <summary>
+            spotted on 516
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.AdvancedMode">
+            <summary>
+            0 = Basic mode | 1 = Advanced mode which allows TSMC
+            v516
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.Grey">
+            <summary>
+            v517
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.BlurLevel">
+            <summary>
+            v517
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.ResinType">
+            <summary>
+            v517
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Header.IntelligentMode">
+            <summary>
+            When true, normal exposure time will be auto set, use false for traditional way
+            v518
+            </summary>
+        </member>
+        <member name="T:UVtools.Core.FileFormats.AnycubicFile.Preview">
+            <summary>
+            The files contain two preview images.
+            These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview.ResolutionX">
+            <summary>
+            Gets the image width, in pixels.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview.Mark">
+            <summary>
+            Gets the operation mark 'x'
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview.ResolutionY">
+            <summary>
+            Gets the image height, in pixels.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview2.ResolutionX">
+            <summary>
+            Gets the image width, in pixels.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview2.BackgroundColor1">
+            <summary>
+            Gets the operation mark 'x'
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.Preview2.ResolutionY">
+            <summary>
+            Gets the image height, in pixels.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.LayerDef.DataAddress">
+            <summary>
+            Gets the layer image offset to encoded layer data, and its length in bytes.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.LayerDef.DataLength">
+            <summary>
+            Gets the layer image length in bytes.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.LayerDef.ExposureTime">
+            <summary>
+            Gets the exposure time for this layer, in seconds.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.LayerDef.LayerHeight">
+            <summary>
+            Gets the layer height for this layer, measured in millimeters.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.SubLayerDef.DataAddress">
+            <summary>
+            Gets the layer image offset to encoded layer data, and its length in bytes.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicFile.SubLayerDef.DataLength">
+            <summary>
+            Gets the layer image length in bytes.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicZipFile.SceneManifest.BinaryType">
+            <summary>
+            1: Pure Binary<br/>
+            2: FPGA Debug<br/>
+            3: FPGA Release. Firmware set to 3 (Default)
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicZipFile.SceneManifest.ModelUnit">
+            <summary>
+            0: mm<br/>
+            1: cm<br/>
+            2: m
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.AnycubicZipFile.SceneManifest.ModelStats">
+            <summary>
+            Some status flags of the scene model
+            </summary>
+        </member>
         <member name="P:UVtools.Core.FileFormats.ChituboxFile.Header.Magic">
             <summary>
             Gets a magic number identifying the file type.
@@ -2648,372 +2919,372 @@
             Gets the total size of ctbImageInfo and Image data
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.ChecksumValue">
-            <summary>
-            Checksum of unix timestamp
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.AntiAliasFlag">
-            <summary>
-            7(0x7) [No AA] / 15(0x0F) [AA]
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.PerLayerSettings">
-            <summary>
-            Not totally understood. 0 to not support, 0x40 to 0x50 to allow per layer parameters
-            </summary>
-        </member>
-        <member name="T:UVtools.Core.FileFormats.CTBEncryptedFile.Preview">
-            <summary>
-            The files contain two preview images.
-            These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ResolutionX">
-            <summary>
-            Gets the X dimension of the preview image, in pixels. 
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ResolutionY">
-            <summary>
-            Gets the Y dimension of the preview image, in pixels. 
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ImageOffset">
-            <summary>
-            Gets the image offset of the encoded data blob.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ImageLength">
-            <summary>
-            Gets the image length in bytes.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.MagicSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.MagicSize">
             <summary>
             Gets the size of the magic
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.Magic">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.Magic">
             <summary>
             Gets the magic name
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.PrinterModel">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.PrinterModel">
             <summary>
             Gets the printer model
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.LayerCount">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.LayerCount">
             <summary>
             Gets the number of records in the layer table
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.ResolutionX">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.ResolutionX">
             <summary>
             Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Header.ResolutionY">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Header.ResolutionY">
             <summary>
             Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Footer.FooterSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Footer.FooterSize">
             <summary>
             Gets the size of the header
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPFile.Footer.FooterValue">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPFile.Footer.FooterValue">
             <summary>
             Gets the header name
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Header.HeaderSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Header.HeaderSize">
             <summary>
             Gets the size of the header
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Header.HeaderValue">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Header.HeaderValue">
             <summary>
             Gets the header name
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Header.LayerCount">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Header.LayerCount">
             <summary>
             Gets the number of records in the layer table
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Header.ResolutionX">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Header.ResolutionX">
             <summary>
             Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Header.ResolutionY">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Header.ResolutionY">
             <summary>
             Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Footer.FooterSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Footer.FooterSize">
             <summary>
             Gets the size of the header
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv1File.Footer.FooterValue">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv1File.Footer.FooterValue">
             <summary>
             Gets the header name
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.MagicSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.MagicSize">
             <summary>
             Gets the size of the magic
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.Magic">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.Magic">
             <summary>
             Gets the magic name
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PrinterModel">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PrinterModel">
             <summary>
             Gets the printer model
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.ResolutionX">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.ResolutionX">
             <summary>
             Gets the printer resolution along X axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.ResolutionY">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.ResolutionY">
             <summary>
             Gets the printer resolution along Y axis, in pixels. This information is critical to correctly decoding layer images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.BedSizeX">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.BedSizeX">
             <summary>
             Gets dimensions of the printer’s X output volume, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.BedSizeY">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.BedSizeY">
             <summary>
             Gets dimensions of the printer’s Y output volume, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.BedSizeZ">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.BedSizeZ">
             <summary>
             Gets dimensions of the printer’s Z output volume, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PrintHeight">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PrintHeight">
             <summary>
             Gets the height of the model described by this file, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.LayerHeight">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.LayerHeight">
             <summary>
             Gets the layer height setting used at slicing, in millimeters. Actual height used by the machine is in the layer table.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.BottomLayersCount">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.BottomLayersCount">
             <summary>
             Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig..
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PreviewSmallOffsetAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PreviewSmallOffsetAddress">
             <summary>
             Gets the file offsets of ImageHeader records describing the smaller preview images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.LayersDefinitionOffsetAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.LayersDefinitionOffsetAddress">
             <summary>
             Gets the file offset of a table of LayerHeader records giving parameters for each printed layer.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.LayerCount">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.LayerCount">
             <summary>
             Gets the number of records in the layer table for the first level set. In ctb files, that’s equivalent to the total number of records, but records may be multiplied in antialiased cbddlp files.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PreviewLargeOffsetAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PreviewLargeOffsetAddress">
             <summary>
             Gets the file offsets of ImageHeader records describing the larger preview images.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PrintTime">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PrintTime">
             <summary>
             Gets the estimated duration of print, in seconds.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.ProjectorType">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.ProjectorType">
             <summary>
             Gets the records whether this file was generated assuming normal (0) or mirrored (1) image projection. LCD printers are "mirrored" for this purpose.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PrintParametersOffsetAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PrintParametersOffsetAddress">
             <summary>
             Gets the print parameters table offset
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.PrintParametersSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.PrintParametersSize">
             <summary>
             Gets the print parameters table size in bytes.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.LightPWM">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.LightPWM">
             <summary>
             Gets the PWM duty cycle for the UV illumination source on normal levels, respectively.
             This appears to be an 8-bit quantity where 0xFF is fully on and 0x00 is fully off.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.BottomLightPWM">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.BottomLightPWM">
             <summary>
             Gets the PWM duty cycle for the UV illumination source on bottom levels, respectively.
             This appears to be an 8-bit quantity where 0xFF is fully on and 0x00 is fully off.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.EncryptionKey">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.EncryptionKey">
             <summary>
             Gets the key used to encrypt layer data, or 0 if encryption is not used.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.SlicerAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.SlicerAddress">
             <summary>
             Gets the slicer tablet address 
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Header.SlicerSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Header.SlicerSize">
             <summary>
             Gets the slicer table size in bytes
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.BottomLiftHeight">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.BottomLiftHeight">
             <summary>
             Gets the distance to lift the build platform away from the vat after bottom layers, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.BottomLiftSpeed">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.BottomLiftSpeed">
             <summary>
             Gets the speed at which to lift the build platform away from the vat after bottom layers, in millimeters per minute.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.LiftHeight">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.LiftHeight">
             <summary>
             Gets the distance to lift the build platform away from the vat after normal layers, in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.LiftSpeed">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.LiftSpeed">
             <summary>
             Gets the speed at which to lift the build platform away from the vat after normal layers, in millimeters per minute.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.RetractSpeed">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.RetractSpeed">
             <summary>
             Gets the speed to use when the build platform re-approaches the vat after lift, in millimeters per minute.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.VolumeMl">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.VolumeMl">
             <summary>
             Gets the estimated required resin, measured in milliliters. The volume number is derived from the model.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.WeightG">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.WeightG">
             <summary>
             Gets the estimated grams, derived from volume using configured factors for density.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.CostDollars">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.CostDollars">
             <summary>
             Gets the estimated cost based on currency unit the user had configured. Derived from volume using configured factors for density and cost.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.BottomLightOffDelay">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.BottomLightOffDelay">
             <summary>
             Gets the light off time setting used at slicing, for bottom layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.LightOffDelay">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.LightOffDelay">
             <summary>
             Gets the light off time setting used at slicing, for normal layers, in seconds. Actual time used by the machine is in the layer table. Note that light_off_time_s appears in both the file header and ExtConfig.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.PrintParameters.BottomLayerCount">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.PrintParameters.BottomLayerCount">
             <summary>
             Gets number of layers configured as "bottom." Note that this field appears in both the file header and ExtConfig.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.SlicerInfo.PerLayerSettings">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.SlicerInfo.PerLayerSettings">
             <summary>
             Enable per layer settings, true or false
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.SlicerInfo.ModifiedTimestampMinutes">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.SlicerInfo.ModifiedTimestampMinutes">
             <summary>
             Gets the minutes since Jan 1, 1970 UTC
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.SlicerInfo.AntiAliasLevel">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.SlicerInfo.AntiAliasLevel">
             <summary>
             Gets the user-selected antialiasing level.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.SlicerInfo.SoftwareVersion">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.SlicerInfo.SoftwareVersion">
             <summary>
             Gets a version of software that generated this file, encoded with major, minor, and patch release in bytes starting from the MSB down.
             (No provision is made to name the software being used, so this assumes that only one software package can generate the files.
             Probably best to hardcode it at 0x01060300.)
             </summary>17170480
         </member>
-        <member name="T:UVtools.Core.FileFormats.CXDLPv4File.Preview">
+        <member name="T:UVtools.Core.FileFormats.CrealityCXDLPv4File.Preview">
             <summary>
             The files contain two preview images.
             These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Preview.ResolutionX">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Preview.ResolutionX">
             <summary>
             Gets the X dimension of the preview image, in pixels. 
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Preview.ResolutionY">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Preview.ResolutionY">
             <summary>
             Gets the Y dimension of the preview image, in pixels. 
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Preview.ImageOffset">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Preview.ImageOffset">
             <summary>
             Gets the image offset of the encoded data blob.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.Preview.ImageLength">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.Preview.ImageLength">
             <summary>
             Gets the image length in bytes.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.LayerDef.PositionZ">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.LayerDef.PositionZ">
             <summary>
             Gets the build platform Z position for this layer, measured in millimeters.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.LayerDef.ExposureTime">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.LayerDef.ExposureTime">
             <summary>
             Gets the exposure time for this layer, in seconds.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.LayerDef.LightOffSeconds">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.LayerDef.LightOffSeconds">
             <summary>
             Gets how long to keep the light off after exposing this layer, in seconds.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.LayerDef.DataAddress">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.LayerDef.DataAddress">
             <summary>
             Gets the layer image offset to encoded layer data, and its length in bytes.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.CXDLPv4File.LayerDef.DataSize">
+        <member name="P:UVtools.Core.FileFormats.CrealityCXDLPv4File.LayerDef.DataSize">
             <summary>
             Gets the layer image length in bytes.
             </summary>
         </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.ChecksumValue">
+            <summary>
+            Checksum of unix timestamp
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.AntiAliasFlag">
+            <summary>
+            7(0x7) [No AA] / 15(0x0F) [AA]
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.SlicerSettings.PerLayerSettings">
+            <summary>
+            Not totally understood. 0 to not support, 0x40 to 0x50 to allow per layer parameters
+            </summary>
+        </member>
+        <member name="T:UVtools.Core.FileFormats.CTBEncryptedFile.Preview">
+            <summary>
+            The files contain two preview images.
+            These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ResolutionX">
+            <summary>
+            Gets the X dimension of the preview image, in pixels. 
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ResolutionY">
+            <summary>
+            Gets the Y dimension of the preview image, in pixels. 
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ImageOffset">
+            <summary>
+            Gets the image offset of the encoded data blob.
+            </summary>
+        </member>
+        <member name="P:UVtools.Core.FileFormats.CTBEncryptedFile.Preview.ImageLength">
+            <summary>
+            Gets the image length in bytes.
+            </summary>
+        </member>
         <member name="P:UVtools.Core.FileFormats.FDGFile.Header.Magic">
             <summary>
             Gets a magic number identifying the file type.
@@ -5349,6 +5620,12 @@
             </summary>
             <returns>True if one or more corrections has been applied, otherwise false</returns>
         </member>
+        <member name="M:UVtools.Core.FileFormats.FileFormat.SanitizeVersion">
+            <summary>
+            Sanitize version and return true if a correction has been applied
+            </summary>
+            <returns>True if one or more corrections has been applied, otherwise false</returns>
+        </member>
         <member name="M:UVtools.Core.FileFormats.FileFormat.RebuildLayersProperties(System.Boolean,System.String)">
             <summary>
             Rebuild layer properties based on slice settings
@@ -5527,258 +5804,6 @@
             Gets the image length in bytes.
             </summary>
         </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.Mark">
-            <summary>
-            Gets the file mark placeholder
-            Fixed to "ANYCUBIC"
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.Version">
-            <summary>
-            Gets the file format version
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.NumberOfTables">
-            <summary>
-            Gets the area num
-            4 for v1, 5 for v515, 8 for v516?
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.HeaderAddress">
-            <summary>
-            Gets the header start address
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.SoftwareAddress">
-            <summary>
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.PreviewAddress">
-            <summary>
-            Gets the preview start offset
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.LayerImageColorTableAddress">
-            <summary>
-            Spotted on version 515 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.LayerDefinitionAddress">
-            <summary>
-            Gets the layer definition start address
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.ExtraAddress">
-            <summary>
-            Spotted on version 516 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.MachineAddress">
-            <summary>
-            Spotted on version 516 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.LayerImageAddress">
-            <summary>
-            Gets layer image start address
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.ModelAddress">
-            <summary>
-            Spotted on version 517 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.SubLayerDefinitionAddress">
-            <summary>
-            Spotted on version 518 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.FileMark.Preview2Address">
-            <summary>
-            Spotted on version 518 only
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.IncludeBaseTableLength">
-            <summary>
-            Gets or sets whatever to include the base table length into <see cref="P:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.TableLength"/>
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.DefaultTableName">
-            <summary>
-            Name of this table
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.TableName">
-            <summary>
-            Gets the section name placeholder
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.TableLength">
-            <summary>
-            Gets the length of this section
-            </summary>
-        </member>
-        <member name="M:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.GetWholeTableLength">
-            <summary>
-            Gets the absolute size of the table including base and derived
-            </summary>
-        </member>
-        <member name="M:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.GetDerivedTableLength">
-            <summary>
-            Gets the absolute size of the derived table
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.GetFinalTableLength">
-            <summary>
-            Gets the absolute size to set in this table
-            </summary>
-            <returns></returns>
-        </member>
-        <member name="M:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.Validate(System.Boolean,System.Int32)">
-            <summary>
-            Validates this table
-            </summary>
-            <param name="validateName">True to validate the name, otherwise false</param>
-            <param name="lengthOffset">Offset to length</param>
-            <exception cref="T:System.IO.FileLoadException"></exception>
-        </member>
-        <member name="M:UVtools.Core.FileFormats.PhotonWorkshopFile.AnycubicNamedTable.ValidateExpecting(System.Int32,System.Boolean)">
-            <summary>
-            Validates this table
-            </summary>
-            <param name="length">Length to expect</param>
-            <param name="validateName">True to validate the name, otherwise false</param>
-            <exception cref="T:System.IO.FileLoadException"></exception>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.LayerHeight">
-            <summary>
-            Layer height in mm
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.LiftSpeed">
-            <summary>
-            Gets the lift speed in mm/s
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.RetractSpeed">
-            <summary>
-            Gets the retract speed in mm/s
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.PriceCurrencySymbol">
-            <summary>
-            24 00 00 00 $ or ¥ C2 A5 00 00 or € = E2 82 AC 00
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.PerLayerOverride">
-            <summary>
-            80
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.TransitionLayerCount">
-            <summary>
-            spotted on 516
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.TransitionLayerType">
-            <summary>
-            spotted on 516
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.AdvancedMode">
-            <summary>
-            0 = Basic mode | 1 = Advanced mode which allows TSMC
-            v516
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.Grey">
-            <summary>
-            v517
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.BlurLevel">
-            <summary>
-            v517
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.ResinType">
-            <summary>
-            v517
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Header.IntelligentMode">
-            <summary>
-            When true, normal exposure time will be auto set, use false for traditional way
-            v518
-            </summary>
-        </member>
-        <member name="T:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview">
-            <summary>
-            The files contain two preview images.
-            These are shown on the printer display when choosing which file to print, sparing the poor printer from needing to render a 3D image from scratch.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview.ResolutionX">
-            <summary>
-            Gets the image width, in pixels.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview.Mark">
-            <summary>
-            Gets the operation mark 'x'
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview.ResolutionY">
-            <summary>
-            Gets the image height, in pixels.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview2.ResolutionX">
-            <summary>
-            Gets the image width, in pixels.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview2.BackgroundColor1">
-            <summary>
-            Gets the operation mark 'x'
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.Preview2.ResolutionY">
-            <summary>
-            Gets the image height, in pixels.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.LayerDef.DataAddress">
-            <summary>
-            Gets the layer image offset to encoded layer data, and its length in bytes.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.LayerDef.DataLength">
-            <summary>
-            Gets the layer image length in bytes.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.LayerDef.ExposureTime">
-            <summary>
-            Gets the exposure time for this layer, in seconds.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.LayerDef.LayerHeight">
-            <summary>
-            Gets the layer height for this layer, measured in millimeters.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.SubLayerDef.DataAddress">
-            <summary>
-            Gets the layer image offset to encoded layer data, and its length in bytes.
-            </summary>
-        </member>
-        <member name="P:UVtools.Core.FileFormats.PhotonWorkshopFile.SubLayerDef.DataLength">
-            <summary>
-            Gets the layer image length in bytes.
-            </summary>
-        </member>
         <member name="P:UVtools.Core.FileFormats.PHZFile.Header.Magic">
             <summary>
             Gets a magic number identifying the file type.