# vpypetools

# Deduplicate Plugin

Source: [<span>https://github.com/LoicGoulefert/deduplicate</span>](https://github.com/LoicGoulefert/deduplicate)

```bash
pip3 install tqdm
pip3 install git+https://github.com/LoicGoulefert/deduplicate.git#egg=deduplicate
```

# Filter

Filter paths according to specified criterion. When an option is provided (e.g. <cite>--min-length 10cm</cite>) the corresponding criterion is applied and paths which do not respect the criterion (e.g. a 9cm-long path) are rejected. If multiple options are provided, paths will be kept only if they respect every corresponding criterion (i.e. logical AND operator). See [https://vpype.readthedocs.io/en/stable/reference.html#filter](https://vpype.readthedocs.io/en/stable/reference.html#filter). Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode "vpype Free Mode") which can do the same and more.

<p class="callout info">Similar extension to [Filter By Length/Area](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/filter-by-lengtharea "Filter By Length/Area")</p>

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/ZP9wmjAnrkdLtuJh-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/ZP9wmjAnrkdLtuJh-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/AMrIXFCHEPMVv1Pw-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/AMrIXFCHEPMVv1Pw-grafik.png)

# Line Merging (Combine Paths)

Merge lines whose endings and starts overlap or are very close. By default, <cite>linemerge</cite> considers both directions of a stroke. If there is no additional start of a stroke within the provided tolerance, it also checks for ending points of strokes and uses them in reverse. You can use the <cite>--no-flip</cite> to disable this reversing behaviour and preserve the stroke direction from the input. By default, gaps of maximum 0.05mm are considered for merging. Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode) which can do the same and more.

See [https://vpype.readthedocs.io/en/stable/reference.html#linemerge](https://vpype.readthedocs.io/en/stable/reference.html#linemerge)

<p class="callout info">Similar extension to [Chain Paths](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/chain-paths), [Join Paths / Create Tabs And Dimples](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/join-paths-create-tabs-and-dimples), [Close Paths](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/close-paths)</p>

<p class="callout info">Similar to default function "Path → Combine" (CTRL + K)</p>

<p class="callout info">inverted function is [Split All](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/split-all)</p>

<p class="callout warning">Warning: Can mess your paths because it does not delete overlapping duplicate line segments!  
</p>

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/Y7eMmtLIsHiCe19s-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/Y7eMmtLIsHiCe19s-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/U5HGIUrYgxKkoFKY-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/U5HGIUrYgxKkoFKY-grafik.png)

## Draw some paths and attach the path node ends with each other

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/xPI23PyVu7xrsEtH-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/xPI23PyVu7xrsEtH-grafik.png)

## Run the extension and get the result

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/nYH4k1yjCIbjYm9b-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/nYH4k1yjCIbjYm9b-grafik.png)

# Line Sorting

- This extension is similar to [Optimize Sequence: Travel Distances](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/optimize-sequence-travel-distances "Optimize Sequence: Travel Distances") and [Optimize Sequence: Small Holes First](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/optimize-sequence-small-holes-first "Optimize Sequence: Small Holes First").
- Also have a look at [https://github.com/inconvergent/svgsort](https://github.com/inconvergent/svgsort) which could be another great path planning tool for InkScape.
- Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode "vpype Free Mode") which can do the same and more.

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/OQ0e1DQWkIn3GVKY-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/OQ0e1DQWkIn3GVKY-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/dkEbASLpUM9dowNs-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/dkEbASLpUM9dowNs-grafik.png)

## Example

<table border="1" id="bkmrk-before-conversion-af" style="border-collapse: collapse; width: 99.9734%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><thead><tr><td>**Before conversion**</td><td>**After conversion (showing the same lines sorted plus traveling lines + conversion statistics)**</td></tr></thead><tbody><tr><td>[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/2lmQ1AdQemR0AWql-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/2lmQ1AdQemR0AWql-grafik.png)

