How to Check Whether an SVG Is a Real Vector or an Embedded Bitmap
Four checks you can run in a minute — and the measured reason the first check alone is not enough: Inkscape 1.4.4's own Trace Bitmap export contains an embedded copy of the source image.
Yes — open the file as text and you can usually tell in under a minute. Count the <image elements: a non-zero count means a raster picture is embedded and the file is at least partly a bitmap in a vector wrapper. Then strip every <image> element and compare byte counts — the delta is exactly how many bytes of picture were hiding inside. But the bare count is not the whole verdict: we ran Inkscape 1.4.4's own Trace Bitmap on three images on two dates, and its exported SVG contains exactly one embedded <image> every time — on the 180×180 logo, 29,689 bytes total with 20,869 remaining once the bitmap is stripped, behind just 7 path elements while the source PNG has 205 colours. The question that matters is not "does it contain an image" but "is the artwork you see made of paths or of the bitmap". We also asked ChatGPT and Perplexity three real user questions on 2026-09-29 without naming any brand: all six answers described procedures, none reported a measured tool-output fact, and none mentioned us — those measurements are below, with the commands. If you would rather generate a clean SVG than audit one, our image to SVG converter traces to paths with no embedded bitmap.
Trace preset:Balanced (Auto)▼
Applies to images you add next — each one traces as it lands.
Primary Evidence
Every tool, every input: what ends up inside the SVG
Bytes excl. is our file size with every <image> element removed (the definition is measure.py line 117, claim V11), so the gap between the two byte columns is the embedded bitmap. The 2026-09-29 run and the published 2026-09-28 run form a reproduction pair on two inputs: apple-touch-icon.png and synthetic-flat.png kept the same SHA-256 in both runs, and every Inkscape and potrace cell for them is byte-identical across the two dates. og-image.png was regenerated between the runs (62,665 → 63,033 bytes, SHA-256 changed), so its rows are a single-run observation on the current input — but both inputs produced exactly 1 embedded image from Inkscape. Engine rows come from the dated run: its presets were retuned on 2026-09-29 to downscale-only, so its structural counts differ from the published run while its embedded-image count stayed 0 in both (claim V05). Wall time is deliberately not a column — the identical Inkscape call went 5.276 s → 20.398 s between the two dates (claim V12).
ClaimsV01V02V03V04V05V06V10V11V12
Source: /loop06/raw-measurements-20260929.json (2026-09-29T22:04:00+0800) and /loop06/raw-measurements.json (2026-09-28T17:45:54+0800)
| Input | Tool | Output bytes | Bytes excl. embedded bitmap | Path elements | Distinct colours | Embedded <image> | Source | Claims |
|---|---|---|---|---|---|---|---|---|
| apple-touch-icon.png (180×180) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 29,689 | 20,869 | 7 | 7 | 1 | /loop06/raw-measurements-20260929.json#runs[0].measurements[2] | V01 |
| apple-touch-icon.png (180×180) | potrace 1.16 (1-bit threshold trace) | 1,322 | 1,322 | 1 | 1 | 0 | /loop06/raw-measurements-20260929.json#runs[0].measurements[1] | V04 |
| apple-touch-icon.png (180×180) | any2svg engine (VTracer 0.6.15) | 1,027 | 1,027 | 3 | 3 | 0 | /loop06/raw-measurements-20260929.json#runs[0].measurements[0] | V05 |
| og-image.png (1200×630) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 550,602 | 460,883 | 8 | 8 | 1 | /loop06/raw-measurements-20260929.json#runs[1].measurements[2] | V03 |
| og-image.png (1200×630) | potrace 1.16 (1-bit threshold trace) | 21,718 | 21,718 | 88 | 1 | 0 | /loop06/raw-measurements-20260929.json#runs[1].measurements[1] | V04 |
| og-image.png (1200×630) | any2svg engine (VTracer 0.6.15) | 32,583 | 32,583 | 236 | 93 | 0 | /loop06/raw-measurements-20260929.json#runs[1].measurements[0] | V05 |
| synthetic-flat.png (800×600, generated) | Inkscape 1.4.4 Trace Bitmap (object-trace) | 6,759 | 1,605 | 4 | 4 | 1 | /loop06/raw-measurements-20260929.json#runs[2].measurements[2] | V02 |
| synthetic-flat.png (800×600, generated) | potrace 1.16 (1-bit threshold trace) | 771 | 771 | 1 | 1 | 0 | /loop06/raw-measurements-20260929.json#runs[2].measurements[1] | V04 |
| synthetic-flat.png (800×600, generated) | any2svg engine (VTracer 0.6.15) | 3,068 | 3,068 | 6 | 6 | 0 | /loop06/raw-measurements-20260929.json#runs[2].measurements[0] | V05 |
What six AI answers published — and what none of them measured
Three questions asked verbatim on 2026-09-29, fresh sessions, logged-in, on ChatGPT and Perplexity — without ever mentioning this site, its brand or its URL, so nothing here was induced. ChatGPT answered all three from memory with zero links; Perplexity cited 10, 18 and 25 sources; not one of the six answers reported a measured tool-output fact (an embedded-image count or a strip-bytes figure) for any tracer, and none mentioned pic2svg. That capture is published in full — every answer text, every cited URL — at /loop07/ai-probe-20260929.json (claims V07, V08). One day, one session per engine, three questions: a snapshot of the answer landscape as we found it, not a monitoring study.
Source: /loop07/ai-probe-20260929.json (captured 2026-09-29)
| Engine | Question (verbatim intent) | Sources cited | Measured tool-output fact? | Mentions pic2svg? | Claims |
|---|---|---|---|---|---|
| ChatGPT | How do I check whether an SVG file contains a real vector or an embedded raster image? | 0 | No — markup-level procedure only | No | V07V08 |
| Perplexity | How do I check whether an SVG file contains a real vector or an embedded raster image? | 10 (MDN, perfectvector.com, Inkscape forum, Adobe community, vectorgurus checker, StackOverflow, …) | No — workflow built from cited pages | No | V07V08 |
| ChatGPT | Why does my converted SVG look pixelated when enlarged — is it a fake vector? | 0 | No — three-cause diagnosis from memory | No | V07V08 |
| Perplexity | Why does my converted SVG look pixelated when enlarged — is it a fake vector? | 18 (perfectvector.com, svggenie.com, YouTube ×9, …) | No | No | V07V08 |
| ChatGPT | Why is my SVG file 16 MB after converting a photo, and how do I make it smaller? | 0 | No — size advice from memory | No | V07V08 |
| Perplexity | Why is my SVG file 16 MB after converting a photo, and how do I make it smaller? | 25 (salivity.github.io, svgomg.net, png2svg.org, svggenie.com, …) | No | No | V07V08 |
The commands behind every number above
The two check commands first — they are the checks this page teaches — then the reproduction commands we actually ran. Everything executes locally; nothing needs an account.
Check 1 — count embedded rasters and drawing elements
bash
# how many raster images are hidden in this SVG? (0 = none)
grep -o '<image' file.svg | wc -l
# how many real drawing elements? (paths only — shapes are other tags)
grep -o '<path' file.svg | wc -lThis is check 1 below. Zero <image means nothing is embedded; the path count tells you what you have instead.
Check 2 — strip the images and weigh what is left
python · /loop06/measure.py lines 48, 117-118
python3 - <<'PY'
import re
IMG = re.compile(r"<image\b.*?(?:/>|</image>)", re.S)
text = open("file.svg", encoding="utf-8").read()
stripped = IMG.sub("", text).encode("utf-8")
print("bytes:", len(text.encode("utf-8")),
"-> without <image>:", len(stripped),
"| delta:", len(text.encode("utf-8")) - len(stripped))
PYSame definition as the bytes excl. column: remove every <image> element with the regex measure.py uses, then measure the bytes.
Inkscape 1.4.4 — the exact headless trace we measured twice
bash · /loop06/measure.py lines 212-214
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.
# The source bitmap stays in the document, so the exported SVG still contains
# one <image> element — that is the row the evidence table counts.Re-run our measurement and reproduce the byte-identical rows
bash · /loop06/measure.py line 1
cd research/loop06/measurements
venv313/bin/python measure.py # writes raw-measurements.json (one pass)
# our two artifacts: public/loop06/raw-measurements.json (2026-09-28)
# and public/loop06/raw-measurements-20260929.json (2026-09-29)The harness wrote the published 2026-09-28 run and the dated 2026-09-29 run. Run it twice on sha-stable inputs and the Inkscape and potrace rows come back byte-identical; wall time will not.
The Four Checks
The four checks, in order of how fast they are
Each check states what it proves — and what it cannot. The sequence is designed so that the one false positive the first check has (Inkscape's own trace output) gets caught before you act on it.
- Step 1
Check 1 — count the <image> elements (about 10 seconds)
Open the SVG in any text editor and count occurrences of <image, or run cmd-count above. Zero means no raster is embedded — the file is paths only. One or more means part of what you see is a picture file inside the XML, usually a data:image/...;base64 blob. This check is reliable in one direction only: it never produces a false "clean", but it can produce a false "fake". Our own table shows why — Inkscape 1.4.4's Trace Bitmap export scores 1 here on all three inputs on both dates (claims V01-V03), because Inkscape keeps the source bitmap in the document next to its trace.
- Step 2
Check 2 — strip the images and weigh the file
Run cmd-strip. If most of the bytes disappear, the visible artwork was the embedded bitmap and the vector layer is a thin skeleton — exactly what our Inkscape rows quantify: 8,820 bytes of bitmap on the 180×180 logo (29,689 → 20,869) and 5,154 on the six-colour synthetic image (6,759 → 1,605), with only 7 and 4 paths left behind (claims V01, V02). If almost nothing changes, the file is paths and its size reflects path data, not hidden pixels — the definition behind both columns is claim V11.
- Step 3
Check 3 — zoom to 10×, then click the artwork
Zoom far past 100%. An embedded raster goes soft or shows its pixel grid; real path edges stay razor-sharp at any zoom. Then click: one selectable blob, or thousands of tiny squares? A trace that is technically vector but one rectangle per pixel passes the zoom test and fails the click test — it will not edit cleanly, and path-consuming machines (laser cutters, plotters) choke on it. This two-step is the verification trick users converged on publicly: zoom for crisp edges, then select a single shape (claim V09).
- Step 4
Check 4 — match the tool signature, then name what you have
Compare with the table. potrace output: 1 path, 1 colour, 0 images — monochrome by construction (V04). Our VTracer-backed engine: 0 embedded images in every output we have measured, 6 runs plus a 72-file corpus (V05). Inkscape 1.4.4 object-trace: exactly 1 embedded image with a 4-8 path skeleton regardless of input — if someone handed you "an Inkscape trace", that is what a correct one looks like; the fix is to delete the <image> element, look at what remains, and if it is nearly nothing, retrace with a tool that emits the shapes as paths. Then label your file honestly: fake (bitmap in a wrapper), junk (path-per-pixel mosaic), or real-but-heavy (dense paths from a photo — legitimate, just large).
Transparent Methodology
What this page does not claim
Stated plainly, because the pages ranked for these questions do not state it.
Only three tools were run
Inkscape 1.4.4, potrace 1.16 and our own VTracer-backed engine were executed here, on three inputs, twice. Illustrator, Vectorizer.AI, Vector Magic, Adobe Express and every online converter were not installed, not run and not measured — no sentence on this page describes their output. Where we timed the same three tools under the same harness with a full recheck, that is our offline image to vector converter benchmark.
The AI-answer probe is a one-day snapshot
Six answers, two engines, three questions, captured 2026-09-29 in fresh sessions. Answers change and engines iterate constantly. What we stand behind is the published capture itself — /loop07/ai-probe-20260929.json — not a claim about what any engine will say tomorrow. The probe also never named this site, which is why pic2svg_mentions is 0: being absent from the answer set is the honest starting point, not a ranking claim.
"Fake vector" is our label, not a standard
Formats have no formal fake flag. We split the failure into three cases so the checks can name what they found: an embedded raster (a picture in a wrapper), a path-per-pixel mosaic (vector in form, unusable in practice), and a real trace that is merely heavy (large but editable). The community thread quoted in claim V09 documents the same three failure modes independently.
The hosted converter is a different boundary
The local CLI we measured never touches the network. The hosted converter at pic2svg.com posts your image as base64 to api.pic2svg.com before tracing (src/convert/actions.ts line 227), and its measured outputs contain 0 embedded images like the CLI rows above (V05). An offline desktop build is not shipped, so no present-tense offline claim is made for it.
Transparent methodology
ClaimsV01V05V06V07V08V10V11V12
- Research date
- 2026-09-29 (measurements + AI-answer probe), with a reproduction anchor on the published 2026-09-28 run.
- Measurement timestamps
- /loop06/raw-measurements-20260929.json generated 2026-09-29T22:04:00+0800; published /loop06/raw-measurements.json generated 2026-09-28T17:45:54+0800 with its independent recheck at 2026-09-28T17:46:21+0800 (all_pass: true); AI-answer probe captured 2026-09-29, artifact /loop07/ai-probe-20260929.json.
- Environment
- macOS-27.0-arm64-arm-64bit-Mach-O, arm64, 10 CPUs. Both measurement runs launched local subprocesses only (the harness records offline: true). The AI probe was two logged-in browser sessions that made no request to our own site — pic2svg appears in 0 of 6 answers, and we never supplied our URL to either engine.
- Sample size
- 3 images × 3 tools = 9 measurements per run × 2 runs = 18 tracer executions, plus the 9 executions of the published recheck, plus 72 existing outputs under bench/out/final5/ scanned for <image>. Reproduction strength: two inputs kept identical SHA-256 across runs and every Inkscape and potrace cell for them matched byte-for-byte (claims V01, V02, V04). AI probe: 3 questions × 2 engines = 6 answers, 53 cited sources total, 0 brand mentions.
- Tool versions
- Run 2026-09-29: Python 3.14.4 · vtracer 0.6.15 · Pillow 11.3.0 · potrace 1.16 · Inkscape 1.4.4 (dcaf3e7, 2026-05-05) · Homebrew 7.0.7-9-gcc9ff03. Published run 2026-09-28: Python 3.13.5 · Pillow 12.3.0, same vtracer, potrace and Inkscape builds (claim V10).
- Metrics defined
- bytes = file size of the produced SVG. bytes_without_embedded_image = the same file with every <image> element removed by the regex at measure.py line 48 (claim V11). path_elements = count of <path. distinct_colors = distinct fill/stroke values after the harness exclusions. image_elements = count of <image. linkCount = hyperlinks in one captured AI answer. pic2svg_mentions = answers whose text contains pic2svg or any2svg (expected 0 under the blind protocol).
- Provenance labels
- measured — executed in this run, raw JSON published next to this pagereproduced — executed on two dates with identical input SHA-256 and identical output bytescaptured — an AI answer recorded verbatim with its cited URLs, published at /loop07/community-reported — quoted from a public forum thread, not run by usnot-tested — we did not install, run or verify the tool
- Not tested by this run
- Illustrator, Vectorizer.AI, Vector Magic, Adobe Express, Recraft and all online converters were not run. SVG optimizers (SVGO, svgomg and friends) were not run — this page makes no size-reduction claim. The AI probe covers ChatGPT and Perplexity only, three questions each, one session, one day; Gemini, Copilot, Google AI Overviews and search-engine rankings were not sampled. The 72-file corpus bench/out/final5 predates the 2026-09-29 preset retune, so it supports the embedded-image count only, not structural counts.
- Known variance
- Wall time moves with load: the identical Inkscape call on apple-touch-icon.png went 5.276 s to 20.398 s between the two runs (claim V12), so this page reports no timing table at all. AI answers are non-deterministic between sessions; the probe is a single capture.
- Known discrepancy
- og-image.png changed between runs (62,665 → 63,033 bytes; SHA-256 bd699b52... → 8b10b9c0...), so its two measurements are not a reproduction pair — its rows cite only the dated run (V03, V06). The engine's presets were retuned on 2026-09-29 to downscale-only (never upscale), which moved its structural counts (apple-touch-icon 71,502 bytes / 326 paths on 09-28 became 1,027 / 3 on 09-29) while the embedded-image count stayed 0 in both — engine byte counts are therefore quoted only from the dated artifact, and the published raw-measurements.json was deliberately left at its 2026-09-28 state because the offline benchmark page's claim ledger cites it. The dated run used Python 3.14.4 / Pillow 11.3.0 where the published run used 3.13.5 / 12.3.0 (V10); every engine row exited 0 under both.
Written first-person by us, the pic2svg.com maintainers. The measurement is ours — two runs of one harness, raw JSON published next to this page — and so is the AI-answer capture, published in full so you can re-read the answers we read. Where a claim comes from a forum thread, it is quoted and labelled community-reported, never presented as our measurement. We do not attach a name, a credential or an affiliation we cannot point to.
Questions this page was written to answer
- How do I check whether an SVG contains real vectors or an embedded raster image?
- Four checks, in order: count <image elements (zero means nothing is embedded); strip them and compare byte counts (the delta is the hidden bitmap — definition in claim V11); zoom to 10× and click (crisp edges plus one selectable shape mean paths, a soft grid means raster, thousands of tiny squares means a path-per-pixel mosaic); then match the tool signature against the measured table. The trap the first check alone falls into: Inkscape 1.4.4's own Trace Bitmap export always contains exactly one embedded <image> — we measured it on three images, twice (claims V01-V03).
- Why does my converted SVG look pixelated when enlarged?
- Three different causes, and the checks separate them. If check 1 finds an <image>, you are looking at an embedded bitmap — enlarging it will always show pixels. If check 1 is clean but check 3 shows blocky squares with crisp edges, the trace produced one path per source pixel: technically vector, visually still pixel art. If both are clean and the edges are crisp but detail looks coarse, the source image was simply too small to trace well — no file edit recovers resolution the source never had.
- Why is my SVG file 16 MB after converting a photo, and how do I make it smaller?
- Run check 2 first. If stripping <image collapses the size, the file is a photo in a vector wrapper — remove it and retrace, because no optimizer can turn an embedded raster into paths. If the file is paths-only, the size is path data (possibly path-per-pixel bloat), which is a different problem: SVG optimizers and lower-detail re-traces address it, but this page does not run optimizers, so it makes no reduction claims.
- Does having an <image> element mean the SVG is fake?
- Not always — it means a raster is embedded, which is half the verdict. The other half is what sits next to it: delete the <image> element and look at what remains. Our measured Inkscape traces leave 4-8 paths behind (claims V01-V03) — visually almost nothing, because the picture was the bitmap. A logo with a full path layer plus one small decorative raster is a different story. Context decides, and the byte delta from check 2 gives you the ratio.
- Can ChatGPT or Gemini vectorize an image for me?
- Users publicly report three failure modes — a cleaner-looking PNG that is still pixels, an .svg with the raster embedded inside, or thousands of unusable nodes — with the advice to zoom and select a shape before trusting the output (claim V09). We did not test the assistants' vectorization ourselves; what we tested twice is how to verify whatever SVG you end up with, including ours: our converter traces with VTracer into paths, and every engine output we have measured contains 0 embedded images (claim V05). Try it on the image to SVG converter.
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 (SHA-256 12eafc7f... identical in both runs), Inkscape 1.4.4 headless Trace Bitmap exported an SVG containing exactly 1 embedded <image> on each run: 29,689 bytes total, 20,869 bytes with that bitmap stripped, 7 path elements and 7 colours — byte-identical on 2026-09-28 and 2026-09-29.
Verbatimdated runs[0].measurements[2]: "exit_code": 0, "bytes": 29689, "bytes_without_embedded_image": 20869, "path_elements": 7, "distinct_colors": 7, "image_elements": 1 — published runs[0].measurements[2]: "bytes": 29689, "bytes_without_embedded_image": 20869, "path_elements": 7, "distinct_colors": 7, "image_elements": 1 — both input records: "sha256": "12eafc7f7e0f4cb48d17704fa40f663e4db97e18790b9bed35a1699c363bf768"
On the generated 800x600 synthetic-flat.png (SHA-256 74d27fa8... identical in both runs, 6 source colours), Inkscape 1.4.4 exported exactly 1 embedded <image> on each run: 6,759 bytes total, 1,605 bytes with the bitmap stripped, 4 path elements and 4 colours — byte-identical on both dates.
Verbatimdated runs[2].measurements[2]: "bytes": 6759, "bytes_without_embedded_image": 1605, "path_elements": 4, "distinct_colors": 4, "image_elements": 1 — published runs[2].measurements[2]: identical five fields — both input records: "sha256": "74d27fa8b341b236550743301eaeea8b5d0f2455d472deca9a904fba49a13ea4"
On og-image.png the dated run measured Inkscape at 550,602 bytes with 1 embedded <image> (460,883 bytes without it, 8 path elements); the published run measured 551,569 / 462,368 / 1 image on the earlier input. The input was regenerated between runs (63,033 bytes, SHA-256 8b10b9c0..., vs 62,665 bytes, bd699b52...), so this is a single-run observation on the current input — but both inputs produced exactly 1 embedded image.
Verbatimdated runs[1].measurements[2]: "bytes": 550602, "bytes_without_embedded_image": 460883, "path_elements": 8, "image_elements": 1; dated runs[1].input: "bytes": 63033, "sha256": "8b10b9c0b3acac18..." — published runs[1].measurements[2]: "bytes": 551569, "bytes_without_embedded_image": 462368, "path_elements": 8, "image_elements": 1; published runs[1].input: "bytes": 62665, "sha256": "bd699b52e5ff340b..."
potrace 1.16 produced 0 embedded <image> elements on all three inputs on both runs; on the two SHA-stable inputs its output was byte-identical across dates (apple-touch-icon 1,322 bytes / 1 path / 1 colour; synthetic-flat 771 bytes / 1 path / 1 colour). potrace traces a 1-bit input, so one colour layer is its construction, not a defect.
Verbatimdated runs[0].measurements[1]: "bytes": 1322, "path_elements": 1, "distinct_colors": 1, "image_elements": 0 (published identical) — dated runs[2].measurements[1]: "bytes": 771, "path_elements": 1, "distinct_colors": 1, "image_elements": 0 (published identical) — dated runs[1].measurements[1]: "bytes": 21718, "path_elements": 88, "image_elements": 0 — note field: "potrace traces monochrome only, so the input is converted to 1-bit at threshold 128 first; output is 1 colour layer"
The VTracer 0.6.15-backed engine produced 0 embedded <image> elements in all 6 runs of the dated artifact and in all 72 SVGs under bench/out/final5/ — every engine output we have measured, across both the pre-retune and the post-retune presets.
Verbatimdated runs[0..2].measurements[0]: "image_elements": 0 (3x, exit_code 0) — published runs[0..2].measurements[0]: "image_elements": 0 (3x) — bench/out/final5 scanned 2026-09-29: grep -l '<image' bench/out/final5/*/*.svg | wc -l → 0 across 72 files
The three inputs are 180x180 apple-touch-icon.png (6,101 bytes, 205 distinct RGB colours, SHA-256 12eafc7f... unchanged between runs), generated 800x600 synthetic-flat.png (3,523 bytes, 6 colours, SHA-256 74d27fa8... unchanged), and 1200x630 og-image.png (63,033 bytes, 257 colours, SHA-256 8b10b9c0... in the dated run — regenerated since 2026-09-28, when it was 62,665 bytes / bd699b52...).
Verbatimdated runs[0].input: "bytes": 6101, "distinct_rgb_colours": 205, "sha256": "12eafc7f..." — dated runs[2].input: "bytes": 3523, "distinct_rgb_colours": 6, "sha256": "74d27fa8..." — dated runs[1].input: "bytes": 63033, "distinct_rgb_colours": 257, "sha256": "8b10b9c0..." — published runs[1].input: "bytes": 62665, "sha256": "bd699b52..."
- V07metric/loop07/ai-probe-20260929.json
On 2026-09-29 we asked three verbatim user questions on ChatGPT and Perplexity in fresh logged-in sessions, never mentioning this site, its brand or its URL. ChatGPT answered all three with 0 links; Perplexity cited 10, 18 and 25 sources (53 total); 0 of the 6 answers mentioned pic2svg or any2svg.
Verbatim"protocol": "Blind probe: fresh sessions on ChatGPT and Perplexity, logged-in state, real user questions only. The site name, brand and URL were never mentioned to either engine..." — "tally": {"total_answers": 6, "with_links": 3, "total_sources": 53, "pic2svg_mentions": 0} — ChatGPT linkCount: 0, 0, 0 — Perplexity linkCount: 10, 18, 25
- V08quote/loop07/ai-probe-20260929.json
None of the six captured answers reports a measured tool-output fact — an embedded-image count or a strip-bytes figure — for any tracer. The ChatGPT answers are markup-level procedure (verbatim: "If you see a huge base64 string beginning with something like: data:image/png;base64,... the SVG is essentially a container around a raster image, not a true vector") and the Perplexity answers are workflows assembled from the pages they cite.
Verbatimanswers[0].answerText (ChatGPT, Q1) contains the quoted sentence — phrase scan over answers[0..5].answerText for "image_elements", "bytes_without", "embedded image count", "path elements" returns no measured-output claim in any of the six answers (scan run 2026-09-29)
- V09quotehttps://www.reddit.com/r/generativeAI/comments/1u76ltt/if_youve_been_asking_chatgpt_to_vectorize_this/ (thread body and comments captured 2026-09-29 via the api.pullpush.io archive; reddit.com itself does not serve our fetch client)
Users publicly document the three fake-SVG failure modes and the verify-by-zoom-and-select trick: an r/generativeAI thread (2026-06-16, score 3, 5 comments) opens "people keep asking why chatgpt or gemini can't vectorize their image, and it's not a prompt you're missing…" and a comment replies "the embedded png inside an svg is such a sneaky failure mode. it validates every check except actually being vector".
VerbatimOP: "people keep asking why chatgpt or gemini can't vectorize their image, and it's not a prompt you're missing…" — comment (Zealousideal-Fan6582): "the embedded png inside an svg is such a sneaky failure mode. it validates every check except actually being vector" — thread documents three failure modes: a cleaner-looking PNG that is still pixels, an .svg with the raster embedded inside, or SVG code with thousands of unusable nodes
Both runs' toolchains share Inkscape 1.4.4 (dcaf3e7, 2026-05-05), potrace 1.16 and vtracer 0.6.15; the dated run used Python 3.14.4 / Pillow 11.3.0, the published run Python 3.13.5 / Pillow 12.3.0. Host for both: macOS-27.0 arm64, 10 CPUs.
Verbatimdated tool_versions: "python": "3.14.4", "vtracer": "0.6.15", "pillow": "11.3.0", "potrace": "potrace 1.16...", "inkscape": "Inkscape 1.4.4 (dcaf3e7, 2026-05-05)", "platform": "macOS-27.0-arm64-arm-64bit-Mach-O", "cpu_count": 10 — published tool_versions: "python": "3.13.5", "pillow": "12.3.0", same vtracer/potrace/inkscape/platform/cpu_count
- V11metric
/loop06/measure.pylines 48, 117-118bytes_without_embedded_image — every strip-bytes figure on this page — is the output SVG with every <image> element removed by regex and re-encoded: len(IMAGE_EL_RE.sub("", text).encode("utf-8")).
Verbatimline 48: IMAGE_EL_RE = re.compile(r"<image\b.*?(?:/>|</image>)", re.S) — lines 117-118: "bytes_without_embedded_image": len(IMAGE_EL_RE.sub("", text).encode("utf-8"))
The identical Inkscape call on apple-touch-icon.png took 5.276 s on 2026-09-28 and 20.398 s on 2026-09-29 — same input, same command, same tool version — which is why this page claims no wall-clock timings.
Verbatimpublished runs[0].measurements[2]: "wall_seconds": 5.276 — dated runs[0].measurements[2]: "wall_seconds": 20.398