GetVect
GetVect

Raster → vector, entirely on your machine.

Drop in a PNG, JPEG or BMP. Get back SVG, EPS, DXF, PDF or PNG — traced by an offline engine, with a full control surface for palette, detail, smoothing and speck removal, and saved through the native dialog.

  • No account
  • No credits
  • No watermark
  • No upload
Read the docs Source on GitHub MIT · macOS · Node 20+
The GetVect fox: an orange cartoon fox sticker with a white outline

Before / after

Zoom in until one of them breaks.

Same fox, twice. On the left, the source PNG — real pixels, and at 16× they are all you get. On the right, the SVG GetVect traced from it: curve-fitted outlines that stay sharp at any magnification. Drag the divider, then change the zoom.

The fox as a 1024 by 1024 source PNG; magnified, its edges break into square pixels
The same fox after tracing, as a 17 KB SVG; magnified, its outlines stay smooth curves
SOURCE PNG TRACED SVG
Drag the divider · arrow keys work too
  • 17 KBSVG, from 352 KB
  • 36shapes, 5 layers
  • 8colours, Smart AA
  • 0network calls

The fox is both the mascot and the demo fixture. Traced at 8 colours with Smart anti-aliasing, its 352 KB raster becomes a 17 KB SVG in 5 colour layers and 36 shapes, with the transparent background preserved. The same source through vectorizer.io comes back 35.5 KB in 63 paths — and that comparison is not a boast, it is a checked-in exemplar the test harness measures against on every run.

What it does

Every control the job needs, on your own hardware.

Each of these has an acceptance spec behind it — one Playwright test per item in the project's reference checklist, run against the packaged app.

Ingest

Drag, drop, or pick

PNG, JPEG and BMP, by drag-and-drop or file picker. Unsupported files are rejected with a real message. Load several and switch between them in the sidebar.

Presets

Four tracing models

Clipart with seven detail levels, Photo, Sketch (grayscale) and Drawing (black and white with a luminance threshold). Tracing starts on load, off the UI thread, with visible progress.

Palette

Candidate palettes, then edit them

Auto-generated palettes at eleven fixed sizes from 1 to 18 colours, offered as selectable rows — plus an editor that recolours a swatch, merges two, or removes one.

Output colours

Transparency is a colour you switch off

Every output colour group has a toggle: disable the background colour and the export comes back transparent. Merge threshold and sort order sit beside it.

Quality

Smart anti-aliasing, on by default

Enhance (denoise and colour simplification), Noise Reduction off/low/high, and Anti-aliasing off/smart/mid. Smart is a pre-trace edge cleanup and it is worth 1747 sub-paths → 551 and 396 KB → 140 KB on the reference artwork.

Advanced

Roundness, minimum area, overlap, circles

Three curve-fitting levels, speck removal at 0 / 5 / 90 px², layer overlap, and circle detection. Results render as filled layers or stroked layers.

Preview

The preview is the file

Original/vector toggle and side-by-side, with zoom and pan synchronised across both panes. What you are looking at is the SVG that gets exported, not a re-render of it.

Export

Five formats, native save dialog

SVG with per-colour <g fill> layers that open in Illustrator or Inkscape as editable colour groups. DXF keeps its curves as degree-3 splines — or flattens to R12 polylines for older cutter firmware. Plus EPS, PDF and PNG.

The GetVect app: a noisy source raster in the left pane, the cleaned vector result in the right pane, and the full settings panel below with preset, palette, quality and advanced controls
Side-by-side view with the whole control surface below it. The speckle on the left is gone from the trace on the right.

AI Enhance — optional, bring your own key

Their best trick, running on your tracer.

vectorizer.io's "Enhance with AI" turned out not to be a filter at all. It is a generative image-to-image re-illustration — background removed, soft shading flattened into bands, outlines redrawn at even weight — after which their tracer is tracing art that is already flat. That is most of its advantage on shaded artwork, and no amount of median filtering reproduces it.

GetVect can do the same step by asking an image model for it. Paste your own Google Gemini API key, switch AI Enhance on, and the enhanced image becomes the working image the engine traces. One call, about eight seconds on a 1024 px source.

The trade, stated plainly

With AI Enhance on, that image is uploaded to Google under your own API key and their terms — which is exactly the thing the rest of this app exists to avoid. Nothing else changes: no other image, no other feature, no telemetry, and the switch is off until you turn it on.

The key is encrypted at rest with Electron's safeStorage (Keychain on macOS), lives only in the main process and is never returned to the UI. If the OS has no keystore, GetVect refuses to store a key rather than writing it in the clear. If a run fails — bad key, no network, 60 s timeout — the un-enhanced image is traced instead and the app says why.

The fully-local version — background removal, then an on-device generative flatten, with nothing leaving the machine — is the plan of record in issue #1. The provider layer was written for it. Setup, quality tiers and the debug switch are in the docs.

How it was built

A pit crew gauntlet, graded against the real product.

GetVect was written almost entirely by a multi-agent loop where three roles take turns on one repo. Builders implement a slice at a time. Critics start with fresh context, read only the spec and the running app, and score it. And a pit crew does nothing but build measurement. The bet under test: a loop's speed limit is measurement, not intelligence.

The biggest correction came from refusing to grade against adjectives. "Matches vectorizer.io" doesn't fail CI — so the real product got driven live in a browser, its output read at a dozen settings combinations, and those outputs checked in as exemplars with fully-known parameters. That recon rewrote the spec and surfaced the finding the engine now revolves around: Smart anti-aliasing collapses path count by ~81% at otherwise identical settings — 637 paths to 63 on the fox.

And it caught itself cheating

For a whole lap the instruments fed the engine a white-flattened image no UI could produce, while the app's own decode handed it black for transparent pixels. Every transparent-background PNG — the entire sticker and decal use case — traced an invented opaque background and scored green. A number measured on pixels the product never sees is not a measurement of the product. There is now a decode-parity spec whose only job is to go red the moment the app and the harness disagree.