Skip to main content

Node-based image processing powered by CUDA - Design visually, execute programmatically

Project description

PyImageCUDA Studio 0.1.1 Beta

PyPI version Version Python CUDA License Platform

Design image pipelines visually. Automate with Python.

Node-based GPU compositor with real-time preview and headless batch processing.

Core is PyImageCUDA, my custom CUDA library with native kernels for all operations.

Dependencies only for UI (PySide6), I/O (PyVips), and preview (PyOpenGL), no CUDA Toolkit required (just NVIDIA drivers).

https://github.com/user-attachments/assets/6a0ab3da-d961-4587-a67c-7d290a008017

https://github.com/user-attachments/assets/f5c6a81d-5741-40e0-ad55-86a171a8aaa4


Key Features

Visual Node Editor

  • 40+ GPU-accelerated nodes: Generators, effects, filters, transforms, blend modes (see full list below)
  • Real-time preview: CUDA-OpenGL interop for instant visual feedback on every change
  • Global variables: Link any parameter across multiple nodes for template reuse
  • Flexible controls: Numeric inputs with optional sliders for precise adjustments
  • Intuitive workflow: Right-click to add nodes, drag to connect, see results instantly

Headless Automation

  • Simple Python API: Load .pics projects and modify parameters programmatically
  • Batch processing: Generate thousands of variations in seconds
  • Type-safe validation: All parameters validated (colors, sizes, text, ranges, etc.)
from pyimagecuda_studio import LoadProject, run, set_node_parameter

with LoadProject("sign.pics"):
    for i in range(1, 11):
        set_node_parameter("Text", "text", f"Test {i}")
        run(f"output_{i:02d}.png")

Performance

  • 10-350x faster: than CPU alternatives for complex operations, see PyImageCUDA benchmarks
  • 5-15ms rendering — Typical 1080p pipelines (RTX 3070, varies by GPU)
  • Memory efficient: GPU buffers created on-demand and reused intelligently

Installation

Requirements

  • Python 3.10+
  • NVIDIA GPU (GTX 900 series or newer)
  • OS: Windows 10/11 or Linux

Install via pip

pip install pyimagecuda-studio

Launch GUI

pyimagecuda-studio
# or shorter alias:
pics

Available Nodes

Generators (13 nodes)

  • Image — Load from file with resize options
  • Text — Rich text rendering (font, size, color, alignment, spacing)
  • Dynamic Text — Python-generated text (API calls, calculations, etc.)
  • Color — Solid fill
  • Gradient — Linear/radial/diagonal gradients
  • Stripes — Angled stripe patterns
  • Checkerboard — Classic checker pattern
  • Grid — Customizable grid lines
  • Dots — Polka dot patterns
  • Circle — Perfect circle
  • Ngon — Regular polygons (3-20 sides)
  • Noise — White noise (RGB or monochrome)
  • Perlin — Organic noise textures

Effects (4 nodes)

  • Rounded Corners — Smooth corner radius
  • Drop Shadow — Blur, offset, color control
  • Stroke — Inside/outside outline
  • Vignette — Edge darkening

Filters (8 nodes)

  • Gaussian Blur — Fast separable blur
  • Sharpen — Unsharp mask
  • Sepia — Vintage tone
  • Invert — Color negative
  • Threshold — Binary conversion
  • Solarize — Partial inversion
  • Sobel — Edge detection
  • Emboss — 3D relief

Adjust (5 nodes)

  • Brightness — Linear adjustment
  • Contrast — Midpoint scaling
  • Saturation — Color intensity
  • Gamma — Non-linear correction
  • Opacity — Alpha blending

Transform (6 nodes)

  • Resize — Scale to exact dimensions (Nearest/Bilinear/Bicubic/Lanczos)
  • Aspect Resize — Maintain ratio while resizing
  • Scale — Percentage-based scaling
  • Flip — Horizontal/vertical/both
  • Rotate — Arbitrary angles with optional expand
  • Crop — Extract rectangular region

Merge (2 nodes)

  • Blend — Composite two images with Photoshop-style blend modes
    • Modes: Normal, Multiply, Screen, Add, Overlay, Soft Light, Hard Light
    • Positioning: 9 anchor points (top-left, center, bottom-right, etc.) + pixel offset
    • Control: Opacity slider (0.0-1.0)
  • Mask — Use image brightness or alpha as transparency mask
    • Modes: Luminance (brightness) or Alpha channel
    • Positioning: Same anchor + offset system as Blend

