DRAFT 0.1 · UNSTABLE

SPEC

THE NORMATIVE TEXT LIVES IN spec/

Anything may change before 1.0. Each file below is the source of truth for its chapter; this page is the map.

CORE DECISIONS · V0.1
  • PLUGINone JSON manifest + one or more WGSL shaders
  • KINDSeffect (1 input) · transition (2 inputs + progress 0..1)
  • SPACElinear, premultiplied RGBA, rgba16float
  • PASSESpipeline-overridable constants (override), set per pass in the manifest
  • SIGNALSMIDI 2.0 controllers and notes, one 0..1 float per signal per frame; the host maps audio, OSC and hardware onto them
  • HOSTSidentical on native wgpu and browser WebGPU
FILES
01 / MANIFEST

manifest.md

Top-level fields (wisp, id, name, kind, category, version, license), the params table with its WGSL mapping, and the passes table: shader, entry, constants, inputs and output. Reserved input names source, from and to.

02 / SCHEMA

manifest.schema.json

Draft 2020-12 JSON Schema for manifest.json, published at wispfx.org/schema/0.1/manifest.json. Validate before shipping.

03 / ABI

shader-abi.md

Module assembly (prelude plus plugin file), the five host bindings, the fragment entry point, the colour space (linear, premultiplied RGBA, rgba16float, Rec. 709) and the portability rules.

04 / SIGNALS

signals.md

MIDI 2.0 controllers and notes a plugin reads each frame as 0..1 floats at group 1, binding 1. The host maps audio followers, OSC and hardware onto them; the plugin never sees events.

05 / PRELUDE

prelude.wgsl

The WGSL the host prepends to every plugin shader module: WispGlobals, the sampler, the two input textures and the fullscreen-triangle vertex stage wisp_vs. Plugins must not redeclare anything in it.

06 / EXAMPLES

examples/

Cross Dissolve (transition), Gaussian Blur (two passes with override constants) and Reactive Grade (a colour grade driven by signals). All pass naga and validate against the schema.

CONFORMANCE

A conforming host assembles each pass's module as the prelude plus the plugin's WGSL file, creates explicit pipeline layouts so unused bindings stay valid, provides the five bindings of group 0 and the plugin's Params at group 1, lays Params out with WGSL uniform alignment padded to 16 bytes, feeds linear premultiplied rgba16float in and out, drives progress across the clip or the cut, and accepts only WGSL that both naga and browser WebGPU compile.