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. - ⚡ Vectorized Batch Drawing: Render tens of thousands to millions of circles, rectangles, and lines in a single native GPU dispatch via NumPy arrays.
- 🌈 Rich Shading & Gradients: Full support for Solid Colors, Linear Gradients, Radial Gradients, Angular / Conical Sweep Gradients, and Image Brushes.
- 🎬 Built-in Animation Export: Generate smooth animated GIF sequences directly with
Canvas.save_animation(). - 📐 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.
- 🐧 Linux & Kaggle Ready: Fully supports headless Linux servers and Kaggle Notebooks with NVIDIA GPUs (T4, P100, A100, etc.) via Vulkan.
📦 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")
6. Vectorized Batch Drawing (NumPy)
Render tens of thousands of shapes simultaneously without Python loop overhead:
import vello
import numpy as np
canvas = vello.Canvas(1000, 1000, background="black")
# 50,000 random circles [x, y, radius]
n = 50_000
data = np.zeros((n, 3), dtype=np.float32)
data[:, 0] = np.random.uniform(0, 1000, n)
data[:, 1] = np.random.uniform(0, 1000, n)
data[:, 2] = np.random.uniform(1, 5, n)
# Single native GPU call!
canvas.fill_circles_batch(data, fill="#00ffcc88")
canvas.save("batch_circles.png")
7. Animation & GIF Export
import vello
import numpy as np
frames = []
for i in range(30):
c = vello.Canvas(300, 300, background="black")
angle = (i / 30.0) * 360.0
with c.transform(translate=(150, 150), rotate_deg=angle):
c.fill_rect(-40, -40, 80, 80, fill="cyan")
frames.append(c)
# Save smooth animated GIF
vello.Canvas.save_animation(frames, "spin.gif", fps=30)
8. Kaggle / Google Colab (Linux & NVIDIA Tesla T4)
To use vello on Kaggle (Ubuntu x86_64 with NVIDIA T4 GPU accelerator):
# 1. Install Vulkan userland library (Kaggle cell)
!apt-get update && apt-get install -y libvulkan1
# 2. Install Vello wheel or from PyPI
!pip install vello
Verify GPU acceleration in Kaggle:
import vello
print("GPU Available:", vello.is_gpu_available()) # Returns True with NVIDIA T4!
📊 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.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vello-0.1.1.tar.gz | 42.4 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| vello-0.1.1-cp313-cp313-win_amd64.whl | CPython 3.13 | CPython 3.13 | Windows x86-64 | Details |
| vello-0.1.1-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.1-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.1-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.1-cp310-cp310-win_amd64.whl | CPython 3.10 | CPython 3.10 | Windows x86-64 | Details |
| vello-0.1.1-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: 72.5 MB
Release files / vello-0.1.1.tar.gz
| Download URL | vello-0.1.1.tar.gz |
|---|---|
| Size | 42.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
30e361101387dcfe0a40aab9b1ed0f3d841ad54ed71b35263373ede37bff4c5e
|
|
BLAKE2b-256 checksum How to use checksums |
fc0a563d9628e7f76aeb32a3b197139bdb661b2f0861ff4c80fc84ecc7345919
|
| 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.1-cp313-cp313-win_amd64.whl
| Download URL | vello-0.1.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b30b5c8f5e62e1c3f8d9ffe4454729ee0ae0b0c1bec8676e7c1b45ecab237c10
|
|
BLAKE2b-256 checksum How to use checksums |
c7d6ad2e5fce95ac9f0bf5e5336ffd4adc890c6002a0ac0dbbd7ea322e84f926
|
| 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.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.1-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 |
720f3761b135212b787dc7b01b0eebae7b5e6a90b585c6ea9953c4e0670cfcaf
|
|
BLAKE2b-256 checksum How to use checksums |
35d4c2e068bd98de827906b701673d801b6e05ba159169a131f9e20f64e8cb19
|
| 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.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.1-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 |
d22a6e04bc2f4b888776a2231c0bd2db6e51aa02104140c8297c4db73b9480be
|
|
BLAKE2b-256 checksum How to use checksums |
2b50be8e7459d7b00c5e89380a93cd7bc2181bf5738abdc388d9451b1be38218
|
| 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.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.1-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 |
a20d50aa517c2ab19d5dad4f36968afd1f7501321306742c35499bec65c17958
|
|
BLAKE2b-256 checksum How to use checksums |
376a90557d87d918b5f05397f812c702938e3b20a01eda11e1e8a57823e49fef
|
| 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.1-cp310-cp310-win_amd64.whl
| Download URL | vello-0.1.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 7.7 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
18c254db5fcdfb8b45f9650134b131ede34aff038949edd19989b57b395cbdbb
|
|
BLAKE2b-256 checksum How to use checksums |
e7d75d4a7c0e3180a12c0e9143c465599da71ad1167ecf2e6bc23489d90abd98
|
| 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.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | vello-0.1.1-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 |
3b4666af1dc461cf39a86ddba1b5150531a2a17f8b2b9f2fe97016de19b14e14
|
|
BLAKE2b-256 checksum How to use checksums |
a3d9edbd00254a6a99edac6f494c196e2f1924afd3922591ca4d08b8afa313b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.0
|