A GPU accelerated modeler and slicer


2015-10-22: New update improves the new interface: material and warp shaders now work properly, syntax errors in GLSL code of implicits no longer crash the UI, plugins are supported (e.g. m = load('somefile.scad') will load an OpenSCAD file into shape 'm' if the plugin is installed). Added script functions 'erode' and 'dilate' (example in models/offset directory)

2015-09-10: New GUI with script editor and real time view updates! The GUI is now launched by default. It includes a script editor and updates the view every key stroke! Use CTRL+Mouse to continuously change any number in the script, with real time view updates. You can define your own UI tweaks for easy final user customization through sliders. Slicing and other time consuming operations now happen in the background.

The old IceSL is still available (IceSL-vanilla) and accessible from the start menu.

2015-08-07: Many new features! integration of our clean color algorithm (better travel that avoids ooze deposition and hides zippers), our latest ooze shields, 3D regular and hierarchical infilling, print azimuth optimization (minimizes interference between nozzles), small hole filter in case of imprecise geometries. Last but not least, we are now providing an open source API to develop your own input plugins for IceSL. The first open source plugin lets you model with OpenSCAD directly in IceSL!

IceSL has relatively high GPU requirements but runs on Intel HD graphics, AMD and NVidia hardware with OpenGL 4.3 support. Please make sure you are using the latest available drivers. We currently only distribute IceSL for Windows.

Join us on the IceSL Google group for more discussion!

Key features

IceSL is a modeler and slicer, all in the same software. Think of it as OpenSCAD meets Cura. By directly slicing the models IceSL avoids the expensive mesh CSG computation that most other softwares have to perform. On-screen preview is accurate and slicing is fast.

Better dual color prints

Our clean color algorithm takes several steps towards improving multi-filament print quality. It first orients the print so as to minimize interference between nozzles, and then uses a special travel move optimizer to reduce ooze deposition.
image post
Left: Printing without any optimization, Middle: with ooze shield only (see below), Right: with azimuth optimization and optimized travel moves. This test is using the #3DBenchy benchmark. Use this script to print, see instructions at the beginning for best results.

Better ooze shields

Our tight enclosure algorithm let us create nice ooze shields that remain close to the print at all times while being easy to remove.
image post
The ooze shield tightly encloses the object while being easy to remove. Twin cats by Mankati3DPrinter

Configurable brushes

Model with brushes and configure brush print parameters independently. This includes the number of shells, infill density, print speed, plastic flow, etc.
image post
A brush is used to reinforce the box around the hole. Left: script. Middle: 3D model. Right: one slice revealing the stronger infill around the hole.

Implicit surfaces

Shapes from shaders, your models no longer have to look simple. Fully exploits printer resolution by avoiding tessellation.
image post
This implicit surface is computed from a distance field generated from a GLSL code (left). It defines a sphere perturbed by a noise. Two such spheres are used to produce a dual color result.

Dual color ooze shields

Better dual color prints with oozing shields that stay close to the surface and yet, are easy to remove.
image post
Left: print embedded into the protective shield, Middle: shield, Right: print. Dragon by Valentine


Offsets can erode or dilate even the most complex objects!
image post
Left: erosion, Middle: original, Right: dilation. Dragon by Valentine


IceSL features a basic yet effective support technique. If preferred, you can of course import external meshes to act as support.
image post
Left to right: original, support (note the denser support below the object), print, result. Wolf by Everik99

Slice shaders

Add details to your models for free! Infinite procedural details generation, no two objects will ever be the same.
Dual color print of thing 16378. Preview in IceSL (left) and printed model (right). The black and white stripes are produced by a material shader. The stl is the unmodified thing 16378. See the Lua script and the material shader.

Quick start

Quick slicing

  • Download and install.
  • Launch IceSL from the desktop shortcut.
  • Open a STL file by clicking on the second icon at the bottom, or by pressing key '2'.
  • Choose printer and set up slicing parameters in the left tool bar.
  • Click on 'slice' or press the space bar. A dialog opens to ask where to save the G-code file.
  • Use keys '[' and ']' to navigate through layers.
  • Open the G-Code in your printer host software, print.

