Grasshopper slicer basics
Grasshopper (in Rhino 3D) can generate custom G-code for the G1, enabling non-planar printing — curved toolpaths, variable layer heights, and parametric geometry. This is an advanced workflow used by designers and architects for objects that cannot be made with standard layer-by-layer slicing.
When to use Grasshopper instead of Ginger Slicer
Section titled “When to use Grasshopper instead of Ginger Slicer”- Printing on curved surfaces (non-planar layers)
- Parametric geometry where the slicer path needs to follow the model’s logic
- Vase mode with custom wall patterns (wave, grid, spiral variants)
- Objects where the standard slicer would need excessive support or produce poor surfaces
G1-specific constraints for Grasshopper paths
Section titled “G1-specific constraints for Grasshopper paths”Nozzle clearance
Section titled “Nozzle clearance”- Assume a 10 cm radius clearance zone around the nozzle tip (accounts for the hopper, fan, and probe arm)
- Do not design toolpaths that bring the printer frame or extruder assembly into collision
Maximum slope
Section titled “Maximum slope”- Keep surface inclinations below 15–20% relative to horizontal
- Steeper slopes cause the nozzle to scratch previously printed layers
Point density — critical
Section titled “Point density — critical”Grasshopper can generate toolpaths with thousands of tiny segments on curved paths. Too many points overwhelm the Klipper MCU and cause:
- “Stepper too far in past” errors → print stops mid-job
- MCU communication loss
Fix: always run Curve to Polyline on all paths before generating G-code:
- Tolerance: 0.05–0.1 mm (not percentage — linear deviation from the curve)
- This reduces segment count dramatically while keeping visual accuracy
- Test with small prints first before long jobs
File size and upload
Section titled “File size and upload”- Large Grasshopper G-code files (> 50 MB) must be uploaded via Wi-Fi (drag-and-drop in G1OS G-Code Files)
- Do NOT use a USB stick for large Grasshopper files — USB serial can stall mid-print with no error message
Typical workflow
Section titled “Typical workflow”- Model geometry in Rhino
- In Grasshopper: generate toolpath curves following the model surface
- Apply Curve to Polyline (tolerance 0.05–0.1 mm) to all path curves
- Set line width and layer height appropriate to the nozzle (see Nozzle set)
- Generate G-code — include heating commands, fan speed, and feed rate
- Upload via Wi-Fi to G1OS
- Run a short test section (first 10 layers) before committing to a full print
G-code header requirements
Section titled “G-code header requirements”Grasshopper G-code must include standard Klipper startup:
START_PRINT BED_TEMP=65 EXTRUDER_TEMP=220And end with:
END_PRINTRefer to the GingerConfigs macros for the correct start/end sequence.
Bed mesh — Grasshopper uses the saved GLOBAL map
Section titled “Bed mesh — Grasshopper uses the saved GLOBAL map”Unlike Ginger Slicer (which probes adaptively within the part’s bounding box on every print), Grasshopper does not perform adaptive meshing (no KAMP). It relies on the stored height map named GLOBAL, produced by the BED_LEVEL macro.
Common mistakes
Section titled “Common mistakes”| Mistake | Effect | Fix |
|---|---|---|
| Curve to Polyline not applied | MCU error, print stops | Apply with 0.05–0.1 mm tolerance |
| Slope > 20% | Nozzle scratches layers | Redesign path or limit slope |
| Upload via USB (large file) | Print stops, no error | Use Wi-Fi upload |
| No purge line in G-code | First lines under-extruded | Add a 200 mm purge line at print start |
| Wrong clearance radius | Nozzle collides with frame | Design paths inside 10 cm clearance zone |
| Relative Z move in Z-hop (G91) | Printer jumps to bed center on every Z transition | Use absolute move (G90) instead — see below |
| Firmware retraction active | Conflict with Grasshopper retraction commands | Disable firmware retraction if managing retraction in the G-code user object |
Z-hop: absolute vs relative moves
Section titled “Z-hop: absolute vs relative moves”A common issue when adding Z-hop (Z-raise between curves) to Grasshopper G-code: the printer moves to the center of the bed on every Z transition instead of raising Z in place.
Cause: the Z-hop is written with G91 (relative positioning), which, depending on what came before, can reinterpret the XY target and snap to the origin.
Fix: use G90 (absolute positioning) for the Z-hop move:
G90 ; switch to absoluteG1 Z{current_z + hop_height} F3000; travel to next XY pointG1 Z{target_z} F3000If you need relative Z, issue G91 only for the Z move and immediately switch back to G90 before any XY moves.
Temperature zones: Grasshopper vs KlipperScreen
Section titled “Temperature zones: Grasshopper vs KlipperScreen”KlipperScreen (the printer display) shows a single temperature reading labelled “Extruder” — this is NOT a summary of all three zones. It typically shows the temperature of one specific zone (usually the Nozzle Zone / extruder2 in Klipper).
In Grasshopper / Ginger Slicer, you set temperatures for all three zones separately:
| Slicer parameter | Zone | Position |
|---|---|---|
| Extruder 0 | Feeding Zone | Top |
| Extruder 1 | Melting Zone | Middle |
| Extruder 2 | Nozzle Zone | Bottom |
To see all three zone temperatures, use Mainsail (browser interface) rather than the display. The display’s single temperature reading can be confusing — it does NOT mean the other zones are at ambient temperature.
Firmware retraction and Grasshopper retraction
Section titled “Firmware retraction and Grasshopper retraction”The G1 firmware can apply retraction automatically (Klipper’s firmware_retraction). If your Grasshopper script also contains retraction commands in the G-code user object, the two will stack and cause double-retraction (gaps, ooze at path starts).
Options:
- Disable firmware retraction if Grasshopper handles it directly
- Remove retraction commands from the user object if relying on firmware retraction
- For complex geometry (parts with separate leg/curve segments), testing with retraction off first and only enabling it if stringing is visible between segments is the recommended approach