Vello: GPU-Accelerated 2D Vector Graphics for Python
Vello is a high-performance, GPU compute-centric 2D vector graphics engine for Python, powered by Linebender's Vello and wgpu.
Unlike traditional CPU renderers (like Cairo or CPU Skia) or traditional GPU renderers that rely on tessellation, Vello utilizes modern GPU Compute Shaders to perform sorting, path clipping, and antialiased rasterization in parallel on your graphics card.
✨ Features
- ⚡ Pure GPU Compute Acceleration: Path flattening, clipping, and rasterization run completely on GPU Compute Shaders.
- 🎨 Pythonic Canvas API: An intuitive, HTML5 Canvas-like API designed specifically for Python developers.
- 🚀 Zero-Copy NumPy Integration: Stream rendered frames directly into NumPy
(H, W, 4)uint8 arrays without copying memory. - 🌈 Rich Shading & Gradients: Full support for Solid Colors, Linear Gradients, Radial Gradients, and Image Brushes.
- 📐 Vector Shapes & SVG Paths: Native support for Rectangles, Rounded Rectangles, Circles, Ellipses, Lines, Bézier Curves, and complete SVG path
d="..."strings. - 🔤 GPU Vector Typography: High-quality TrueType/OpenType font rendering with exact subpixel glyph positioning.
- 🎭 Compositing & Blend Modes: Full W3C blend modes (Multiply, Screen, Overlay, etc.) and compositing operations.
- 💡 Gaussian Drop Shadows: Accelerated blurred rounded rectangles for realistic UI drop shadows.
- 🧵 Non-blocking & Thread-Safe: Releases the Python GIL during GPU execution for multi-threaded performance.
📦 Installation
pip install vello
🚀 Quickstart
1. Basic Drawing & PNG Export
import vello
# Create canvas with background color
canvas = vello.Canvas(800, 600, background="white")
# Fill and stroke shapes with CSS colors, hex, or RGB tuples
canvas.fill_circle(cx=400, cy=300, radius=120, fill="royalblue")
canvas.stroke_circle(cx=400, cy=300, radius=120, stroke="crimson", stroke_width=6.0)
# Draw rounded rectangle with GPU drop shadow
canvas.draw_shadow(x=50, y=50, width=200, height=100, radius=16, blur=20, color="#00000044")
canvas.fill_rounded_rect(x=50, y=50, width=200, height=100, radius=16, fill="#2ecc71")
# Draw an SVG path
canvas.fill_path("M 500 100 L 550 200 L 450 200 Z", fill="gold")
# Save directly to image
canvas.save("output.png")
2. High-Performance NumPy & Video / Game Pipelines
import vello
canvas = vello.Canvas(1920, 1080, background="black")
# Draw vector elements
canvas.fill_circle(960, 540, 200, fill="coral")
# Get a NumPy array with zero-copy buffer mapping (shape: 1080, 1920, 4)
frame = canvas.to_numpy()
print(frame.shape, frame.dtype) # (1080, 1920, 4) uint8
3. Linear & Radial Gradients
import vello
canvas = vello.Canvas(400, 400, background="black")
# Linear gradient
gradient = vello.LinearGradient(
start=(0, 0),
end=(400, 400),
stops=[
vello.ColorStop(0.0, vello.Color.from_name("red")),
vello.ColorStop(0.5, vello.Color.from_name("yellow")),
vello.ColorStop(1.0, vello.Color.from_name("blue")),
]
)
canvas.fill_rect(0, 0, 400, 400, fill=gradient)
canvas.save("gradient.png")
4. Transformations & Layer Blending
import vello
canvas = vello.Canvas(500, 500, background="white")
# Context manager for local coordinate transforms
with canvas.transform(translate=(250, 250), rotate_deg=45):
canvas.fill_rect(-50, -50, 100, 100, fill="teal")
# Blending and opacity layers
with canvas.layer(alpha=0.8, blend_mode="multiply"):
canvas.fill_circle(200, 200, 80, fill="cyan")
canvas.fill_circle(260, 200, 80, fill="magenta")
canvas.save("layers.png")
5. Vector Typography
import vello
canvas = vello.Canvas(600, 200, background="white")
# Load any TrueType or OpenType font
font = vello.Font.from_file("C:/Windows/Fonts/arial.ttf")
# Measure text bounds
width, height = font.measure_text("Vello on GPU", size=36.0)
# Draw vector text
canvas.draw_text("Vello on GPU", x=50, y=100, font=font, size=36.0, color="royalblue")
canvas.save("text.png")
📊 Performance
Vello parallelizes vector rendering on GPU compute shaders:
- Instant scene builds: Adding thousands of vector commands takes just a few milliseconds.
- Fast GPU rendering: 1080p full frame renders take ~5-10 ms on standard GPUs (~120-200 FPS).
- GIL-free execution: Multi-threaded Python applications run concurrently without blocking.
📜 License
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT license (LICENSE-MIT)
at your option.
Metadata
Release files for vello 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| vello-0.1.0-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| vello-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.17+ x86-64 | Details |
| vello-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ x86-64 | Details |
| vello-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.11 | CPython 3.11 | Linux glibc 2.17+ x86-64 | Details |
| vello-0.1.0-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| vello-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.10 | CPython 3.10 | Linux glibc 2.17+ x86-64 | Details |
Total release size: 30.1 MB
Release files / vello-0.1.0-cp313-cp313-win_amd64.whl
| Download URL | vello-0.1.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
891e778ad14a5420d8e1d33f05a14b759055817d7b0e6dd39d025d33c472b0a8
|
|
BLAKE2b-256 checksum How to use checksums |
47bac0f27520c2f01ae79a2e30705b209fde3d5276945fc94e02fd5879324105
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|
Release files / vello-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6eae4a46e415fe0a3939d172d5dca3444f1ded34fbb715afd55de525de9f7086
|
|
BLAKE2b-256 checksum How to use checksums |
a43948fec8c4c9ebfafb7ec8c401a32f0c62b53a1a17e316ba0c494174409ba7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|
Release files / vello-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
55236862692aa8d0014a619ee79edbede31598a6d569f77cec1a6f0dfdc8e635
|
|
BLAKE2b-256 checksum How to use checksums |
ce1041bb4195c974b8da3ceee002a747648ae9bb39bfcaa6dd34fa0c85ed8b31
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / vello-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
8d0dbcea55d2efaa3debb224767404f987599f73da894247a1cde4c52af98631
|
|
BLAKE2b-256 checksum How to use checksums |
398443b2a0b2b6c8c0a869e070f25930ae1ed51baae9e4defa0e25745d4ad2de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / vello-0.1.0-cp310-cp310-win_amd64.whl
| Download URL | vello-0.1.0-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 7.8 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e1e09f900712ce2dc747c822425b69582f2c78eb1f009def29e268c222f3b290
|
|
BLAKE2b-256 checksum How to use checksums |
2e397d4c765ec85eab994b9b13843919c4c1e796b63f250fb8a9f37a0d509af5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / vello-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.7 MB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
aebaef0bf39a44c9dd02632000f144867b25c43aee7f092b59b38075b46ce64e
|
|
BLAKE2b-256 checksum How to use checksums |
3ab7e846b1d9984c411c7b9e13a72c5b6758fc5168ceaedd8d3126992af75e57
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|