No-cloud benchmark · measured 2026-09-28

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.

.png.jpg.webp.gif
Drag images here to trace
Paste:⌘V
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)

InputToolRun 1 (s)Recheck (s)Output bytesBytes excl. embedded bitmapPath elementsDistinct coloursEmbedded <image>SourceClaims
apple-touch-icon.png (180×180)any2svg engine (VTracer 0.6.15)2.4740.83571,50271,5023261480/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.0121,3221,322110/loop06/raw-measurements.json#runs[0].measurements[1]C02
apple-touch-icon.png (180×180)Inkscape 1.4.4 Trace Bitmap (object-trace)5.2761.95529,68920,869771/loop06/raw-measurements.json#runs[0].measurements[2]C03
og-image.png (1200×630)any2svg engine (VTracer 0.6.15)0.4730.68621,38821,388125830/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.41721,12321,1238310/loop06/raw-measurements.json#runs[1].measurements[1]C05
og-image.png (1200×630)Inkscape 1.4.4 Trace Bitmap (object-trace)2.7946.874551,569462,368881/loop06/raw-measurements.json#runs[1].measurements[2]C06
synthetic-flat.png (800×600, generated)any2svg engine (VTracer 0.6.15)0.5900.55523,27323,273880/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.015771771110/loop06/raw-measurements.json#runs[2].measurements[1]C08
synthetic-flat.png (800×600, generated)Inkscape 1.4.4 Trace Bitmap (object-trace)2.8182.5846,7591,605441/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.

ClaimsC11C37

Source: /loop06/raw-measurements.json · /loop06/measure.py lines 73

InputDimensionsFile bytesDistinct RGB coloursQuantised colours (256px thumb)Engine mode pickedSHA-256SourceClaims
public/apple-touch-icon.png180×1806,10120516polygon12eafc7f7e0f4cb48d17704fa40f663e4db97e18790b9bed35a1699c363bf768/loop06/raw-measurements.json#runs[0].inputC11
public/og-image.png1200×63062,66525724polygonbd699b52e5ff340bd1e23ac7886a99731e61bc7631be470e78febed2043c39c0/loop06/raw-measurements.json#runs[1].inputC11
synthetic-flat.png (generated by measure.py make_synthetic)800×6003,523649spline (early exit over 48)74d27fa8b341b236550743301eaeea8b5d0f2455d472deca9a904fba49a13ea4/loop06/raw-measurements.json#runs[2].inputC11C37

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.

ClaimsC12C36C42

Source: /loop06/raw-measurements.json tool_versions, generated 2026-09-28T17:45:54+0800

ComponentVersion observedProvenanceSourceClaims
Python3.13.5 (venv313 interpreter)measured/loop06/raw-measurements.json#tool_versions.pythonC12
vtracer0.6.15measured (importlib.metadata)/loop06/raw-measurements.json#tool_versions.vtracerC12
Pillow12.3.0measured/loop06/raw-measurements.json#tool_versions.pillowC12
potracepotrace 1.16. Copyright (C) 2001-2019 Peter Selinger.measured/loop06/raw-measurements.json#tool_versions.potraceC12
InkscapeInkscape 1.4.4 (dcaf3e7, 2026-05-05)measured/loop06/raw-measurements.json#tool_versions.inkscapeC12
HomebrewHomebrew 7.0.7-9-gcc9ff03measured/loop06/raw-measurements.json#tool_versions.homebrewC12
HostmacOS-27.0-arm64-arm-64bit-Mach-Oarm6410 CPUsmeasured/loop06/raw-measurements.json#tool_versions.platform / machine / cpu_countC12
Network during the runoffline: true — the harness shells out to local binaries onlymeasured/loop06/measure.py lines 132C36C12

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 rankPageWhat it publishes (verbatim)What it does not publishSourceClaims
1apps.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/9p4m4lgw2vl0C16C17C18C30
2svggenie.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/desktopC19C20C21C30
3svggenie.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-2026C22C23C29C30
4svgvector.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.htmlC24C25C29C30
5vectosolve.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-2026C26C27C28C29C30

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

