/inkscape-silhouette

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

Primary LanguagePythonGNU General Public License v2.0GPL-2.0

inkscape-silhouette

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: https://github.com/fablabnbg/inkscape-silhouette/wiki

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 Cameo 5 Plus
  • Silhouette Curio (partial success confirmed in #36)
  • Craft Robo CC200-20
  • Craft Robo CC300-20
  • Silhouette SD 1
  • Silhouette SD 2

Installation

Ubuntu

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 ppa:inkscape.dev/stable

# 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 https://github.com/fablabnbg/inkscape-silhouette/archive/main.zip

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

openSUSE

  • 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 https://github.com/fablabnbg/inkscape-silhouette.git
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 https://github.com/fablabnbg/inkscape-silhouette.git
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 http://brew.sh/
    • brew install libusb
    • brew install python3
  • Install the extension:
    • ./install_osx.py
    • 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)

FreeBSD

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 "https://github.com/fablabnbg/inkscape-silhouette/archive/main.zip"
unzip main.zip
cd inkscape-silhouette-main
sudo make install   # OR: make install-local  # latter installs only for this user

Windows

Click to get steps

Driver

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

  • Download newest Zadig from http://zadig.akeo.ie/
  • 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 get-pip.py from https://bootstrap.pypa.io/get-pip.py 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 '.\get-pip.py'
  • Install pyusb:
    • Still in command line enter .\python.exe -m pip install pyusb

Silhouette inkscape extension itself

  • Download https://github.com/fablabnbg/inkscape-silhouette/archive/main.zip
  • Open the downloaded file and select the following five items: silhouette, sendto_silhouette.inx, sendto_silhouette.py, silhouette_multi.inx, silhouette_multi.py
  • Extract them to your share\inkscape\extensions directory, e.g. C:\Program Files\Inkscape\share\inkscape\extensions
  • Restart inkscape

Usage

GUI

Refer to the userguide instructions for further details.

CLI

Run sendto_silhouette.py --help for information on CLI usage.


Templates

  • 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

Troubleshooting

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

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

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

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

Features

  • 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 arrow_test.py 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.

TODO

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

References