Logic (2 nodes)

  • Random Out — Randomly select between inputs
  • Conditional — Python-based routing logic

Utility (1 node)

  • Split — Duplicate to 2 outputs

Headless Mode

Design templates in the GUI, automate generation with Python.

Basic Example

from pyimagecuda_studio import LoadProject, set_node_parameter, run

with LoadProject("template.pics"):
    set_node_parameter("Text", "text", "Hello World")
    run("output.png")

Batch Processing

from pyimagecuda_studio import LoadProject, set_node_parameter, run

with LoadProject("certificate.pics"):
    for name in ["Alice", "Bob", "Charlie"]:
        set_node_parameter("Text", "text", f"Certificate for {name}")
        run(f"certs/{name}.png")

Global Variables

Control multiple parameters at once:

from pyimagecuda_studio import LoadProject, set_variable, run

with LoadProject("banner.pics"):
    set_variable("primary_color", (0.2, 0.4, 0.8, 1.0))
    set_variable("title", "Summer Sale")
    run("output.png")

Real-World: CSV Data

import csv
from pyimagecuda_studio import LoadProject, set_variable, run

with LoadProject("product_card.pics"):
    with open('products.csv') as f:
        for row in csv.DictReader(f):
            set_variable("product_name", row['name'])
            set_variable("price", f"${row['price']}")
            set_node_parameter("Image", "path", row['image_path'])
            run(f"cards/{row['id']}.png")

API Functions

# Load project (context manager handles cleanup)
with LoadProject(filepath, trust_code=False):
    
    # Modify nodes directly
    set_node_parameter(node_name, param_name, value)
    
    # Modify global variables
    set_variable(name, value)
    
    # Generate output
    run(output_path, quality=None)
    
    # Query project
    get_nodes()           # -> list[str]
    get_variables()       # -> list[str]
    get_node_parameters(node_name)  # -> dict

Security Note

Projects with Dynamic Text or Conditional nodes execute Python code. Set trust_code=True only for projects you trust:

with LoadProject("untrusted.pics", trust_code=True):  # ⚠️ Only if you trust the source
    run("output.png")

Roadmap to v1.0

Current: v0.1.0 Beta

Core functionality complete and stable.

Path to v1.0 Stable

  • Bug fixes — Address issues reported by community
  • Undo/redo — Full history system for GUI operations
  • Memory pooling — Intelligent VRAM reuse to reduce memory footprint
  • Expanded library — More nodes, effects, and generators

Timeline: v1.0 release when all critical features are stable and well-tested.


Contributing

Beta Release — Contributions, feedback, and collaborators welcome!

I'm very open to:

  • Code contributions — Pull requests for bug fixes, features, or optimizations
  • Ideas and suggestions — Feature requests and use case proposals
  • Use case adaptations — I'm happy to adapt the program for personal workflows if they have general applicability

All contributions, questions, and feature requests go through GitHub Issues.

I'll respond as quickly as I can.

When reporting bugs, include:

  • OS and GPU model
  • Python version
  • Error message or unexpected behavior
  • .pics project file (if applicable)

License

MIT License

Copyright (c) 2025 Beltrán Offerrall Selma

See LICENSE file for details.


Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyimagecuda_studio-0.1.1.tar.gz (63.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyimagecuda_studio-0.1.1-py3-none-any.whl (79.1 kB view details)

Uploaded Python 3

File details

Details for the file pyimagecuda_studio-0.1.1.tar.gz.

File metadata

  • Download URL: pyimagecuda_studio-0.1.1.tar.gz
  • Upload date:
  • Size: 63.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for pyimagecuda_studio-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0d02dd0742f2e12280e0b08235030aec811a7ba01a7337a824f0b39039486f6f
MD5 b7a0a0e8eb72ece41354e095c5e31094
BLAKE2b-256 bdd74826d2d34dce0f8f8afe70b19dacd1b36c8cc6ff12c423b5b963a0b362b8

See more details on using hashes here.

File details

Details for the file pyimagecuda_studio-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pyimagecuda_studio-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9389a97f9afa518a34a79166eae5c44821cadb14597efdc5b49ab36a9b6d8c3e
MD5 00c61e9a6a83da3a5597f02995b41e6c
BLAKE2b-256 234c35aa712f47eb58cf05f647f7e93cbe023aba90533be49023342bc1e7216b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page