Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 23:47

What's New πŸŽ‰

[1.2.0] - 2026-07-03

Added

  • Peek at the original: hold O to flash the source image in place of the traced vectors for a quick fidelity check. Works for opened, dropped, and pasted raster images (inactive for SVG/blank sources).
  • Fill all same color: the Fill tool gained an "All same color" toggle β€” clicking a path replaces its color on every path that shares it (fill and stroke), making global recolors one click. Fully undoable.
  • Output palette panel: a floating palette (bottom-left of the canvas) lists every color in the result with its path count. Click a swatch to recolor that color everywhere, or pick another palette color to merge the two into one. Undoable like all canvas edits.
  • Tool keyboard shortcuts: one-key tool switching β€” H Pan, V Select, B Draw, L Lines, U Shape, E Erase, F Fill, A Reshape β€” plus zoom keys (+/-, Ctrl+0 fit, Ctrl+1 100%) and a keyboard-shortcuts cheat sheet on ? (or the ⌨ toolbar button) covering all tools, view, edit, and app shortcuts.
  • PNG export with resolution multiplier: the export dropdown now includes PNG with a 1Γ—/2Γ—/4Γ— scale selector β€” re-rasterize your cleaned-up vectors at up to 4Γ— the source resolution (true supersampled rendering, works in single export and Quick Save).
  • Drop files anytime: drag-and-drop now works with an image already loaded (a drop hint overlays the workspace), and dropping an .svg opens it for direct editing just like Open does.
  • Settings persist across sessions: all fine-tune settings (mode, colors, thresholds, preset, Auto-Render, export format) are remembered between launches.
  • Window title shows the loaded file name.
  • Smart preset suggestion: on load, the image-type detector (Sobel + entropy analysis, previously unused by the UI) classifies the image and offers a matching preset in a dismissible chip β€” "Looks like a photo β†’ Apply" / "Looks like pixel art β†’ Apply".
  • Crash guard: a top-level error boundary turns any unexpected interface error into a recoverable in-app screen (with the error text and a Recover button) instead of a white window.
  • Auto threshold (Otsu): B&W and Centerline modes gained an ✨ Auto button that computes the statistically optimal threshold for the loaded image via Otsu's method on the same Rec. 601 luma the tracer uses β€” no more guessing on the 1–254 slider.
  • Auto colors: the Colors slider gained an ✨ Auto button that picks the smallest palette explaining β‰₯92% of the image's color variance (backed by the previously-unwired palette-quality analyzer).
  • Despeckle: one-click toolbar cleanup removes tiny closed shapes below a chosen size (2/3/5/8px) left over from tracing or editing β€” with a removed-count flash, fully undoable.
  • Simplify All: one click adaptively reduces node counts across every path at once (each path gets an epsilon scaled to its size and node density) β€” ideal before plotter/laser/CNC export where nodes are cost. Shows the removed-node count; undoable; click again to go further.
  • Copy as PNG: a πŸ–Ό PNG button next to Copy renders the vectors at 2Γ— and places the image on the system clipboard β€” paste straight into chat, docs, or image editors.
  • Shift constraints everywhere: hold Shift to snap rotation to 90Β° increments, lock drag-moves to horizontal/vertical, straighten the curves connected to a dragged Reshape anchor, snap a dragged Reshape control handle to 45Β° around its anchor, draw straight 45Β°-snapped lines with the Draw tool, and snap Lines-tool segments to 45Β° (the Shape tool's proportion lock already existed). All listed in the ⌨ cheat sheet.

Changed

  • Smaller SVG and EPS files: exported coordinates now use compact number formatting (up to 2 decimals with trailing zeros trimmed β€” max 0.005px deviation, visually identical); SVG additionally drops redundant separators before path commands. Typical exports shrink 25–60% depending on content, verified pixel-identical by the visual-regression suite.
  • Snappier re-processing: vectorization now runs on a background thread and each new run cancels the in-flight one, so dragging sliders with Auto-Render on no longer queues stale full-pipeline work β€” only the newest settings are traced to completion.
  • ~55% faster pipeline: color quantization β€” the pipeline hotspot β€” is now multi-threaded (rayon) in its three embarrassingly-parallel loops (Lab conversion, K-means assignment, K-means++ seeding). The 1024Γ—1024 benchmark drops from 553 ms to 249 ms; output is bit-for-bit identical (the accumulation step stays serial to keep float summation deterministic, verified by the golden-SVG snapshot).
  • ~18Γ— faster bitmap export: the supersampled rasterizer now renders rows in parallel (paths still painted in z-order; every pixel written by exactly one thread, so output is byte-identical). A 4Γ— PNG re-rasterization of a real-world image dropped from 70.4 s to 3.8 s.
  • Removed the superseded wizard-era UI (wizard steps, segmentation tool panels, advanced/palette/viewer panels and their stores, ~1,900 lines of unmounted code) that was never reachable from the live single-screen UI; appStore now contains only live state. Slims the bundle and removes a whole class of "which code path is real?" confusion.

Fixed

  • Draw tool strokes now keep their brush size: the Size slider previously only affected the live preview β€” the committed path was stored without a stroke width, so it rendered and exported as a filled centerline sliver. Drawn paths are now real stroked paths (stroke width = brush size, in image pixels). Draw and Erase also get independent sizes: Draw defaults to 4 px and maxes at 20, Erase keeps its 1–100 px range.
  • Stroked paths (drawn strokes, shapes with outlines, centerline traces) are now clickable along their visible stroke for Select/Fill/Erase β€” hit-testing previously only registered their fill geometry.
  • Fill tool now recolors centerline (open stroked) paths β€” previously it only set the invisible fill color, so clicks appeared to do nothing.
  • Quick Save (Ctrl+S) silently did nothing when DXF was the last-used export format β€” the generic re-export call omitted DXF's required arguments and the failure was swallowed. Export dispatch is now centralized and format-aware.
  • Drag-and-dropped images were vectorized through a leftover legacy code path with hardcoded default settings instead of the settings shown in the sidebar; file loading is now unified so Open, drop, and paste all use the same flow.

[1.1.0] - 2026-07-03

Added

  • Tracing modes: new Mode selector with four options β€” Color, Grayscale, Black & White (binary), and Centerline. Grayscale collapses the image to tonal shades; Black & White produces two-tone outline tracing with a Threshold slider and Invert toggle (ideal for logos, text, and scanned line art).
  • Centerline (skeleton) tracing: brand-new engine that traces a single open stroke down the middle of each line rather than a doubled outline. Pipeline: threshold β†’ Zhang-Suen thinning β†’ junction-aware skeleton traversal β†’ Douglas-Peucker simplification β†’ cubic-BΓ©zier fitting β†’ stroked open paths. Purpose-built for line art, signatures, handwriting, technical/CAD drawings, and single-line plotter/laser/Cricut workflows. Adjustable stroke width.
  • Layering control: choose Stacked (layered shapes with shared edges) or Cutout (non-overlapping) clustering for color mode, plus a Gradient Step slider to tune how aggressively similar shades merge into layers.
  • Straighten edges (on by default): a new post-trace regularization pass makes geometric artwork trace faithfully β€” wobbly multi-segment edges merge into true straight lines (with a net-turn cap that provably never flattens curves), near-horizontal/vertical edges snap perfectly square, and pixel-rounding corner chamfers are sharpened to exact edge intersections. Toggleable in Fine-tune.
  • Color-grouped SVG output: optional "Group by color" export merges same-color paths into per-color <g> layers, producing dramatically smaller files and clean color separation for downstream editing.
  • Output statistics panel: live readout of path count, node (segment) count, unique colors, and open-stroke count for the current result.
  • Per-color DXF layers: DXF export now places each color on its own named layer (COLOR_RRGGBB) tinted with the nearest ACI color, so CAD/cutter software can separate colors.
  • Open-path export across formats: SVG, EPS, PDF, and bitmap exporters now render open, stroked centerline paths correctly (stroke-only, round caps/joins) instead of filling them.
  • Two new presets: B&W / Line, Grayscale, and Sketch / Centerline.
  • Lines tool (multi-click polygon): classic paint-style drawing β€” each click places a vertex with a live rubber-band preview, double-click or Enter closes the shape into a filled path, Escape cancels.

Changed

  • Select and Reshape panels merged into the toolbar: path-selection actions (delete/duplicate/merge/z-order) and reshape node/path actions (delete node, simplify, straighten, scale) now appear as subpanels directly under the main canvas toolbar instead of separate floating panels on the right.
  • Frontend vectorization config is now built from a single source of truth (buildConfig) rather than four duplicated inline objects.
  • vtracer splice_threshold aligned to the upstream default (45Β°) for smoother spline joins.

[1.0.0] - 2026-06-18

Added

  • Core vectorization pipeline: decode β†’ quantize β†’ segment β†’ trace β†’ simplify β†’ corners β†’ fit β†’ optimize β†’ export
  • Input formats: PNG, JPG, BMP, GIF (first frame), TIFF
  • Output formats: SVG, EPS, PDF, DXF (Spline & Line-only), Bitmap (PNG/BMP/JPEG)
  • Color quantization: K-means++ in CIE Lab color space with configurable color count (2–256)
  • Anti-aliasing detection: Sub-pixel edge placement using AA gradient data for smoother curves
  • Image type auto-detection: Photo, AntiAliased, and Aliased classification via Sobel + entropy analysis
  • Quality presets: Low, Medium, High with mapped pipeline parameters
  • Wizard UI: 5-step guided workflow (Image Type β†’ Quality β†’ Color Mode β†’ Review β†’ Export)
  • Palette editor: Add, remove, reorder colors; quick palette suggestions at multiple color counts
  • Segmentation editor: Pencil, Eyedropper, Finder, and Zap tools with undo/reset (20-level stack)
  • Three-way view toggle: Original, Segmentation, and Vector views with keyboard shortcuts (1/2/3)
  • Advanced parameter panel: Smoothness, corner threshold, color count, AA sensitivity sliders
  • Transparency handling: Transparent mode (omit alpha regions) or flatten-to-color mode
  • Zoom/pan canvas: Mouse wheel zoom (0.25×–16Γ—), middle-click/spacebar pan, fit-to-window, 1:1 buttons
  • Progress reporting: Real-time pipeline stage progress via Tauri events
  • Clipboard paste: Ctrl+V to paste and vectorize images from clipboard
  • Quick Save: Ctrl+S for instant re-export with last-used settings
  • Drag-and-drop output: Drag exported files to other applications via OLE
  • Image resizer: Auto-downsample large images (>4MP) with pixel-averaging box filter
  • Re-vectorize: Run pipeline from trace stage onward after segmentation edits
  • SVG flatten: Rasterize and re-vectorize an SVG to remove hidden/overlapping geometry
  • Performance benchmarks: Criterion benchmarks for pipeline at multiple resolutions
  • Memory optimization: Chunked Lab conversion, streaming boundary tracing, debug-level allocation logging
  • Visual regression tests: resvg-based pixel comparison with RMSE threshold
  • Property tests: proptest-based randomized input validation (no panics, valid output)
  • Format integration tests: Structural validation for SVG, EPS, PDF, DXF exports
  • GitHub Actions CI: Build workflow triggered on tag push (v*)
  • Documentation: README, CONTRIBUTING, docs/ARCHITECTURE

Known Limitations

  • DXF color mapping limited to 256 ACI indexed colors
  • GIF animation not supported (first frame only)