- **File formats:**
   - (Add) Transition layer count to the supported files and auto compute transition time on corresponding layers in software mode
   - (Add) `HaveTransitionLayers`, `TransitionLayersType`, `BottomLayers`, `NormalLayers`, `TransitionLayers`, `TsmcLayers` properties
   - (Add) Layer: `IsTransitionLayer` property
   - (Add) SL1: Keyword `TransitionLayerCount_xxx` - Sets the number of transition layers
   - (Improvement) CTB, PHZ, FDG: Implement the `ModifiedTimestampMinutes` field, it was the MysteriousId before as an unknown field
   - (Fix) CWS: Open in partial mode will cause an exception and prevent file from load
- **CCode:**
   - (Add) Allow inverse lifts to work as an retract
   - (Fix) Parsing of WaitTimeAfterLift was incorrect when lacking a lift sequence
   - (Fix) Layers lacking an exposure time was defaulting to global time, now defaults to 0
   - (Fix) Layers without a LED ON (M106) was setting `LightPWM` to the max value (255), now defaults to 0
- **Tools:**
   - **Timelapse:**
      - (Add) Information: Raise Layer count equivalence
      - (Add) Information: Additional lifts to be generated
      - (Add) Option: Ensure the last layer - If enabled, it will generate an obligatory layer to cover the last layer
      - (Improvement) Optimize lift for virtual layer mode, allowing set a slow and fast lift / retract by using another virtual layyer to emulate a lift
      - (Improvement) Allow to define slow and fast speed for virtual layer mode even if TSMC isn't supported
   - (Add) Fade exposure time: Setting 'Disable firmware transition layers' - Attempt to disable firmware strict transition layers in favor of this tool
   - (Add) Calibration tests: Attempt to auto disable the firmware transifiton layers
   - (Change) Edit print parameters: Allow set `BottomLiftHeight` and `LiftHeight` to 0mm
- **UI:**
   - (Improvement) Disallow drop files into UI when is processing data / disabled and prevent crashing from that action
   - (Improvement) Information tab visibility and MinHeight for data grids
   - (Improvement) Hide/show GCode tab when necessary (dependent on file format)
   - (Improvement) The 'save as' will show the new file into 'Open recent' files
- **PrusaSlicer printers:**
   - (Add) Elegoo Jupiter
   - (Add) EPAX X1 4KS
   - (Add) EPAX DX1 Pro
   - (Add) EPAX DX10 Pro 5K
   - (Add) EPAX DX10 Pro 8K
   - (Add) EPAX E10 8K
   - (Add) EPAX X133 6K
