Skip to content
Main site

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”
  • 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
  • Keep surface inclinations below 15–20% relative to horizontal
  • Steeper slopes cause the nozzle to scratch previously printed layers

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
  • 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

  1. Model geometry in Rhino
  2. In Grasshopper: generate toolpath curves following the model surface
  3. Apply Curve to Polyline (tolerance 0.05–0.1 mm) to all path curves
  4. Set line width and layer height appropriate to the nozzle (see Nozzle set)
  5. Generate G-code — include heating commands, fan speed, and feed rate
  6. Upload via Wi-Fi to G1OS
  7. Run a short test section (first 10 layers) before committing to a full print

Grasshopper G-code must include standard Klipper startup:

START_PRINT BED_TEMP=65 EXTRUDER_TEMP=220

And end with:

END_PRINT

Refer 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.

MistakeEffectFix
Curve to Polyline not appliedMCU error, print stopsApply with 0.05–0.1 mm tolerance
Slope > 20%Nozzle scratches layersRedesign path or limit slope
Upload via USB (large file)Print stops, no errorUse Wi-Fi upload
No purge line in G-codeFirst lines under-extrudedAdd a 200 mm purge line at print start
Wrong clearance radiusNozzle collides with frameDesign paths inside 10 cm clearance zone
Relative Z move in Z-hop (G91)Printer jumps to bed center on every Z transitionUse absolute move (G90) instead — see below
Firmware retraction activeConflict with Grasshopper retraction commandsDisable firmware retraction if managing retraction in the G-code user object

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 absolute
G1 Z{current_z + hop_height} F3000
; travel to next XY point
G1 Z{target_z} F3000

If 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 parameterZonePosition
Extruder 0Feeding ZoneTop
Extruder 1Melting ZoneMiddle
Extruder 2Nozzle ZoneBottom

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