Skip to content

1.0.0-alpha.2

Choose a tag to compare

@tyt2y3 tyt2y3 released this 27 Jul 22:35
· 18 commits to master since this release

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, simplify in Python and Node; 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 Bradley–Roth 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.