Juicy-GCode is a command-line application that converts SVG files to GCode. It provides flexible options for curve approximation and allows configurable GCode generation based on color information.
- Configurable Curve Approximation: Juicy-GCode offers three approximation methods to suit your needs
- with biarcs for maximal curve fitting: bezier curves are approximated with arcs (G2, G3 commands), the resulting path is G1 continuous
- with linear approximation when arcs are not supported by your firmware: bezier curves are approximated with line segments (G0, G1 commands), the resulting path is not smooth, and the generated GCode is usually significantly larger
- with cubic bezier curves if your firmware supports it: some firmwares (e.g. Marlin) can handle bezier curves directly (G5 command), the result is G2 continuous
- Configurable 2.5D GCode generation: Juicy-GCode allows you to configure the GCode generation by color information (this feature enables e.g. carving of 3D objects based on a single SVG file)
- extra GCode can be added to the beginning of a continous colored path
- GCode parameters e.g.
E
,F
orS
can be set per color - the number of passes can be set for a given color (upcoming feature)
The easiest way is to download one of the prebuilt binaries from the releases page. Alternatively, you can build from source code as follows:
- Install Stack if you do not have it yet
$ git clone https://github.com/domoszlai/juicy-gcode.git
$ stack build
$ stack install
$ juicy-gcode --help
⚠️ Breaking change: Since version 1.0.0.0, the flavor file format changed to YAML. If you use a pre 1.0 version, please refer to this historical README file
⚠️ Breaking change: Since version 0.3.0.0,--generate-bezier
has been removed in favor of the more generic--curve-fitting
parameter and--resolution
has been renamed to--tolerance
⚠️ Breaking change: Since version 0.2.0.1, default DPI is changed to 96 and the option to mirror the Y axis is removed (it is always mirrored now for correct result)
The easier way to use juicy-gcode is to simply provide an SVG file name. The generated GCode will be written to standard output. The default approximation method is the biarcs based.
$ juicy-gcode SVGFILE
Alternativly, you can provide an output file name as well.
$ juicy-gcode SVGFILE -o OUTPUT
Sometimes you want to overwrite some default settings. These are the
- --dpi (default 96 DPI) the resolution of the SVG file that is used to determine the size of the SVG when it does not contain explicit units
- --tolerance (default is 0.1 mm) maximum allowed deviation of the approximation curve
$ juicy-gcode SVGFILE --dpi 72 --tolerance 0.01
Curve fitting options (default is biarc
):
$ juicy-gcode SVGFILE --curve-fitting=biarc
$ juicy-gcode SVGFILE --curve-fitting=linear
$ juicy-gcode SVGFILE --curve-fitting=cubic-bezier
The generated GCode is highly dependent on the actual device it will be executed by and one might also want to generate different GCode for different colors. In juicy-gcode
these settings are called GCode flavor and consist of the following:
- Begin GCode routine (commands that are executed before the actual print job)
- End GCode routine (commands that are executed after the actual print job)
- Tool on (commands to switch the tool on, e.g. lower the pen)
- Tool off (commands to switch the tool off e.g. lift the pen)
- Color dependent settings
These settings can be provided by a YAML configuration file. The default settings are made for being able to test the generated GCode in an emulator e.g. with LaserWeb or my hanging plotter simulator.
begin: |
G17
G90
G0 Z1
G0 X0 Y0
end: |
G0 Z1
toolon: |
G01 Z0 F10.00
tooloff: |
G00 Z1
By providing your own configuration file, you can also specify color dependent settings. As an example, the following
configuration adds extra GCode configuration for the color codes #000000
and #FF0000
.
colors:
"000000":
before: |
; black
passes: 1
parameters:
F: 1.0
S: 80
"FF0000":
before: |
; red
passes: 1
parameters:
F: 2.0
S: 25
In this example, GCode comments will be generated before any continous red or black path, the F
and S
GCode parameters are
set different for red and black paths (and not set for any other colors) and the number of passes are set to 1 for both colors (passes is an upcoming feature, currently this option is ignored)
Use the -f
option to pass the GCode flavor to juicy-gcode
:
$ juicy-gcode SVGFILE -f FLAVORFILE
SVG features that are not supported:
- texts
- filling
- clipping
- images