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
This extension should work with the following devices:
- Silhouette Portrait
- Silhouette Portrait 2 (working confirmed)
- Silhouette Portrait 3
- Silhouette Portrait 4 (working confirmed)
- 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
Click to get steps
WARNING: SNAP packages may cause issues. We use deb file shown later in this section.
# 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
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.
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, otherwisepython3 -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
Click to get steps
sudo pacman -S inkscape python-lxml python-pyusb python-tinycss2 python-matplotlib
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
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
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 platformpython-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 "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
Click to get steps
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 alibusb0
-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
- 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 thebin
directory, e.g.C:\Program Files\Inkscape\bin
- Open command line and navigate to the same directory, then enter
.\python.exe '.\get-pip.py'
- Download
- Install pyusb:
- Still in command line enter
.\python.exe -m pip install pyusb
- Still in command line enter
- 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
Refer to the userguide instructions for further details.
Run sendto_silhouette.py --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 asUser templates
- Those templates can then be selected within the dialog available through
File
→New 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.
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.
- 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 theSilhoutteCameo
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.
- 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.