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
RE: XY Skew correction on the Core One (PrusaSlicer workaround)
I used the vernier skew test on Printables and corrected a measured 0.05mm skew with about an 1/8th turn in opposite directions of the tensioning screws on my kit build. This was after first tensioning with the audio tone tuner to get close and then with the firmware strobe (which was really unreliable until I had gotten the audio tones close). Note, I didn't re-check the tensioning of my belts after my skew tuning. I don't have access to the Califlower (any version), and would be interested to see how well the vernier skew test compares to the califlower for measuring skew. (I know the califlower can help you calibrate more than just skew so no need to get into that.)
A side question... How long should I give my belts to break in to check the tension and skew? FWIW, I only print a few times a week to a month so I'm not constantly slamming the print-head around with accelerations like a 24/7 print farm would.
See my (limited) designs on:
Printables - https://www.printables.com/@Sembazuru
Thingiverse - https://www.thingiverse.com/Sembazuru/designs