mirror of
https://github.com/visioncortex/vtracer.git
synced 2026-09-15 08:35:56 -07:00
47 lines
3.8 KiB
Markdown
Generated
47 lines
3.8 KiB
Markdown
Generated
# VTracer 1.0 Design Documents
|
|
|
|
VTracer is being rearchitected from a single hardcoded pipeline into a **vectorization framework**. These documents describe the target design.
|
|
|
|
| Document | Contents |
|
|
|---|---|
|
|
| [architecture.md](architecture.md) | Workspace layout, core IR, stage traits, pipeline driver, optimizer & SVG writer, CLI |
|
|
| [mosaic.md](mosaic.md) | The seam-free cutout/mosaic mode: boundary-graph tracing and shared-edge curve fitting |
|
|
| [bindings.md](bindings.md) | Python (PyPI), wasm, and the new Node.js (npm) package |
|
|
| [roadmap.md](roadmap.md) | Milestones and verification strategy |
|
|
|
|
## Motivation
|
|
|
|
VTracer today (0.6.x) is a thin driver around the `visioncortex` crate: one pipeline (color clustering → per-cluster tracing → SVG string), a CLI, a pyo3 binding, and a web demo that duplicates the pipeline. The rewrite turns it into a framework with pluggable stages:
|
|
|
|
1. **Frontend** — any algorithm that produces clusters/segmentation from a raster image
|
|
2. **Curve fitting backend** — pluggable polyline→curve fitters (pixel, polygon, spline, future potrace-style)
|
|
3. **Color fitting** — mapping cluster colors to final paints, including custom fixed palettes
|
|
4. **Optimizer** — a pass pipeline that shrinks output (relative path syntax, shorthand commands, precision reduction)
|
|
5. **True mosaic cutout** — a perfect, gapless tessellation with shared boundary geometry, replacing today's fake cutout (which re-clusters a re-rendered image and shows seams)
|
|
|
|
The project stays backend/CLI focused, and everything except image file I/O compiles to `wasm32-unknown-unknown`.
|
|
|
|
## Decisions
|
|
|
|
- **`visioncortex` remains a dependency**, wrapped behind traits. Development uses a path/`[patch]` dependency on the local checkout; API additions are committed to visioncortex directly and published as 0.8.x releases. Verified that everything the new design needs is already public: the fitting primitives (`fit_points_with_bezier`, `find_corners`, `subdivide_keep_corners`, `reduce`, `PathSimplify::*`) and cluster pixel access via `ClustersView`.
|
|
- **In-repo rewrite, clean break.** New workspace layout, new API, version bump. Old CLI flags are kept only where they map naturally.
|
|
- **Python binding stays** (ported to the new API). The **webapp GUI is dropped**; a wasm library crate replaces it.
|
|
- **New Node.js library** published to npm, using the wasm build internally plus a native image reader (sharp).
|
|
|
|
## Pipeline at a glance
|
|
|
|
```
|
|
┌───────────┐ ┌──────────────┐ ┌─────────────────────────────┐
|
|
raster ───▶ │ Frontend │ ─▶│ ColorFitter* │ ─▶│ Compositing │
|
|
image │ (segment) │ │ (palette, │ │ Stacked: closed outlines │
|
|
└───────────┘ │ quantize, │ │ Mosaic: boundary graph + │
|
|
│ merge) │ │ shared-edge fit │
|
|
└──────────────┘ └──────────────┬──────────────┘
|
|
│ CurveFitter
|
|
▼ (pixel/polygon/spline)
|
|
┌──────────────────────────────┐
|
|
SVG ◀──── │ VectorDoc ─ OptimizerPass* ─ │
|
|
│ SvgWriter │
|
|
└──────────────────────────────┘
|
|
```
|