Skip to content

An extension to drive Silhouette vinyl cutters (e.g. Cameo, Portrait, Curio series) from within inkscape.


Notifications You must be signed in to change notification settings


Repository files navigation


Run Python tests

An extension to drive a Silhouette Cameo and similar plotter devices from within inkscape. 100% pure python, ontop of the libusb backend.

Here is the wiki with photos and a video:

Supported Devices

This extension should work with the following devices:

  • Silhouette Portrait
  • Silhouette Portrait 2 (working confirmed)
  • Silhouette Portrait 3
  • Silhouette Cameo
  • Silhouette Cameo 2
  • Silhouette Cameo 3
  • Silhouette Cameo 4
  • Silhouette Cameo 4 Plus
  • Silhouette Cameo 4 Pro
  • Silhouette Cameo 5
  • Silhouette Curio (partial success confirmed in #36)
  • Craft Robo CC200-20
  • Craft Robo CC300-20
  • Silhouette SD 1
  • Silhouette SD 2



Click to get steps

WARNING: SNAP packages may cause issues. We use deb file shown later in this section.

Install Inkscape and other requirements

# Add inkscape dev team's PPA key to APT.
# This project require minimum of inkscape V1.0+
# But we want to always keep to latest inkscape version
sudo add-apt-repository

# Install Inkscape
sudo apt-get update
sudo apt install inkscape

# Install Inkscape with newer version directly from inkscape dev team
# even if newer than what Ubuntu's package management team is willing
# to certify at the moment
sudo apt-get --with-new-pkgs upgrade inkscape

# Install requirements for usb support
sudo apt-get install python3-usb

# Install requirements for Silhouette Multiple Actions
sudo apt install python3-wxgtk4.0

# Install all requirements from python package manager
sudo apt-get install python3-pip
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

Install inkscape-silhouette

From here, you should have all the required python packages and inkscape version. So now we shall install inkscape-silhouette, so scroll down the latest releases and head to the Assets section of releases and click on the *.deb file. You can then use sudo apt-get install ./*.deb where *.deb is the name of your newly downloaded file.

Other Debian based Linux

Click to get steps
  • Download

  • Unzip the archive into a directory (which will be called inkscape-silhouette-main by default)

  • In a terminal, change into that directory

  • Execute make install-local to install just in your user account, or (if you have permissions) sudo make install to install for all users

  • sudo apt-get install python3-usb if you have permissions, otherwise python3 -m pip install usb

  • restart inkscape, check that you see new menu entries "Extensions -> Export -> Send to Silhouette" and " ... -> Silhouette Multi Action".


  • Same as Debian-based, except install the usb package with sudo zypper in python3-usb

Arch Linux

Click to get steps
sudo pacman -S inkscape python-lxml python-pyusb
git clone
cd inkscape-silhouette

and then either make install-local to install just for your user account, or sudo make install

Fedora Linux

Click to get steps

Install the necessary packages: sudo dnf install python3-pyusb python3-matplotlib make

Clone the inkscape-silhoutte repo and make/install the extension:

git clone
cd inkscape-silhouette
sudo make install

Add a new rule file to the udev device manager: sudo nano /etc/udev/rules.d/99-graphtec-silhouette.rules

And add the following: SUBSYSTEM=="usb", ATTR{idVendor}=="0b4d", ATTR{idProduct}=="1137", MODE="666"

Finally, load the file with: sudo udevadm trigger

Mac OS X

Click to get steps
  • Install prerequisites:
    • install homebrew
    • brew install libusb
    • brew install python3
  • Install the extension:
    • ./
    • Add brew python for user extensions in ~/Library/Application Support/org.inkscape.Inkscape/config/inkscape/preferences.xml on <group id="extensions" python-interpreter="/..." />. For details on selecting a specific interpreter version see Inkscape Wiki - Extension Interpreters:
      • python-interpreter="/usr/local/bin/python3" on X86 platform
      • python-interpreter="/opt/homebrew/bin/python3" on ARM platform (Apple Silicon)


Click to get steps

Note the recipe here specifies py39-libusb1. In case this is out of date, you need to choose the usb package appropriate to the version of python that runs by default as python3.

sudo pkg install inkscape py39-libusb1
cd /tmp
wget -c ""
cd inkscape-silhouette-main
sudo make install   # OR: make install-local  # latter installs only for this user


Click to get steps


These steps must be done with Silhouette device plugged in to USB port.

  • Download newest Zadig from
  • Go to menu options List all devices
  • Look for USB Printing Support in the dropdown list
  • Ensure USB ID is: 0B4D (Graftek America)
  • Select driver libusb-win32 (v1.2.6.0) which will install a libusb0-Port for Windows
  • Click replace driver

To later undo:

  • Run Zadig again
  • Go to menu options List all devices
  • Look for USB Printing Support in the dropdown list
  • Ensure USB ID is: 0B4D (Graftek America)
  • Select driver WinUsb which will undo the prior change.
  • Click replace driver

Python adapter

  • Inkscape usually comes with a Version of Python; ensure that feature under Program Files/Python is ticked upon installation or change/add features accordingly
  • Install pip (a package manager for python):
    • Download from and copy to the bin directory, e.g. C:\Program Files\Inkscape\bin
    • Open command line and navigate to the same directory, then enter .\python.exe '.\'
  • Install pyusb:
    • Still in command line enter .\python.exe -m pip install pyusb

Silhouette inkscape extension itself

  • Download
  • Open the downloaded file and select the following five items: silhouette, sendto_silhouette.inx,, silhouette_multi.inx,
  • Extract them to your share\inkscape\extensions directory, e.g. C:\Program Files\Inkscape\share\inkscape\extensions
  • Restart inkscape



Refer to the userguide instructions for further details.


Run --help for information on CLI usage.


  • Templates showing the cutting mat on a background layer can be found in examples/mat_templates
  • Copy those files into the templates subdirectory below inkscapes configuration directory
  • To identify the correct path open inkscape's preferences and selecting System. There you find the path as User templates
  • Those templates can then be selected within the dialog available through FileNew from Template...
  • Once you have created a new document from those templates you can import other *.svg-files and place the contained objects for cutting


>>> import usb.core
>>> usb.core.find()
<usb.core.Device object at 0xb720fb8c>

If this reports no usb.core.Device to you, please help troubleshoot.

>>> import usb.core
>>> usb.version_info[0]

This fails on win32/64 with 'module has no attribute 'version info' which then causes to error even though usb.core is installed.


  • Path sorting for monotonic cut. We limit backwards movement to only a few millimeters, and make the knive pull only towards sharp corners so that most designs can be done without a cutting mat!
  • Coordinate system conforms to inkscape SVG.
  • Exact Margins. Can start at (0,0).
  • Pen mode used to avoid the precut movement of the knive. Those movements are visible a) at the left hand side, when starting, b) at each sharp turn.
  • Bounding Box. Can optionally plot (or calculate only) the bounding box instead of plotting all strokes. This can be used (with low pressure=1 or removed knive) to just check, where the plot would be.
  • The standalone script can be used to test drive the SilhoutteCameo class.
  • Robust communication with the device. Small writes and timeouts are handled gracefully. Timeouts will occur, when we travel far with low speed.
  • Multipass: Can repeat each stroke multiple times to enhance plot or cut quality. This can also be used to attempt a cut without cutting mat, by applying very little pressure.
  • reverse toggle options, to cut the opposite direction. This might also be helpful with mat-free cutting via multipass.
  • honors hidden layers.

Misfeatures of InkCut that we do not 'feature'

  • object transforms are missing most of the time.
  • Stars, polygons, and boxes are plotted not closed, the final stroke is missing. (Must be me, no?)
  • always plots all layers, even if hidden.


  • Implement the triangle in a square test cut.

  • Test MatFree cutting strategy with the WC-Wunderbach-Wimpern font, which is especially well suited as a test-case.

  • Improve MatFree cutting by finding a better scan sort algorithm. Wide shadow casting towards negative y?

  • Implement paper-zip as a separate inkscape extension.



An extension to drive Silhouette vinyl cutters (e.g. Cameo, Portrait, Curio series) from within inkscape.