Pixels in. Curves out.

Kurviq traces PNGs and JPEGs into clean SVG. WebAssembly engine, zero runtime dependencies, byte-identical output for the same input and options — every run, every platform.

A pixelated ink shape resolving into a bird built from smooth curves and control handles
One command
npx kurviq --input in.png --output out.svg
Runtime deps
0
Engine
Wasm
Node.js
18+

Turn pixels into curves right here.

Drop in a PNG or JPEG, choose a recipe, and Kurviq returns an SVG without uploading your image anywhere.

Drop an image here

PNG or JPEG, up to 8 MB

Choose one PNG or JPEG no larger than 8 megabytes.

No image selected

Tracing recipe

SVG outputYour traced result will appear here.

Select an image to begin.

Images never leave your browser.

Built for pipelines, not dialogs.

Repeatable, scriptable, cacheable — the same bytes on every run.

01

Byte-stable

Repeated runs are byte-identical when the input bytes, options, Kurviq version, and platform are unchanged. Cache and review generated assets with confidence.

02

Self-contained Wasm

The vector engine ships with the package. There is no separate native executable to install and no runtime dependency tree to pull into production.

03

CLI and Node API

Use the command line in asset scripts, or call the synchronous CommonJS API with a Buffer or Uint8Array. The same options apply in both surfaces.

Recipes for difficult pixels.

Start with defaults, then add one deliberate correction for the source you actually have.

--upscale 2

Upscale before tracing

Use --upscale 2 for small labels and fine edges. Kurviq expands the working pixels while preserving the original SVG display size.

--remove-background auto

Remove real backgrounds

Border-connected removal handles uniform cells and attached neutral shadows, with channel protection for narrow gaps and near-white artwork.

--alpha-mode auto

Handle soft alpha

Auto mode detects meaningful partial transparency, resizes alpha-aware, and thresholds the result without letting hidden RGB bleed into the trace.

--sharpen

Sharpen flat artwork

Recover a compact palette from blurry icons before vectorization. The bare flag uses at most 12 colors and stays deterministic.

--mode spline

Fit smooth splines

A tested spline recipe keeps rounded icon contours smooth without over-segmenting every anti-aliased edge.

--gradient_step 8

Preserve gradients

Smaller gradient steps and full color precision retain soft shading when visual fidelity matters more than the smallest possible SVG.

Drag across raster and SVG.

These are real Kurviq traces, including small icons and a full infographic. File sizes are the source files shown.

Illustrations traced by Kurviq itself.

See all seven examples →
Robot Fox Sticker, raster input Robot Fox Sticker, traced SVG output SVG PNG
SVG: 132.6 KB PNG: 974.7 KB

Robot Fox Sticker

A die-cut mascot lifted from a magenta chroma card: bold outlines, small details, and the white keyline survive.

Capsule Speaker, raster input Capsule Speaker, traced SVG output SVG PNG
SVG: 1.82 MB PNG: 885.4 KB

Capsule Speaker

A softly modeled 3D object: gradient-aware tracing keeps volume and highlights while the green screen disappears.

Solar Drone Blueprint, raster input Solar Drone Blueprint, traced SVG output SVG PNG
SVG: 1.02 MB PNG: 956.6 KB

Solar Drone Blueprint

Fine cyan construction lines test precision, symmetry, and crisp technical geometry.

One package. Two entry points.

Install from npm, run the CLI immediately, or convert bytes and files from CommonJS.

CLI

Terminal
npm i kurviq
npx kurviq --input in.png --output out.svg

Node API

JavaScript
const fs = require('node:fs');
const { convert, convertFile } = require('kurviq');

const svg = convert(fs.readFileSync('in.png'), {
  mode: 'spline',
  upscale: 2,
  alphaMode: 'auto',
});

convertFile('in.png', 'out.svg', { preset: 'poster' });