Coding templates for live visual art

Run it.
Understand it.
Build from it.

Junkpile is a laboratory of standalone creative-graphics applications. Parallel Tauri v1, Tauri v2, and native Rust/wgpu paths expose WebView creative coding, modern desktop integration, and native GPU rendering without hiding the architectural differences between them.

WebViewp5.js · WebGL · GLSL
DesktopTauri v1 · Tauri v2
Native GPURust · wgpu · WGSL
Media I/OCamera · files · MIDI · OSC
Junkpile amorphous shader-form logo

Three architectural tracks

Similar goals. Different render paths.

Tauri version and renderer choice are separate decisions. The v2 WebView collection remains browser-rendered; native wgpu is its own explicit family.

V1

Tauri v1 WebView

HTML, JavaScript, p5.js, raw WebGL, GLSL, browser media, and Rust bridges inside the first-generation Tauri configuration model.

Explore v1 →
V2

Tauri v2 WebView

The same accessible browser graphics path with Tauri 2 capabilities, current window APIs, native file workflows, and broader production examples.

Explore v2 →
GPU

Native Rust/wgpu

WGSL, native surfaces, compute shaders, resource lifetimes, camera/video bridges, 3D, interop, and resolution-independent export.

Explore wgpu →

Architectural truth

WebView and native GPU are both first-class—but they are not the same.

WebView collections

HTML / JavaScript / p5.js / WebGL

Tauri v1 or v2 WebView

WKWebView · WebView2 · WebKitGTK

Native collection

Rust / wgpu / WGSL

Native GPU surface

Metal · Vulkan · Direct3D 12

The HTML interface can still control a native renderer through Tauri IPC, but the pixels are produced by a different pipeline.

Development progression

From one pixel path to a modular media ecosystem.

Junkpile learning path

Foundationssurface · shader · controls
Mediaimage · camera · video · audio
Processingfeedback · compute · multipass
Systemsrouting · automation · outputs
ProductsScheng components · focused instruments

Representative examples

The library now reaches far beyond shader templates.

V1 00p5

p5.js Shader · Single Window

p5-tauri-single-template

p5.js WebGL shader baseline with controls and renderer in one WebView.

p5.js WebGLsingle-windowDOM controls
V2 02webgl

Raw WebGL · Single Window

webgl-tauri-v2-single-template

Explicit WebGL 1 context, shader compilation, program linking, fullscreen quad, uniforms, and render loop.

Raw WebGL 1 / GLSLsingle-windowDOM controls
WGPU 00foundations

Surface Probe

00-wgpu-surface-probe

Creates a native wgpu surface, selects an adapter, configures presentation, and exposes backend diagnostics.

Native Rust wgpunative-windowGPU adapter
WGPU 113d

Volumetric Raymarcher

11-wgpu-volumetric-raymarcher

Ray-marches four procedural 3D scenes with fog, shadows, ambient occlusion, and high-resolution targets.

Native Rust wgpunative-windowProcedural scene controls
WGPU 20compositor

Multi-Input Compositor

20-wgpu-multi-input-compositor

Combines multiple media and generated sources, transport, audio analysis, layers, and GPU compositing.

Native Rust wgpuhybrid-windowVideo/camera/audio/generators
WGPU 25export

Ultra-Resolution Export

25-wgpu-ultra-resolution-export

Renders independent HD/4K/6K/8K tiles, reads them back safely, assembles pixels, and exports PNG.

Native Rust wgpunative-windowExport configuration

How to work with Junkpile

See it. Run it. Understand it. Modify it. Build it.

Preserve the baseline

Each example is a complete standalone application. Keep a clean copy before combining systems.

Change one layer

Alter the input, transport, shader, resource model, or output independently before merging concerns.

Keep boundaries visible

Document which window owns media, which thread owns GPU resources, and how state survives reconnects.

Package real applications

Every example includes development and production-build paths rather than ending as a browser sketch.