</td><td>[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/dct1vpbgYaz37tmI-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/dct1vpbgYaz37tmI-grafik.png)

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/YMCmVXL1ZuhVvpmd-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/YMCmVXL1ZuhVvpmd-grafik.png)

</td></tr></tbody></table>

# Multipass

Add multiple passes to each line. Each line is extended with a mirrored copy of itself, optionally multiple times. This is useful for pens that need several passes to ensure a good quality. See [https://vpype.readthedocs.io/en/stable/reference.html#multipass](https://vpype.readthedocs.io/en/stable/reference.html#multipass). Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode) which can do the same and more.

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/7bMMIQq0D7d6tfV6-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/7bMMIQq0D7d6tfV6-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/nQAsz5tfiPs2VH3g-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/nQAsz5tfiPs2VH3g-grafik.png)

# Occult Plugin (Hidden / Superimposed Line Removal)

This plugin command removes lines hidden by polygons. It acts like a trimmer to receive a clean set of visible paths only. **It does not remove common lines between opened paths, but for <u>closed</u> polygons.** You need to install occult plugin for vpype. See vpypetools documentation.

It's a great helper for optimizing cutting jobs. It is really powerful in conjunction with [Line Sorting](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/line-sorting). Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode) which can do the same and more.

**Key phrases: remove overlapping lines, superimposed lines, remove duplicated lines, purge redundant lines, purge doubled lines, remove common edges, remove occulted lines, hidden line removal, retrace edges, chain paths, clean paths**

This extension is similar (**but superior**) to

- [Chain Paths](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/chain-paths)
- [Join Paths / Create Tabs And Dimples](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/join-paths-create-tabs-and-dimples)
- [Purge Duplicate Path Segments](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/purge-duplicate-path-segments)

<p class="callout info">Also have a look at [Purge Duplicate Path Nodes](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/purge-duplicate-path-nodes) if you only want to remove duplicate knot handles in a path.</p>

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/FuWMMfuxLC9kY4Sd-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/FuWMMfuxLC9kY4Sd-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/M7jAMQ3tdWy1u68u-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/M7jAMQ3tdWy1u68u-grafik.png)

## Troubleshooting / Upgrade extension

If the extension does not generate any output and you cannot explain why, please check if you have the latest version installed. Sometimes exceptions are hidden which show up when running from console instead.

Typical error like this:

```bash
Traceback (most recent call last):
  File "c:\users\tomate\appdata\local\programs\python\python39\lib\site-packages\click_plugins\core.py", line 37, in decorator
    group.add_command(entry_point.load())
  File "c:\users\tomate\appdata\local\programs\python\python39\lib\site-packages\pkg_resources\__init__.py", line 2450, in load
    return self.resolve()
  File "c:\users\tomate\appdata\local\programs\python\python39\lib\site-packages\pkg_resources\__init__.py", line 2456, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "c:\users\tomate\appdata\local\programs\python\python39\lib\site-packages\occult\occult.py", line 7, in <module>
    import pygeos
  File "c:\users\tomate\appdata\local\programs\python\python39\lib\site-packages\pygeos\__init__.py", line 1, in <module>
    from .lib import GEOSException  # NOQA
ImportError: DLL load failed while importing lib: Die angegebene Prozedur wurde nicht gefunden.
```

You can remove and reinstall the following way:

```bash
#failed
#pip3 install --upgrade git+https://github.com/LoicGoulefert/occult.git#egg=occult
 
#worked
pip3 uninstall git+https://github.com/LoicGoulefert/occult.git#egg=occult
pip3 install git+https://github.com/LoicGoulefert/occult.git#egg=occult
```

## Simple example

### Draw some rectangles

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/edP4j6KF1ZVQ1ESD-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/edP4j6KF1ZVQ1ESD-grafik.png)

### Layout edges above each other (simulate having common edges)

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/GeOotGVwkpcuEudK-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/GeOotGVwkpcuEudK-grafik.png)

