https://github.com/killedbyapixel/virtualplotter
A 3D pen plotter simulator in the browser.
https://github.com/killedbyapixel/virtualplotter
3d generative-art pen-plotter plotter plotter-art svg threejs
Last synced: 7 days ago
JSON representation
A 3D pen plotter simulator in the browser.
- Host: GitHub
- URL: https://github.com/killedbyapixel/virtualplotter
- Owner: KilledByAPixel
- License: gpl-3.0
- Created: 2026-07-01T02:43:10.000Z (14 days ago)
- Default Branch: master
- Last Pushed: 2026-07-03T22:05:43.000Z (11 days ago)
- Last Synced: 2026-07-06T19:32:38.467Z (8 days ago)
- Topics: 3d, generative-art, pen-plotter, plotter, plotter-art, svg, threejs
- Language: JavaScript
- Homepage: https://killedbyapixel.github.io/VirtualPlotter/
- Size: 364 KB
- Stars: 6
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Virtual Plotter
A 3D pen-plotter simulator in the browser. Drop in an SVG and watch a little
AxiDraw-style machine draw it on virtual paper — arm sliding, pen lifting,
stepper motors whirring. It doesn't make anything real but it's nice to watch.
# [LIVE DEMO](https://killedbyapixel.github.io/VirtualPlotter/)

## How To Use
Drag any SVG file onto the page and it loads onto the plotter. Then:
- **▶ Plot / ❚❚ Pause** — run or pause the drawing
- **Reset** — rewind the plot and send the pen home. The ink stays on the
sheet — plot over it as many times as you like, and loading another SVG
keeps the sheet too, so you can layer different drawings. The paper's
**Fresh** button (or picking a new sheet/type/size) is what clears it
- **Speed** — 1× (real time) up to 1000× for the impatient
- **Plot** — draw all layers, or just one
- **Pens** — every layer starts with its own fresh 0.5 fineliner in the SVG's
color; each row edits its pen directly (color, pen type, tip size). Click a
pen in the caddy to load that actual pen instead — color, tip, and ink
level come with it, and layers sharing a caddy pen share its ink. Customize
a borrowed caddy pen and the layer quietly gets its own copy (the caddy pen
is untouched). Each pen type has its own line character
(the marker blobs, the ballpoint dry-starts, the brush swells) and its ink
runs down as you plot — levels persist between visits. **Fresh** replaces a
dead pen, or untick **Ink simulation** for perfect ink with none of that.
Pausing a plot unlocks the pens, so you can swap or recolor mid-drawing —
the machine picks up the change when you resume. (The paper stays locked
until the plot is done: no sliding a new sheet under half a drawing.)
- **Paper** — choose a paper type in the panel or click the stack beside the
machine: bristol, watercolor (toothy), cheap copy (bleeds a little), or
black card (that's what the gel and metallic pens are for). The color
picker overrides the sheet color, and the size dropdown swaps in a
different standard sheet (A5 up to Tabloid) — the machine resizes to fit.
- **Clock** — estimated plot time ticks next to the mute button: it runs at
the simulation speed, so whatever the Speed setting, it approximates how
long the plot would take on a real machine (pausing freezes it; finishing
leaves the total showing).
- **Layer colors** — pick a pen color per layer before you start (Inkscape layers
are detected automatically)
- **🔊** — mute the motor and servo sounds (they only play at 1× speed anyway)
- **F** — toggle a free-fly camera: the mouse locks for looking around and
WASD + E/Q fly you through the scene; press F (or Esc) to return to orbit
- **H** — hide/show the whole interface (handy for a clean screenshot)
Recently plotted files are remembered so you can replay them. On a first
visit the Recent list starts with a built-in sample, so there's something to
plot before you have an SVG of your own.
## License
Copyright (C) 2026 Frank Force.
Released under the **GNU General Public License v3.0** — see [LICENSE](LICENSE).
You're free to use, study, share, and modify it, but any version you distribute
has to stay open source under the same license.