Offline Image to Vector Converter Software: No-Cloud Benchmarks
Three local image-to-vector tracers, three inputs, every number paired with the command that produced it and the raw JSON it came from.
Yes — offline image-to-vector conversion works today, with no cloud in the path. On 2026-09-28 we ran three local tracers — our VTracer-backed engine, potrace 1.16 and Inkscape 1.4.4 headless Trace Bitmap — on three images on one Apple-silicon Mac, twice each (18 tracer executions), with the harness recording offline: true: not one call left the machine. Potrace traced every input in 0.021–0.028 s but only ever produces one colour layer; the engine took 0.473–2.474 s and returned 8–326 editable path elements with no embedded bitmap; Inkscape took 2.794–5.276 s and left the source bitmap inside its exported SVG. The five top results for this query publish offline marketing copy, prices and listicle rankings — three of them rank the publisher own product first — but none publishes the exact command behind its numbers; ours are printed below next to the raw JSON they came from. If you would rather install nothing, our image to SVG converter runs in the browser, and like every hosted converter it uploads your image to api.pic2svg.com.
Trace preset:Balanced (Auto)▼
Applies to images you add next — each one traces as it lands.
Primary Evidence
Wall time and output structure, every tool on every input
Run 1 is the first pass recorded in /loop06/raw-measurements.json; recheck is the independent second execution in /loop06/recheck.json. Wall time moves with system load, so we report it but do not compare it across runs — what we compare is output structure. On the recheck the engine rows and the potrace rows matched all seven deterministic fields (bytes, sha256, M-commands, path elements, distinct fills, distinct colours, image elements); the three Inkscape rows were compared on the four fields pre-declared for them in the recheck script (M-commands, path elements, distinct colours, image elements — the set hard-coded as INKSCAPE_FIELDS at /loop06/verify_recheck.py lines 39-40). potrace wall time is the trace call only; the Pillow threshold prep that feeds it is shown in parentheses. Two caveats on this block. The artifacts behind it — /loop06/raw-measurements.json, /loop06/recheck.json, measure.py and verify_recheck.py — are published with this page at /loop06/, so every number below can be checked against the file it came from without cloning anything. And wall time is a single observation per cell: on the recheck the same Inkscape call on og-image went 2.794 s → 6.874 s and potrace 0.025 s → 0.417 s, so only the deterministic output fields reproduce and this timing column is a measurement, not a stable ranking. No side-by-side output screenshots were taken (evidence gap), so each tracer’s visual result is inspectable here only as the structural counts in these columns.
ClaimsC01C02C03C04C05C06C07C08C09C10C37
Source: /loop06/raw-measurements.json (generated 2026-09-28T17:45:54+0800) and /loop06/recheck.json (2026-09-28T17:46:21+0800)
| Input | Tool | Run 1 (s) | Recheck (s) | Output bytes | Bytes excl. embedded bitmap | Path elements | Distinct colours | Embedded <image> | Source | Claims |
|---|---|---|---|---|---|---|---|---|---|---|
| apple-touch-icon.png (180×180) | any2svg engine (VTracer 0.6.15) | 2.474 | 0.835 | 71,502 | 71,502 | 326 | 148 | 0 | /loop06/raw-measurements.json#runs[0].measurements[0] | C01 |
| apple-touch-icon.png (180×180) | potrace 1.16 (1-bit threshold trace) | 0.021 (0.029 incl. prep) | 0.012 | 1,322 | 1,322 | 1 | 1 | 0 | /loop06/raw-measurements.json#runs[0].measurements[1] | C02 |
| apple-touch-icon.png (180×180) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 5.276 | 1.955 | 29,689 | 20,869 | 7 | 7 | 1 | /loop06/raw-measurements.json#runs[0].measurements[2] | C03 |
| og-image.png (1200×630) | any2svg engine (VTracer 0.6.15) | 0.473 | 0.686 | 21,388 | 21,388 | 125 | 83 | 0 | /loop06/raw-measurements.json#runs[1].measurements[0] | C04 |
| og-image.png (1200×630) | potrace 1.16 (1-bit threshold trace) | 0.025 (0.037 incl. prep) | 0.417 | 21,123 | 21,123 | 83 | 1 | 0 | /loop06/raw-measurements.json#runs[1].measurements[1] | C05 |
| og-image.png (1200×630) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 2.794 | 6.874 | 551,569 | 462,368 | 8 | 8 | 1 | /loop06/raw-measurements.json#runs[1].measurements[2] | C06 |
| synthetic-flat.png (800×600, generated) | any2svg engine (VTracer 0.6.15) | 0.590 | 0.555 | 23,273 | 23,273 | 8 | 8 | 0 | /loop06/raw-measurements.json#runs[2].measurements[0] | C07 |
| synthetic-flat.png (800×600, generated) | potrace 1.16 (1-bit threshold trace) | 0.028 (0.040 incl. prep) | 0.015 | 771 | 771 | 1 | 1 | 0 | /loop06/raw-measurements.json#runs[2].measurements[1] | C08 |
| synthetic-flat.png (800×600, generated) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 2.818 | 2.584 | 6,759 | 1,605 | 4 | 4 | 1 | /loop06/raw-measurements.json#runs[2].measurements[2] | C09 |
The three inputs, hashed
Two are checked-in assets from this repo; the third is generated deterministically by the harness, so you can rebuild it exactly. The 48-colour rule decides straight-edged polygon vs smooth spline tracing and it runs on a 256px thumbnail — which is why the synthetic image, six colours at full size, crosses the threshold after resampling.
Source: /loop06/raw-measurements.json · /loop06/measure.py lines 73
| Input | Dimensions | File bytes | Distinct RGB colours | Quantised colours (256px thumb) | Engine mode picked | SHA-256 | Source | Claims |
|---|---|---|---|---|---|---|---|---|
| public/apple-touch-icon.png | 180×180 | 6,101 | 205 | 16 | polygon | 12eafc7f7e0f4cb48d17704fa40f663e4db97e18790b9bed35a1699c363bf768 | /loop06/raw-measurements.json#runs[0].input | C11 |
| public/og-image.png | 1200×630 | 62,665 | 257 | 24 | polygon | bd699b52e5ff340bd1e23ac7886a99731e61bc7631be470e78febed2043c39c0 | /loop06/raw-measurements.json#runs[1].input | C11 |
| synthetic-flat.png (generated by measure.py make_synthetic) | 800×600 | 3,523 | 6 | 49 | spline (early exit over 48) | 74d27fa8b341b236550743301eaeea8b5d0f2455d472deca9a904fba49a13ea4 | /loop06/raw-measurements.json#runs[2].input | C11C37 |
Exactly what we ran
Version strings are read by the harness itself, not copied from a website. Everything below was on PATH at measurement time.
Source: /loop06/raw-measurements.json tool_versions, generated 2026-09-28T17:45:54+0800
| Component | Version observed | Provenance | Source | Claims |
|---|---|---|---|---|
| Python | 3.13.5 (venv313 interpreter) | measured | /loop06/raw-measurements.json#tool_versions.python | C12 |
| vtracer | 0.6.15 | measured (importlib.metadata) | /loop06/raw-measurements.json#tool_versions.vtracer | C12 |
| Pillow | 12.3.0 | measured | /loop06/raw-measurements.json#tool_versions.pillow | C12 |
| potrace | potrace 1.16. Copyright (C) 2001-2019 Peter Selinger. | measured | /loop06/raw-measurements.json#tool_versions.potrace | C12 |
| Inkscape | Inkscape 1.4.4 (dcaf3e7, 2026-05-05) | measured | /loop06/raw-measurements.json#tool_versions.inkscape | C12 |
| Homebrew | Homebrew 7.0.7-9-gcc9ff03 | measured | /loop06/raw-measurements.json#tool_versions.homebrew | C12 |
| Host | macOS-27.0-arm64-arm-64bit-Mach-Oarm6410 CPUs | measured | /loop06/raw-measurements.json#tool_versions.platform / machine / cpu_count | C12 |
| Network during the run | offline: true — the harness shells out to local binaries only | measured | /loop06/measure.py lines 132 | C36C12 |
What the top five results for this query publish — and what they leave out
SERP captured 2026-09-28T13:25:12Z on Bing (10 organic results, echo verified; positions 1–5 fetched to HTML and quote-matched — serp-capture.md section 2). Positions 1–2 are vendor product pages; positions 3–5 are listicles that each rank the publisher own product first (/loop06/serp-capture.md lines 143). Every quote below is verbatim from that page’s fetched HTML, and each Source cell leads with the live URL it came from; where serp-capture.md also archives the quote line-by-line, that file ref follows the URL, and rank-3 and rank-5 HTML exists only in the 2026-09-28 capture (temp dir, disclosed in the evidence gaps), so those rows anchor to the live URL rather than to a durable repo file. Coverage is engine- and hour-specific: one query, Bing only, no Google or other-engine cross-check, positions 1–5 of the 10 organic results, no SERP features captured, and an earlier same-day capture shared only positions 1, 2 and 4. None of this is a quality score: we did not score visual output, and seven competitor tools (SVG Genie Desktop, PixToVector, Vecto, Vector Magic Desktop, Scan2CAD, Illustrator, Vectorizer.AI) were never installed or run, so their cells stay vendor-claimed or inherited, not measured. Do not read VectoSolve’s Speed Benchmarks against our timing table: its Potrace 1.2 s and Inkscape 28.6 s are a 1200x800px illustration (450 KB) timed on an M3 MacBook Pro over 100 Mbps, while our 0.021–0.028 s and 2.794–5.276 s are local offline traces of 180x180, 1200x630 and 800x600 inputs on one arm64 machine with prep included — different input, machine and boundary, so the ~40x gap is non-comparable rather than contradictory. The omits column is what we did not find: a reproduction command, a raw run file or an input hash behind any figure. Each omits cell was re-grepped against page HTML on 2026-09-29 — saved fetches for ranks 1, 2 and 4, live re-fetches for the temp-only rank-3 and rank-5 pages — and the exact patterns and per-file counts are recorded in claim-ledger C30.
ClaimsC15C16C17C18C19C20C21C22C23C24C25C26C27C28C29C30
Source: /loop06/serp.json · /loop06/serp-capture.md · research/loop06/fetches/
| SERP rank | Page | What it publishes (verbatim) | What it does not publish | Source | Claims |
|---|---|---|---|---|---|
| 1 | apps.microsoft.com/detail/9p4m4lgw2vl0 (PixToVector) | "Seamless & Fast Image-to-SVG Vector Conversion — 100% Offline!""PixToVector runs locally, so your images stay private and no internet connection is required for conversion."store JSON-LD offer price 0 (Free) | No wall-clock timing, no sample size, no reproduction command, no raw output. | https://apps.microsoft.com/detail/9p4m4lgw2vl0 | C16C17C18C30 |
| 2 | svggenie.com/desktop (SVG Genie Desktop) | "100% Offline. Zero Uploads. Your images never leave your machine. No internet. No cloud. No privacy concerns. Ever.""Buy it once for $99 or get it included with Agency Studio Annual.""<1s" / "Average conversion time""Three steps. Under 10 seconds." | The "<1s average conversion time" figure carries no sample size, no stated test conditions and no reproduction command. | https://www.svggenie.com/desktop | C19C20C21C30 |
| 3 | svggenie.com/blog/best-offline-image-to-svg-converters-2026 (SVG Genie own blog) | "1. SVG Genie Desktop — Best Overall / 2. Vector Magic Desktop — High Quality, High Price / 3. Adobe Illustrator Image Trace — The All-in-One Option / 4. Inkscape with Potrace — Best Free Option / 5. VTracer CLI — Best for Developers""$99 one-time — no subscription, no per-image charges""$295 one-time — nearly 3x the price of SVG Genie Desktop" | Self-ranked first by the vendor own blog; competitors are priced against its own product; no reproduction command, no raw output. | https://www.svggenie.com/blog/best-offline-image-to-svg-converters-2026 | C22C23C29C30 |
| 4 | svgvector.com/blog/image-to-vector-software-guide.html | "1. Super Vectorizer Pro (Mac & Windows) / 2. Adobe Illustrator (Mac & Windows) / 3. Inkscape (Mac, Windows, Linux) — Free / …""Files stay on your machine""A private, offline alternative to cloud vectorizers.""price ($295 for the desktop license)" | Its #1 pick is the site own downloadable product, linked from the same page; no reproduction command, no raw output. | https://www.svgvector.com/blog/image-to-vector-software-guide.html | C24C25C29C30 |
| 5 | vectosolve.com/blog/best-image-to-vector-converter-2026 | "We spent three weeks testing every major image-to-vector converter — uploading the same 24 test images to each tool, measuring output quality, speed, and value."a Speed Benchmarks table (Potrace 1.2 s … Inkscape 28.6 s, "Timed on M3 MacBook Pro, 100 Mbps")"1. VectoSolve — Best Overall & Best AI" with its own row reading "Not scored (our tool)" | Its method uploads every image — the workflow this query searcher is refusing — and its own tool is the one row exempted from scoring; no reproduction command or input hash for its timings. | https://vectosolve.com/blog/best-image-to-vector-converter-2026 | C26C27C28C29C30 |
Price and execution boundary, with provenance on every row
Two rows are our own repo, two are 2026-09-28 SERP fetches, the rest are inherited from earlier research passes or the local 2026-09-25 pricing archive — each row says which. Nothing in this table was re-fetched live by this run except the rows whose provenance says measured fetch. Where it runs is the execution boundary: only the local rows ever keep your image on your machine.
ClaimsC18C20C31C32C33C34C35C40C41C12
Source: research/loop06/dossier.json pricingFacts[] · research/loop06/fetches/ · this repo · local pricing archive 2026-09-25
| Tool | Price | Where it runs | Provenance | Source | Claims |
|---|---|---|---|---|---|
| Inkscape Trace Bitmap | $0 — free and open source (GPL-2.0-or-later); no checkout page exists | local desktop app; headless CLI trace measured here | inherited — Loop 02 pricing_verified as_of 2026-09-28, not re-fetched by this run | research/loop06/dossier.json | C34 |
| potrace 1.16 | no pricing page consulted; the binary reports potrace 1.16. Copyright (C) 2001-2019 Peter Selinger. | local CLI, 1-bit input only | measured | /loop06/raw-measurements.json#tool_versions.potrace | C12C02 |
| VTracer (Python wheel) | no pricing page consulted; version 0.6.15 measured from installed metadata | local library driving our engine | measured | /loop06/raw-measurements.json#tool_versions.vtracer | C12 |
| Vector Magic Desktop | $295 / license (one-time)online edition $9.95 / month | vendor-claimed to convert offline in the desktop edition; we did not run it | inherited — local archive dated Fri 25 Sep 2026, also pricing_verified by Loop 02 as_of 2026-09-28 | https://www.vectormagic.com/pricing | C32 |
| Vectorizer.AI Web App Unlimited | $9.99 / month, billed monthly, cancel anytime | cloud — images are uploaded to the service | inherited — local archive dated Fri 25 Sep 2026, also pricing_verified by Loop 02 as_of 2026-09-28 | https://vectorizer.ai/pricing | C31 |
| Scan2CAD Business | $1,599.00 / year — the tier that gates Batch convert and API and Offline licensing (inherited Loop 02 evidence; not re-fetched live, source behind a bot challenge) | desktop, offline licensing paid at the Business tier | inherited — Loop 02 verify pass as_of 2026-09-28; not re-fetched by this run; the live pricing URL serves only a bot-challenge interstitial (re-checked 2026-09-29), so the figure is verified against the archived HTML below | https://web.archive.org/web/20260611171010/https://www.scan2cad.com/pricing/ | C33 |
| SVG Genie Desktop | $99 one-time (or included with Agency Studio Annual) | vendor-claimed local/offline; we did not install it | measured fetch — 2026-09-28 SERP top-5 capture, HTTP 200 | https://www.svggenie.com/desktop | C20C19 |
| PixToVector (Microsoft Store) | Free — JSON-LD offer price field 0 | vendor-claimed local; we did not install it | measured fetch — 2026-09-28 SERP top-5 capture, HTTP 200 | https://apps.microsoft.com/detail/9p4m4lgw2vl0 | C18C17 |
| pic2svg.com Pro Unlimited (this site) | $9.99 / mo, billed monthly | HOSTED — the web app posts your image as base64 to api.pic2svg.com; it does not run on your machine | measured from this repo (src/payment/plans.ts, src/convert/actions.ts), read 2026-09-28; live pricing page not fetched | src/payment/plans.ts lines 31 | C35C40C41 |
The exact commands behind every number above
These are the commands as the harness invoked them, re-rooted to repo-relative paths so you can copy them — the absolute paths it actually used are recorded verbatim in /loop06/raw-measurements.json. Copy them, run them, diff the output against ours.
ClaimsC01C02C03C04C05C06C07C08C09C10C14C39
potrace — 1-bit threshold prep, then trace
bash · /loop06/measure.py lines 167-175
python3 - <<'PY'
from PIL import Image
img = Image.open("input.png").convert("L")
img.point(lambda v: 255 if v >= 128 else 0, mode="1").save("input.pbm")
PY
potrace -s -o output.svg input.pbmInkscape 1.4.4 — headless Trace Bitmap via the object-trace action
bash · /loop06/measure.py lines 212
inkscape --actions="select-all;object-trace:8,1,0,0,2,1,1;export-filename:output.svg;export-do" input.png
# object-trace arguments, in order: scans, smooth, stack, remove_background,
# speckles, smooth_corners, optimize — parsed as numbers, not booleans.
# The source bitmap stays in the document, so the exported SVG still contains
# one <image> element; measure.py reports bytes_without_embedded_image too.any2svg engine — VTracer-backed local trace, balanced preset
bash · /loop06/raw-measurements.json runs[0].measurements[0].command
venv313/bin/python \
python/any2svg_engine.py \
--input public/apple-touch-icon.png \
--outdir /tmp/any2svg-out --preset balanced --mode autoEngine export flags (present in the CLI, NOT exercised in this run)
bash · python/any2svg_engine.py lines 562
python3 python/any2svg_engine.py --input input.png --outdir out \
--preset sharp --mode polygon --export pdf eps ai dxf --dxf-samples 12The parser accepts --export pdf eps ai dxf and --dxf-samples N. This run measured SVG output only; treat DXF/PDF/EPS/AI as available-in-source, not-tested.
Re-run our whole benchmark and verify it independently
bash · /loop06/verify_recheck.py lines 1
cd research/loop06/measurements
python3 measure.py # writes raw-measurements.json
python3 verify_recheck.py # re-runs everything, exits 0 on all_passThe harness ran these inside a local virtualenv named venv313, which is not published; the two JSON files they write are, next to this page at /loop06/.
Folder batch with potrace (composition of the measured call — NOT separately timed)
bash · /loop06/measure.py lines 167
python3 - <<'PY'
import glob, os, subprocess
from PIL import Image
for src in glob.glob("in/*.png"):
stem = os.path.splitext(src)[0]
Image.open(src).convert("L").point(lambda v: 255 if v >= 128 else 0, mode="1").save(stem + ".pbm")
subprocess.run(["potrace", "-s", "-o", stem + ".svg", stem + ".pbm"], check=True)
print("wrote", stem + ".svg")
PYEvery step inside this loop is the measured potrace path; the loop itself was not timed, so no throughput number is claimed for it.
Practical Implementation Guide
Five steps, each one backed by a command we actually ran on 2026-09-28. Nothing here needs an account, a key, or an upload.
- Step 1
Confirm what is already on your machine
Run inkscape --version, potrace --version and python3 --version — the harness reads all three the same way (/loop06/measure.py lines 237-262), so you are comparing like with like. We measured Inkscape 1.4.4 (dcaf3e7, 2026-05-05), potrace 1.16, Python 3.13.5, vtracer 0.6.15 and Pillow 12.3.0. If your Inkscape is older than 1.4 the object-trace action may not accept these arguments — check with inkscape --action-list | grep trace before going further. Version checks only; no install command is claimed as measured here.
- Step 2
Trace line art with potrace (fastest, one colour layer)
potrace only accepts a 1-bit input, so the image is thresholded at 128 with Pillow first — that prep plus the trace is what we timed at 0.029 s, 0.037 s and 0.040 s for our three inputs. Use it for logos, stamps, masks and anything that should come out as a single colour path. Use the cmd-potrace sample above.
- Step 3
Trace colour images with the VTracer-backed engine
The engine counts distinct quantised colours on a 256px thumbnail and switches mode at 48: at or below it, straight-edged polygons; above it, smooth splines (/loop06/measure.py lines 73). That is why our six-colour synthetic image was traced in spline mode — resampling pushed it to 49. Run cmd-engine with --preset balanced --mode auto and read the JSON manifest on stdout: it names the mode, the canvas and the SVG path. One caveat we hit: under Python 3.14.4 the vtracer 0.6.15 binding segfaulted in a child process (exit -11), so the measured setup is Python 3.13.5.
- Step 4
Run Inkscape headless when you want its trace, not its GUI
The object-trace action takes its parameters inline (8,1,0,0,2,1,1 = scans, smooth, stack, remove_background, speckles, smooth_corners, optimize), and --action-list shows no separate non-GUI trace action — this parameterised call is the one that worked, exiting 0 in 2.333 s with 7 path elements. Expect the exported file to still contain the source bitmap as an <image> element; compare the bytes-excl.-embedded-bitmap column before judging file size. Use cmd-inkscape above.
- Step 5
Re-run the harness and make it disagree with us, or confirm it
Run cmd-harness. verify_recheck.py re-executes all nine measurements, regenerates the synthetic input deterministically, and compares seven fields for the engine and potrace rows (bytes, sha256, M-commands, path elements, distinct fills, distinct colours, image element count) and four for the Inkscape rows (M-commands, path elements, distinct colours, image elements) — a four-field set pre-declared and hard-coded as INKSCAPE_FIELDS at /loop06/verify_recheck.py lines 39-40, so bytes and sha256 are compared for the engine and potrace rows but not for the Inkscape rows. Our run returned all_pass = true; if yours does not, the mismatch object names the field and both values. Wall time is recorded for context but deliberately not compared — it moves with load.
Transparent Methodology
ClaimsC10C12C13C14C15C36C37C42
- Research date
- 2026-09-28
- Measurement timestamps
- /loop06/raw-measurements.json generated 2026-09-28T17:45:54+0800; /loop06/recheck.json generated 2026-09-28T17:46:21+0800; inkscape-cli-probe.json 2026-09-28T17:47; python314-vtracer-probe.json 2026-09-28T17:15; SERP captured 2026-09-28T13:25:12.285Z.
- Environment
- macOS-27.0-arm64-arm-64bit-Mach-O, arm64, 10 CPUs. The harness records offline: true and only ever calls local subprocesses — measure.py lines 132 (engine), 175 (potrace) and 216 (inkscape) — no network call, no upload, for any of the three tools.
- Sample size
- 3 images (2 checked-in PNGs + 1 generated) x 3 tools = 9 first-pass measurements. Every one was executed a second time by verify_recheck.py: 9 more executions — 18 tracer executions in total — plus 3 input SHA-256 re-verifications. Every wall-time cell is a single observation on this one arm64 Mac (10 CPUs) — one timing per cell, reported alongside the output structure and never treated as a stable ranking (the recheck moved the same Inkscape call 2.794 s → 6.874 s and potrace 0.025 s → 0.417 s). SERP side: 1 query, 1 engine (Bing, headed Chrome), 10 organic results, 5 of them fetched to HTML and quote-matched.
- Tool versions
- Python 3.13.5 · vtracer 0.6.15 · Pillow 12.3.0 · potrace 1.16 · Inkscape 1.4.4 (dcaf3e7, 2026-05-05) · Homebrew 7.0.7-9-gcc9ff03.
- Metrics defined
- wall_seconds = perf_counter around the subprocess. bytes = file size of the produced SVG. bytes_without_embedded_image = the same file with every <image> element removed. path_elements = count of <path. distinct_colors = distinct fill/stroke values after dropping none/inherit/opacity/currentcolor. m_commands = M/m operators inside all d attributes. recheck wall time is recorded for context only and never compared.
- Provenance labels
- measured — executed in this run, raw JSON on diskre-measured — executed a second time by verify_recheck.py, deterministic fields comparedmeasured fetch — page fetched to HTML on 2026-09-28 and the quote grep-matched against itvendor-claimed — stated by the vendor own page, we did not run the toolinherited — carried from Loop 01 (2026-09-27), Loop 02 (2026-09-28), Loop 03 (2026-09-28) or the local pricing archive (2026-09-25); not re-fetched by this runnot-tested — we did not install, run or verify it
- Not tested by this run
- Vectorizer.AI, Vector Magic Desktop, Scan2CAD, SVG Genie Desktop, PixToVector, Adobe Illustrator and Vector Magic online edition were not installed and not run. No live URL was fetched by the dossier pass for pricing; those rows are inherited and dated as such. DXF/PDF/EPS/AI export flags exist in the engine CLI but were not exercised here. Bing was the only search engine sampled (Google and the others were not), only positions 1-5 of the 10 organic results were fetched, and SERP features (featured snippets, PAA, AI Overviews) were not captured.
- Known variance
- Wall time differs between pass 1 and the recheck — our Inkscape run on og-image went 2.794 s to 6.874 s and potrace on the same file 0.025 s to 0.417 s, on the recheck. Deterministic output fields matched where they were compared; that is the number we stand behind, not the stopwatch.
- Known discrepancy
- probe_inkscape_cli.py docstring still describes an earlier bare --actions="select-all;object-trace;export-do" attempt that never returned. The recorded JSON (inkscape-cli-probe.json) is from the parameterised call and reads verdict: measured - headless object-trace produced 7 path elements, exit 0 — corroborated independently by the three Inkscape rows in /loop06/raw-measurements.json. The docstring is stale narrative, not evidence. Separately, an earlier draft of this page carried wrong source line numbers for the potrace and Inkscape subprocess calls, for the 48-colour rule and for the engine export flags; every line reference on this page was re-checked against the files on 2026-09-28 and the corrected references are the ones cited in the tables and code samples. Likewise, measurements/verify_recheck.py still carries the earlier comment at its lines 37-38 that Inkscape records the document name/path inside the SVG, which changes with the temp dir — stale narrative in the harness script, not evidence. This page no longer repeats that reasoning (grep for it returns 0 here) and cites that script's field set only at lines 39-40, where INKSCAPE_FIELDS is hard-coded.
Written first-person by us, the pic2svg.com maintainers. We ran every command on this page on our own machine on 2026-09-28 and published the raw JSON next to it so you can check our arithmetic. Where a number came from a vendor page or an earlier research pass instead of our own run, the row says so and carries its date. We do not attach a name, a credential or an affiliation we cannot point to.
What this benchmark does not claim
Stated plainly, because the pages ranked above do not state it.
Three tools, three images
Nine first-pass measurements on one machine is a sample you can reproduce, not a market survey. We did not score visual quality, did not compare against Vector Magic or Illustrator output, and did not run anything in a browser.
Vendor claims stay labelled
100% Offline, Zero Uploads, <1s average conversion time and the price tags on the table above belong to their vendors. We fetched the pages on 2026-09-28 and quoted them; we did not install or run SVG Genie Desktop, PixToVector, Vecto, Vector Magic Desktop, Scan2CAD, Adobe Illustrator or Vectorizer.AI, so their behaviour claims stay vendor-claimed or inherited, never measured by us.
One claim we deliberately did not restate with a link
An earlier research pass recorded that Inkscape export CLI omits DXF, attributed to an upstream tracker issue it never captured a URL for. We are not repeating it with a citation we do not have, and we did not re-verify it — it stays in the ledger as inherited-with-missing-URL.
The hosted converter is a different boundary
Everything runs-locally-nothing-uploaded on this page refers to the local CLIs we measured. The hosted converter at pic2svg.com posts your image as base64 to api.pic2svg.com before tracing (src/convert/actions.ts:213 and :227). The offline desktop build is not shipped yet, so no present-tense offline claim is made for it.
Questions we got while building this
- Does anything on this page upload my image?
- No. The three tools were launched as local subprocesses and the harness records offline: true; no network call is made anywhere in measure.py. The hosted pic2svg.com converter is a different thing entirely: it sends the image as base64 to the server at api.pic2svg.com before tracing, which is why we separate the two in every sentence above.
- Which of these should I actually use?
- For one-colour line art, potrace: 0.021–0.028 s per trace here, and the output is a single clean path. For colour artwork where you want editable paths and no bitmap smuggled into the file, the VTracer-backed engine: 8–326 paths, 0 embedded image elements, 0.473–2.474 s. Inkscape headless works and is free, but its export keeps the source bitmap inside the SVG, which is why the table shows both byte counts.
- Can I check your numbers?
- Yes — that is the point of the page. Every row links the raw JSON, the recheck JSON compares a second execution field by field, and our run ended with all_pass: true. If your recheck disagrees, the mismatch object names the exact field.
- Did you test Illustrator, Vector Magic or Vectorizer.AI?
- No. None of them was installed or run in this benchmark, and we do not present vendor pricing or vendor feature copy as if we had measured it — each of those rows is labelled vendor-claimed or inherited with its date. Their comparison lives on our Vectorizer.AI vs Vector Magic vs any2svg benchmarks page.
Claim ledger
Every metric, quote, price and feature claim this page makes, with the source it came from and the exact passage that backs it.
On the 180x180 apple-touch-icon.png, the VTracer-backed engine took 2.474 s on the first pass (0.835 s on the independent recheck) and produced a 71,502-byte SVG with 326 path elements, 148 distinct colours and 0 embedded <image> elements.
Verbatimruns[0].measurements[0]: "wall_seconds": 2.474, "exit_code": 0; output: "bytes": 71502, "path_elements": 326, "distinct_colors": 148, "image_elements": 0 — /loop06/recheck.json checks[1]: "first_run_wall_seconds": 2.474, "recheck_wall_seconds": 0.835, "pass": true
On apple-touch-icon.png, potrace took 0.021 s to trace (0.029 s including the Pillow threshold prep) and 0.012 s on the recheck, producing a 1,322-byte SVG with 1 path element and 1 colour, because potrace only traces a 1-bit input.
Verbatimruns[0].measurements[1]: "prep_seconds_pillow_threshold": 0.008, "wall_seconds": 0.021, "wall_seconds_total_prep_plus_trace": 0.029; "note": "potrace traces monochrome only, so the input is converted to 1-bit at threshold 128 first; output is 1 colour layer"; output: "bytes": 1322, "path_elements": 1, "distinct_colors": 1 — /loop06/recheck.json checks[2]: "recheck_wall_seconds": 0.012, "pass": true
On apple-touch-icon.png, Inkscape 1.4.4 headless Trace Bitmap took 5.276 s (1.955 s on the recheck) and exported 29,689 bytes that still contained the source bitmap: 7 path elements, 7 colours and 1 embedded <image>, or 20,869 bytes with that bitmap stripped.
Verbatimruns[0].measurements[2]: "wall_seconds": 5.276, "exit_code": 0; output: "bytes": 29689, "bytes_without_embedded_image": 20869, "path_elements": 7, "distinct_colors": 7, "image_elements": 1 — /loop06/recheck.json checks[3]: "recheck_wall_seconds": 1.955, "pass": true
On og-image.png (1200x630), the engine took 0.473 s (0.686 s recheck) and produced a 21,388-byte SVG with 125 path elements, 83 colours and 0 embedded <image> elements.
Verbatimruns[1].measurements[0]: "wall_seconds": 0.473, "exit_code": 0; output: "bytes": 21388, "path_elements": 125, "distinct_colors": 83, "image_elements": 0 — /loop06/recheck.json checks[5]: "recheck_wall_seconds": 0.686, "pass": true
On og-image.png, potrace took 0.025 s to trace (0.037 s including prep) and 0.417 s on the recheck, producing a 21,123-byte SVG with 83 path elements but only 1 colour layer.
Verbatimruns[1].measurements[1]: "prep_seconds_pillow_threshold": 0.012, "wall_seconds": 0.025, "wall_seconds_total_prep_plus_trace": 0.037; output: "bytes": 21123, "path_elements": 83, "distinct_colors": 1 — /loop06/recheck.json checks[6]: "recheck_wall_seconds": 0.417, "pass": true
On og-image.png, Inkscape took 2.794 s (6.874 s on the recheck) and exported 551,569 bytes, of which the embedded source bitmap accounted for 89,201 bytes - i.e. 462,368 bytes remained with that bitmap stripped; the traced result was 8 path elements, 8 colours and 1 embedded <image>.
Verbatimruns[1].measurements[2]: "wall_seconds": 2.794; output: "bytes": 551569, "bytes_without_embedded_image": 462368, "path_elements": 8, "distinct_colors": 8, "image_elements": 1 — /loop06/recheck.json checks[7]: "recheck_wall_seconds": 6.874, "pass": true
On the generated synthetic-flat.png (800x600, six RGB colours), the engine took 0.590 s (0.555 s recheck) and produced a 23,273-byte SVG with 8 path elements, 8 colours and 0 embedded <image> elements, in spline mode.
Verbatimruns[2].measurements[0]: "wall_seconds": 0.59, "engine_mode": "spline"; output: "bytes": 23273, "path_elements": 8, "distinct_colors": 8, "image_elements": 0 — /loop06/recheck.json checks[9]: "recheck_wall_seconds": 0.555, "pass": true
On synthetic-flat.png, potrace took 0.028 s (0.040 s including prep) and 0.015 s on the recheck, producing a 771-byte SVG with 1 path element and 1 colour.
Verbatimruns[2].measurements[1]: "prep_seconds_pillow_threshold": 0.012, "wall_seconds": 0.028, "wall_seconds_total_prep_plus_trace": 0.04; output: "bytes": 771, "path_elements": 1, "distinct_colors": 1 — /loop06/recheck.json checks[10]: "recheck_wall_seconds": 0.015, "pass": true
On synthetic-flat.png, Inkscape took 2.818 s (2.584 s recheck) and exported 6,759 bytes, of which the embedded source bitmap accounted for 5,154 bytes - i.e. 1,605 bytes remained with that bitmap stripped; the traced result was 4 path elements, 4 colours and 1 embedded <image>.
Verbatimruns[2].measurements[2]: "wall_seconds": 2.818; output: "bytes": 6759, "bytes_without_embedded_image": 1605, "path_elements": 4, "distinct_colors": 4, "image_elements": 1 — /loop06/recheck.json checks[11]: "recheck_wall_seconds": 2.584, "pass": true
The independent recheck matched all seven deterministic fields (bytes, sha256, M-commands, path elements, distinct fills, distinct colours, image elements) for the three engine runs and the three potrace runs, and pre-declared a four-field comparison for the three Inkscape runs (M-commands, path elements, distinct colours, image elements), matching the field set hard-coded in verify_recheck.py (INKSCAPE_FIELDS, lines 39-40); every one of the nine rechecks passed with zero mismatches and all three input SHA-256 values re-verified.
Verbatim"generated_at": "2026-09-28T17:46:21+0800", "all_pass": true; engine/potrace checks carry fields_compared: ["bytes","sha256","m_commands","path_elements","distinct_fill_or_stroke_values","distinct_colors","image_elements"] and "mismatches": {}, "pass": true; inkscape checks carry fields_compared: ["m_commands","path_elements","distinct_colors","image_elements"] and "mismatches": {}, "pass": true; input checks: "sha256_matches": true (3x) — /loop06/verify_recheck.py lines 39-40 hard-codes INKSCAPE_FIELDS = ["m_commands", "path_elements", "distinct_colors", "image_elements"] (the pre-declared four-field set for those three runs)
The three inputs are 180x180 apple-touch-icon.png (6,101 bytes, 205 distinct RGB colours, 16 quantised colours on the 256px thumb, polygon mode), 1200x630 og-image.png (62,665 bytes, 257 colours, 24 quantised, polygon mode) and the generated 800x600 synthetic-flat.png (3,523 bytes, 6 colours, 49 quantised, spline mode after the over-48 early exit), with SHA-256 hashes recorded for each.
Verbatimruns[0].input: "width": 180, "height": 180, "bytes": 6101, "distinct_rgb_colours": 205, "quantised_colours_256_thumb": 16, "engine_mode": "polygon", "sha256": "12eafc7f7e0f4cb48d17704fa40f663e4db97e18790b9bed35a1699c363bf768" — runs[1].input: "width": 1200, "height": 630, "bytes": 62665, "distinct_rgb_colours": 257, "quantised_colours_256_thumb": 24, "engine_mode": "polygon", "sha256": "bd699b52e5ff340bd1e23ac7886a99731e61bc7631be470e78febed2043c39c0" — runs[2].input: "width": 800, "height": 600, "bytes": 3523, "distinct_rgb_colours": 6, "quantised_colours_256_thumb": 49, "early_exit_over_48": true, "engine_mode": "spline", "sha256": "74d27fa8b341b236550743301eaeea8b5d0f2455d472deca9a904fba49a13ea4"
The versions measured on the machine were Python 3.13.5, vtracer 0.6.15, Pillow 12.3.0, potrace 1.16, Inkscape 1.4.4 (dcaf3e7, 2026-05-05) and Homebrew 7.0.7-9-gcc9ff03, on macOS-27.0-arm64-arm-64bit-Mach-O (arm64, 10 CPUs).
Verbatim"tool_versions": {"python": "3.13.5 (.../venv313/bin/python)", "vtracer": "0.6.15", "pillow": "12.3.0", "potrace": "potrace 1.16. Copyright (C) 2001-2019 Peter Selinger.", "inkscape": "Inkscape 1.4.4 (dcaf3e7, 2026-05-05)", "homebrew": "Homebrew 7.0.7-9-gcc9ff03", "platform": "macOS-27.0-arm64-arm-64bit-Mach-O", "machine": "arm64", "cpu_count": 10}
- C13metricresearch/loop06/measurements/python314-vtracer-probe.json
Under Python 3.14.4 the vtracer 0.6.15 Python binding crashed with exit code -11 (SIGSEGV) and wrote no SVG, while the same vtracer version worked under Python 3.13.5.
Verbatim"python": "3.14.4", "vtracer_version": "0.6.15", "child_wall_seconds": 1.166, "child_exit_code": -11, "svg_written": false, "verdict": "SEGFAULT/CRASH"
- C14metricresearch/loop06/measurements/inkscape-cli-probe.json
Inkscape parameterised headless object-trace completed in 2.333 s with exit code 0, wrote an SVG with 7 path elements and 1 image element, and the action list exposes no separate non-GUI trace action.
Verbatim"version_line": "Inkscape 1.4.4 (dcaf3e7, 2026-05-05)", "candidate_non_gui_trace_actions": [], "has_non_gui_trace_action": false, "trace_attempt_wall_seconds": 2.333, "trace_attempt_exit_code": 0, "svg_written": true, "path_elements": 7, "image_elements": 1, "verdict": "measured - headless object-trace produced 7 path elements"
- C15metric
/loop06/serp-capture.mdlines 3-5,17,19The query offline image to vector converter software no cloud was captured on Bing (headed Chrome via Playwright) on 2026-09-28T13:25:12.285Z, the results page echoed the query back (echoVerified true), and 10 organic results were extracted.
VerbatimCOMPOSITE — five separate bullet lines joined by em-dashes, not one contiguous line. Line 3: "- Captured: **2026-09-28T13:25:12.285Z**" · Line 4: "- Query: **\"offline image to vector converter software no cloud\"**" · Line 5: "- Engine: **Bing (Playwright headed Chrome), NOT Google**" · Line 17: "- Echo verified: **True**" · Line 19: "- Organic results extracted: **10** (`li.b_algo`, positions 1-10, Bing `/ck/a` redirects decoded)"
The #1 result, PixToVector on the Microsoft Store, markets itself as Seamless & Fast Image-to-SVG Vector Conversion — 100% Offline!
VerbatimSeamless & Fast Image-to-SVG Vector Conversion — 100% Offline!
PixToVector states that it runs locally so images stay private and no internet connection is required — a vendor claim we quote and did not verify by installing the app.
VerbatimPixToVector runs locally, so your images stay private and no internet connection is required for conversion.
PixToVector is listed as a free download; the store JSON-LD offer price field is 0.
Verbatimoffers price 0 — page title: "PixToVector - Free download and install on Windows"
The #2 result, SVG Genie Desktop, claims 100% Offline. Zero Uploads. — a vendor claim we quote and did not verify by installing the app.
Verbatim100% Offline. Zero Uploads. Your images never leave your machine. No internet. No cloud. No privacy concerns. Ever.
SVG Genie Desktop is priced at $99 one-time, or included with Agency Studio Annual.
VerbatimBuy it once for $99 or get it included with Agency Studio Annual.
- C21feature
research/loop06/fetches/svggenie-desktop.htmlThe #2 result does publish a speed figure — "<1s" labelled "Average conversion time", plus "Three steps. Under 10 seconds." — but no sample size, no stated test conditions and no reproduction command accompany it.
Verbatim"<1s" (HTML <1s) immediately followed by "Average conversion time" in the stat strip, and the section heading "Three steps. Under 10 seconds."
- C22quote
/loop06/serp-capture.mdlines 112The #3 result is svggenie.com own blog ranking its own desktop product first in a five-tool list.
Verbatim1. SVG Genie Desktop — Best Overall / 2. Vector Magic Desktop — High Quality, High Price / 3. Adobe Illustrator Image Trace — The All-in-One Option / 4. Inkscape with Potrace — Best Free Option / 5. VTracer CLI — Best for Developers
- C23pricing
/loop06/serp-capture.mdlines 113-115The #3 result prices its own product at $99 one-time and prices competitors against it ($295 one-time for Vector Magic Desktop, "nearly 3x the price of SVG Genie Desktop"; $23/month subscription with "no one-time purchase" for Adobe Illustrator).
Verbatim$99 one-time — no subscription, no per-image charges · $295 one-time — nearly 3x the price of SVG Genie Desktop · $23/month subscription (no one-time purchase)
- C24quote
/loop06/serp-capture.mdlines 122The #4 result ranks its own downloadable product first in an eight-tool list.
Verbatim1. Super Vectorizer Pro (Mac & Windows) / 2. Adobe Illustrator (Mac & Windows) / 3. Inkscape (Mac, Windows, Linux) — Free / 4. Vector Magic (Online + Desktop) / 5. CorelDRAW (Windows) / 6. Autotracer.org (Online) — Free / 7. VTracer (Mac, Windows, Linux) — Free & Open Source / 8. Rapid Resizer (Online)
- C25pricing
/loop06/serp-capture.mdlines 126-129The #4 result quotes competitor pricing — "the subscription cost ($22.99/month) is steep" for Adobe Illustrator, "price ($295 for the desktop license)" for Vector Magic and "The one-time purchase option ($549)" — while its own product carries download links on the same page.
Verbatimthe subscription cost ($22.99/month) is steep · price ($295 for the desktop license) · The one-time purchase option ($549)
The #5 result, VectoSolve, says its comparison was built by uploading every test image to every tool — the exact workflow a no-cloud searcher is refusing.
VerbatimWe spent three weeks testing every major image-to-vector converter — uploading the same 24 test images to each tool, measuring output quality, speed, and value.
The #5 result does publish per-tool timings ("Timed on M3 MacBook Pro, 100 Mbps, using a 1200x800px illustration (450 KB):" with Potrace 1.2 s, VectoSolve 2.8 s, Vectorizer.ai 7.4 s, AutoTracer 9.1 s, Vector Magic 10.3 s, Convertio 14.7 s, Illustrator 18.2 s, Inkscape 28.6 s, Photopea 33.1 s) and a quality score column, but publishes no reproduction command and no input hash.
VerbatimSpeed Benchmarks — Timed on M3 MacBook Pro, 100 Mbps, using a 1200x800px illustration (450 KB): | Potrace | 1.2 s | · | VectoSolve | 2.8 s | · | Vectorizer.ai | 7.4 s | · | AutoTracer | 9.1 s | · | Vector Magic | 10.3 s | · | Convertio | 14.7 s | · | Illustrator | 18.2 s | · | Inkscape | 28.6 s | · | Photopea | 33.1 s |
- C28feature
/loop06/serp-capture.mdlines 134,139The #5 result places its own tool first and exempts it from its own scoring table, where its cell reads "Not scored (our tool)".
Verbatim1. VectoSolve — Best Overall & Best AI / 2. Adobe Illustrator Image Trace — Best Professional / 3. Inkscape — Best Free / 4. Vector Magic / 5. Vectorizer.ai / 6. Convertio / 7. AutoTracer / 8. Potrace / 9. CloudConvert / 10. Photopea · COMPOSITE — the score-cell text is /loop06/serp-capture.md lines 139 ("its score cell reads \"Not scored (our tool)\""), a separate line from the ten-tool list at :134; joined here with the claim own · separator, not one contiguous line
- C29feature
/loop06/serp-capture.mdlines 143Three of the top five results are listicles and all three rank the publisher own product first (svggenie.com, svgvector.com, vectosolve.com); positions 1-2 are vendor product pages, not rankings.
Verbatim3 of the top 5 are listicles and all 3 rank the publisher's own product #1 (svggenie.com, svgvector.com, vectosolve.com). Positions 1-2 are vendor product pages, not rankings.
- C30feature
research/loop06/fetches/msstore-pixtovector.html· research/loop06/fetches/svggenie-desktop.html · research/loop06/fetches/svggenie-offline.html · research/loop06/fetches/svgvector-guide.html · research/loop06/fetches/vecto.html — the five durable page files saved from the 2026-09-28 capture; the per-file grep evidence (exact patterns and counts, run 2026-09-29) is recorded in verbatimAcross all five fetched top-result pages we found marketing copy, prices and listicle rows, but no shell command, no raw measurement JSON and no input hash behind any figure — which is the gap this page fills; each omits cell in the table above is our reading of that page fetched HTML on 2026-09-28.
VerbatimOWN GREP EVIDENCE, run 2026-09-29 against these exact files (byte sizes in the same order: 228860, 579627, 494213, 35298, 16634). Pattern A — copy-pasteable CLI invocation: regexes '<span class="p">$ </span>' (shell-prompt span) and '<(?:code|pre)[ >]'. Pattern B — raw measurement JSON blob: regex '(?i)"(?:mean|median|stdev|stddev|elapsed|iterations|benchmark|wall_?time|timings|duration_ms|elapsed_ms)"\s*:'. Pattern C — input/content hash: regex '(?i)checksum|sha-?256|md5sum|input hash|content hash'. COUNTS on the five durable files (msstore-pixtovector / svggenie-desktop / svggenie-offline / svgvector-guide / vecto): A = 0/0, 0/0, 0/0, 0/0, 4 prompt spans + 1 code block; B = 0 in all five files; C = 1, 0, 0, 0, 2; 'reproduc' prose hits = 0, 0, 0, 2, 0. INCIDENTAL MATCHES — none of them a reproduction command, a raw run file or an input hash behind any figure: msstore's single C hit is browser-SDK boilerplate 'crypto.subtle.digest("SHA-256",a)' inside a page helper function; vecto's two C hits are one sentence matching twice ('SHA-256 checksums for every file are in the release notes') — release-artifact checksums, not a hash presented beside a benchmark figure; vecto's four '$ ' prompts are a 'Scriptable from the terminal' usage demo ('$ vecto trace logo.png -o logo.svg --stats' · '$ vecto trace photo.jpg --style photo --colors 24' · '$ vecto trace icon.png --check' · '$ vecto bench original.svg') and its single <code> is 'chmod +x', none of them attached to any figure; svgvector-guide's two 'reproduc' hits are the prose 'fine art reproduction', not reproduction instructions. JSON on these pages is page metadata, never measurement output: application/ld+json blocks = 1 (entity-encoded as application/ld+json), 2, 2, 2, 1 in file order, and msstore's only '.json' references are app internals (/localized-strings/en-US/strings.json, EarlyLoad.json, t.json). The only timing figures any of the five durable files publish are svggenie-desktop's '<1s Average conversion time' and 'Three steps. Under 10 seconds.', and that file scores 0 on A, 0 on B and 0 on C. The two current top-result pages whose HTML was temp-only were re-fetched live 2026-09-29 and grepped with the same three patterns: rank-3 svggenie.com/blog/best-offline-image-to-svg-converters-2026 (HTTP 200, 504744 bytes) → A 0/0, B 0, C 0, 'reproduc' 0; rank-5 vectosolve.com/blog/best-image-to-vector-converter-2026 (HTTP 200, 347634 bytes) → A 0/0, B 0, C 0, 'reproduc' 5, all of them the prose 'reproduction without banding'. NET: on the five durable fetched pages and on both temp-only top-result pages alike there is no shell command, no raw measurement JSON and no input hash behind any figure, and every incidental match is labelled above.
Vectorizer.AI Web App Unlimited plan is $9.99 / month, billed monthly, cancel anytime (inherited: local pricing archive dated Fri 25 Sep 2026, pricing-verified live by Loop 02 as_of 2026-09-28; not re-fetched for this page).
VerbatimARCHIVED: Web App Unlimited Web Images For people: no API access. Billed monthly, cancel anytime. $9.99 / month
Vector Magic Desktop Edition is $295 / license one-time and its Online Edition is $9.95 / month (inherited: local pricing archive dated Fri 25 Sep 2026, pricing-verified by Loop 02 as_of 2026-09-28; not re-fetched for this page).
VerbatimCOMPOSITE — two separate archived tier quotes joined by the claim own · separator, not contiguous in vectormagic-pricing-raw.html (source order there is Online Edition first, then Desktop Edition). Desktop Edition: "Unlimited use Stand-alone desktop application $295 / license One-time charge" · Online Edition: "Unlimited use Browser-based web application $9.95 / month Billed monthly Cancel anytime"
Scan2CAD Business tier is $1,599.00 / year and is the tier that gates Batch convert and API and Offline licensing (inherited from Loop 02 live verify pass as_of 2026-09-28; not re-fetched live for this page — the live pricing URL serves only a bot-challenge interstitial, so the figure is checked against the 2026-06-11 Wayback capture).
VerbatimWayback capture 2026-06-11 JSON-LD: UnitPriceSpecification price 1599.00 USD, priceCurrency USD, name "Scan2CAD Business Plan", referenceQuantity unitCode ANN; page bullets "Batch convert and API" · "Network licensing" · "Offline licensing". Live https://www.scan2cad.com/pricing/ returned only a "One moment, please..." bot-challenge interstitial when re-fetched 2026-09-29 (no pricing markup served). Loop 02 record corroborating the licensing gate: dossier.json quotes[15] "the Scan2CAD Business tier which offers Offline licensing".
- C34pricing
research/loop06/dossier.jsonpricingFacts[] (Inkscape)Inkscape is $0 — free and open source (GPL-2.0-or-later) with no pricing, order or checkout page (inherited from Loop 02 pricing_verified as_of 2026-09-28; not re-fetched for this page).
Verbatim$0 - free and open source (GPL-2.0-or-later); no pricing/order/checkout page exists; optional donations and business sponsorships only
- C35pricing
src/payment/plans.ts:31-34This site hosted Pro Unlimited plan is $9.99 / mo billed monthly, and the hosted web app is not an offline tool: it uploads the image as base64 to api.pic2svg.com before tracing.
Verbatimlabel: "Pro Unlimited", price: "9.99", suffix: "/mo", blurb: "Unlimited downloads. Billed monthly, cancel anytime."
- C36feature
/loop06/measure.pylines 132,175,216The benchmark run made no network call: the harness records offline: true and each of the three tracers is invoked through a local subprocess.run with capture_output.
Verbatimsubprocess.run(cmd, capture_output=True, text=True, timeout=900) at /loop06/measure.py lines 132 (engine), :175 (potrace), :216 (inkscape) — /loop06/raw-measurements.json top-level: "offline": true
- C37metric
/loop06/measure.pylines 73Engine mode selection counts distinct quantised colours on a 256px thumbnail and switches to spline above 48 — which is why the six-colour synthetic image, 49 quantised colours after resampling, was traced in spline mode.
Verbatim/loop06/measure.py lines 73: if len(seen) > 48: → "quantised_colours_256_thumb": len(seen), "early_exit_over_48": True, "engine_mode": "spline" — /loop06/raw-measurements.json runs[2].input: "distinct_rgb_colours": 6, "quantised_colours_256_thumb": 49, "early_exit_over_48": true, "engine_mode": "spline"
- C38feature
research/loop06/dossier.jsongaps[]An earlier research pass recorded that Inkscape export CLI omits DXF but never captured a URL for the tracker issue it cites, so this page does not restate that claim with a citation.
VerbatimInkscape export-claim ("Allowed values: [svg,png,ps,eps,pdf,emf,wmf,xaml]", DXF absent) is attributed by Loop 02 to tracker issue #1706, but Loop 02 recorded NO URL for that issue ... Do not publish the export-list claim with a citation until #1706 is re-verified.
- C39feature
python/any2svg_engine.py:562The engine CLI accepts --export with choices pdf, eps, ai, dxf and --dxf-samples N; this run measured SVG output only, so those formats are available-in-source and not-tested here.
Verbatimap.add_argument("--export", nargs="+", default=[], choices=["pdf", "eps", "ai", "dxf"]) · ap.add_argument("--dxf-samples", type=int, default=12)
- C40feature
src/convert/actions.ts:213The hosted pic2svg.com converter uploads the image: the convertImage action rejects a missing base64 image and writes the decoded base64 to a server temp file before tracing, and the deployed frontend is built against https://api.pic2svg.com.
Verbatimactions.ts:213: if (!args.imageBase64) throw new HttpError(400, "missing image") — actions.ts:227: await fs.writeFile(imgPath, Buffer.from(b64, "base64")) — README.md:50: Fly.io song-pic2svg-server → api.pic2svg.com — README.md:63: REACT_APP_API_URL=https://api.pic2svg.com
- C41feature
research/loop06/dossier.jsonhonestyConstraints[4]The offline desktop batch converter is not shipped: only the hosted web app exists today, so no present-tense offline claim is made for a product we have not built.
Verbatim(5) The offline desktop converter is NOT shipped. Loop 03 pitch_gloss separates what ships today (pic2svg.com web app, image sent to the server as base64, downloads gated at $9.99/month) from what is planned and NOT yet built (the offline desktop batch converter) ... Never write the offline/no-upload claim in the present tense for a shipping product.
The sample is 3 images x 3 tools = 9 first-pass measurements, each executed a second time (9 rechecks, 18 tracer executions in total) plus 3 input SHA-256 re-verifications; the SERP side is 1 query on 1 engine with 10 organic results and the top 5 fetched to HTML.
Verbatim"checks": 12 entries = 3 input sha256 checks + 9 tool rechecks, "all_pass": true — /loop06/raw-measurements.json "runs": 3 inputs x 3 measurements each — serp-capture.md: Organic results extracted: 10; Only the top 5 of 10 organic results were fetched