git: 9acec49f64d3 - main - graphics/py-vtracer: New port: Python bindings for the Rust Vtracer raster-to-vector library

Yuri Victorovich <[email protected]>
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <[email protected]>
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=9acec49f64d35049489c967f6624935eb54a2025

commit 9acec49f64d35049489c967f6624935eb54a2025
Author:     Yuri Victorovich <[email protected]>
AuthorDate: 2026-08-07 16:44:42 +0000
Commit:     Yuri Victorovich <[email protected]>
CommitDate: 2026-08-07 17:18:56 +0000

    graphics/py-vtracer: New port: Python bindings for the Rust Vtracer raster-to-vector library
---
 graphics/Makefile                    |   1 +
 graphics/py-vtracer/Makefile         | 121 +++++++++++++++++++++++
 graphics/py-vtracer/distinfo         | 185 +++++++++++++++++++++++++++++++++++
 graphics/py-vtracer/files/example.py |  16 +++
 graphics/py-vtracer/pkg-descr        |   5 +
 5 files changed, 328 insertions(+)

diff --git a/graphics/Makefile b/graphics/Makefile
index 7e156245025c..4ca45e63c59c 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -1082,6 +1082,7 @@
     SUBDIR += py-vecrec
     SUBDIR += py-vispy
     SUBDIR += py-visvis
+    SUBDIR += py-vtracer
     SUBDIR += py-vulkan
     SUBDIR += py-wand
     SUBDIR += py-webcolors
