Rebuild wasm at 0.1.3 with SIMD on the threaded arm; merge default 0.035; flask mark; harmonize note
Browse filesThreaded arm now compiles with simd128 (RUSTFLAGS was overriding .cargo/config.toml). Presets use the CLI's merge default 0.035. LogoLabs flask as header mark and favicon. Harmonize disclosure under the controls; external links open in a new tab.
- favicon.svg +3 -0
- index.html +11 -10
- pkg-threads/inkvec_wasm.d.ts +4 -2
- pkg-threads/inkvec_wasm.js +4 -2
- pkg-threads/inkvec_wasm_bg.wasm +2 -2
- pkg-threads/package.json +1 -2
- pkg-threads/snippets/wasm-bindgen-rayon-38edf6e439f6d70d/src/workerHelpers.js +1 -1
- pkg/inkvec_wasm.d.ts +4 -2
- pkg/inkvec_wasm.js +4 -2
- pkg/inkvec_wasm_bg.wasm +2 -2
- pkg/package.json +1 -2
- worker.js +1 -1
favicon.svg
ADDED
|
|
index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
| 6 |
<meta http-equiv="Cache-Control" content="no-cache">
|
| 7 |
<title>Inkvec</title>
|
| 8 |
<meta name="description" content="Inkvec by LogoLabs traces logos, icons and flat artwork to exact SVG, entirely in your browser.">
|
| 9 |
-
<link rel="icon"
|
| 10 |
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,500;0,600;0,700;1,500&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap">
|
| 11 |
<style>
|
| 12 |
/* LogoLabs design system: warm charcoal ramp, one copper accent, Playfair Display + Inter.
|
|
@@ -39,7 +39,7 @@ h2{font-size:clamp(22px,3vw,30px);letter-spacing:-.02em;font-weight:600;margin:0
|
|
| 39 |
.sec{margin-top:64px}
|
| 40 |
/* top bar */
|
| 41 |
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:14px;padding:14px 24px;border-bottom:1px solid var(--rule);background:var(--card)}
|
| 42 |
-
.top .mark{width:28px;height:28px}
|
| 43 |
.top .name{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.01em}
|
| 44 |
.top .by{color:var(--dim);font-size:13px}
|
| 45 |
.top nav{margin-left:auto;display:flex;gap:18px;font-size:13.5px;font-weight:600}
|
|
@@ -160,9 +160,9 @@ footer .v{margin-left:auto}
|
|
| 160 |
</head>
|
| 161 |
<body>
|
| 162 |
<header class="top">
|
| 163 |
-
<svg class="mark" viewBox="
|
| 164 |
<span class="name">Inkvec</span><span class="by">by LogoLabs</span>
|
| 165 |
-
<nav><a href="#showcase">Before & after</a><a href="#versus">Results</a><a href="#how">How it works</a><a href="https://github.com/logolabs/inkvec">GitHub</a></nav>
|
| 166 |
</header>
|
| 167 |
<main>
|
| 168 |
<h1>Exact vectors from your logo, in your browser.</h1>
|
|
@@ -187,6 +187,7 @@ footer .v{margin-left:auto}
|
|
| 187 |
<button class="primary" id="go" disabled>Trace</button>
|
| 188 |
<span class="status mono" id="status">loading the tracer…</span>
|
| 189 |
</div>
|
|
|
|
| 190 |
|
| 191 |
<div class="viewer empty" id="viewer"><span>Your input and the vector result appear here side by side. Scroll to zoom, drag to pan; both sides move together.</span></div>
|
| 192 |
<div class="tools" id="livetools" hidden></div>
|
|
@@ -202,7 +203,7 @@ footer .v{margin-left:auto}
|
|
| 202 |
<label>Precision (px)<input type="number" id="precision" value="0.1" step="0.05" min="0.02"></label>
|
| 203 |
<label>Speckle floor (px²)<input type="number" id="min_area" value="2" step="1" min="0"></label>
|
| 204 |
<label>Max colours<input type="number" id="colors" value="64" step="1" min="2"></label>
|
| 205 |
-
<label>Merge distance (OKLab)<input type="number" id="merge" value="0.
|
| 206 |
<label>Max dimension (px)<input type="number" id="max_dim" value="1024" step="256" min="128"></label>
|
| 207 |
<label>Time budget (s)<input type="number" id="time_budget" value="20" step="5" min="0"></label>
|
| 208 |
<label>Margin (fraction)<input type="number" id="margin" value="0" step="0.02" min="0"></label>
|
|
@@ -368,9 +369,9 @@ document.addEventListener('keyup', e => { if (e.code === 'Space' && hot) hot.fli
|
|
| 368 |
// ---------------------------------------------------------------- live tracer
|
| 369 |
let bytes = null, svgText = "", name = "image", jobId = 0, timer = null, live = null, liveVec = null, liveLayer = 'fill';
|
| 370 |
const PRESETS = {
|
| 371 |
-
logo: {precision:0.1, min_area:2, colors:64, merge:0.
|
| 372 |
-
icon: {precision:0.1, min_area:1, colors:16, merge:0.
|
| 373 |
-
detail: {precision:0.05, min_area:1, colors:64, merge:0.
|
| 374 |
compact: {precision:0.1, min_area:4, colors:32, merge:0.06, max_dim:1024, content_units:true},
|
| 375 |
};
|
| 376 |
function applyPreset(p){ const v = PRESETS[p]; for (const k in v){ const e = $(k); if (e.type === "checkbox") e.checked = v[k]; else e.value = v[k]; } }
|
|
@@ -378,7 +379,7 @@ for (const b of document.querySelectorAll("#presets button")) b.addEventListener
|
|
| 378 |
|
| 379 |
let worker = null;
|
| 380 |
function makeWorker(){
|
| 381 |
-
const url = A.workerUrl || "./worker.js?v=
|
| 382 |
try { worker = new Worker(url, { type: "module" }); } catch (e) { worker = null; return; }
|
| 383 |
worker.onmessage = (e) => {
|
| 384 |
const m = e.data;
|
|
@@ -503,7 +504,7 @@ function renderVersus(){
|
|
| 503 |
$("bars").innerHTML = `<table><caption>21 cases, 2026-09-15</caption><thead><tr><th>engine</th><th>mean dE00</th><th>median dE00</th><th>DISTS</th><th>DINO</th><th>coords</th><th>seconds</th></tr></thead><tbody>` +
|
| 504 |
COMPETITORS.map(r => `<tr class="${r.win ? 'win' : ''}"><td>${r.name}</td><td class="mono">${fmt(r.mean,3)}</td><td class="mono">${fmt(r.median,3)}</td><td class="mono">${fmt(r.dists,4)}</td><td class="mono">${fmt(r.dino,4)}</td><td class="mono">${r.coords}</td><td class="mono">${fmt(r.sec,2)}</td></tr>`).join('') +
|
| 505 |
`</tbody></table>`;
|
| 506 |
-
$("vtnote").innerHTML = `Source: <code class="mono">out/crosscompare-competitors-2026-09-15/summary.md</code>. Two more engines were measured for completeness and are left out of this table because they are not comparable at the geometry level: covecto's default mode and potrace-color both reproduce the source pixel grid almost losslessly (tens of thousands of coordinates per case) rather than artist-shaped geometry. Full detail in the <a href="https://github.com/logolabs/inkvec#results">README</a>.`;
|
| 507 |
}
|
| 508 |
renderVersus();
|
| 509 |
loadShowcase();
|
|
|
|
| 6 |
<meta http-equiv="Cache-Control" content="no-cache">
|
| 7 |
<title>Inkvec</title>
|
| 8 |
<meta name="description" content="Inkvec by LogoLabs traces logos, icons and flat artwork to exact SVG, entirely in your browser.">
|
| 9 |
+
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
| 10 |
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,500;0,600;0,700;1,500&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap">
|
| 11 |
<style>
|
| 12 |
/* LogoLabs design system: warm charcoal ramp, one copper accent, Playfair Display + Inter.
|
|
|
|
| 39 |
.sec{margin-top:64px}
|
| 40 |
/* top bar */
|
| 41 |
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:14px;padding:14px 24px;border-bottom:1px solid var(--rule);background:var(--card)}
|
| 42 |
+
.top .mark{width:28px;height:28px;color:var(--accent)}
|
| 43 |
.top .name{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:-.01em}
|
| 44 |
.top .by{color:var(--dim);font-size:13px}
|
| 45 |
.top nav{margin-left:auto;display:flex;gap:18px;font-size:13.5px;font-weight:600}
|
|
|
|
| 160 |
</head>
|
| 161 |
<body>
|
| 162 |
<header class="top">
|
| 163 |
+
<svg class="mark" viewBox="720 550 700 970" fill="currentColor" aria-hidden="true"><path d="M 881.984 591.726 C 909.088 592.132 936.829 591.866 963.981 591.887 L 964.051 615.134 C 987.819 614.909 1017.69 614.432 1041.08 615.648 C 1040.93 607.346 1040.69 600.253 1041.98 592.045 C 1069.11 592.348 1096.88 591.998 1124.06 591.953 L 1123.92 675.668 L 1101.07 675.765 C 1095.31 774.162 1119.89 868.607 1055.36 953.552 C 1004.92 1019.95 937.496 1064.82 878.928 1123.13 C 845.28 1156.38 816.712 1194.4 794.144 1235.97 C 767.017 1286.42 741.545 1353.22 780.436 1404.37 C 796.668 1425.52 824.772 1443.38 851.877 1445.43 C 877.696 1447.4 906.17 1446.57 932.261 1446.6 L 1080.96 1446.69 L 1197.09 1446.81 C 1210.8 1446.82 1244.73 1447.6 1257.07 1445.9 C 1273.88 1443.68 1289.75 1436.88 1302.95 1426.25 C 1322.04 1410.93 1332.82 1389.99 1335.14 1365.73 C 1337.48 1341.57 1330.09 1317.48 1314.6 1298.79 C 1282.06 1259.91 1239.06 1266.08 1193.98 1266.11 L 1064.24 1266.18 C 1007.04 1266.21 963.782 1274.83 923.019 1226.4 C 902.441 1198.45 902.862 1175 902.924 1142.3 C 912.343 1133.33 929.852 1117.98 939.887 1110.13 C 940.427 1142.3 933.166 1185.04 957.055 1209.47 C 975.922 1228.76 996.316 1230.57 1021.97 1229.58 C 1035.66 1229.06 1050.27 1230.01 1064.04 1229.64 C 1123.95 1229.84 1183.88 1229.63 1243.79 1229.78 C 1278.77 1229.84 1312.9 1244 1337.05 1269.48 C 1360.56 1294.24 1373.23 1327.36 1372.25 1361.49 C 1371.21 1395.65 1356.25 1427.91 1330.85 1450.78 C 1293.97 1484.58 1264.51 1482.67 1218.46 1482.55 L 1136.27 1482.52 L 960.971 1482.87 C 928.505 1482.94 895.26 1483.33 863.01 1482.84 C 824.574 1482.3 784.504 1464.07 758.904 1435.1 C 675.08 1340.22 761.832 1202.37 828.1 1124.18 C 850.986 1097.18 877.862 1073.68 903.55 1050.22 C 901.884 1021.1 903.068 980.916 903.063 950.824 L 903.075 765.518 L 903.206 711.487 C 903.313 700.62 904.014 686.497 903.106 676.093 C 895.901 675.719 889.159 675.649 881.94 675.611 C 882.424 648.129 881.982 619.316 881.984 591.726 z M 964.007 675.527 C 955.974 675.648 947.939 675.718 939.905 675.736 L 939.967 1018.59 C 957.908 1003.76 976.395 987.535 992.628 970.848 C 1042.17 921.753 1064.98 876.954 1065.28 806.604 L 1064.84 676.083 L 1040.87 676.051 C 1041.64 666.978 1041.33 661.135 1040.9 651.947 C 1019.24 651.252 986.821 650.561 965.356 651.5 C 963.031 654.329 963.936 670.679 964.007 675.527 z M 1062.08 612.678 C 1061.97 626.562 1062.1 641.194 1061.69 655 L 1095.78 654.97 C 1098.9 654.996 1101.7 655.476 1104.18 653.836 C 1105.4 645.43 1104.6 621.8 1104.64 611.911 C 1099.78 612.021 1078.39 611.957 1074.37 612.466 L 1062.08 612.678 z"/></svg>
|
| 164 |
<span class="name">Inkvec</span><span class="by">by LogoLabs</span>
|
| 165 |
+
<nav><a href="#showcase">Before & after</a><a href="#versus">Results</a><a href="#how">How it works</a><a href="https://github.com/logolabs/inkvec" target="_blank" rel="noopener noreferrer">GitHub</a></nav>
|
| 166 |
</header>
|
| 167 |
<main>
|
| 168 |
<h1>Exact vectors from your logo, in your browser.</h1>
|
|
|
|
| 187 |
<button class="primary" id="go" disabled>Trace</button>
|
| 188 |
<span class="status mono" id="status">loading the tracer…</span>
|
| 189 |
</div>
|
| 190 |
+
<p class="note" style="margin:2px 0 12px">Repeated shapes are harmonized by default — fewer paths and smaller SVGs; on very fine line art this can visibly shift geometry (CLI opt-out: <code class="mono">--no-harmonize</code>).</p>
|
| 191 |
|
| 192 |
<div class="viewer empty" id="viewer"><span>Your input and the vector result appear here side by side. Scroll to zoom, drag to pan; both sides move together.</span></div>
|
| 193 |
<div class="tools" id="livetools" hidden></div>
|
|
|
|
| 203 |
<label>Precision (px)<input type="number" id="precision" value="0.1" step="0.05" min="0.02"></label>
|
| 204 |
<label>Speckle floor (px²)<input type="number" id="min_area" value="2" step="1" min="0"></label>
|
| 205 |
<label>Max colours<input type="number" id="colors" value="64" step="1" min="2"></label>
|
| 206 |
+
<label>Merge distance (OKLab)<input type="number" id="merge" value="0.035" step="0.005" min="0"></label>
|
| 207 |
<label>Max dimension (px)<input type="number" id="max_dim" value="1024" step="256" min="128"></label>
|
| 208 |
<label>Time budget (s)<input type="number" id="time_budget" value="20" step="5" min="0"></label>
|
| 209 |
<label>Margin (fraction)<input type="number" id="margin" value="0" step="0.02" min="0"></label>
|
|
|
|
| 369 |
// ---------------------------------------------------------------- live tracer
|
| 370 |
let bytes = null, svgText = "", name = "image", jobId = 0, timer = null, live = null, liveVec = null, liveLayer = 'fill';
|
| 371 |
const PRESETS = {
|
| 372 |
+
logo: {precision:0.1, min_area:2, colors:64, merge:0.035, max_dim:1024, content_units:false},
|
| 373 |
+
icon: {precision:0.1, min_area:1, colors:16, merge:0.035, max_dim:1024, content_units:false},
|
| 374 |
+
detail: {precision:0.05, min_area:1, colors:64, merge:0.035, max_dim:2048, content_units:false},
|
| 375 |
compact: {precision:0.1, min_area:4, colors:32, merge:0.06, max_dim:1024, content_units:true},
|
| 376 |
};
|
| 377 |
function applyPreset(p){ const v = PRESETS[p]; for (const k in v){ const e = $(k); if (e.type === "checkbox") e.checked = v[k]; else e.value = v[k]; } }
|
|
|
|
| 379 |
|
| 380 |
let worker = null;
|
| 381 |
function makeWorker(){
|
| 382 |
+
const url = A.workerUrl || "./worker.js?v=8";
|
| 383 |
try { worker = new Worker(url, { type: "module" }); } catch (e) { worker = null; return; }
|
| 384 |
worker.onmessage = (e) => {
|
| 385 |
const m = e.data;
|
|
|
|
| 504 |
$("bars").innerHTML = `<table><caption>21 cases, 2026-09-15</caption><thead><tr><th>engine</th><th>mean dE00</th><th>median dE00</th><th>DISTS</th><th>DINO</th><th>coords</th><th>seconds</th></tr></thead><tbody>` +
|
| 505 |
COMPETITORS.map(r => `<tr class="${r.win ? 'win' : ''}"><td>${r.name}</td><td class="mono">${fmt(r.mean,3)}</td><td class="mono">${fmt(r.median,3)}</td><td class="mono">${fmt(r.dists,4)}</td><td class="mono">${fmt(r.dino,4)}</td><td class="mono">${r.coords}</td><td class="mono">${fmt(r.sec,2)}</td></tr>`).join('') +
|
| 506 |
`</tbody></table>`;
|
| 507 |
+
$("vtnote").innerHTML = `Source: <code class="mono">out/crosscompare-competitors-2026-09-15/summary.md</code>. Two more engines were measured for completeness and are left out of this table because they are not comparable at the geometry level: covecto's default mode and potrace-color both reproduce the source pixel grid almost losslessly (tens of thousands of coordinates per case) rather than artist-shaped geometry. Full detail in the <a href="https://github.com/logolabs/inkvec#results" target="_blank" rel="noopener noreferrer">README</a>.`;
|
| 508 |
}
|
| 509 |
renderVersus();
|
| 510 |
loadShowcase();
|
pkg-threads/inkvec_wasm.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export function threads_available(): boolean;
|
|
| 16 |
* Trace image bytes to an SVG string.
|
| 17 |
*
|
| 18 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 19 |
-
* defaults 0.1, 2, 64, 0.
|
| 20 |
-
* `
|
|
|
|
|
|
|
| 21 |
*/
|
| 22 |
export function trace(bytes: Uint8Array, precision: number, min_area: number, colors: number, merge: number, max_dim: number, time_budget: number, no_background: boolean, minify: boolean, margin: number, content_units: boolean): string;
|
| 23 |
|
|
|
|
| 16 |
* Trace image bytes to an SVG string.
|
| 17 |
*
|
| 18 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 19 |
+
* defaults 0.1, 2, 64, 0.035 when unsure; the merge default is
|
| 20 |
+
* `inkvec_trace::color::DEFAULT_MERGE_DISTANCE`); `max_dim` and `time_budget` bound the
|
| 21 |
+
* work; `no_background`, `minify`, `margin`, `content_units` shape the output. `max_dim = 0`
|
| 22 |
+
* means no cap.
|
| 23 |
*/
|
| 24 |
export function trace(bytes: Uint8Array, precision: number, min_area: number, colors: number, merge: number, max_dim: number, time_budget: number, no_background: boolean, minify: boolean, margin: number, content_units: boolean): string;
|
| 25 |
|
pkg-threads/inkvec_wasm.js
CHANGED
|
@@ -28,8 +28,10 @@ export function threads_available() {
|
|
| 28 |
* Trace image bytes to an SVG string.
|
| 29 |
*
|
| 30 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 31 |
-
* defaults 0.1, 2, 64, 0.
|
| 32 |
-
* `
|
|
|
|
|
|
|
| 33 |
* @param {Uint8Array} bytes
|
| 34 |
* @param {number} precision
|
| 35 |
* @param {number} min_area
|
|
|
|
| 28 |
* Trace image bytes to an SVG string.
|
| 29 |
*
|
| 30 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 31 |
+
* defaults 0.1, 2, 64, 0.035 when unsure; the merge default is
|
| 32 |
+
* `inkvec_trace::color::DEFAULT_MERGE_DISTANCE`); `max_dim` and `time_budget` bound the
|
| 33 |
+
* work; `no_background`, `minify`, `margin`, `content_units` shape the output. `max_dim = 0`
|
| 34 |
+
* means no cap.
|
| 35 |
* @param {Uint8Array} bytes
|
| 36 |
* @param {number} precision
|
| 37 |
* @param {number} min_area
|
pkg-threads/inkvec_wasm_bg.wasm
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:48381fa26e59e2f6ebf832b59ccfd384b3f08d2c371c1edf7d824fdaeb023815
|
| 3 |
+
size 3036282
|
pkg-threads/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
"LogoLabs"
|
| 6 |
],
|
| 7 |
"description": "Inkvec in the browser: the tracer compiled to WebAssembly",
|
| 8 |
-
"version": "0.1.
|
| 9 |
"license": "Apache-2.0",
|
| 10 |
"repository": {
|
| 11 |
"type": "git",
|
|
@@ -17,7 +17,6 @@
|
|
| 17 |
"inkvec_wasm.d.ts"
|
| 18 |
],
|
| 19 |
"main": "inkvec_wasm.js",
|
| 20 |
-
"homepage": "https://github.com/logolabs/inkvec",
|
| 21 |
"types": "inkvec_wasm.d.ts",
|
| 22 |
"sideEffects": [
|
| 23 |
"./snippets/*"
|
|
|
|
| 5 |
"LogoLabs"
|
| 6 |
],
|
| 7 |
"description": "Inkvec in the browser: the tracer compiled to WebAssembly",
|
| 8 |
+
"version": "0.1.3",
|
| 9 |
"license": "Apache-2.0",
|
| 10 |
"repository": {
|
| 11 |
"type": "git",
|
|
|
|
| 17 |
"inkvec_wasm.d.ts"
|
| 18 |
],
|
| 19 |
"main": "inkvec_wasm.js",
|
|
|
|
| 20 |
"types": "inkvec_wasm.d.ts",
|
| 21 |
"sideEffects": [
|
| 22 |
"./snippets/*"
|
pkg-threads/snippets/wasm-bindgen-rayon-38edf6e439f6d70d/src/workerHelpers.js
CHANGED
|
@@ -51,7 +51,7 @@ waitForMsgType(self, 'wasm_bindgen_worker_init').then(async ({ init, receiver })
|
|
| 51 |
// OTOH, even though it can't be inlined, it should be still reasonably
|
| 52 |
// cheap since the requested file is already in cache (it was loaded by
|
| 53 |
// the main thread).
|
| 54 |
-
const pkg = await import('../../../inkvec_wasm.js?v=
|
| 55 |
await pkg.default(init);
|
| 56 |
postMessage({ type: 'wasm_bindgen_worker_ready' });
|
| 57 |
pkg.wbg_rayon_start_worker(receiver);
|
|
|
|
| 51 |
// OTOH, even though it can't be inlined, it should be still reasonably
|
| 52 |
// cheap since the requested file is already in cache (it was loaded by
|
| 53 |
// the main thread).
|
| 54 |
+
const pkg = await import('../../../inkvec_wasm.js?v=8');
|
| 55 |
await pkg.default(init);
|
| 56 |
postMessage({ type: 'wasm_bindgen_worker_ready' });
|
| 57 |
pkg.wbg_rayon_start_worker(receiver);
|
pkg/inkvec_wasm.d.ts
CHANGED
|
@@ -14,8 +14,10 @@ export function threads_available(): boolean;
|
|
| 14 |
* Trace image bytes to an SVG string.
|
| 15 |
*
|
| 16 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 17 |
-
* defaults 0.1, 2, 64, 0.
|
| 18 |
-
* `
|
|
|
|
|
|
|
| 19 |
*/
|
| 20 |
export function trace(bytes: Uint8Array, precision: number, min_area: number, colors: number, merge: number, max_dim: number, time_budget: number, no_background: boolean, minify: boolean, margin: number, content_units: boolean): string;
|
| 21 |
|
|
|
|
| 14 |
* Trace image bytes to an SVG string.
|
| 15 |
*
|
| 16 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 17 |
+
* defaults 0.1, 2, 64, 0.035 when unsure; the merge default is
|
| 18 |
+
* `inkvec_trace::color::DEFAULT_MERGE_DISTANCE`); `max_dim` and `time_budget` bound the
|
| 19 |
+
* work; `no_background`, `minify`, `margin`, `content_units` shape the output. `max_dim = 0`
|
| 20 |
+
* means no cap.
|
| 21 |
*/
|
| 22 |
export function trace(bytes: Uint8Array, precision: number, min_area: number, colors: number, merge: number, max_dim: number, time_budget: number, no_background: boolean, minify: boolean, margin: number, content_units: boolean): string;
|
| 23 |
|
pkg/inkvec_wasm.js
CHANGED
|
@@ -17,8 +17,10 @@ export function threads_available() {
|
|
| 17 |
* Trace image bytes to an SVG string.
|
| 18 |
*
|
| 19 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 20 |
-
* defaults 0.1, 2, 64, 0.
|
| 21 |
-
* `
|
|
|
|
|
|
|
| 22 |
* @param {Uint8Array} bytes
|
| 23 |
* @param {number} precision
|
| 24 |
* @param {number} min_area
|
|
|
|
| 17 |
* Trace image bytes to an SVG string.
|
| 18 |
*
|
| 19 |
* `precision`, `min_area`, `colors`, `merge` are the tracer's quality knobs (pass the
|
| 20 |
+
* defaults 0.1, 2, 64, 0.035 when unsure; the merge default is
|
| 21 |
+
* `inkvec_trace::color::DEFAULT_MERGE_DISTANCE`); `max_dim` and `time_budget` bound the
|
| 22 |
+
* work; `no_background`, `minify`, `margin`, `content_units` shape the output. `max_dim = 0`
|
| 23 |
+
* means no cap.
|
| 24 |
* @param {Uint8Array} bytes
|
| 25 |
* @param {number} precision
|
| 26 |
* @param {number} min_area
|
pkg/inkvec_wasm_bg.wasm
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f20be44f61e2270d8687e517fb79a05a9f9702e49499afbb11cbbcbeb47c2b9e
|
| 3 |
+
size 2997588
|
pkg/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
"LogoLabs"
|
| 6 |
],
|
| 7 |
"description": "Inkvec in the browser: the tracer compiled to WebAssembly",
|
| 8 |
-
"version": "0.1.
|
| 9 |
"license": "Apache-2.0",
|
| 10 |
"repository": {
|
| 11 |
"type": "git",
|
|
@@ -17,7 +17,6 @@
|
|
| 17 |
"inkvec_wasm.d.ts"
|
| 18 |
],
|
| 19 |
"main": "inkvec_wasm.js",
|
| 20 |
-
"homepage": "https://github.com/logolabs/inkvec",
|
| 21 |
"types": "inkvec_wasm.d.ts",
|
| 22 |
"sideEffects": [
|
| 23 |
"./snippets/*"
|
|
|
|
| 5 |
"LogoLabs"
|
| 6 |
],
|
| 7 |
"description": "Inkvec in the browser: the tracer compiled to WebAssembly",
|
| 8 |
+
"version": "0.1.3",
|
| 9 |
"license": "Apache-2.0",
|
| 10 |
"repository": {
|
| 11 |
"type": "git",
|
|
|
|
| 17 |
"inkvec_wasm.d.ts"
|
| 18 |
],
|
| 19 |
"main": "inkvec_wasm.js",
|
|
|
|
| 20 |
"types": "inkvec_wasm.d.ts",
|
| 21 |
"sideEffects": [
|
| 22 |
"./snippets/*"
|
worker.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
| 15 |
// import alone busts the JavaScript and never the WebAssembly — the wrong way round, since
|
| 16 |
// the bindings rarely change and the wasm changes on every build. Bump it when `pkg/` or
|
| 17 |
// `pkg-threads/` is rebuilt.
|
| 18 |
-
const V = "v=
|
| 19 |
|
| 20 |
const isolated = typeof crossOriginIsolated !== "undefined" && crossOriginIsolated;
|
| 21 |
|
|
|
|
| 15 |
// import alone busts the JavaScript and never the WebAssembly — the wrong way round, since
|
| 16 |
// the bindings rarely change and the wasm changes on every build. Bump it when `pkg/` or
|
| 17 |
// `pkg-threads/` is rebuilt.
|
| 18 |
+
const V = "v=8";
|
| 19 |
|
| 20 |
const isolated = typeof crossOriginIsolated !== "undefined" && crossOriginIsolated;
|
| 21 |
|