ToolPriceWhere it runsProvenanceSourceClaims
Inkscape Trace Bitmap$0 — free and open source (GPL-2.0-or-later); no checkout page existslocal desktop app; headless CLI trace measured hereinherited — Loop 02 pricing_verified as_of 2026-09-28, not re-fetched by this runresearch/loop06/dossier.jsonC34
potrace 1.16no pricing page consulted; the binary reports potrace 1.16. Copyright (C) 2001-2019 Peter Selinger.local CLI, 1-bit input onlymeasured/loop06/raw-measurements.json#tool_versions.potraceC12C02
VTracer (Python wheel)no pricing page consulted; version 0.6.15 measured from installed metadatalocal library driving our enginemeasured/loop06/raw-measurements.json#tool_versions.vtracerC12
Vector Magic Desktop$295 / license (one-time)online edition $9.95 / monthvendor-claimed to convert offline in the desktop edition; we did not run itinherited — local archive dated Fri 25 Sep 2026, also pricing_verified by Loop 02 as_of 2026-09-28https://www.vectormagic.com/pricingC32
Vectorizer.AI Web App Unlimited$9.99 / month, billed monthly, cancel anytimecloud — images are uploaded to the serviceinherited — local archive dated Fri 25 Sep 2026, also pricing_verified by Loop 02 as_of 2026-09-28https://vectorizer.ai/pricingC31
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 tierinherited — 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 belowhttps://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 itmeasured fetch — 2026-09-28 SERP top-5 capture, HTTP 200https://www.svggenie.com/desktopC20C19
PixToVector (Microsoft Store)Free — JSON-LD offer price field 0vendor-claimed local; we did not install itmeasured fetch — 2026-09-28 SERP top-5 capture, HTTP 200https://apps.microsoft.com/detail/9p4m4lgw2vl0C18C17
pic2svg.com Pro Unlimited (this site)$9.99 / mo, billed monthlyHOSTED — the web app posts your image as base64 to api.pic2svg.com; it does not run on your machinemeasured from this repo (src/payment/plans.ts, src/convert/actions.ts), read 2026-09-28; live pricing page not fetchedsrc/payment/plans.ts lines 31C35C40C41

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.pbm
ClaimsC02C05C08

Inkscape 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 auto
ClaimsC01C04C07

Engine 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 12

The 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.

ClaimsC39

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_pass

The 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/.

ClaimsC10C42

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")
PY

Every step inside this loop is the measured potrace path; the loop itself was not timed, so no throughput number is claimed for it.

ClaimsC02

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.
Who wrote this

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.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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)

  11. 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"

  12. 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}

  13. 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"

  14. 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"

  15. C15metric/loop06/serp-capture.md lines 3-5,17,19

    The 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)"

  16. 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!

  17. 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.

  18. 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"

  19. 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.

  20. 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.

  21. C21featureresearch/loop06/fetches/svggenie-desktop.html

    The #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 &lt;1s) immediately followed by "Average conversion time" in the stat strip, and the section heading "Three steps. Under 10 seconds."

  22. C22quote/loop06/serp-capture.md lines 112

    The #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

  23. C23pricing/loop06/serp-capture.md lines 113-115

    The #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)

  24. C24quote/loop06/serp-capture.md lines 122

    The #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)

  25. C25pricing/loop06/serp-capture.md lines 126-129

    The #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)

  26. 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.

  27. 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 |

  28. C28feature/loop06/serp-capture.md lines 134,139

    The #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

  29. C29feature/loop06/serp-capture.md lines 143

    Three 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.

  30. C30featureresearch/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 verbatim

    Across 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&#x2B;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.

  31. 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

  32. 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"

  33. 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".

  34. C34pricingresearch/loop06/dossier.json pricingFacts[] (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

  35. C35pricingsrc/payment/plans.ts:31-34

    This 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."

  36. C36feature/loop06/measure.py lines 132,175,216

    The 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

  37. C37metric/loop06/measure.py lines 73

    Engine 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"

  38. C38featureresearch/loop06/dossier.json gaps[]

    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.

  39. C39featurepython/any2svg_engine.py:562

    The 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)

  40. C40featuresrc/convert/actions.ts:213

    The 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

  41. C41featureresearch/loop06/dossier.json honestyConstraints[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.

  42. 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