diff --git a/graphics/py-vtracer/Makefile b/graphics/py-vtracer/Makefile
new file mode 100644
index 000000000000..384c9bff9fd9
--- /dev/null
+++ b/graphics/py-vtracer/Makefile
@@ -0,0 +1,121 @@
+PORTNAME=	vtracer
+DISTVERSION=	0.6.15
+CATEGORIES=	graphics python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
+DISTFILES+=	${DISTNAME}${EXTRACT_SUFX}
+
+MAINTAINER=	[email protected]
+COMMENT=	Python bindings for the Rust Vtracer raster-to-vector library
+WWW=		https://www.visioncortex.org/vtracer/ \
+		https://github.com/visioncortex/vtracer
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}maturin>=1.2:devel/py-maturin@${PY_FLAVOR}
+
+USES=		cargo python
+USE_PYTHON=	pep517 autoplist concurrent
+
+CARGO_BUILD=	no
+CARGO_INSTALL=	no
+
+CARGO_CRATES=	adler-1.0.2 \
+		adler32-1.2.0 \
+		ansi_term-0.12.1 \
+		atty-0.2.14 \
+		autocfg-1.5.0 \
+		bit-vec-0.6.3 \
+		bitflags-1.3.2 \
+		bitflags-2.11.0 \
+		bumpalo-3.20.2 \
+		bytemuck-1.25.0 \
+		byteorder-1.5.0 \
+		cfg-if-0.1.10 \
+		cfg-if-1.0.4 \
+		clap-2.34.0 \
+		color_quant-1.1.0 \
+		console_error_panic_hook-0.1.7 \
+		console_log-0.2.2 \
+		crc32fast-1.5.0 \
+		crossbeam-deque-0.8.6 \
+		crossbeam-epoch-0.9.18 \
+		crossbeam-utils-0.8.21 \
+		deflate-0.8.6 \
+		either-1.15.0 \
+		fastrand-2.3.0 \
+		flo_curves-0.3.1 \
+		getrandom-0.2.17 \
+		gif-0.11.4 \
+		hermit-abi-0.1.19 \
+		image-0.23.14 \
+		indoc-1.0.9 \
+		itertools-0.8.2 \
+		itoa-1.0.18 \
+		jpeg-decoder-0.1.22 \
+		js-sys-0.3.91 \
+		libc-0.2.183 \
+		lock_api-0.4.14 \
+		log-0.4.29 \
+		memchr-2.8.0 \
+		memoffset-0.9.1 \
+		miniz_oxide-0.3.7 \
+		miniz_oxide-0.4.4 \
+		num-integer-0.1.46 \
+		num-iter-0.1.45 \
+		num-rational-0.3.2 \
+		num-traits-0.2.19 \
+		once_cell-1.21.4 \
+		parking_lot-0.12.5 \
+		parking_lot_core-0.9.12 \
+		png-0.16.8 \
+		proc-macro2-1.0.106 \
+		pyo3-0.19.2 \
+		pyo3-build-config-0.19.2 \
+		pyo3-ffi-0.19.2 \
+		pyo3-macros-0.19.2 \
+		pyo3-macros-backend-0.19.2 \
+		quote-1.0.45 \
+		rayon-1.11.0 \
+		rayon-core-1.13.0 \
+		redox_syscall-0.5.18 \
+		roots-0.0.6 \
+		rustversion-1.0.22 \
+		scoped_threadpool-0.1.9 \
+		scopeguard-1.2.0 \
+		serde-1.0.228 \
+		serde_core-1.0.228 \
+		serde_derive-1.0.228 \
+		serde_json-1.0.149 \
+		smallvec-1.15.1 \
+		strsim-0.8.0 \
+		syn-1.0.109 \
+		syn-2.0.117 \
+		target-lexicon-0.12.16 \
+		textwrap-0.11.0 \
+		tiff-0.6.1 \
+		unicode-ident-1.0.24 \
+		unicode-width-0.1.14 \
+		unindent-0.1.11 \
+		vec_map-0.8.2 \
+		visioncortex-0.8.10 \
+		wasi-0.11.1+wasi-snapshot-preview1 \
+		wasm-bindgen-0.2.114 \
+		wasm-bindgen-macro-0.2.114 \
+		wasm-bindgen-macro-support-0.2.114 \
+		wasm-bindgen-shared-0.2.114 \
+		web-sys-0.3.91 \
+		weezl-0.1.12 \
+		winapi-0.3.9 \
+		winapi-i686-pc-windows-gnu-0.4.0 \
+		winapi-x86_64-pc-windows-gnu-0.4.0 \
+		windows-link-0.2.1 \
+		zmij-1.0.21
+
+TEST_ENV=	${MAKE_ENV} PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+
+do-test:
+	@cd ${TEST_WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} ${FILESDIR}/example.py
+
+.include <bsd.port.mk>
diff --git a/graphics/py-vtracer/distinfo b/graphics/py-vtracer/distinfo
new file mode 100644
index 000000000000..059b0aa08bfa
--- /dev/null
+++ b/graphics/py-vtracer/distinfo
@@ -0,0 +1,185 @@
+TIMESTAMP = 1786115610
+SHA256 (vtracer-0.6.15.tar.gz) = f7f39943d1fc8e9dc82f5360a40e941aaf4c9166d8df30c3f6a2da8cc21dfc52
+SIZE (vtracer-0.6.15.tar.gz) = 19662
+SHA256 (rust/crates/adler-1.0.2.crate) = f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe
+SIZE (rust/crates/adler-1.0.2.crate) = 12778
+SHA256 (rust/crates/adler32-1.2.0.crate) = aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234
+SIZE (rust/crates/adler32-1.2.0.crate) = 6411
+SHA256 (rust/crates/ansi_term-0.12.1.crate) = d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2
+SIZE (rust/crates/ansi_term-0.12.1.crate) = 24838
+SHA256 (rust/crates/atty-0.2.14.crate) = d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8
+SIZE (rust/crates/atty-0.2.14.crate) = 5470
+SHA256 (rust/crates/autocfg-1.5.0.crate) = c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8
+SIZE (rust/crates/autocfg-1.5.0.crate) = 18729
+SHA256 (rust/crates/bit-vec-0.6.3.crate) = 349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb
+SIZE (rust/crates/bit-vec-0.6.3.crate) = 19927
+SHA256 (rust/crates/bitflags-1.3.2.crate) = bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a
+SIZE (rust/crates/bitflags-1.3.2.crate) = 23021
+SHA256 (rust/crates/bitflags-2.11.0.crate) = 843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af
+SIZE (rust/crates/bitflags-2.11.0.crate) = 48906
+SHA256 (rust/crates/bumpalo-3.20.2.crate) = 5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb
+SIZE (rust/crates/bumpalo-3.20.2.crate) = 97696
+SHA256 (rust/crates/bytemuck-1.25.0.crate) = c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec
+SIZE (rust/crates/bytemuck-1.25.0.crate) = 53466
+SHA256 (rust/crates/byteorder-1.5.0.crate) = 1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b
+SIZE (rust/crates/byteorder-1.5.0.crate) = 23288
+SHA256 (rust/crates/cfg-if-0.1.10.crate) = 4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822
+SIZE (rust/crates/cfg-if-0.1.10.crate) = 7933
+SHA256 (rust/crates/cfg-if-1.0.4.crate) = 9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801
+SIZE (rust/crates/cfg-if-1.0.4.crate) = 9360
+SHA256 (rust/crates/clap-2.34.0.crate) = a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c
+SIZE (rust/crates/clap-2.34.0.crate) = 202210
+SHA256 (rust/crates/color_quant-1.1.0.crate) = 3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b
+SIZE (rust/crates/color_quant-1.1.0.crate) = 6649
+SHA256 (rust/crates/console_error_panic_hook-0.1.7.crate) = a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc
+SIZE (rust/crates/console_error_panic_hook-0.1.7.crate) = 507196
+SHA256 (rust/crates/console_log-0.2.2.crate) = e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f
+SIZE (rust/crates/console_log-0.2.2.crate) = 28932
+SHA256 (rust/crates/crc32fast-1.5.0.crate) = 9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511
+SIZE (rust/crates/crc32fast-1.5.0.crate) = 40723
+SHA256 (rust/crates/crossbeam-deque-0.8.6.crate) = 9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51
+SIZE (rust/crates/crossbeam-deque-0.8.6.crate) = 22471
+SHA256 (rust/crates/crossbeam-epoch-0.9.18.crate) = 5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e
+SIZE (rust/crates/crossbeam-epoch-0.9.18.crate) = 46875
+SHA256 (rust/crates/crossbeam-utils-0.8.21.crate) = d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28
+SIZE (rust/crates/crossbeam-utils-0.8.21.crate) = 42691
+SHA256 (rust/crates/deflate-0.8.6.crate) = 73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174
+SIZE (rust/crates/deflate-0.8.6.crate) = 62365
+SHA256 (rust/crates/either-1.15.0.crate) = 48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719
+SIZE (rust/crates/either-1.15.0.crate) = 20114
+SHA256 (rust/crates/fastrand-2.3.0.crate) = 37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be
+SIZE (rust/crates/fastrand-2.3.0.crate) = 15076
+SHA256 (rust/crates/flo_curves-0.3.1.crate) = 1c227ffb4f98baa9073c033e23243089d0ed3dd1f5cd620894452074db48a29b
+SIZE (rust/crates/flo_curves-0.3.1.crate) = 832811
+SHA256 (rust/crates/getrandom-0.2.17.crate) = ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0
+SIZE (rust/crates/getrandom-0.2.17.crate) = 40780
+SHA256 (rust/crates/gif-0.11.4.crate) = 3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06
+SIZE (rust/crates/gif-0.11.4.crate) = 634244
+SHA256 (rust/crates/hermit-abi-0.1.19.crate) = 62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33
+SIZE (rust/crates/hermit-abi-0.1.19.crate) = 9979
+SHA256 (rust/crates/image-0.23.14.crate) = 24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1
+SIZE (rust/crates/image-0.23.14.crate) = 226804
+SHA256 (rust/crates/indoc-1.0.9.crate) = bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306
+SIZE (rust/crates/indoc-1.0.9.crate) = 13475
+SHA256 (rust/crates/itertools-0.8.2.crate) = f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484
+SIZE (rust/crates/itertools-0.8.2.crate) = 89203
+SHA256 (rust/crates/itoa-1.0.18.crate) = 8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682
+SIZE (rust/crates/itoa-1.0.18.crate) = 15935
+SHA256 (rust/crates/jpeg-decoder-0.1.22.crate) = 229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2
+SIZE (rust/crates/jpeg-decoder-0.1.22.crate) = 228366
+SHA256 (rust/crates/js-sys-0.3.91.crate) = b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c
+SIZE (rust/crates/js-sys-0.3.91.crate) = 91416
+SHA256 (rust/crates/libc-0.2.183.crate) = b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d
+SIZE (rust/crates/libc-0.2.183.crate) = 816918
+SHA256 (rust/crates/lock_api-0.4.14.crate) = 224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965
+SIZE (rust/crates/lock_api-0.4.14.crate) = 29249
+SHA256 (rust/crates/log-0.4.29.crate) = 5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897
+SIZE (rust/crates/log-0.4.29.crate) = 51515
+SHA256 (rust/crates/memchr-2.8.0.crate) = f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79
+SIZE (rust/crates/memchr-2.8.0.crate) = 97780
+SHA256 (rust/crates/memoffset-0.9.1.crate) = 488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a
+SIZE (rust/crates/memoffset-0.9.1.crate) = 9032
+SHA256 (rust/crates/miniz_oxide-0.3.7.crate) = 791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435
+SIZE (rust/crates/miniz_oxide-0.3.7.crate) = 44996
+SHA256 (rust/crates/miniz_oxide-0.4.4.crate) = a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b
+SIZE (rust/crates/miniz_oxide-0.4.4.crate) = 49938
+SHA256 (rust/crates/num-integer-0.1.46.crate) = 7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f
+SIZE (rust/crates/num-integer-0.1.46.crate) = 22331
+SHA256 (rust/crates/num-iter-0.1.45.crate) = 1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf
+SIZE (rust/crates/num-iter-0.1.45.crate) = 10320
+SHA256 (rust/crates/num-rational-0.3.2.crate) = 12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07
+SIZE (rust/crates/num-rational-0.3.2.crate) = 26359
+SHA256 (rust/crates/num-traits-0.2.19.crate) = 071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841
+SIZE (rust/crates/num-traits-0.2.19.crate) = 51631
+SHA256 (rust/crates/once_cell-1.21.4.crate) = 9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50
+SIZE (rust/crates/once_cell-1.21.4.crate) = 35010
+SHA256 (rust/crates/parking_lot-0.12.5.crate) = 93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a
+SIZE (rust/crates/parking_lot-0.12.5.crate) = 46735
+SHA256 (rust/crates/parking_lot_core-0.9.12.crate) = 2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1
+SIZE (rust/crates/parking_lot_core-0.9.12.crate) = 34110
+SHA256 (rust/crates/png-0.16.8.crate) = 3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6
+SIZE (rust/crates/png-0.16.8.crate) = 52598
+SHA256 (rust/crates/proc-macro2-1.0.106.crate) = 8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934
+SIZE (rust/crates/proc-macro2-1.0.106.crate) = 59765
+SHA256 (rust/crates/pyo3-0.19.2.crate) = e681a6cfdc4adcc93b4d3cf993749a4552018ee0a9b65fc0ccfad74352c72a38
+SIZE (rust/crates/pyo3-0.19.2.crate) = 418228
+SHA256 (rust/crates/pyo3-build-config-0.19.2.crate) = 076c73d0bc438f7a4ef6fdd0c3bb4732149136abd952b110ac93e4edb13a6ba5
+SIZE (rust/crates/pyo3-build-config-0.19.2.crate) = 29206
+SHA256 (rust/crates/pyo3-ffi-0.19.2.crate) = e53cee42e77ebe256066ba8aa77eff722b3bb91f3419177cf4cd0f304d3284d9
+SIZE (rust/crates/pyo3-ffi-0.19.2.crate) = 66500
+SHA256 (rust/crates/pyo3-macros-0.19.2.crate) = dfeb4c99597e136528c6dd7d5e3de5434d1ceaf487436a3f03b2d56b6fc9efd1
+SIZE (rust/crates/pyo3-macros-0.19.2.crate) = 7173
+SHA256 (rust/crates/pyo3-macros-backend-0.19.2.crate) = 947dc12175c254889edc0c02e399476c2f652b4b9ebd123aa655c224de259536
+SIZE (rust/crates/pyo3-macros-backend-0.19.2.crate) = 49962
+SHA256 (rust/crates/quote-1.0.45.crate) = 41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924
+SIZE (rust/crates/quote-1.0.45.crate) = 31564
+SHA256 (rust/crates/rayon-1.11.0.crate) = 368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f
+SIZE (rust/crates/rayon-1.11.0.crate) = 182470
+SHA256 (rust/crates/rayon-core-1.13.0.crate) = 22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91
+SIZE (rust/crates/rayon-core-1.13.0.crate) = 73151
+SHA256 (rust/crates/redox_syscall-0.5.18.crate) = ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d
+SIZE (rust/crates/redox_syscall-0.5.18.crate) = 30747
+SHA256 (rust/crates/roots-0.0.6.crate) = 84348444bd7ad45729d0c49a4240d7cdc11c9d512c06c5ad1835c1ad4acda6db
+SIZE (rust/crates/roots-0.0.6.crate) = 29110
+SHA256 (rust/crates/rustversion-1.0.22.crate) = b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d
+SIZE (rust/crates/rustversion-1.0.22.crate) = 21096
+SHA256 (rust/crates/scoped_threadpool-0.1.9.crate) = 1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8
+SIZE (rust/crates/scoped_threadpool-0.1.9.crate) = 7800
+SHA256 (rust/crates/scopeguard-1.2.0.crate) = 94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49
+SIZE (rust/crates/scopeguard-1.2.0.crate) = 11619
+SHA256 (rust/crates/serde-1.0.228.crate) = 9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e
+SIZE (rust/crates/serde-1.0.228.crate) = 83652
+SHA256 (rust/crates/serde_core-1.0.228.crate) = 41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad
+SIZE (rust/crates/serde_core-1.0.228.crate) = 63111
+SHA256 (rust/crates/serde_derive-1.0.228.crate) = d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79
+SIZE (rust/crates/serde_derive-1.0.228.crate) = 59605
+SHA256 (rust/crates/serde_json-1.0.149.crate) = 83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86
+SIZE (rust/crates/serde_json-1.0.149.crate) = 155994
+SHA256 (rust/crates/smallvec-1.15.1.crate) = 67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03
+SIZE (rust/crates/smallvec-1.15.1.crate) = 38116
+SHA256 (rust/crates/strsim-0.8.0.crate) = 8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a
+SIZE (rust/crates/strsim-0.8.0.crate) = 9309
+SHA256 (rust/crates/syn-1.0.109.crate) = 72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237
+SIZE (rust/crates/syn-1.0.109.crate) = 237611
+SHA256 (rust/crates/syn-2.0.117.crate) = e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99
+SIZE (rust/crates/syn-2.0.117.crate) = 306011
+SHA256 (rust/crates/target-lexicon-0.12.16.crate) = 61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1
+SIZE (rust/crates/target-lexicon-0.12.16.crate) = 26488
+SHA256 (rust/crates/textwrap-0.11.0.crate) = d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060
+SIZE (rust/crates/textwrap-0.11.0.crate) = 17322
+SHA256 (rust/crates/tiff-0.6.1.crate) = 9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437
+SIZE (rust/crates/tiff-0.6.1.crate) = 1399263
+SHA256 (rust/crates/unicode-ident-1.0.24.crate) = e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75
+SIZE (rust/crates/unicode-ident-1.0.24.crate) = 49298
+SHA256 (rust/crates/unicode-width-0.1.14.crate) = 7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af
+SIZE (rust/crates/unicode-width-0.1.14.crate) = 271615
+SHA256 (rust/crates/unindent-0.1.11.crate) = e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c
+SIZE (rust/crates/unindent-0.1.11.crate) = 7700
+SHA256 (rust/crates/vec_map-0.8.2.crate) = f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191
+SIZE (rust/crates/vec_map-0.8.2.crate) = 14466
+SHA256 (rust/crates/visioncortex-0.8.10.crate) = 7c9a7e6cc136c7c79b4adbd311c46c323a19db7baf446822b5f90f84375934e3
+SIZE (rust/crates/visioncortex-0.8.10.crate) = 70050
+SHA256 (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b
+SIZE (rust/crates/wasi-0.11.1+wasi-snapshot-preview1.crate) = 28477
+SHA256 (rust/crates/wasm-bindgen-0.2.114.crate) = 6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e
+SIZE (rust/crates/wasm-bindgen-0.2.114.crate) = 59350
+SHA256 (rust/crates/wasm-bindgen-macro-0.2.114.crate) = 18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6
+SIZE (rust/crates/wasm-bindgen-macro-0.2.114.crate) = 9289
+SHA256 (rust/crates/wasm-bindgen-macro-support-0.2.114.crate) = 03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3
+SIZE (rust/crates/wasm-bindgen-macro-support-0.2.114.crate) = 63445
+SHA256 (rust/crates/wasm-bindgen-shared-0.2.114.crate) = 75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16
+SIZE (rust/crates/wasm-bindgen-shared-0.2.114.crate) = 10538
+SHA256 (rust/crates/web-sys-0.3.91.crate) = 854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9
+SIZE (rust/crates/web-sys-0.3.91.crate) = 669788
+SHA256 (rust/crates/weezl-0.1.12.crate) = a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88
+SIZE (rust/crates/weezl-0.1.12.crate) = 46045
+SHA256 (rust/crates/winapi-0.3.9.crate) = 5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419
+SIZE (rust/crates/winapi-0.3.9.crate) = 1200382
+SHA256 (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6
+SIZE (rust/crates/winapi-i686-pc-windows-gnu-0.4.0.crate) = 2918815
+SHA256 (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f
+SIZE (rust/crates/winapi-x86_64-pc-windows-gnu-0.4.0.crate) = 2947998
+SHA256 (rust/crates/windows-link-0.2.1.crate) = f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5
+SIZE (rust/crates/windows-link-0.2.1.crate) = 6133
+SHA256 (rust/crates/zmij-1.0.21.crate) = b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa
+SIZE (rust/crates/zmij-1.0.21.crate) = 26665
diff --git a/graphics/py-vtracer/files/example.py b/graphics/py-vtracer/files/example.py
new file mode 100644
index 000000000000..7a32fb2a9d38
--- /dev/null
+++ b/graphics/py-vtracer/files/example.py
@@ -0,0 +1,16 @@
+import urllib.request
+import vtracer
+
+# 1. Define file paths and download target
+url = "https://forums.freebsd.org/attachments/image_widget_w0nk11mh60i71-png.14467/index.png"
+input_path = "bsd-logo.png"
+output_path = "bsd-logo.svg"
+
+print("Downloading the PNG image...")
+urllib.request.urlretrieve(url, input_path)
+
+# 2. Convert the downloaded image to SVG
+print("Converting image to SVG...")
+vtracer.convert_image_to_svg_py(input_path, output_path)
+
+print(f"Successfully saved vector graphic to {output_path}!")
diff --git a/graphics/py-vtracer/pkg-descr b/graphics/py-vtracer/pkg-descr
new file mode 100644
index 000000000000..1e18257575ec
--- /dev/null
+++ b/graphics/py-vtracer/pkg-descr
@@ -0,0 +1,5 @@
+Python bindings for the Rust Vtracer raster-to-vector library.
+
+Vtracer converts raster images into scalable vector graphics (SVG). The Python
+bindings expose the cmdapp crate as a Python module built with PyO3 and
+maturin.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.