Files
vtracer/CHANGELOG.md
T
Chris Tsang 87dd8f5168 Tidy the unreleased changelog
Watershed leads with its sub-features as nested bullets instead of one
paragraph-length entry; every bullet trimmed to its user-visible point.
2026-07-27 23:07:29 +01:00

5.1 KiB
Raw Blame History

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Unreleased

Added

  • Watershed clustering (--clustering watershed): a new region-forming frontend — a hierarchical watershed on the pixel graph (Cousty et al. 2009; Najman et al. 2013), controlled by one dial, --watershed-detail (0..=255; each +25.5 roughly doubles the region count). Regions follow image content, with no watershed-line pixels.
    • Boundaries come out calm: antialiased pixels snap to the color-midpoint iso-line instead of meandering with the noise inside the ramp.
    • stacked stacks the merge tree itself (coarse ancestors below, refined regions on top), so overdraw stays seam-free.
    • cutout gets the partition natively; neighbouring faces closer than max(2, (255 detail) / 8) merge, so faces a human cannot tell apart never survive as separate patches.
    • WatershedHierarchy is public, split into build (expensive, image-only) and cut (near-instant); Session re-cuts a cached hierarchy on detail changes, making the slider fully interactive (~25 ms vs ~40 ms on a 1400×775 photo).
  • Curve simplification (--simplify <tolerance>, Config::simplify; off by default): a paper.js-style Schneider re-fit — each smooth run between corners is redrawn with the fewest cubics that stay within the tolerance (px). Roughly halves file size (sample photo at tolerance 1: 229 → 138 KB stacked, 103 → 36 KB watershed cutout). Runs on fitted geometry before composition, so cutout simplifies each shared boundary once and stays seam-free; corners and junction endpoints stay pinned.
  • Binary thresholding: a tunable fixed threshold (--threshold) and BradleyRoth adaptive thresholding for uneven lighting (--adaptive, --adaptive-window, --adaptive-t) — also on Config, Python, and Node.
  • Cutout mode merges neighbouring faces whose colors are within one gradient step, rejoining the near-identical faces that stacked gradient layering splits a smooth area into.

Changed

  • color_mode is replaced by clustering (color-cluster | bw | watershed) across the CLI, Rust, Python, and Node — the field selects the region-forming algorithm, not a color space.
  • The spline fine-tuning flags (--corner-threshold, --segment-length, --splice-threshold) are hidden from CLI help — still accepted, but without their -c/-l/-s short forms. The defaults serve virtually every conversion; --simplify supersedes them.

Fixed

  • Spline fitting no longer swings far away from the outline around thin strands (a long-standing defect, fixed via visioncortex 0.9.1): a sparse splice slice could be fitted by a single cubic that passed through every sample yet ballooned up to ~30 px sideways between them. Slices are now densified before fitting and multi-cubic fits kept in full, in both stacked mode and the mosaic fitter.

1.0.0-alpha.1 - 2026-07-24

Ground-up rewrite of VTracer into a vectorization framework with pluggable stages.

Added

  • Pluggable pipeline: swappable frontend (segmentation), color fitting (incl. custom palettes), curve-fitting backend, and an optimizer pass phase.
  • Mosaic mode: true seam-free, gapless tessellation via shared boundary-graph tracing (pixel, polygon, and spline fitters), replacing the old "cutout" that produced seams.
  • SVG optimizer: relative path syntax, shorthand commands, and coordinate-precision reduction for smaller files.
  • @visioncortex/vtracer Node.js package (npm): wasm core with a native image reader.
  • Rewritten Python bindings (vtracer-py) with a richer API; pyo3 bumped to 0.26 (fixes CPython 3.14 segfaults, #124).
  • CLI accepts positional input/output arguments (#114).

Changed

  • Workspace restructured into crates/vtracer (core lib), crates/vtracer-cli, crates/vtracer-py, and nodejs/.
  • CLI upgraded from clap 2.x to 4.x (#118).
  • filter_speckle CLI cap raised from 16 to 128, matching the web app (#115).
  • Depends on visioncortex 0.9.
  • Python wheel CI now runs only on release tags and manual dispatch, not on every commit.

Removed

  • The pre-1.0 cmdapp crate and the demo webapp GUI.

0.6.12 - 2026-02-04

  • Python Binding

0.6.5 - 2025-10-17

  • Update fastrand to 2.3

0.6.4 - 2024-03-29

  • Update visioncortex version to 0.8.8

0.6.3 - 2023-11-21

0.6.1 - 2023-09-23

  • Fixed "The two lines are parallel!"

Python Binding

Thanks to the contribution of @etjones, we now have an official Python binding! https://github.com/visioncortex/vtracer/pull/55

https://pypi.org/project/vtracer/0.6.10/

0.5.0 - 2022-10-09

0.4.0 - 2021-07-23

  • SVG path string numeric precision

0.3.0 - 2021-01-24

  • Added cutout mode

0.2.0 - 2020-11-15

  • Use relative & closed paths

0.1.1 - 2020-11-01

  • SVG namespace

0.1.0 - 2020-10-31

  • Initial release