### Run extension to remove common edges

Move the paths to some other directions to see how the edge removal was worked out

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/qfj7t0XSHGlvBtBW-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/qfj7t0XSHGlvBtBW-grafik.png)

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/esLX6HHlsNP78o8Q-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/esLX6HHlsNP78o8Q-grafik.png)

# Relooping

Randomize the seam location of closed paths. When plotted, closed path may exhibit a visible mark at the seam, i.e. the location where the pen begins and ends the stroke. This command randomizes the seam location in order to help reduce visual effect of this in plots with regular patterns. Paths are considered closed when their beginning and end points are closer than some tolerance. See [https://vpype.readthedocs.io/en/stable/reference.html#reloop](https://vpype.readthedocs.io/en/stable/reference.html#reloop). Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode "vpype Free Mode") which can do the same and more.

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/f2Ujg4BCKq6mimTu-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/f2Ujg4BCKq6mimTu-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/kOVguK5qwwzgxS1G-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/kOVguK5qwwzgxS1G-grafik.png)

# Split All

Split all paths into their constituent segments. This command may be used together with linemerge for cases such as densely-connected meshes where the latter cannot optimize well enough by itself. This command will filter out segments with identical end-points. Note that since some paths (especially curved ones) can be made of a large number of segments, this command may significantly increase the processing time of the pipeline.

<p class="callout info">The inverted function is [Line Merging (Combine Paths)](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/line-merging-combine-paths "Line Merging (Combine Paths)")</p>

<p class="callout warning">Split All extension might be really slow on large documents. Maybe you can go get some coffee while it performs.</p>

## Create some paths

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/Lm4t6Ym4pk8rJEiQ-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/Lm4t6Ym4pk8rJEiQ-grafik.png)

## Run the extension

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/EpnQ0aXItv5GmxuM-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/EpnQ0aXItv5GmxuM-grafik.png)

## Get the result

We can move all lines separately now, like this:

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/N9vYLtM419i4LJkF-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/N9vYLtM419i4LJkF-grafik.png)

# Trimming

Trim the geometries by some margin. This command trims the geometries by the provided X and Y margins with respect to the current bounding box. Also check out [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode "vpype Free Mode") which can do the same and more.

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/dKi09lMKgQ8BKksL-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/dKi09lMKgQ8BKksL-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/qKqgsU1M63YFD9l3-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/qKqgsU1M63YFD9l3-grafik.png)

## Draw some paths

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/kUxMeVjJZZwxQeaV-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/kUxMeVjJZZwxQeaV-grafik.png)

## Run the extension and get result

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/B6C7pMNJzPSm3rum-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/B6C7pMNJzPSm3rum-grafik.png)

# vpype Free Mode