Quick scripting

  • Download and install.
  • Create 'helloworld.lua' in the folder of your choice.
  • Open it with your favorite editor (we use Notepad++).
  • Write 'emit( cube(10) )', save.
  • Drag and drop the file onto the IceSL icon (or open from IceSL with the 'open' icon, or launch from command line with 'IceSL helloworld.lua').
  • IceSL opens and you can see a cube. IceSL tracks changes in 'helloworld.lua'. If you modify and save, it will immediately update the view.
  • Click the 'slice' button or press the space bar. A dialog opens to ask where to save the G-code file.
  • Use keys '[' and ']' to navigate through layers.
  • Open the G-Code file in your printer host software, print.


IceSL uses Lua as modeling language. For instance: thumbnail s = sphere(10) emit(s) creates a sphere of radius 10 mm (millimeters). Note the emit function to spawn the primitive into the scene. In particular: thumbnail s = sphere(10) b = cube(15) emit(b) creates the box in the final scene but not the sphere.

IceSL supports difference, union and intersection: thumbnail s = sphere(10) b = cube(15) emit( difference(b,s) )

There are many, many other features, so be sure to read the documentation for all possible instructions.

Supported printers


IceSL produces G-Code through customizable printer profiles. We provide several printer profiles directly selectable from the interface. We use IceSL on a regular basis on a Replicator1, Replicator2, Ultimaker1, Ultimaker2, ORD Solution and we provide a generic RepRap profile.

To send the code to the printer use your favorite host software. We use ReplicatorG with Sailfish firmware on our Replicator Dual. When targeting an Ultimaker (1/2), the G-Code can directly be used on the printer.

Please be extra careful if you modify the profiles. The G-Code could make the nozzle collide with the platform or worse. Closely monitor the prints.


IceSL can output files for the B9Creator print software ('.b9j' job files). The default parameters are 50um per pixel, and 50um per layer. No need to slice! Simply click the 'Export .b9j file' button in the left bar. Material shaders are currently ignored, but this is planned for a later release.


If you are manufacturing printers and would like us to create a profile for your printer, please contact us!

We heard rumors that IceSL can also be used to laser cut :-) More on this soon!

image post

GPU requirements

Please make sure to install the latest drivers for your GPUs. This solves 90% of the cases where IceSL does not run. IceSL requires a GPU with full OpenGL 4.3 support. It has been tested on the following hardware:

  • [tested] GeForce GTX 480 / 580 / 680 / 970 / Titan
  • [tested] GeForce GT 555M
  • [tested] Intel HD 4400, 4600
  • [tested] AMD Radeon 290X (with limitations)


IceSL is free for non-commercial use (contact us for all other cases). The full licence text is here.

Please acknowledge us in any publication (paper, web page, blog, etc.) showing results done with IceSL: This is important for us to get support and continue our work.


  • Do you provide examples? Yes! IceSL comes with many examples, located in the 'models' folder. On a default install this would be in C:\Program Files (x86)\Inria\IceSL\models
  • Can I output a STL? No, not exactly. IceSL is meant to generate G-Code. If you really need a mesh then you can always export a 'csg' file that can be processed by OpenSCAD. IceSL can produce a mesh from the generated slices (see File > Export).
  • Will you support other GPUs? This is not a small task but we do our best to maintain the support for main GPUs vendors. If you run into trouble please make sure to upgrade your drivers, and if that does not solve the issue please let us now (we need to know the exact GPU model you are using).
  • Could the produced G-Code break my printer? Bad things could happen, yes. So be careful, check the G-Code, do not leave the print unattended. We never broke our printers, but we are extra careful.
  • IceSL is freezing when slicing... This is expected in IceSL-vanilla (output only occurs in the console window). However the new GUI (Icesl-forge) slices in the background so you can continue working on your models!
  • Text editor? IceSL-forge now includes a script editor. IceSL-vanilla continues to monitor file changes to the Lua script file and updates the view whenever the script changes.

Contact Info

Phone: +33 3 54 95 86 53

E-mail: Sylvain Lefebvre at inria dot fr