This commit is contained in:
Tiago Conceição
2022-02-21 05:15:55 +00:00
parent ef305b0abe
commit 069c521d72
43 changed files with 1468 additions and 534 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ struct SLICER_INFO {
uint MachineNameAddress <fgcolor=cBlack, bgcolor=cRed>;
uint MachineNameSize <fgcolor=cBlack, bgcolor=cRed>;
uint PerLayerSettings <fgcolor=cBlack, bgcolor=cRed, format=hex>; // 0/8 for cbddlp files, 0xF (15) for ctb files, 0x2000000F (536870927) for v3 ctb and 1073741839 for v4 ctb files to allow per layer parameters
uint MysteriousId <fgcolor=cBlack, bgcolor=cRed>; // v3 = 305419896 | v4 lightoff? = 27093086 | v4 rest? = 27093090
uint TimestampMinutes <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasLevel <fgcolor=cBlack, bgcolor=cRed>;
uint SoftwareVersion <fgcolor=cBlack, bgcolor=cRed, format=hex>; // ctb v3 = 17171200 | ctb v4 pro = 16777216
float RestTimeAfterRetract <fgcolor=cBlack, bgcolor=cRed>;
+127
View File
@@ -0,0 +1,127 @@
//------------------------------------------------
//--- 010 Editor v8.0.1 Binary Template
//
// File: fdg
// Authors: Tiago Conceição
//------------------------------------------------
LittleEndian();
struct HEADER {
uint Magic <fgcolor=cBlack, bgcolor=cRed>;
uint Version <fgcolor=cBlack, bgcolor=cRed>;
uint LayerCount <fgcolor=cBlack, bgcolor=cRed>;
uint BottomLayersCount <fgcolor=cBlack, bgcolor=cRed>;
uint ProjectorType <fgcolor=cBlack, bgcolor=cRed>;
uint BottomLayersCount2 <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
float LayerHeightMilimeter <fgcolor=cBlack, bgcolor=cRed>;
float LayerExposureSeconds <fgcolor=cBlack, bgcolor=cRed>;
float BottomExposureSeconds <fgcolor=cBlack, bgcolor=cRed>;
uint PreviewLargeOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint PreviewSmallOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint LayersDefinitionOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint PrintTime <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasLevel <fgcolor=cBlack, bgcolor=cRed>;
ushort LightPWM <fgcolor=cBlack, bgcolor=cRed>;
ushort BottomLightPWM <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
float TotalHeightMilimeter <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeX <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeY <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeZ <fgcolor=cBlack, bgcolor=cRed>;
uint EncryptionKey <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasLevelInfo <fgcolor=cBlack, bgcolor=cRed>;
uint EncryptionMode <fgcolor=cBlack, bgcolor=cRed>;
float VolumeMl <fgcolor=cBlack, bgcolor=cRed>;
float WeightG <fgcolor=cBlack, bgcolor=cRed>;
float CostDollars <fgcolor=cBlack, bgcolor=cRed>;
uint MachineNameAddress <fgcolor=cBlack, bgcolor=cRed>;
uint MachineNameSize <fgcolor=cBlack, bgcolor=cRed>;
float BottomLightOffDelay <fgcolor=cBlack, bgcolor=cRed>;
float LightOffDelay <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
float BottomLiftHeight <fgcolor=cBlack, bgcolor=cRed>;
float BottomLiftSpeed <fgcolor=cBlack, bgcolor=cRed>;
float LiftHeight <fgcolor=cBlack, bgcolor=cRed>;
float LiftSpeed <fgcolor=cBlack, bgcolor=cRed>;
float RetractSpeed <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint TimestampMinutes <fgcolor=cBlack, bgcolor=cRed>;
uint SoftwareVersion <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
} header;
struct PREVIEW {
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
uint ImageOffset <fgcolor=cBlack, bgcolor=cRed>;
uint ImageLength <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown1 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown2 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown3 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown4 <fgcolor=cBlack, bgcolor=cRed>;
ubyte Data[ImageLength] <fgcolor=cBlack, bgcolor=cYellow>;
};
if(header.PreviewLargeOffsetAddress > 0)
{
FSeek(header.PreviewLargeOffsetAddress);
PREVIEW previewLarge <fgcolor=cBlack, bgcolor=cYellow>;
}
if(header.PreviewSmallOffsetAddress > 0)
{
FSeek(header.PreviewSmallOffsetAddress);
PREVIEW previewSmall <fgcolor=cBlack, bgcolor=cYellow>;
}
if(header.MachineNameAddress > 0 && header.MachineNameSize > 0)
{
FSeek(header.MachineNameAddress);
char MachineName[header.MachineNameSize] <fgcolor=cBlack, bgcolor=cGreen>;
}
struct LAYER_DATA {
float PositionZ <fgcolor=cBlack, bgcolor=cRed>;
float Exposure <fgcolor=cBlack, bgcolor=cRed>;
float LightOffSeconds <fgcolor=cBlack, bgcolor=cRed>;
uint DataAddress <fgcolor=cBlack, bgcolor=cRed>;
uint DataSize <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
};
typedef struct(int size) {
ubyte layerDataBlock[size] <fgcolor=cBlack, bgcolor=cGreen>;
} LAYER_RLE;
FSeek(header.LayersDefinitionOffsetAddress);
struct LAYERS {
local int i = 0;
local uint currentPos;
for( i = 0; i < header.LayerCount; i++ ){
LAYER_DATA layerData <fgcolor=cBlack, bgcolor=cYellow>;
currentPos = FTell();
FSeek(layerData.DataAddress);
LAYER_RLE layerRLE(layerData.DataSize);
FSeek(currentPos);
}
} layers;
+127
View File
@@ -0,0 +1,127 @@
//------------------------------------------------
//--- 010 Editor v8.0.1 Binary Template
//
// File: phz
// Authors: Tiago Conceição
//------------------------------------------------
LittleEndian();
struct HEADER {
uint Magic <fgcolor=cBlack, bgcolor=cRed>;
uint Version <fgcolor=cBlack, bgcolor=cRed>;
float LayerHeightMilimeter <fgcolor=cBlack, bgcolor=cRed>;
float LayerExposureSeconds <fgcolor=cBlack, bgcolor=cRed>;
float BottomExposureSeconds <fgcolor=cBlack, bgcolor=cRed>;
uint BottomLayersCount <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
uint PreviewLargeOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint LayersDefinitionOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint LayerCount <fgcolor=cBlack, bgcolor=cRed>;
uint PreviewSmallOffsetAddress <fgcolor=cBlack, bgcolor=cRed>;
uint PrintTime <fgcolor=cBlack, bgcolor=cRed>;
uint ProjectorType <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasLevel <fgcolor=cBlack, bgcolor=cRed>;
ushort LightPWM <fgcolor=cBlack, bgcolor=cRed>;
ushort BottomLightPWM <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
float TotalHeightMilimeter <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeX <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeY <fgcolor=cBlack, bgcolor=cRed>;
float BedSizeZ <fgcolor=cBlack, bgcolor=cRed>;
uint EncryptionKey <fgcolor=cBlack, bgcolor=cRed>;
float BottomLightOffDelay <fgcolor=cBlack, bgcolor=cRed>;
float LightOffDelay <fgcolor=cBlack, bgcolor=cRed>;
uint BottomLayersCount2 <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
float BottomLiftHeight <fgcolor=cBlack, bgcolor=cRed>;
float BottomLiftSpeed <fgcolor=cBlack, bgcolor=cRed>;
float LiftHeight <fgcolor=cBlack, bgcolor=cRed>;
float LiftSpeed <fgcolor=cBlack, bgcolor=cRed>;
float RetractSpeed <fgcolor=cBlack, bgcolor=cRed>;
float VolumeMl <fgcolor=cBlack, bgcolor=cRed>;
float WeightG <fgcolor=cBlack, bgcolor=cRed>;
float CostDollars <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint MachineNameAddress <fgcolor=cBlack, bgcolor=cRed>;
uint MachineNameSize <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint EncryptionMode <fgcolor=cBlack, bgcolor=cRed>;
uint TimestampMinutes <fgcolor=cBlack, bgcolor=cRed>;
uint AntiAliasLevelInfo <fgcolor=cBlack, bgcolor=cRed>;
uint SoftwareVersion <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
uint Padding <fgcolor=cBlack, bgcolor=cRed>;
} header;
struct PREVIEW {
uint ResolutionX <fgcolor=cBlack, bgcolor=cRed>;
uint ResolutionY <fgcolor=cBlack, bgcolor=cRed>;
uint ImageOffset <fgcolor=cBlack, bgcolor=cRed>;
uint ImageLength <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown1 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown2 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown3 <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown4 <fgcolor=cBlack, bgcolor=cRed>;
ubyte Data[ImageLength] <fgcolor=cBlack, bgcolor=cYellow>;
};
if(header.PreviewLargeOffsetAddress > 0)
{
FSeek(header.PreviewLargeOffsetAddress);
PREVIEW previewLarge <fgcolor=cBlack, bgcolor=cYellow>;
}
if(header.PreviewSmallOffsetAddress > 0)
{
FSeek(header.PreviewSmallOffsetAddress);
PREVIEW previewSmall <fgcolor=cBlack, bgcolor=cYellow>;
}
if(header.MachineNameAddress > 0 && header.MachineNameSize > 0)
{
FSeek(header.MachineNameAddress);
char MachineName[header.MachineNameSize] <fgcolor=cBlack, bgcolor=cGreen>;
}
struct LAYER_DATA {
float PositionZ <fgcolor=cBlack, bgcolor=cRed>;
float Exposure <fgcolor=cBlack, bgcolor=cRed>;
float LightOffSeconds <fgcolor=cBlack, bgcolor=cRed>;
uint DataAddress <fgcolor=cBlack, bgcolor=cRed>;
uint DataSize <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
uint Unknown <fgcolor=cBlack, bgcolor=cRed>;
};
typedef struct(int size) {
ubyte layerDataBlock[size] <fgcolor=cBlack, bgcolor=cGreen>;
} LAYER_RLE;
FSeek(header.LayersDefinitionOffsetAddress);
struct LAYERS {
local int i = 0;
local uint currentPos;
for( i = 0; i < header.LayerCount; i++ ){
LAYER_DATA layerData <fgcolor=cBlack, bgcolor=cYellow>;
currentPos = FTell();
FSeek(layerData.DataAddress);
LAYER_RLE layerRLE(layerData.DataSize);
FSeek(currentPos);
}
} layers;
-118
View File
@@ -1,118 +0,0 @@
@echo off
SET DIR=%~dp0
cd ..
SET INPUT_DIR=%AppData%\PrusaSlicer
SET OUTPUT_DIR=PrusaSlicer
SET PRINT_DIR=sla_print
SET PRINTER_DIR=printer
SET files[0]=UVtools Prusa SL1.ini
SET files[1]=UVtools Prusa SL1S Speed.ini
SET files[2]=EPAX E6 Mono.ini
SET files[3]=EPAX E10 Mono.ini
SET files[4]=EPAX E10 5K.ini
SET files[5]=EPAX X1.ini
SET files[6]=EPAX X10.ini
SET files[7]=EPAX X10 4K Mono.ini
SET files[8]=EPAX X10 5K.ini
SET files[9]=EPAX X133 4K Mono.ini
SET files[10]=EPAX X156 4K Color.ini
SET files[11]=EPAX X1K 2K Mono.ini
SET files[12]=Zortrax Inkspire.ini
SET files[13]=Nova3D Elfin.ini
SET files[14]=Nova3D Elfin2.ini
SET files[15]=Nova3D Elfin2 Mono SE.ini
SET files[16]=Nova3D Elfin3 Mini.ini
SET files[17]=Nova3D Bene4.ini
SET files[18]=Nova3D Bene4 Mono.ini
SET files[19]=Nova3D Bene5.ini
SET files[20]=Nova3D Whale.ini
SET files[21]=Nova3D Whale2.ini
SET files[22]=AnyCubic Photon.ini
SET files[23]=AnyCubic Photon S.ini
SET files[24]=AnyCubic Photon Zero.ini
SET files[25]=AnyCubic Photon X.ini
SET files[26]=AnyCubic Photon Ultra.ini
SET files[27]=AnyCubic Photon Mono.ini
SET files[28]=AnyCubic Photon Mono 4K.ini
SET files[29]=AnyCubic Photon Mono SE.ini
SET files[30]=AnyCubic Photon Mono X.ini
SET files[31]=AnyCubic Photon Mono X 6K.ini
SET files[32]=AnyCubic Photon Mono SQ.ini
SET files[33]=Elegoo Mars.ini
SET files[34]=Elegoo Mars 2 Pro.ini
SET files[35]=Elegoo Mars 3.ini
SET files[36]=Elegoo Mars C.ini
SET files[37]=Elegoo Saturn.ini
SET files[38]=Peopoly Phenom.ini
SET files[39]=Peopoly Phenom L.ini
SET files[40]=Peopoly Phenom Noir.ini
SET files[41]=Peopoly Phenom XXL.ini
SET files[42]=QIDI Shadow5.5.ini
SET files[43]=QIDI Shadow6.0 Pro.ini
SET files[44]=QIDI S-Box.ini
SET files[45]=QIDI I-Box Mono.ini
SET files[46]=Phrozen Shuffle.ini
SET files[47]=Phrozen Shuffle Lite.ini
SET files[48]=Phrozen Shuffle XL.ini
SET files[49]=Phrozen Shuffle XL Lite.ini
SET files[50]=Phrozen Shuffle 16.ini
SET files[51]=Phrozen Shuffle 4K.ini
SET files[52]=Phrozen Sonic.ini
SET files[53]=Phrozen Sonic 4K.ini
SET files[54]=Phrozen Sonic Mighty 4K.ini
SET files[55]=Phrozen Sonic Mini.ini
SET files[56]=Phrozen Sonic Mini 4K.ini
SET files[57]=Phrozen Sonic Mini 8K.ini
SET files[58]=Phrozen Transform.ini
SET files[59]=Phrozen Sonic Mega 8K.ini
SET files[60]=Kelant S400.ini
SET files[61]=Wanhao D7.ini
SET files[62]=Wanhao D8.ini
SET files[63]=Wanhao CGR Mini Mono.ini
SET files[64]=Wanhao CGR Mono.ini
SET files[65]=Creality LD-002R.ini
SET files[66]=Creality LD-002H.ini
SET files[67]=Creality LD-006.ini
SET files[68]=Creality HALOT-ONE CL-60.ini
SET files[69]=Creality HALOT-SKY CL-89.ini
SET files[70]=Creality HALOT-MAX CL-133.ini
SET files[71]=Voxelab Polaris 5.5.ini
SET files[72]=Voxelab Proxima 6.ini
SET files[73]=Voxelab Ceres 8.9.ini
SET files[74]=Longer Orange 10.ini
SET files[75]=Longer Orange 30.ini
SET files[76]=Longer Orange 120.ini
SET files[77]=Longer Orange 4K.ini
SET files[78]=Uniz IBEE.ini
SET files[79]=FlashForge Explorer MAX.ini
SET files[80]=FlashForge Focus 8.9.ini
SET files[81]=FlashForge Focus 13.3.ini
SET files[82]=FlashForge Foto 6.0.ini
SET files[83]=FlashForge Foto 8.9.ini
SET files[84]=FlashForge Foto 13.3.ini
SET files[85]=FlashForge Hunter.ini
echo PrusaSlicer Printers Instalation
echo This will replace printers, all changes will be discarded
echo %INPUT_DIR%
echo %OUTPUT_DIR%
echo Importing Printers
for /F "tokens=2 delims==" %%s in ('set files[') do xcopy /d /y "%INPUT_DIR%\%PRINTER_DIR%\%%s" "%OUTPUT_DIR%\%PRINTER_DIR%\"
echo Importing Profiles
xcopy /i /y /d %INPUT_DIR%\%PRINT_DIR% %OUTPUT_DIR%\%PRINT_DIR%
REM /s Copies directories and subdirectories, unless they are empty. If you omit /s, xcopy works within a single directory.
REM /y Suppresses prompting to confirm that you want to overwrite an existing destination file.
REM /i If Source is a directory or contains wildcards and Destination does not exist,
REM xcopy assumes Destination specifies a directory name and creates a new directory.
REM Then, xcopy copies all specified files into the new directory.
REM By default, xcopy prompts you to specify whether Destination is a file or a directory.
REM /d Copies source files changed on or after the specified date only.
REM If you do not include a MM-DD-YYYY value, xcopy copies all Source files that are newer than existing Destination files.
REM This command-line option allows you to update files that have changed.
pause
+9 -1
View File
@@ -11,13 +11,20 @@ $printers =
'EPAX E6 Mono.ini',
'EPAX E10 Mono.ini',
'EPAX E10 5K.ini',
'EPAX E10 8K.ini',
'EPAX X10 8K.ini',
'EPAX X1.ini',
'EPAX X1 4KS.ini',
'EPAX X1K 2K Mono.ini',
'EPAX X10.ini',
'EPAX X10 4K Mono.ini',
'EPAX X10 5K.ini',
'EPAX X133 4K Mono.ini',
'EPAX X133 6K.ini',
'EPAX X156 4K Color.ini',
'EPAX X1K 2K Mono.ini',
'EPAX DX1 Pro.ini',
'EPAX DX10 Pro 5K.ini',
'EPAX DX10 Pro 8K.ini',
'Zortrax Inkspire.ini',
'Nova3D Elfin.ini',
'Nova3D Elfin2.ini',
@@ -44,6 +51,7 @@ $printers =
'Elegoo Mars 3.ini',
'Elegoo Mars C.ini',
'Elegoo Saturn.ini',
'Elegoo Jupiter.ini',
'Peopoly Phenom.ini',
'Peopoly Phenom L.ini',
'Peopoly Phenom Noir.ini',