# PrusaSlicer profile for Sovol Zero!

**URL:** <https://forum.sovol3d.com/t/prusaslicer-profile-for-sovol-zero/8746>\
**Category:** Sovol Zero\
**Tags:** slicer\
**Created:** [September 16, 2025, 5:30pm UTC](https://forum.sovol3d.com/t/prusaslicer-profile-for-sovol-zero/8746 "2025-09-16T17:30:01Z")\
**Posts on this page:** 1\
**Showing post:** 13

<div class="post-metadata">

**Author:** ![rpcyan](https://avatars.discourse-cdn.com/v4/letter/r/34f0e0/32.png) [@rpcyan](https://forum.sovol3d.com/u/rpcyan)\
**Post date:** [November 16, 2025, 8:47am UTC](https://forum.sovol3d.com/t/prusaslicer-profile-for-sovol-zero/8746/13 "2025-11-16T08:47:54Z")

</div>

@HandyDoodads I like what you’ve done with the Start G-code. I’ve also checked that Sovol hasn’t published any new profiles ( just ‘[align profiles with Orca Slicer naming conventions](https://github.com/Sovol3d/Sovol-OrcaSlicer/commit/3fcbed7dad2483b8e3f7a32b22df51ce4a379244)’ on Aug 8 ).

I’ve made the following tweaks:

- used global variables to clarify starting purge position, as you suggested
- Load skew compensation
  - (various ways to find this, I use CaliLantern)

- Generally removed hard-coded values when variables are available in SuperSlicer (WIP)
- Beginning to add support for other nozzle diameters (WIP)
- 
- added @PicobelloBV [Chamber Temperature Control](https://forum.sovol3d.com/t/chamber-temperature-control/8577/4) via the exhaust\_fan
  - this requires changes to printer.cfg
  - this should NOT associated with the new [Chamber Heating Module](https://www.sovol3d.com/products/zero-chamber-heater)
  - this block is commented out for easy copy/pasting

- rewrote the priming/purge lines for clarity
  - Purpose of the 10 segments appears to be for good purge lines without pressure advance getting in the way
  - There’s three styles of purges depending on the conditionals
    - long 10 segment near the part E1
    - short 2 segment near the part, E lots
    - long 10 segment near the front edge.

  - All purge styles are tedious without jinja-2 or other loop implementation
    - Strongly considering abandoning purge codes in the starting g-code, opting either for a single loop skirt or a custom Klipper macro (common, but not part of Sovol)

- Moved up M104/M140 commands as early as I could, and included the M109/M190 waits to save time per @sebastianha
  - originally it didn’t do much, but I moved up the initial dirty nozzle G28 homing so that it may actually save some time
  - 

I’ll be posting this whole profile to Printables as a remix of @TomsPrintGarden ‘s work.

* * *

```auto

; SuperSlicer Sovol Zero Start G-code
; Authored by @rpcyan, 2025-11-15
; based on @TomsPrintGarden's profile https://www.printables.com/model/1411860-sovol-zero-prusa-slicer-profile-experimental/files 
; contributions by @sebastianha, @HandyDoodads, and @PicobelloBV
; https://forum.sovol3d.com/t/prusaslicer-profile-for-sovol-zero/8746/10

; --- Baseline Heating ---
M140 S[first_layer_bed_temperature] ; Sets Bed Heating (non-blocking)
M104 S130 ; Sets Extruder Pre-Heating (non-blocking)
SKEW_PROFILE_LOAD = calilatern_skew_profile ; Klipper macro using Vector3D's CaliLatern for XY, XZ, and YZ skew compensations
{ if first_layer_bed_temperature[current_extruder] > 35 } ; If bed is already warm, maintain current temp for initial homing
 M190 S[first_layer_bed_temperature[current_extruder]]      
{endif} 

; --- Exhaust Fan / Chamber Temperature Control ---
; Requires changes to printer.cfg
;{if chamber_temperature[0] == 0}
; M141 S32 ; fallback to Zero's default chamber temp
;{else}
; M141 S{chamber_temperature[0]}
;{endif}

; --- Home & Start Print ---
G28 ; Homes including any nozzle debris to enable nozzle cleaning
M190 S[first_layer_bed_temperature] ; Waits for bed temp (blocking)
START_PRINT ; Klipper macro - expects nozzle cleaning @ 200C, cooldown to 130C, & eddy current mesh bed leveling
G28 ; Re-homes with clean nozzle
G92 E0 ; Reset extruder position
SET_GCODE_OFFSET Z_ADJUST=-0.00 MOVE=1 ; Nozzle height adjustment (if required)

; --- Segmented Prime Line close to part
; Avoids pressure buildup, works well with pressure advance & soft filaments
M104 S[first_layer_temperature] ; Sets Extruder (non-blo
cking)
G90 ; absolute positioning to set starting position
M83 ; Relative extruder
{                              
 local extr_width = 1.05 * nozzle_diameter[0];
 local filament_area = 3.14159 / 4 * filament_diameter[0] * filament_diameter[0];
 local extr_per_mm = extr_width * 0.2 * .625 / filament_area;
 local print_width = first_layer_print_max[0] - first_layer_print_min[0];
 local prime_pieces = 10;
 local segment = max( 5, print_width / ( prime_pieces * 2 ) );
 local prime_offset = 5;        
 local bed_margin = 1;
 local prime_length = min( prime_pieces * segment,50);
 local prime_speed = first_layer_speed * 60;
 local start_y = max( prime_offset + bed_margin, first_layer_print_min[1] ) - prime_offset;
}
M109 S[first_layer_temperature] ; wait for extruder temp
{ if first_layer_print_min[1] > print_bed_min[1] + prime_offset + bed_margin } ; checks if there's room in the front of the part for the priming line 
 { if print_width >= 50 } ; checks if part is wide enough for a nominal priming line
  { local start_x = min( max( bed_margin, first_layer_print_min[0] + 0.25 * print_width ), print_bed_max[0] - prime_length - bed_margin ); }
  G0 X{ start_x } Y{ start_y } F{ travel_speed * 60 } ; rapid motion to starting position
  G0 Z{ layer_height } F{ travel_speed_z * 60 }
  G91 ; Relative positioning
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 1
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 2
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 3
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 4
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 5
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 6
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 7
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 8
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 9
  G1 X{ segment } E{ 1} F{ prime_speed } ; Segment 10
 {else} ; priming line has to be short
  { local start_x = first_layer_print_min[0]; }
  G0 X{ start_x } Y{ start_y } F{ travel_speed * 60} ; rapid motion to starting position
  G0 Z{ layer_height } F{ travel_speed_z * 60 }
  G91 ; Relative positioning
  M83
  G1 X{ print_width / 2 } E{ extr_per_mm * print_width / 2 * 5 } F{ prime_speed }
  G1 X{ print_width / 2 } E{ extr_per_mm * print_width / 2 * 5 } F{ prime_speed }
 {endif}
 G90 ; Absolute positioning
 M83 ; Relative extruder
 G1 E-0.2 F{ 10 * 60 }
 G0 Z1 F{ travel_speed_z * 60}
 ;--- Repeat for 2nd purging/priming line
 G0 X{ start_x } Y{ start_y + 1 } F{ travel_speed * 60} ; 2nd line is same X, Y is 1mm closer to part
 G0 Z{ layer_height } F{ travel_speed_z * 60 }
 G91 ; Relative positioning
 { if print_width >= 50 }
  G1 X{ segment } E1 F{ prime_speed } ; Segment 1
  G1 X{ segment } E1 F{ prime_speed } ; Segment 2
  G1 X{ segment } E1 F{ prime_speed } ; Segment 3
  G1 X{ segment } E1 F{ prime_speed } ; Segment 4
  G1 X{ segment } E1 F{ prime_speed } ; Segment 5
  G1 X{ segment } E1 F{ prime_speed } ; Segment 6
  G1 X{ segment } E1 F{ prime_speed } ; Segment 7
  G1 X{ segment } E1 F{ prime_speed } ; Segment 8
  G1 X{ segment } E1 F{ prime_speed } ; Segment 9
  G1 X{ segment } E1 F{ prime_speed } ; Segment 10
 {else}
  G1 X{ print_width / 2 } E{ extr_per_mm * print_width / 2 * 5 } F{ prime_speed }
  G1 X{ print_width / 2 } E{ extr_per_mm * print_width / 2 * 5 } F{ prime_speed }
 {endif}
 G90 ; Absolute positioning
 M83 ; Relative extruder
 G1 E-0.2 F{ 10 * 60 }
 G0 Z1 F{ travel_speed_z * 60}
{else}
 G0 X{ print_bed_max[0] / 3 } Y0 F{ travel_speed }
 G0 Z{ layer_height } F{ travel_speed_z * 60 }
 G91
 M83
 G1 X{ 50 } E{ extr_per_mm * print_bed_max[0] / 3 } F{ prime_speed }
 G90 ; Absolute positioning
 M83 ; Relative extruder
 G1 E-0.2 F{ 10 * 60 }
 G0 Z1 F{ travel_speed_z * 60}
{endif}
SET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}

```

---

_[View the full topic](https://forum.sovol3d.com/t/prusaslicer-profile-for-sovol-zero/8746)._
