Developer documentation · July 2026 baseline

Three technical paths.
One visible learning system.
Many creative directions.

The first sections get a new developer running quickly. Later sections explain render ownership, media flow, GPU resources, state recovery, modernization lessons, and how the completed baselines inform Scheng and future standalone instruments.

Search setup, architecture, inputs, examples, and troubleshooting.
No sections match that search.
Layer 0 · Read this first

What Junkpile is #

Junkpile is a developer library of small, inspectable desktop applications for creative graphics and live media. Each project isolates one architecture so it can be run, traced, modified, packaged, and reused without inheriting a hidden monolith.

V1

Tauri v1 WebView

Accessible browser rendering and native bridges using Tauri 1.

V2

Tauri v2 WebView

Modern capabilities, window APIs, file workflows, and WebGL applications.

GPU

Native wgpu

Rust-owned GPU surfaces, WGSL, compute, 3D, media bridges, and export.

Completed baselineAll three collections contain Examples 00–25. The early v1 and v2 projects were modernized after the expansion so the complete library shares current interface, diagnostics, packaging, and documentation standards.
Standalone projects documented
Primary workflows runtime-tested
WebView and native GPU paths covered
Cross-platform validation ongoing
Layer 1 · Fast path

Run an example #

  1. Install Rust, Node.js/npm, and Tauri prerequisites. Native-wgpu projects also need a functioning Metal, Vulkan, or Direct3D 12 backend.
  2. Choose one project directory. Each project is independent; choose only the one you want to run or study.
  3. Use its local scripts. Run npm install, then npm run dev. This selects the correct Tauri CLI major.
  4. Confirm the documented baseline. Check the visual, telemetry, input, reset, fullscreen, and error states before editing.
  5. Build the standalone app. Run npm run build. On macOS, bundles are normally written beneath src-tauri/target/release/bundle.
Per-example workflow
cd <collection>/<example-folder>
npm install
npm run dev
npm run build
Layer 1 · Install and build

Install, run, and build a project #

Each Junkpile example is an independent Tauri application. Install the platform prerequisites once, then run commands from the individual example folder you want to use.

1. Install the required tools

ToolPurposeVerify
Node.js and npmFrontend dependencies and local project scriptsnode --version
npm --version
Rust and CargoTauri backend and native wgpu projectsrustc --version
cargo --version
GitClone and update the repositorygit --version
System build toolsCompile native application dependenciesSee the platform steps below

2. Install platform prerequisites

macOS
Install Apple command-line build tools
xcode-select --install

Metal is provided by macOS. Camera and microphone examples request permission when launched.

Windows

Install Microsoft Visual Studio Build Tools with the Desktop development with C++ workload. Install or update the WebView2 Runtime. A Direct3D 12-capable driver is recommended for native wgpu examples.

Linux

Install the Tauri WebKitGTK development packages required by your distribution. Native wgpu examples also require a working Vulkan or supported GL driver. MIDI examples commonly require ALSA development packages.

3. Download Junkpile

Clone the repository
git clone https://github.com/schwwaaa/junkpile.git
cd junkpile

You can also download the repository ZIP from GitHub and extract it locally.

4. Choose one example

Open the example catalog, copy the project folder name, and enter that folder. Do not run installation commands from the repository root unless a root script explicitly says to do so.

Tauri v1

cd v1/<example-folder>

Tauri v2

cd v2/<example-folder>

Native wgpu

cd native-wgpu/<example-folder>

5. Install and run the selected example

Development workflow
npm install
npm run dev
Use the local npm scripts. They invoke the Tauri CLI version configured for that project and avoid global Tauri v1/v2 command conflicts.

The first launch may take several minutes because Cargo downloads and compiles Rust dependencies. Later launches are substantially faster.

6. Build the standalone application

Production build
npm run build

Production bundles are normally created beneath:

Bundle output
src-tauri/target/release/bundle/
PlatformTypical output
macOSbundle/macos/*.app and, when configured, bundle/dmg/*.dmg
Windowsbundle/msi/*.msi or bundle/nsis/*.exe
Linuxbundle/appimage/*.AppImage, Debian package, or another configured bundle target

7. Confirm the example is working

  • The application window opens without a Rust panic or blank WebView.
  • The expected shader, media source, or native GPU scene is visible.
  • Controls update the rendered output.
  • Reset, pause, fullscreen, and window-resize behavior work where documented.
  • Camera, microphone, MIDI, OSC, FFmpeg, Syphon, or Spout features are tested only when the example uses them.
Layer 1 · Choose deliberately

Which collection should you use? #

Need Best starting track Reason
p5.js, familiar browser APIs, rapid sketch-to-app work Tauri v1 or v2 WebView The renderer stays in HTML/JavaScript with GLSL ES.
Current Tauri permissions, native dialogs/drop, multi-window production examples Tauri v2 WebView Uses Tauri 2 capabilities and current WebView-window APIs.
Compute shaders, native GPU resources, 3D, Metal/Vulkan/DX12, 4K–8K export Native wgpu Rust owns the surface, device, queue, textures, buffers, and WGSL pipelines.
Compare architectural generations Examples 00–09 across v1 and v2 The paired lessons reveal version changes without changing the core visual concept.
Build a focused media application Examples 12–25, then native-wgpu equivalents These examples cover playback, analysis, recording, compositing, automation, routing, and output.
Layer 2 · Technical comparison

Technology comparison at the implementation level #

The three Junkpile paths solve different layers of the same problem. They are not ranked from beginner to advanced. Each one defines who owns the renderer, where GPU resources live, how media crosses boundaries, and what kind of standalone application is easiest to build.

Technical concernTauri v1 WebViewTauri v2 WebViewNative Rust/wgpu
Render ownershipBrowser/WebView owns the drawing surface and render loop.Browser/WebView owns the drawing surface and render loop, with newer Tauri window/capability APIs around it.Rust owns the surface, device, queue, textures, buffers, passes, and present loop.
Primary graphics stackHTML/CSS/JS + p5.js/WebGL.HTML/CSS/JS + p5.js/WebGL or raw WebGL with current Tauri 2 APIs.Rust + wgpu + WGSL, optional compute passes, explicit render graph structure.
Shader languageGLSL / GLSL ES inside WebGL.GLSL / GLSL ES inside WebGL.WGSL for render and compute pipelines.
UI layerDOM UI inside the same application shell.DOM UI with stronger native integration, dialogs, drag/drop, and capabilities.Usually custom native UI or focused control panels; some projects keep the interface minimal and instrument-like.
Native boundaryRust mostly supports the shell, window control, side services, or relays.Rust exposes capabilities, file access, native dialogs, and service boundaries more cleanly.Rust is the application core rather than a support layer.
Media and file I/OBrowser media elements are easy to use, but browser security and tainted-texture rules matter.Same browser strengths, plus better current native file workflows and drop handling.Native decoders, native camera/video bridges, explicit uploads, and direct file ownership are possible.
IPC / control topologySimple one-window or two-window patterns, often with local relays for split control/render setups.Same patterns, but updated APIs and clearer capability boundaries for multi-window applications.Rust-side state and native event/control systems; no browser boundary is required unless intentionally added.
Best fitFast sketch-to-app work, approachable GPU experiments, and browser-native media logic.Production-ready WebView tools that still benefit from web ergonomics.High-performance GPU instruments, compute systems, 3D, heavy media routing, and larger export pipelines.
Main constraintsWebView behavior, browser path/security limits, and less direct GPU ownership.Still a WebView renderer, so browser constraints remain even though shell behavior improves.More code, more explicit resource management, and a higher implementation burden.
Practical rule: use WebView tracks when the browser is the right renderer, not because they are “less serious.” Use native wgpu when Rust must own GPU state, compute, media resources, or export at a deeper systems level.
Layer 2 · Software stack

The stack: from shared technology to standalone artist tools #

Junkpile demonstrates a software stack rather than one monolithic product. The idea is that artists and developers can build narrow, cross-platform standalone applications from reusable graphics and media patterns instead of starting from zero every time.

Cross-platform creative application stack

Artist need or instrument ideakeyer · feedback unit · recorder · mapper · router · player · automation tool
Focused standalone applicationa single-purpose app with a clear UI and clear media behavior
Junkpile architecture patternswindow topologies · controls · render loops · media loading · recording · error states
Implementation trackTauri v1 WebView · Tauri v2 WebView · native Rust/wgpu
Shared media and system servicescamera · files · audio · MIDI · OSC · FFmpeg · Syphon/Spout · GPU backends
Cross-platform packaged applicationmacOS · Windows · Linux standalone delivery

Reusable foundation

Rendering, controls, media I/O, routing, fullscreen, timing, export, and recovery patterns are treated as reusable building blocks.

Focused tools

The commercial and artistic value comes from small, clear instruments—not from forcing every feature into one giant application.

Future direction

This stack points toward the broader Scheng model: common engine capability underneath deliberately independent standalone apps.

Layer 2 · Mental model

Three render ownership models #

WebView render path

InputDOM · camera · media · MIDI · OSC
JavaScript stateparameters · transport · media elements
p5.js / WebGL / GLSLrequestAnimationFrame inside WebView
OS WebView renderer

Native wgpu render path

Input + HTML controlsnative capture · files · MIDI · OSC · Tauri IPC
Rust canonical statecommands · queues · resource ownership
wgpu / WGSLrender + compute pipelines
Metal / Vulkan / Direct3D 12

Neither path is universally better. WebView examples are fast to understand and modify; native wgpu examples expose lower-level performance, compute, resource lifetime, and backend behavior.

Layer 2 · Windows and state

Window topologies #

Single window

Controls and renderer share one document or one hybrid window. State updates are direct and the lifecycle is compact.

Two WebViews + relay

Controls and canvas connect to the Rust WebSocket relay. Controls retain authoritative parameters; renderer-local media and GPU history stay in the canvas.

HTML controls + native renderer

A Tauri WebView owns the interface while Rust owns the wgpu surface. Commands cross IPC; large frame data should not.

State is not the same as GPU history. A reconnect can restore parameters, selected devices, and camera intent. It cannot recreate feedback textures or simulation buffers that belonged to a destroyed renderer; those resources must be initialized honestly.
Layer 2 · Technology families

What the examples now cover #

Shaders and graphics

p5.js, raw WebGL, external GLSL, live shader editing, WGSL, multipass graphs, compute, raymarching, meshes, skinning, and morphing.

Media and analysis

Images, webcam, native camera, video decoding, microphone/audio files, FFT, waveform textures, beat analysis, and image sequences.

Temporal systems

Framebuffer feedback, fluid simulation, history buffers, mesh feedback, recording, keyframes, transport, and synchronized outputs.

Control and interop

DOM controls, WebSockets, MIDI, OSC, pointer/touch/pen gestures, Max/MSP, TouchOSC, and native Tauri commands.

Compositing and live operation

Texture mixing, keying, Preview/Program switching, multi-input compositing, projection mapping, and multi-display management.

Resolution and export

High-DPI surfaces, 4K–8K working targets, PNG/JPEG output, recording, tiled GPU readback, and production bundles.

Layer 3 · Reliability lessons

What the modernization pass established #

Interface and control

  • Scrollable from the first layout pass with min-height: 0 on grid/flex children.
  • Fixed-width numeric readouts prevent layout movement.
  • High-rate sliders are coalesced to at most one send per animation frame.
  • Telemetry never overwrites a slider while the user is dragging it.
  • Pause, reset, fullscreen, presets, shortcuts, and runtime state are visible.

Renderer and media

  • Shader compile/link errors are visible; failed replacements retain the last valid program.
  • Camera and microphone lists refresh before and after permission.
  • Only newly decoded frames are uploaded.
  • Feedback targets are validated, explicitly cleared, and recreated on resize.
  • Native paths use Tauri drag/drop or Rust byte reads where browser security blocks texture upload.
Important fixes preserved in the documentation

p5 fullscreen vertex coordinates: convert 0–1 positions to clip space or output can appear in one quadrant. Global helper names: never declare function location() because it collides with window.location. Large binary output: avoid enormous JSON IPC payloads; use bounded chunks, commonly around 1 MiB. Image sequences: buffer before playback, default to hold-every-frame, and pause timing when decoding falls behind.

Collection A

Tauri v1 WebView · Examples 00–25 #

The v1 collection begins with paired p5.js, raw WebGL, external GLSL, camera, and feedback lessons; adds native MIDI and OSC bridges; then expands into production-oriented playback, analysis, recording, compositing, switching, mapping, automation, and display management.

Architecture: HTML/JavaScript renders in the WebView. Rust owns Tauri startup and selected native integrations. Use the v1 configuration schema and its feature model; do not copy Tauri 2 capability syntax into these projects.
Collection B

Tauri v2 WebView · Examples 00–25 #

The v2 collection preserves the understandable WebGL render path while using Tauri 2 configuration, explicit capabilities, window.__TAURI__.core.invoke(), current WebView-window APIs, native drag/drop, dialogs, and modern multi-window workflows.

Architecture: Tauri 2 does not automatically make a project a native GPU renderer. Examples in this collection still produce pixels through WebGL inside the WebView.
Collection C

Native Rust/wgpu · Examples 00–25 #

The native collection progresses from surface creation and WGSL to feedback, compute, high resolution, camera/video bridges, MIDI/OSC, gestures, multi-input compositing, glTF, skeletal animation, morph targets, persistent mesh deformation, and tiled 8K export.

Architecture: Rust owns the wgpu instance, surface, adapter, device, queue, textures, buffers, render/compute pipelines, and presentation. HTML controls remain optional and communicate through explicit state contracts.
Complete inventory

Example catalog #

Filter by collection or search by folder name, media source, technique, or lesson.

Collection
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
V1 01p5

p5.js Shader · Two Window

p5-tauri-ws-template

p5.js renderer and controls separated through the embedded WebSocket relay.

p5.js WebGLtwo-windowWebSocket controls
V1 02webgl

Raw WebGL · Single Window

webgl-tauri-v1-single-template

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

Raw WebGL 1 / GLSLsingle-windowDOM controls
V1 03webgl

Raw WebGL · Two Window

webgl-tauri-v1-ws-template

Raw WebGL renderer controlled through a reconnect-safe two-window WebSocket protocol.

Raw WebGL 1 / GLSLtwo-windowWebSocket controls
V1 04glsl

External GLSL · Single Window

glsl-tauri-v1-single-template

Runtime fragment-shader loading with compiler diagnostics and last-valid-program retention.

Raw WebGL 1 / GLSLsingle-windowShader file + DOM controls
V1 05glsl

External GLSL · Two Window

glsl-tauri-v1-ws-template

External GLSL candidates travel to a separate renderer, which validates before activation.

Raw WebGL 1 / GLSLtwo-windowShader file + WebSocket controls
V1 06camera

Webcam Texture · Single Window

webcam-tauri-v1-single-template

Permission-aware camera capture uploaded to WebGL with effects, telemetry, and optional feedback.

Raw WebGL 1 / GLSLsingle-windowWebcam + DOM controls
V1 07camera

Webcam Texture · Two Window

webcam-tauri-v1-ws-template

Renderer-owned camera capture with control-state recovery across WebSocket reconnects.

Raw WebGL 1 / GLSLtwo-windowWebcam + WebSocket controls
V1 08feedback

Feedback Simulation · Single Window

feedback-tauri-v1-single-template

Ping-pong framebuffer feedback, six temporal modes, palette display, and direct brush injection.

Raw WebGL 1 / GLSLsingle-windowWebcam + pointer + DOM controls
V1 09feedback

Feedback Simulation · Two Window

feedback-tauri-v1-ws-template

Two-window temporal feedback with renderer-local GPU history and reconnect-safe control intent.

Raw WebGL 1 / GLSLtwo-windowWebcam + pointer + WebSocket controls
V1 10midi

MIDI Input

p5-tauri-midi-template

Rust-owned MIDI enumeration, connection, MIDI learn, mappings, and WebGL parameter control.

WebView WebGL / browser media + Rust integrationssingle-windowMIDI + DOM controls
V1 11osc

OSC Input

p5-tauri-osc-template

Rust UDP/OSC listener with address routing, OSC learn, diagnostics, and visual control.

WebView WebGL / browser media + Rust integrationssingle-windowOSC + DOM controls
V1 12media

Video Texture Player

12-tauri-v1-video-texture-player

Local video transport, seeking, looping, WebGL texture processing, and feedback.

WebView WebGL / browser media + Rust integrationssingle-windowVideo file + transport
V1 13audio

Audio-Reactive FFT

13-tauri-v1-audio-reactive-fft

Microphone input transformed into FFT and waveform textures for GPU-reactive visuals.

WebView WebGL / browser media + Rust integrationssingle-windowMicrophone + DOM controls
V1 14recording

Canvas Recorder

14-tauri-v1-canvas-recorder

High-resolution canvas recording with optional microphone audio and native export workflow.

WebView WebGL / browser media + Rust integrationssingle-windowCanvas + optional microphone
V1 15compositor

Multipass Compositor

15-tauri-v1-multipass-compositor

Reorderable GPU pass stack with ping-pong targets, feedback, diagnostics, and still export.

WebView WebGL / browser media + Rust integrationssingle-windowImages/video + DOM controls
V1 16media

Image Texture Processor

16-tauri-v1-image-texture-processor

Native/browser image loading, WebGL processing, comparison views, and high-resolution export.

WebView WebGL / browser media + Rust integrationssingle-windowImage files + drag/drop
V1 17glsl

GLSL Shader Playground

17-tauri-v1-glsl-shader-playground-terminal

Live GLSL editing, compiler terminal, safe hot reload, presets, shader file I/O, and snapshots.

WebView WebGL / browser media + Rust integrationssingle-windowShader source + DOM controls
V1 18compositor

Texture Mixer

18-tauri-v1-texture-mixer

Two media layers with blend modes, masks, transforms, native file loading, and high-resolution export.

WebView WebGL / browser media + Rust integrationssingle-windowTwo image/video sources
V1 19camera

Webcam Compositor

19-tauri-v1-webcam-compositor

Live keying and compositing against media backgrounds with overlays, recording, and export.

WebView WebGL / browser media + Rust integrationssingle-windowWebcam + image/video
V1 20switching

Live Video Switcher

20-tauri-v1-live-video-switcher

Four-source Preview/Program switching, GPU transitions, overlays, transport, and recording.

WebView WebGL / browser media + Rust integrationsmulti-sourceVideo/camera/generators
V1 21mapping

Projection Mapper

21-tauri-v1-projection-mapper

Two-window mesh warping, calibration, edge blending, monitor routing, fullscreen, and presets.

WebView WebGL / browser media + Rust integrationstwo-windowMedia + pointer calibration
V1 22sequence

Image Sequence Player

22-tauri-v1-image-sequence-player

Native sequence loading, natural sorting, decode-aware cache, interpolation, transport, and output routing.

WebView WebGL / browser media + Rust integrationstwo-windowImage sequence
V1 23audio

Audio File FFT Visualizer

23-tauri-v1-audio-file-fft-visualizer

Local audio transport, FFT/waveform analysis, beat detection, GLSL visualization, and recording.

WebView WebGL / browser media + Rust integrationssingle-windowAudio file
V1 24automation

Keyframe Automation

24-tauri-v1-keyframe-automation

Editable parameter tracks, interpolation, live automation recording, presets, and native JSON state.

WebView WebGL / browser media + Rust integrationssingle-windowTimeline + manual controls
V1 25output

Multi-Display Output Manager

25-tauri-v1-multi-display-output-manager

Three synchronized output windows with monitor placement, fullscreen, layouts, blackout, and snapshots.

WebView WebGL / browser media + Rust integrationsmulti-windowGenerated/media sources
V2 00p5

p5.js Shader · Single Window

p5-tauri-v2-single-template

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

p5.js WebGLsingle-windowDOM controls
V2 01p5

p5.js Shader · Two Window

p5-tauri-v2-ws-template

p5.js renderer and controls separated through the embedded WebSocket relay.

p5.js WebGLtwo-windowWebSocket 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
V2 03webgl

Raw WebGL · Two Window

webgl-tauri-v2-ws-template

Raw WebGL renderer controlled through a reconnect-safe two-window WebSocket protocol.

Raw WebGL 1 / GLSLtwo-windowWebSocket controls
V2 04glsl

External GLSL · Single Window

glsl-tauri-v2-single-template

Runtime fragment-shader loading with compiler diagnostics and last-valid-program retention.

Raw WebGL 1 / GLSLsingle-windowShader file + DOM controls
V2 05glsl

External GLSL · Two Window

glsl-tauri-v2-ws-template

External GLSL candidates travel to a separate renderer, which validates before activation.

Raw WebGL 1 / GLSLtwo-windowShader file + WebSocket controls
V2 06camera

Webcam Texture · Single Window

webcam-tauri-v2-single-template

Permission-aware camera capture uploaded to WebGL with effects, telemetry, and optional feedback.

Raw WebGL 1 / GLSLsingle-windowWebcam + DOM controls
V2 07camera

Webcam Texture · Two Window

webcam-tauri-v2-ws-template

Renderer-owned camera capture with control-state recovery across WebSocket reconnects.

Raw WebGL 1 / GLSLtwo-windowWebcam + WebSocket controls
V2 08feedback

Feedback Simulation · Single Window

feedback-tauri-v2-single-template

Ping-pong framebuffer feedback, six temporal modes, palette display, and direct brush injection.

Raw WebGL 1 / GLSLsingle-windowWebcam + pointer + DOM controls
V2 09feedback

Feedback Simulation · Two Window

feedback-tauri-v2-ws-template

Two-window temporal feedback with renderer-local GPU history and reconnect-safe control intent.

Raw WebGL 1 / GLSLtwo-windowWebcam + pointer + WebSocket controls
V2 10midi

MIDI Input

10-tauri-v2-midi-input

Rust-owned MIDI enumeration, connection, MIDI learn, mappings, and WebGL parameter control.

WebView WebGL / browser media + Rust integrationssingle-windowMIDI + DOM controls
V2 11osc

OSC Input

11-tauri-v2-osc-input

Rust UDP/OSC listener with address routing, OSC learn, diagnostics, and visual control.

WebView WebGL / browser media + Rust integrationssingle-windowOSC + DOM controls
V2 12media

Video Texture Player

12-tauri-v2-video-texture-player

Local video transport, seeking, looping, WebGL texture processing, and feedback.

WebView WebGL / browser media + Rust integrationssingle-windowVideo file + transport
V2 13audio

Audio-Reactive FFT

13-tauri-v2-audio-reactive-fft

Microphone input transformed into FFT and waveform textures for GPU-reactive visuals.

WebView WebGL / browser media + Rust integrationssingle-windowMicrophone + DOM controls
V2 14recording

Canvas Recorder

14-tauri-v2-canvas-recorder

High-resolution canvas recording with optional microphone audio and native export workflow.

WebView WebGL / browser media + Rust integrationssingle-windowCanvas + optional microphone
V2 15compositor

Multipass Compositor

15-tauri-v2-multipass-compositor

Reorderable GPU pass stack with ping-pong targets, feedback, diagnostics, and still export.

WebView WebGL / browser media + Rust integrationssingle-windowImages/video + DOM controls
V2 16media

Image Texture Processor

16-tauri-v2-image-texture-processor

Native/browser image loading, WebGL processing, comparison views, and high-resolution export.

WebView WebGL / browser media + Rust integrationssingle-windowImage files + drag/drop
V2 17glsl

GLSL Shader Playground

17-tauri-v2-glsl-shader-playground

Live GLSL editing, compiler terminal, safe hot reload, presets, shader file I/O, and snapshots.

WebView WebGL / browser media + Rust integrationssingle-windowShader source + DOM controls
V2 18compositor

Texture Mixer

18-tauri-v2-texture-mixer

Two media layers with blend modes, masks, transforms, native file loading, and high-resolution export.

WebView WebGL / browser media + Rust integrationssingle-windowTwo image/video sources
V2 19camera

Webcam Compositor

19-tauri-v2-webcam-compositor

Live keying and compositing against media backgrounds with overlays, recording, and export.

WebView WebGL / browser media + Rust integrationssingle-windowWebcam + image/video
V2 20switching

Live Video Switcher

20-tauri-v2-live-video-switcher

Four-source Preview/Program switching, GPU transitions, overlays, transport, and recording.

WebView WebGL / browser media + Rust integrationsmulti-sourceVideo/camera/generators
V2 21mapping

Projection Mapper

21-tauri-v2-projection-mapper

Two-window mesh warping, calibration, edge blending, monitor routing, fullscreen, and presets.

WebView WebGL / browser media + Rust integrationstwo-windowMedia + pointer calibration
V2 22sequence

Image Sequence Player

22-tauri-v2-image-sequence-player

Native sequence loading, natural sorting, decode-aware cache, interpolation, transport, and output routing.

WebView WebGL / browser media + Rust integrationstwo-windowImage sequence
V2 23audio

Audio File FFT Visualizer

23-tauri-v2-audio-file-fft-visualizer

Local audio transport, FFT/waveform analysis, beat detection, GLSL visualization, and recording.

WebView WebGL / browser media + Rust integrationssingle-windowAudio file
V2 24automation

Keyframe Automation

24-tauri-v2-keyframe-automation

Editable parameter tracks, interpolation, live automation recording, presets, and native JSON state.

WebView WebGL / browser media + Rust integrationssingle-windowTimeline + manual controls
V2 25output

Multi-Display Output Manager

25-tauri-v2-multi-display-output-manager

Three synchronized output windows with monitor placement, fullscreen, layouts, blackout, and snapshots.

WebView WebGL / browser media + Rust integrationsmulti-windowGenerated/media sources
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 01foundations

Resize & Fullscreen

01-wgpu-resize-fullscreen

Demonstrates robust surface reconfiguration, minimized-window handling, fullscreen, and resize lifecycle.

Native Rust wgpunative-windowWindow events
WGPU 02shader

WGSL Shader

02-wgpu-wgsl-shader

Builds the minimal native shader pipeline with WGSL, uniforms, a render loop, and telemetry.

Native Rust wgpunative-windowDOM/Tauri controls
WGPU 03controls

Tauri Controls

03-wgpu-tauri-controls

Connects an HTML control surface to native Rust/wgpu renderer state through Tauri commands.

Native Rust wgpuhybrid-windowDOM → IPC
WGPU 04media

Image Texture

04-wgpu-image-texture

Loads image pixels into native GPU textures and samples them in a WGSL render pipeline.

Native Rust wgpunative-windowImage file
WGPU 05feedback

Ping-Pong Feedback

05-wgpu-ping-pong-feedback

Uses two HDR render textures for persistent native feedback, transforms, decay, color accumulation, and corruption.

Native Rust wgpunative-windowGPU history + controls
WGPU 06render-graph

Multipass Render Graph

06-wgpu-multipass-render-graph

Makes pass ordering, intermediate textures, and multi-stage native rendering explicit.

Native Rust wgpunative-windowGenerated textures
WGPU 07resolution

High-Resolution Lab

07-wgpu-high-resolution-lab

Explores internal render sizes, high-DPI presentation, performance, and 4K–8K working targets.

Native Rust wgpunative-windowResolution controls
WGPU 08backends

Backend Lab

08-wgpu-backend-lab

Inspects and selects Metal, Vulkan, Direct3D 12, or GL backends and reports adapter limits.

Native Rust wgpunative-windowBackend environment
WGPU 09compute

Compute Particles

09-wgpu-compute-particles

Updates a large particle system in compute shaders and renders directly from GPU-managed buffers.

Native Rust wgpunative-windowCompute simulation
WGPU 10compute

3D Particle Volume

10-wgpu-3d-particle-volume

Extends compute particles into a genuine XYZ volume with depth, perspective, and 3D motion.

Native Rust wgpunative-windowCompute simulation
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 12compute

Compute Fluid Feedback

12-wgpu-compute-fluid-feedback

Runs velocity advection, vorticity, divergence, pressure solve, dye advection, and feedback entirely on the GPU.

Native Rust wgpunative-windowPointer/force injection
WGPU 13camera

Camera Input

13-wgpu-camera-input

Introduces live camera frames as a native-wgpu texture source with capture diagnostics.

Native Rust wgpunative-windowCamera
WGPU 14camera

Native Webcam Texture

14-wgpu-native-webcam-texture

Uses a macOS-native capture bridge to feed webcam frames into persistent GPU textures efficiently.

Native Rust wgpunative-windowNative camera capture
WGPU 15media

Native Video Decoder + Effect UI

15-wgpu-native-video-decoder-effect-ui

Uses native FFmpeg decoding, latest-frame BGRA handoff, GPU texture effects, and owned playback state.

Native Rust wgpuhybrid-windowVideo file
WGPU 16recording

Native Recording Pipeline

16-wgpu-recording

Demonstrates GPU readback, bounded frame handoff, FFmpeg encoding, and recording-state diagnostics.

Native Rust wgpunative-windowRendered frames
WGPU 17midi

MIDI Parameter Registry

17-wgpu-midi-parameter-registry

Maps native MIDI events into a stable parameter registry that can drive renderer state and external patches.

Native Rust wgpuhybrid-windowMIDI / Max / hardware
WGPU 18osc

OSC Network Control

18-wgpu-osc-network-control

Routes OSC messages from Max, TouchOSC, Pure Data, or network peers into native renderer parameters.

Native Rust wgpuhybrid-windowOSC / UDP
WGPU 19gesture

Gesture Field

19-wgpu-gesture-field

Retains pointer, touch, and pen samples and routes them into particle, fluid, depth-ring, and raymarch fields.

Native Rust wgpunative-windowPointer/touch/pen
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 213d

glTF Scene Loader

21-wgpu-gltf-scene-loader

Loads glTF/GLB geometry, materials, textures, depth, lighting, camera controls, and scene diagnostics.

Native Rust wgpunative-windowglTF/GLB file
WGPU 223d

Skeletal Pose Lab

22-wgpu-skeletal-pose-lab

Explores joints, skinning, poses, animation playback, lighting, and bone-overlay diagnostics.

Native Rust wgpunative-windowSkinned mesh / animation
WGPU 233d

Morph Target Lab

23-wgpu-morph-target-lab

Blends shared-topology target shapes in WGSL using normalized, additive, and sequential modes.

Native Rust wgputwo-windowMorph targets + controls
WGPU 24compute

Mesh Feedback Deformer

24-wgpu-mesh-feedback-deformer

Uses ping-pong storage buffers for persistent GPU vertex deformation and compute-generated normals.

Native Rust wgpunative-windowCompute mesh state
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
No examples match the current filter.
Layer 4 · Build and package

Development standards #

  • Every project is independently runnable and contains README.md, package.json, src/, and src-tauri/.
  • Every Rust project has an explicit [workspace] boundary with resolver = "2".
  • Use local npm scripts: npm run dev and npm run build.
  • Tauri 2 projects grant capability access to every configured WebView label.
  • Document platform prerequisites, permissions, ports, expected output, known limitations, and production bundle locations.
  • Do not commit node_modules/, Rust target/, or generated recordings/exports.

See the full development guide.

Layer 4 · Diagnose by boundary

Troubleshooting map #

Blank WebGL output

Check context creation, shader compile/link status, nonzero drawing-buffer dimensions, viewport, buffers, attributes, texture completeness, and the draw call. The UI should surface these diagnostics rather than remaining blank.

Native wgpu surface failure

Inspect adapter/backend telemetry, surface compatibility, configuration size, minimized state, resize handling, and current-surface-texture errors. Metal surface creation and UI ownership must respect the main-thread lifecycle.

Camera or microphone missing

Keep refresh enabled before permission, request access, enumerate again after permission, verify OS privacy settings, and close other applications holding the device.

WebSocket renderer reconnects with stale controls

The controls window should retain authoritative parameters and resend a complete snapshot when the renderer reconnects. Media streams and GPU history remain renderer-owned.

Local image displays but WebGL upload throws SecurityError

Have Rust read the native file bytes, return a binary response, create a Blob URL, decode the image, then upload it. Direct asset URLs may display yet remain tainted for texture upload.

Image sequence freezes or skips

Buffer initial frames, hold every frame by default, stop advancing time when decoding falls behind, preserve the playhead when rate changes, and coalesce updates.

Recording or export stalls

Bound queues and memory, avoid huge JSON IPC payloads, respect GPU row alignment, remove padding after readback, and expose progress and failure stages.

See the complete troubleshooting guide.

Layer 5 · Evidence

Validation status #

Primary workflows were developed and tested sequentially on macOS Apple Silicon. That evidence does not imply a complete macOS, Windows, and Linux certification matrix.

Status Current evidence
Inventory and documentation Example catalog cataloged; all three 00–25 collections complete.
Runtime Primary workflows tested sequentially on macOS during development.
Standalone packaging Every project documents local development and production build commands.
Windows/Linux Architecture targets these platforms, but broad runtime verification remains future work; Spout implementation exists but was not fully tested in the primary cycle.
Hardware/network inputs Camera, MIDI, OSC, Syphon, and external Max/MSP workflows were tested where hardware/platform access was available.
Transparent status language: say “runtime tested on macOS” when that is the evidence. Do not silently upgrade it to “cross-platform verified.”
Reference

Glossary #

WebView renderer

Graphics produced inside WKWebView, WebView2, or WebKitGTK through browser APIs.

Native wgpu surface

A swapchain-like presentation surface owned by Rust/wgpu and backed by Metal, Vulkan, or Direct3D 12.

Ping-pong

Alternating two textures or buffers so the previous state can be read while the next state is written.

Render graph

An explicit description of passes, dependencies, resources, and execution order.

Canonical state

A stable parameter/action model shared by UI, presets, automation, external control, and renderer.

Latest-frame boundary

A bounded handoff that discards stale media frames instead of allowing latency and memory growth.