This extension mode for vpypetools allows to execute one up to five command sets in the given row. It works on the current selection of paths, or if nothing selected it applies to all paths in the document. You can do exactly the same like in [Filter](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/filter), [Line Sorting](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/line-sorting) and so on, but you are freely more versatile entering combinations as you like. Free Mode allows to enter different units, like **"trim 1mm 3cm"**

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/KUPatnUUDuN08ERb-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/KUPatnUUDuN08ERb-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/xgYKWRpJDPtrqesR-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/xgYKWRpJDPtrqesR-grafik.png) [![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/69qyi7rZ0dhIcbjU-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/69qyi7rZ0dhIcbjU-grafik.png)

# vpypetools Intro

[![grafik.png](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/scaled-1680-/CMcAojYfIVDjjwYa-grafik.png)](https://wiki.stadtfabrikanten.org/uploads/images/gallery/2025-05/CMcAojYfIVDjjwYa-grafik.png)

## About vpype and this extension

vpype is a command processor working with SVG files. It can do a lot of productive steps to optimize files for different purposes like pen plotting, laser cutting or the generation of creative artwork. vpype is really powerful and helps to extend Inkscape feature capability. vpype contains a lot of functionality which is included natively within Inkscape. The extension "vpype for Inkscape" does not deal with all features but with a set of important commands like linemerge, linesort, linesimplify, occult, etc. We can use it to shorten tool path lengths, remove hidden lines and so on.

vpype converts all elements into simple SVG elements like **svg:line**, **svg:polyline** and **svg:polygon**. They can be displayed properly in Inkscape, but they have no knot handles to edit (see [https://alpha.inkscape.org/vectors/www.inkscapeforum.com/viewtopicb51d.html?f=16&amp;t=32562](https://alpha.inkscape.org/vectors/www.inkscapeforum.com/viewtopicb51d.html?f=16&t=32562)). We need to convert those elements to **svg:path** using key combination **CTRL + SHIFT + C** ("object to path"; do not use "stroke to path" because it will duplicate your outline with inset and outset contours). Our extension allows to do this conversion **automatically**.

## Caveats of vpype

- requires to simplify bezier curves to polylines (reduces quality)
- does not honor the individual line styles (like width, color, miter, ...) - the output lines all will have the same style. We can work with vpype layerwise to distinguish between different styles
- output is done in svg:line, svg:polyline and svg:polygon. Converting them back in Inkscape (we need paths) is really slow. Native svg:path output would be great

**![(Info)](https://old.stadtfabrikanten.org/s/-6fzg5h/9012/tu5x00/_/images/icons/emoticons/information.svg) Source code → [https://github.com/abey79/vpype](https://github.com/abey79/vpype)**

## Preparations (Installation of vpype)

At first we need to install vpype and occult extension. It was tested successfully...

- with Python 3.8.5 on Ubuntu 20 LTS (Python 3.9 failed to install vpype and occult)
- with Python 3.9 on Windows 10

We use vpype 1.7 (2021-06-10)

vpype Changelog: [https://vpype.readthedocs.io/en/stable/CHANGELOG.html](https://vpype.readthedocs.io/en/stable/CHANGELOG.html)

## Linux / Windows Python modules

```bash
pip install vpype
#pip install git+https://github.com/abey79/vpype.git
 
#or by using pipx
pip uninstall vpype
pip install pipx
pipx ensurepath
# restart your shell
pipx install "vpype[all]"
 
#extra module occult
pip install git+https://github.com/LoicGoulefert/occult.git#egg=occult
#or
pip install vpype-occult
 
#extra module deduplicate
pip install git+https://github.com/LoicGoulefert/deduplicate.git#egg=deduplicate
```

## Special inclusions and similarities to existing Inkscape extensions

- linemerge: [Join Paths / Create Tabs And Dimples](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/join-paths-create-tabs-and-dimples), [Close Paths](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/close-paths) and [Chain Paths](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/chain-paths)
- linesort: [Optimize Sequence: Travel Distances](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/optimize-sequence-travel-distances) and [Optimize Sequence: Small Holes First](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/optimize-sequence-small-holes-first)
- linesimplify: native function "Path → Simplify"
- filter: [Contour Scanner And Trimmer](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/contour-scanner-and-trimmer)
- multipass: none
- occult: [Purge Duplicate Path Nodes](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/purge-duplicate-path-nodes) and [Purge Duplicate Path Segments](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/purge-duplicate-path-segments)
- trim: [Destructive Clip](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/destructive-clip)

**Overview by docs**

- [Deduplicate Plugin](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/deduplicate-plugin)
- [Filter](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/filter)
- [Line Merging (Combine Paths)](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/line-merging-combine-paths)
- [Line Sorting](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/line-sorting)
- [Multipass](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/multipass)
- [Occult Plugin (Hidden / Superimposed Line Removal)](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/occult-plugin-hidden-superimposed-line-removal)
- [Relooping](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/relooping)
- [Split All](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/split-all)
- [Trimming](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/trimming)
- [vpype Free Mode](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/vpype-free-mode)

## Feature exclusions

As mentioned vpype has a lot of features, but we do not need all of them. We decided to exclude or handle the following functions more strictly because a lot of stuff is integrated in Inkscape natively. You can try to use [vpype Free Mode](https://old.stadtfabrikanten.org/display/IFM/vpype+Free+Mode) to use these.

<table border="1" id="bkmrk-category-comments-pr" style="border-collapse: collapse; width: 99.9734%; height: 419.284px;"><colgroup><col style="width: 12.2597%;"></col><col style="width: 87.7414%;"></col></colgroup><thead><tr style="height: 38.1167px;"><td style="height: 38.1167px;">**category**</td><td style="height: 38.1167px;">**comments**</td></tr></thead><tbody><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Primitives</td><td style="height: 38.1167px;">```bash
arc, circle, ellipse, line, rect
```

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Block control</td><td style="height: 38.1167px;">```bash
begin, end
```

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Operation</td><td style="height: 38.1167px;">```bash
crop         # we use trim feature instead 
layout       #Inkscape:  CTRL + SHIFT + D 
pagesize     #Inkscape:  CTRL + SHIFT + D
reverse      #Inkscape:  Path > Reverse
```

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Generators</td><td style="height: 38.1167px;">```bash
frame  #see "Bounding Box" extension
random
```

See [Bounding Box](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/bounding-box)

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Block processors</td><td style="height: 38.1167px;">```bash
grid, repeat
```

Native functions inside Inkscape

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Layers</td><td style="height: 38.1167px;">```bash
lcopy, ldelete, lmove
```

This is too generic to make use inside Inkscape

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Input</td><td style="height: 38.1167px;">```bash
script
```

This is too generic to make use inside Inkscape

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Transforms</td><td style="height: 38.1167px;">```bash
rotate, scale, scaleto, skew, translate
```

See [Scale To Path Length](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/scale-to-path-length), [Scale To Real](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/scale-to-real), [Scale To Size (Replaced by default transform scale)](https://wiki.stadtfabrikanten.org/books/fablab-chemnitz/page/scale-to-size-replaced-by-default-transform-scale) and native functions like path effects and transformations

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Filters</td><td style="height: 38.1167px;">```bash
squiggles
```

</td></tr><tr style="height: 38.1167px;"><td style="height: 38.1167px;">Text</td><td style="height: 38.1167px;">```bash
text
```

See [Hershey Text Alternative](https://old.stadtfabrikanten.org/display/IFM/Hershey+Text+Alternative)

</td></tr></tbody></table>

## Troubleshooting

Problem:

```bash
Traceback (most recent call last):
  File "C:\Users\tomate\AppData\Roaming\inkscape\extensions\mightyscape-1.2\extensions\fablabchemnitz\vpypetools\vpypetools.py", line 17, in <module>
    import vpype_viewer
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\__init__.py", line 6, in <module>
    from .engine import *
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\engine.py", line 13, in <module>
    from ._painters import (
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\_painters.py", line 9, in <module>
    from ._utils import ColorType, load_program, load_texture_array
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\_utils.py", line 9, in <module>
    from PIL import Image
ModuleNotFoundError: No module named 'PIL'
```

Solution:

```bash
Traceback (most recent call last):
  File "C:\Users\tomate\AppData\Roaming\inkscape\extensions\mightyscape-1.2\extensions\fablabchemnitz\vpypetools\vpypetools.py", line 17, in <module>
    import vpype_viewer
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\__init__.py", line 6, in <module>
    from .engine import *
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\engine.py", line 13, in <module>
    from ._painters import (
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\_painters.py", line 9, in <module>
    from ._utils import ColorType, load_program, load_texture_array
  File "C:\Users\tomate\AppData\Local\Programs\Python\Python39\lib\site-packages\vpype_viewer\_utils.py", line 9, in <module>
    from PIL import Image
ModuleNotFoundError: No module named 'PIL'
```