XY Skew correction on the Core One (PrusaSlicer workaround)
I’ve seen a few threads come up about XY skew on the Core One both here and in Github, so I figured I’d share what I’m doing in case it helps someone else.
Short version: Buddy firmware doesn’t support M852 (Marlin skew correction), and Prusa doesn’t seem interested in adding it (see the long-running discussions around that) . So, if you’ve measured real XY skew and want to actually correct it, you currently have to do it outside the firmware.
I measured my skew using Califlower V2 and got a consistent value (about -0.15° in my case) after mechanically bending the gantry as square as I could. That’s small, but over a full bed it’s enough to show up in square parts and long diagonals.
So I wrote a PrusaSlicer post-processing script that applies skew correction directly to the generated G-code.
Repo is here: https://github.com/hyiger/prusaslicer-skew-fix
TL;DR
The correction is a simple shear:
x' = x + y * tan(theta) y' = y
This is the same math Marlin uses internally for M852. The script rewrites the XY coordinates in the G-code after slicing.
Caveats:
- Text G-code only - If you’re using binary G-code / .bgcode this will not work. The script explicitly refuses to touch binary files so you don’t accidentally corrupt them. You can change this in preferences to only output ascii gcode. This will still work with PrusaConnect etc.
- Arcs are handled correctly - A shear turns circles into ellipses, so you can’t just “fix” G2/G3 endpoints. The script can optionally linearize arcs into G1 segments, then apply skew. This avoids weird preview artifacts and geometry issues.
- No clipping - Skewing can push parts outside the printable area even if they originally fit. The script can: compute the skewed bounding box, automatically recenter the toolpath and abort if it still can’t fit.
How to wire into PrusaSlicer:
In Print Settings → Output options → Post-processing scripts
python3 /path/to/skew_fix_ps.py --skew-deg -0.15 --linearize-arcs --recenter-to-bed --margin 0.5
Defaults assume a Core One–sized bed, but you can override bed dimensions if needed.
One important note. I'm currently 4500km away from my printer so I've been simulating this inside the Prusa g-code viewer and so far it seems like it is doing what I intended it to do. Will physically test it next week.
RE: XY Skew correction on the Core One (PrusaSlicer workaround)
I’ve made a few fixes after more testing:
Recenter/bounds now only look at actual printed moves (extrusion inside the bed). Purge lines, nozzle wipers, parking moves, etc. are ignored, so they no longer cause weird shifts I was seeing the g-code previewer.
Arcs are still fully linearized before skew is applied.
Added a “clamp” recenter mode that only moves the part if it would clip.
So this is probably the best command for running in post processing (replacing of course the -0.15 with your actual skew measurement).
python3 skew_fix_ps.py --skew-deg -0.15 --linearize-arcs --recenter-to-bed --recenter-mode clamp