import type { ColorControl, ShaderKind } from "./types.js"; export declare const shaderRegistry: { readonly "chromatic-city": { readonly name: "Chromatic City"; readonly tagline: "Candy-colored columns rise into stepped hills and deep channels"; readonly description: "An orthographic city of square columns forms colorful terraced hills. Cool channels climb through violet and pink into sunlit yellow peaks. Columns cast soft-edged shadows across their neighbors, with cool shade gathering in the deep gaps. A layout seed reshapes the terrain and scattered towers, while slow terrain drift makes individual columns ease between height levels, resting on each terrace. Seeded square widths and a soft blur above and below the focus band give the scene a miniature feel. Adjust the density, relief, terrace count, camera and gaps between blocks."; readonly family: "spatial"; readonly tags: readonly ["3d", "colorful", "terrain", "architecture", "pointer"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.4; readonly randomRange: readonly [0.15, 0.65]; readonly hint: "Pace of the terrain drift and individual height changes."; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; }; readonly scale: { readonly label: "View width"; readonly min: 12; readonly max: 32; readonly default: 23; readonly randomRange: readonly [16, 29]; readonly hint: "Visible terrain span. Higher shows more columns."; readonly slot: "scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1.15; readonly randomRange: readonly [1.05, 1.3]; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly randomRange: readonly [1, 1.2]; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.12; readonly randomRange: readonly [0, 0.18]; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly seed: { readonly slot: "a"; readonly label: "Layout seed"; readonly min: 0; readonly max: 9999; readonly step: 1; readonly default: 42; readonly randomRange: readonly [0, 9999]; readonly hint: "Rebuilds the hills, valleys and scattered towers. The same seed and controls reproduce the same terrain."; }; readonly relief: { readonly slot: "b"; readonly label: "Relief"; readonly min: 2; readonly max: 8; readonly step: 0.1; readonly default: 5.5; readonly randomRange: readonly [3, 7]; readonly hint: "Height of the terrain above its channels."; }; readonly frequency: { readonly slot: "c"; readonly label: "Hill density"; readonly min: 0.05; readonly max: 0.3; readonly step: 0.01; readonly default: 0.13; readonly randomRange: readonly [0.07, 0.24]; readonly hint: "Higher creates smaller, more numerous hills."; }; readonly terraces: { readonly slot: "d"; readonly label: "Terraces"; readonly min: 3; readonly max: 18; readonly step: 1; readonly default: 10; readonly randomRange: readonly [5, 15]; readonly hint: "Number of distinct height levels."; }; readonly towers: { readonly slot: "e"; readonly label: "Towers"; readonly min: 0; readonly max: 0.7; readonly step: 0.01; readonly default: 0.18; readonly randomRange: readonly [0, 0.5]; readonly hint: "Height of scattered columns above the terraces."; }; readonly angle: { readonly slot: "f"; readonly label: "Camera angle"; readonly min: 0.3; readonly max: 1.2; readonly step: 0.01; readonly default: 0.75; readonly randomRange: readonly [0.4, 1.1]; readonly hint: "Turns the view around the square grid."; }; readonly pitch: { readonly slot: "g"; readonly label: "Camera elevation"; readonly min: 0.55; readonly max: 1.15; readonly step: 0.01; readonly default: 0.85; readonly randomRange: readonly [0.65, 1.05]; readonly hint: "Higher looks down onto more of the column tops."; }; readonly gap: { readonly slot: "h"; readonly label: "Block gaps"; readonly min: 0.01; readonly max: 0.12; readonly step: 0.01; readonly default: 0.035; readonly randomRange: readonly [0.02, 0.08]; readonly hint: "Dark joints separating neighboring columns."; }; readonly sizes: { readonly slot: "i"; readonly label: "Size variation"; readonly min: 0; readonly max: 0.45; readonly step: 0.01; readonly default: 0.12; readonly randomRange: readonly [0.05, 0.25]; readonly hint: "Seeded variation in square widths. 0 keeps every column equally wide."; }; readonly miniature: { readonly slot: "j"; readonly label: "Miniature blur"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.55; readonly randomRange: readonly [0.3, 0.7]; readonly hint: "Softens the top and bottom while keeping the center sharp. 0 disables the blur."; }; readonly focus: { readonly slot: "k"; readonly label: "Focus band"; readonly min: 0.15; readonly max: 0.7; readonly step: 0.01; readonly default: 0.35; readonly randomRange: readonly [0.25, 0.45]; readonly hint: "Height of the sharp horizontal band in the center."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Candy"; readonly colorA: "#22d4df"; readonly colorB: "#fa389b"; readonly colorC: "#ffcd39"; }, { readonly name: "Citrus"; readonly colorA: "#3478ed"; readonly colorB: "#26dca4"; readonly colorC: "#eafa52"; }, { readonly name: "Sunset"; readonly colorA: "#7070ef"; readonly colorB: "#ff537c"; readonly colorC: "#ffb94d"; }, { readonly name: "Glacier"; readonly colorA: "#346cce"; readonly colorB: "#a277ef"; readonly colorC: "#79f5ee"; }]; }; readonly "liquid-light": { readonly name: "Liquid Light"; readonly tagline: "A curled glass wave in a luminous pearl studio"; readonly description: "A thick glass sheet curls above a pearl floor, leaving space for a hero headline. Rays refract through both faces, lose color with distance inside the glass, and catch broad studio reflections. Separate backdrop, glass and bloom passes keep each layer adjustable. Floor caustics are a procedural light pattern, not a photon simulation."; readonly family: "spatial"; readonly tags: readonly ["glass", "light", "hero", "3d", "refraction", "pearl", "interactive"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.25; readonly max: 2; readonly randomRange: readonly [0.18, 0.35]; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly label: "Zoom"; readonly min: 0.65; readonly max: 1.6; readonly default: 1; readonly randomRange: readonly [0.9, 1.05]; readonly hint: "Camera zoom. Lower values leave more space around the wave."; readonly slot: "scale"; readonly step: 0.01; }; readonly intensity: { readonly label: "Exposure"; readonly default: 1; readonly randomRange: readonly [0.9, 1.1]; readonly slot: "intensity"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0; readonly randomRange: readonly [0, 0]; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly vibrancy: { readonly randomRange: readonly [0.9, 1.1]; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly warp: { readonly label: "Shape motion"; readonly default: 0.12; readonly max: 1.5; readonly randomRange: readonly [0.06, 0.2]; readonly hint: "How far the whole crest sways, opens and folds. Zero holds the main silhouette still."; readonly slot: "warp"; readonly min: 0; readonly step: 0.01; }; readonly direction: { readonly slot: "l"; readonly label: "Facing direction"; readonly min: -180; readonly max: 180; readonly step: 1; readonly default: 0; readonly randomRange: readonly [-180, 180]; readonly hint: "Turns the actual wave around its vertical axis. 180 degrees faces the opposite direction."; }; readonly lean: { readonly slot: "m"; readonly label: "Lean"; readonly min: -35; readonly max: 35; readonly step: 1; readonly default: 0; readonly randomRange: readonly [-25, 25]; readonly hint: "Tilts the wave forward or backward around its base."; }; readonly rotation: { readonly slot: "n"; readonly label: "Turn speed"; readonly min: -60; readonly max: 60; readonly step: 1; readonly default: 0; readonly randomRange: readonly [-1, 1]; readonly hint: "Degrees per second, multiplied by Speed. Negative reverses the turn; zero holds the facing direction."; }; readonly curl: { readonly slot: "h"; readonly label: "Curl amount"; readonly min: 0.3; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.35, 1.9]; readonly hint: "Opens the crest or rolls its lip further inward. Changes the actual glass surface."; }; readonly height: { readonly slot: "i"; readonly label: "Crest height"; readonly min: 0.45; readonly max: 1.4; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.5, 1.25]; readonly hint: "Raises or lowers the crest while keeping the base on the floor."; }; readonly width: { readonly slot: "j"; readonly label: "Sheet width"; readonly min: 0.35; readonly max: 1.8; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.4, 1.65]; readonly hint: "Widens the sheet across its folds, independently of camera zoom."; }; readonly spread: { readonly slot: "k"; readonly label: "Base spread"; readonly min: 0.1; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.15, 1.9]; readonly hint: "Pulls the front foot left and fans the rear sheet right into the floor."; }; readonly thickness: { readonly slot: "a"; readonly label: "Glass thickness"; readonly min: 0.025; readonly max: 0.16; readonly step: 0.005; readonly default: 0.065; readonly randomRange: readonly [0.045, 0.085]; readonly hint: "Half-thickness of the solid glass sheet. Changes refraction and absorption."; }; readonly ior: { readonly slot: "b"; readonly label: "Refraction (IOR)"; readonly min: 1.05; readonly max: 1.8; readonly step: 0.01; readonly default: 1.46; readonly randomRange: readonly [1.38, 1.55]; readonly hint: "Index of refraction at the entry and exit faces. Glass is around 1.46."; }; readonly dispersion: { readonly slot: "c"; readonly label: "Dispersion"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.15; readonly randomRange: readonly [0.7, 1.4]; readonly hint: "Color separation at the exit surface and in the floor's light pattern."; }; readonly caustics: { readonly slot: "d"; readonly label: "Floor caustics"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.7; readonly randomRange: readonly [0.5, 0.9]; readonly hint: "Strength of the procedural caustic layer on the pearl floor."; }; readonly softness: { readonly slot: "e"; readonly label: "Reflection softness"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.24; readonly randomRange: readonly [0.18, 0.3]; readonly hint: "Softens the edges of the reflected studio panels."; }; readonly glass: { readonly slot: "f"; readonly label: "Glass layer"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [1, 1]; readonly hint: "Blend the glass layer in or isolate the pearl backdrop at zero."; }; readonly bloom: { readonly slot: "g"; readonly label: "Bloom layer"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly randomRange: readonly [0.35, 0.8]; readonly hint: "Glow around bright glass reflections. Zero disables the glow."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Pearl"; readonly colorA: "#f8fafb"; readonly colorB: "#f4f3f0"; readonly colorC: "#ffe4bc"; }, { readonly name: "Ice"; readonly colorA: "#c5e4f4"; readonly colorB: "#edf4fa"; readonly colorC: "#cce5ff"; }, { readonly name: "Rose"; readonly colorA: "#f0d9e1"; readonly colorB: "#f6efec"; readonly colorC: "#ffcfa5"; }]; }; readonly alloy: { readonly name: "Alloy"; readonly tagline: "Brushed metal ribbons and floating glass in a silver-blue studio"; readonly description: "Broad ribbons twist through a cool, softly lit space, their fine brushed lines catching warm gold reflections. Glass spheres float between the folds and reflect the ribbons around them. Tune the ribbon width, brushing, glass size and warm light, then slow the motion for an ambient backdrop or move the pointer for a little camera parallax."; readonly family: "spatial"; readonly tags: readonly ["metal", "glass", "ribbons", "3d", "silver", "gold", "hero", "interactive"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.35; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly label: "Zoom"; readonly min: 0.65; readonly max: 1.8; readonly default: 0.83; readonly hint: "Camera framing. Higher values bring the ribbons and glass closer."; readonly slot: "scale"; readonly step: 0.01; }; readonly intensity: { readonly label: "Exposure"; readonly default: 1.25; readonly slot: "intensity"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.12; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Twist"; readonly default: 0.8; readonly hint: "The extra torsion along each metal ribbon."; readonly slot: "warp"; readonly min: 0; readonly max: 2; readonly step: 0.01; }; readonly width: { readonly slot: "a"; readonly label: "Ribbon width"; readonly min: 0.35; readonly max: 1.65; readonly step: 0.01; readonly default: 1; readonly hint: "From narrow metal strands to broad sculptural bands."; }; readonly brushing: { readonly slot: "b"; readonly label: "Brushing"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Fine longitudinal grooves in the reflective metal. Zero is smooth chrome."; }; readonly spheres: { readonly slot: "c"; readonly label: "Glass spheres"; readonly min: 0; readonly max: 1.4; readonly step: 0.01; readonly default: 1; readonly hint: "The size of the floating glass beads. Zero removes them."; }; readonly warmth: { readonly slot: "d"; readonly label: "Warm light"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The strength of the accent-colored studio reflections."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Champagne"; readonly colorA: "#455c73"; readonly colorB: "#d5e4eb"; readonly colorC: "#ffc078"; }, { readonly name: "Platinum"; readonly colorA: "#3e4d60"; readonly colorB: "#d8edff"; readonly colorC: "#a6d4ff"; }, { readonly name: "Rose gold"; readonly colorA: "#654e62"; readonly colorB: "#eee0e5"; readonly colorC: "#ffba93"; }, { readonly name: "Obsidian"; readonly colorA: "#1b2536"; readonly colorB: "#889cb7"; readonly colorC: "#d4bbff"; }]; }; readonly aurora: { readonly name: "Aurora"; readonly tagline: "Layered curtains of light over a night sky"; readonly description: "Green and violet curtains of light hang over a dark sky and drift sideways, brightest along their lower edge and fading out before they reach the top of the frame. Stars show through the gaps and thin out behind the strongest ribbons. Low warp reads as a calm glow, high warp as a solar storm."; readonly family: "organic"; readonly tags: readonly ["ambient", "hero", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.45; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1.1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 0.95; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.45; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.7; readonly max: 2.5; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; readonly hint: "How far the field is pushed around before it is sampled."; }; readonly exposure: { readonly slot: "a"; readonly label: "Exposure"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1.2; readonly hint: "Feeds the tonemapper. Push it for blown-out, bloomy ribbons."; }; readonly bloom: { readonly slot: "b"; readonly label: "Bloom"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Extra glow around the densest part of each curtain."; }; readonly stars: { readonly slot: "d"; readonly label: "Stars"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Brightness of the background star field."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly caustics: { readonly name: "Caustics"; readonly tagline: "Light focused through a moving water surface"; readonly description: "The bright, moving web of light that water throws on the floor of a pool. The lines cross, pull apart and flare where the light focuses, with faint colour fringes along the sharpest ones. Low sharpness is a soft glow; high sharpness is hard caustic line work."; readonly family: "organic"; readonly tags: readonly ["water", "light", "pool"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1.37; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.45; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1.14; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.72; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.52; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 1.44; readonly max: 1.5; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; readonly hint: "How far the field is pushed around before it is sampled."; }; readonly sharpness: { readonly slot: "a"; readonly label: "Sharpness"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.68; readonly hint: "How tightly the light focuses. Low is a glow, high is a web."; }; readonly dispersion: { readonly slot: "b"; readonly label: "Dispersion"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.15; readonly hint: "Split between the red and blue focal depths."; }; readonly falloff: { readonly slot: "c"; readonly label: "Falloff"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 2.74; readonly hint: "How quickly the pool darkens towards the edges."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly swell: { readonly name: "Swell"; readonly tagline: "Open ocean to a bright, flat horizon"; readonly description: "Open ocean to a bright horizon, choppy near the camera and flat glare far away. The crests are sharp and the troughs round, which is the whole difference between water and moire, and the water pales toward the horizon where it borrows the sky. The sun's glitter widens with distance until the far path is one streak."; readonly family: "scene"; readonly tags: readonly ["hero", "water", "3d", "pointer"]; readonly cost: "medium"; readonly controls: { readonly vibrancy: { readonly default: 0.63; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly intensity: { readonly default: 0.57; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly speed: { readonly default: 1.04; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Unused by the water; feeds post."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.88; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly sun: { readonly slot: "a"; readonly label: "Sun"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 1.47; readonly hint: "Height of the sun above the horizon."; }; readonly swell: { readonly slot: "b"; readonly label: "Swell"; readonly min: 0.2; readonly max: 2; readonly step: 0.01; readonly default: 1.79; readonly hint: "How much the surface heaves."; }; readonly glitter: { readonly slot: "c"; readonly label: "Glitter"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.86; readonly hint: "The sun's path on the water."; }; readonly chop: { readonly slot: "d"; readonly label: "Chop"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.22; readonly hint: "Crest sharpness. Low is glassy, high is broken."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Sunset"; readonly colorA: "#2a2447"; readonly colorB: "#7a4a6e"; readonly colorC: "#ffb35c"; }, { readonly name: "Open water"; readonly colorA: "#123a5e"; readonly colorB: "#2e8f7a"; readonly colorC: "#ffdda6"; }, { readonly name: "Storm"; readonly colorA: "#1d2a33"; readonly colorB: "#3d5a5e"; readonly colorC: "#d9e4e8"; }, { readonly name: "Tropic"; readonly colorA: "#0d5a7a"; readonly colorB: "#2ec4b6"; readonly colorC: "#fff0b8"; }]; }; readonly blueprint: { readonly name: "Blueprint"; readonly tagline: "The layer measured and drawn up as a technical plate"; readonly description: "A logo, a wordmark or a line of text laid out the way a draughtsman would: the ink outlined at a set weight, hatched inside at forty-five degrees, and dimensioned below and beside with ticks, extension lines and its size in pixels, lettered in a monospace face. Behind it is a grained mat under a fine grid, with construction lines meeting at the pointer. The measuring happens on the GPU every frame, so the plate follows whatever the layer becomes: hand it `source={{ svg: \"/logo.svg\" }}` or `source={{ text: \"BRAUN\" }}`."; readonly family: "drafting"; readonly tags: readonly ["svg", "logo", "text", "technical", "interactive", "dark"]; readonly cost: "medium"; readonly defaultSource: "orb"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly hint: "How fast the hatching slides."; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; }; readonly scale: { readonly min: 0.3; readonly max: 1.6; readonly default: 1; readonly hint: "How much of the plate the part fills. It is always shown whole."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly vignette: { readonly default: 0.15; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Glow"; readonly min: 0; readonly max: 2; readonly default: 0; readonly hint: "The halo the inked lines throw on the mat."; readonly slot: "warp"; readonly step: 0.01; }; readonly threshold: { readonly slot: "a"; readonly label: "Threshold"; readonly min: 0.05; readonly max: 0.95; readonly step: 0.01; readonly default: 0.5; readonly hint: "The luma the layer is cut at. Bright is ink."; }; readonly hatch: { readonly slot: "b"; readonly label: "Hatch"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Spacing of the hatching inside the part. 0 leaves it open."; }; readonly line: { readonly slot: "c"; readonly label: "Line"; readonly min: 0.5; readonly max: 8; readonly step: 0.1; readonly default: 1.6; readonly hint: "Weight of the outline, in device pixels — so it reads heavier the smaller the part is drawn."; }; readonly grid: { readonly slot: "d"; readonly label: "Grid"; readonly min: 0; readonly max: 32; readonly step: 1; readonly default: 8; readonly hint: "Cells down the height of the sheet. 0 hides the grid and the construction lines."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Indigo"; readonly colorA: "#3a339e"; readonly colorB: "#ffffff"; readonly colorC: "#8c8c8c"; }, { readonly name: "Drafting"; readonly colorA: "#262626"; readonly colorB: "#ffffff"; readonly colorC: "#8c8c8c"; }, { readonly name: "Vellum"; readonly colorA: "#ece3cf"; readonly colorB: "#1f2a37"; readonly colorC: "#8d7f63"; }, { readonly name: "Redline"; readonly colorA: "#141414"; readonly colorB: "#ff5a48"; readonly colorC: "#7a3a33"; }]; }; readonly ferro: { readonly name: "Ferro"; readonly tagline: "A pool of ferrofluid, and the pointer is the magnet"; readonly description: "A dark pool of bright points at rest in a slow swell. Under the pointer a crown of spikes rises, the stiff hedgehog that real ferrofluid grows over a magnet, and rings ripple out from the same place. Move the pointer and the crown hands itself from spike to spike instead of sliding along as one shape."; readonly family: "particles"; readonly tags: readonly ["particles", "3d", "interactive", "pointer", "dark"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly hint: "Zoom of the resting swell. The crown keeps its own size."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Swell"; readonly min: 0; readonly max: 2; readonly default: 0.8; readonly hint: "The resting motion of the pool, far from the magnet."; readonly slot: "warp"; readonly step: 0.01; }; readonly field: { readonly slot: "a"; readonly label: "Field"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The magnet's reach. Everything the pointer does happens inside it."; }; readonly spikes: { readonly slot: "b"; readonly label: "Spikes"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Density of the crown. High is needles, low is a few broad cones."; }; readonly ripples: { readonly slot: "c"; readonly label: "Ripples"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.9; readonly hint: "The rings the disturbance sheds."; }; readonly pull: { readonly slot: "d"; readonly label: "Pull"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How hard the magnet lifts the fluid."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Laboratory"; readonly colorA: "#0d1016"; readonly colorB: "#3d4d63"; readonly colorC: "#b8e6ff"; }, { readonly name: "Oil"; readonly colorA: "#12100c"; readonly colorB: "#4d4436"; readonly colorC: "#ffe0a3"; }, { readonly name: "Plasma"; readonly colorA: "#130a1a"; readonly colorB: "#6d3aa8"; readonly colorC: "#ffb8f0"; }, { readonly name: "Mercury"; readonly colorA: "#101314"; readonly colorB: "#5d6a70"; readonly colorC: "#f0fbff"; }]; }; readonly filament: { readonly name: "Filament"; readonly tagline: "Threads of light pinched at one point, fanning to the edges"; readonly description: "A handful of glowing threads gather to a point and spread toward the edges like fibres drawn from a spool, each a slow sine that fades from the first colour to the last, burning through to the core where they cross. The light is analytic and then bloomed, so it bleeds the way a filament does. The pinch leans toward the pointer and the threads brighten under it."; readonly family: "light"; readonly tags: readonly ["threads", "glow", "interactive", "pointer", "dark", "hero"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly min: 0.3; readonly max: 3; readonly default: 1; readonly hint: "Waves along each thread. Higher is more crossings."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Spread"; readonly min: 0; readonly max: 2; readonly default: 0.6; readonly hint: "How far the fan opens toward the edges."; readonly slot: "warp"; readonly step: 0.01; }; readonly threads: { readonly slot: "a"; readonly label: "Threads"; readonly min: 1; readonly max: 10; readonly step: 1; readonly default: 6; readonly hint: "How many fibres are drawn."; }; readonly thickness: { readonly slot: "b"; readonly label: "Thickness"; readonly min: 0.3; readonly max: 3; readonly step: 0.01; readonly default: 1.1; readonly hint: "Width of each thread's glow."; }; readonly taper: { readonly slot: "c"; readonly label: "Taper"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How much wider each successive thread swings."; }; readonly falloff: { readonly slot: "d"; readonly label: "Falloff"; readonly min: 0.3; readonly max: 1.5; readonly step: 0.01; readonly default: 0.6; readonly hint: "How quickly the glow dies away from the thread. Low is haze, high is wire."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly strata: { readonly name: "Strata"; readonly tagline: "Colorful contour layers flowing around a deep violet basin"; readonly description: "Nested ribbons of cyan, violet, coral and gold slowly bend around a recessed center. Soft shaded shelves and luminous lips give each contour depth. Adjust the layer count, relief and edge light, or change the three palette colors."; readonly family: "organic"; readonly tags: readonly ["colorful", "layers", "contours", "flow", "hero", "ambient"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.45; readonly randomRange: readonly [0.2, 0.7]; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly randomRange: readonly [0.7, 1.12]; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly randomRange: readonly [0.85, 1.05]; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly randomRange: readonly [0.95, 1.15]; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly randomRange: readonly [0, 0]; readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; readonly vignette: { readonly default: 0.12; readonly randomRange: readonly [0.05, 0.22]; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 1; readonly randomRange: readonly [0.45, 1.05]; readonly hint: "How far the contour layers bend and flow."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly max: 2; readonly step: 0.01; }; readonly layers: { readonly slot: "a"; readonly label: "Layers"; readonly min: 3; readonly max: 12; readonly step: 1; readonly default: 8; readonly randomRange: readonly [7, 12]; readonly hint: "Number of nested shelves around the basin."; }; readonly relief: { readonly slot: "b"; readonly label: "Relief"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.85; readonly randomRange: readonly [0.8, 1]; readonly hint: "Shadow depth across each shelf."; }; readonly edgeLight: { readonly slot: "c"; readonly label: "Edge light"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.7, 1.2]; readonly hint: "Brightness of the rounded contour lips."; }; readonly seed: { readonly slot: "d"; readonly label: "Shape seed"; readonly min: 0; readonly max: 99; readonly step: 1; readonly default: 0; readonly hint: "Changes the bends and proportions while keeping contours nested."; }; readonly positionX: { readonly slot: "e"; readonly label: "Depth point X"; readonly min: -0.75; readonly max: 0.75; readonly step: 0.01; readonly default: 0; readonly randomRange: readonly [-0.45, 0.45]; readonly hint: "Moves the depth point left or right. Zero centers it; ±0.5 reaches the frame edges. Layers follow the point."; }; readonly positionY: { readonly slot: "f"; readonly label: "Depth point Y"; readonly min: -0.75; readonly max: 0.75; readonly step: 0.01; readonly default: 0; readonly randomRange: readonly [-0.45, 0.45]; readonly hint: "Moves the depth point up or down. Negative moves up, positive moves down. Values past ±0.5 place it outside the frame."; }; readonly rotation: { readonly slot: "g"; readonly label: "Rotation"; readonly min: -180; readonly max: 180; readonly step: 1; readonly default: 0; readonly hint: "Turns the contour composition around its basin."; }; readonly stretch: { readonly slot: "h"; readonly label: "Stretch"; readonly min: 0.65; readonly max: 1.6; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.8, 1.4]; readonly hint: "Changes round basins into elongated flowing valleys."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Prismatic"; readonly colorA: "#5125db"; readonly colorB: "#08d9ed"; readonly colorC: "#ffb52e"; }, { readonly name: "Lagoon"; readonly colorA: "#123b89"; readonly colorB: "#21ebd1"; readonly colorC: "#b2f5e3"; }, { readonly name: "Ember"; readonly colorA: "#521b75"; readonly colorB: "#f24878"; readonly colorC: "#ffc65b"; }]; }; readonly spectra: { readonly name: "Spectra"; readonly tagline: "Colour-split bands over a rippling field, swept by a slow pulse"; readonly description: "A stack of bands bent by a field of crossed sines, with a pulse travelling down them that lights the ones it passes. Each colour channel reads the bands a little offset from the others, so every edge fringes into spectra the way a cheap prism does. Scanlines sit over the top, and the pulse tightens and brightens under the pointer."; readonly family: "light"; readonly tags: readonly ["scan", "bands", "retro", "interactive", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly min: 0.4; readonly max: 2.5; readonly default: 1; readonly hint: "Zoom of the band field."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly vignette: { readonly default: 0.45; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Ripple"; readonly min: 0; readonly max: 1; readonly default: 0.22; readonly hint: "How far the field bends the bands."; readonly slot: "warp"; readonly step: 0.01; }; readonly bands: { readonly slot: "a"; readonly label: "Bands"; readonly min: 3; readonly max: 24; readonly step: 1; readonly default: 11; readonly hint: "How many bands stack down the frame."; }; readonly sweep: { readonly slot: "b"; readonly label: "Sweep"; readonly min: 0.4; readonly max: 4; readonly step: 0.01; readonly default: 1; readonly hint: "Width of the pulse that lights the bands as it passes."; }; readonly sharpness: { readonly slot: "c"; readonly label: "Sharpness"; readonly min: 1; readonly max: 12; readonly step: 0.1; readonly default: 5.5; readonly hint: "Edge of each band. Low is a soft wash, high is a line."; }; readonly split: { readonly slot: "d"; readonly label: "Split"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.7; readonly hint: "How far the colour channels part at each edge."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly shafts: { readonly name: "Shafts"; readonly tagline: "God rays from just above the frame, and the hand that blocks them"; readonly description: "Crepuscular rays from a source just above the top edge: the light carried on each bearing is three octaves of drifting noise over the angle, carved by a soft threshold into a handful of broad beams with finer rays between, so the shafts shift and cross without repeating. A cone keeps the light where the source points, the shafts fade with distance and fall to dark at the foot of the frame, dust in the air breaks them up, and the pointer is a thing held in the light: it blocks the beams and throws a shadow away from the source, softer the further it falls. Behind them a dark sky, and a bloom that lets the beams bleed the way light through haze does."; readonly family: "light"; readonly tags: readonly ["rays", "glow", "interactive", "pointer", "dark", "hero"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.8; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Unused by the rays; kept for the shared controls."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Shadow"; readonly min: 0; readonly max: 2; readonly default: 0.7; readonly hint: "Size of the shape the pointer holds in the light. 0 blocks nothing."; readonly slot: "warp"; readonly step: 0.01; }; readonly spread: { readonly slot: "a"; readonly label: "Spread"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 0.6; readonly hint: "Width of the cone the rays fill. Low is a beam, high floods the frame."; }; readonly length: { readonly slot: "b"; readonly label: "Length"; readonly min: 0.5; readonly max: 4; readonly step: 0.01; readonly default: 2; readonly hint: "How far down the frame a ray reaches before it fades."; }; readonly rays: { readonly slot: "c"; readonly label: "Rays"; readonly min: 0.4; readonly max: 2.5; readonly step: 0.01; readonly default: 0.8; readonly hint: "How many beams the cone holds. Low is a few broad shafts, high is many fine ones."; }; readonly pulse: { readonly slot: "d"; readonly label: "Pulse"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "A breathing of the whole light."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly billow: { readonly name: "Billow"; readonly tagline: "A sea of soft waves marched into fog, from a low camera"; readonly description: "Two crossed sines with a slow swell riding on them, raymarched from a camera tilted down toward the horizon. Distance is fog: the wave colour gives way to the horizon colour as the march runs long, and the crests catch a third colour by height. The camera yaws and pitches a little with the pointer, which is what gives the sea its depth."; readonly family: "light"; readonly tags: readonly ["waves", "gradient", "3d", "interactive", "hero"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.4; readonly max: 1.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly min: 0.3; readonly max: 2.5; readonly default: 1; readonly hint: "Wavelength of the sea. Lower is longer, rolling waves."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Parallax"; readonly min: 0; readonly max: 2; readonly default: 0.5; readonly hint: "How far the camera turns with the pointer."; readonly slot: "warp"; readonly step: 0.01; }; readonly amplitude: { readonly slot: "a"; readonly label: "Amplitude"; readonly min: 0.2; readonly max: 6; readonly step: 0.01; readonly default: 2.5; readonly hint: "Height of the waves."; }; readonly swell: { readonly slot: "b"; readonly label: "Swell"; readonly min: 0; readonly max: 60; readonly step: 0.1; readonly default: 35; readonly hint: "The slow displacement that bends the wave trains."; }; readonly height: { readonly slot: "c"; readonly label: "Height"; readonly min: 0; readonly max: 12; readonly step: 0.01; readonly default: 5.5; readonly hint: "How high the sea sits under the camera."; }; readonly fog: { readonly slot: "d"; readonly label: "Fog"; readonly min: 3; readonly max: 40; readonly step: 0.1; readonly default: 15; readonly hint: "How far you see before the horizon colour takes over."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly gossamer: { readonly name: "Gossamer"; readonly tagline: "Layers of fine thread, twisted about the centre and turning"; readonly description: "A stack of layers, each a field of fine parallel threads bent by a wave and twisted about the centre, every layer half as bright as the one before and on its own clock, so the threads drift over one another without repeating. A soft haze lies between them in the second colour, a pool of light sits at the heart of the cloth, and the whole weave turns slowly. Bloomed, so the threads bleed the way a cobweb does with the light behind it."; readonly family: "light"; readonly tags: readonly ["threads", "glow", "ambient", "dark", "hero", "calm"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly min: 0.3; readonly max: 3; readonly default: 1; readonly hint: "Size of the weave. Lower is broader threads, further apart."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1; readonly hint: "Exposure of the threads. Push it and a pile of them goes pale."; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Twist"; readonly min: 0; readonly max: 2; readonly default: 1; readonly hint: "How far the threads wind about the centre. 0 leaves them straight."; readonly slot: "warp"; readonly step: 0.01; }; readonly layers: { readonly slot: "a"; readonly label: "Layers"; readonly min: 1; readonly max: 8; readonly step: 1; readonly default: 4; readonly hint: "How many sheets of thread are stacked. Each is half as bright as the last."; }; readonly wave: { readonly slot: "b"; readonly label: "Wave"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "How much each sheet is folded before it is drawn."; }; readonly sharpness: { readonly slot: "c"; readonly label: "Sharpness"; readonly min: 1; readonly max: 40; readonly step: 0.5; readonly default: 16; readonly hint: "How thin each thread is drawn. Low is ribbon, high is hair."; }; readonly haze: { readonly slot: "d"; readonly label: "Haze"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "The soft light between the threads, in the haze colour."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Ghost"; readonly colorA: "#6f7fd9"; readonly colorB: "#2a2f9e"; readonly colorC: "#0c0a14"; }, { readonly name: "Ember"; readonly colorA: "#d9884a"; readonly colorB: "#8a2a12"; readonly colorC: "#120503"; }, { readonly name: "Moss"; readonly colorA: "#8fc97a"; readonly colorB: "#1f6b3a"; readonly colorC: "#04110a"; }, { readonly name: "Orchid"; readonly colorA: "#c47ad9"; readonly colorB: "#5a1f8a"; readonly colorC: "#12061c"; }]; }; readonly basalt: { readonly name: "Basalt"; readonly tagline: "Black-stone terraces with warm light in the seams"; readonly description: "Broad black-stone terraces recede diagonally through a dark studio, leaving a quiet field on the left. Thin warm lights trace the foot of selected steps and climb their corners, casting soft reflections across finely textured treads. A long-lens camera keeps the slabs architectural, with a gentle bounded drift and slow light pulses. Tune the slab size, relief, light coverage, sheen and haze; move the pointer to brighten nearby seams. The scene uses antialiased meshes, depth of field, HDR bloom and tone mapping."; readonly family: "spatial"; readonly tags: readonly ["3d", "stone", "glow", "architecture", "interactive", "pointer", "dark", "hero"]; readonly cost: "heavy"; readonly controls: { readonly columns: { readonly slot: "e"; readonly label: "Columns (X)"; readonly min: 0.5; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.85, 1.2]; readonly hint: "Slab density across the floor. Higher makes more, narrower columns."; }; readonly rows: { readonly slot: "f"; readonly label: "Rows (depth)"; readonly min: 0.5; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly randomRange: readonly [0.85, 1.2]; readonly hint: "Slab density into the scene, independent of columns."; }; readonly layout: { readonly slot: "g"; readonly label: "Layout seed"; readonly min: 0; readonly max: 99; readonly step: 1; readonly default: 0; readonly randomRange: readonly [0, 99]; readonly hint: "Rearranges terraces and drops from foreground to distance. 0 is the reference layout."; }; readonly speed: { readonly default: 1; readonly max: 2; readonly randomRange: readonly [0.65, 1.2]; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly min: 0.4; readonly max: 2.5; readonly default: 1; readonly hint: "Size of a slab. Lower is a floor of small pavers, higher a few great blocks."; readonly randomRange: readonly [0.9, 1.1]; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1; readonly hint: "Exposure of the stone and illuminated seams together."; readonly randomRange: readonly [0.85, 1.1]; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; }; readonly vibrancy: { readonly default: 1; readonly randomRange: readonly [0.8, 1.05]; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.35; readonly randomRange: readonly [0.25, 0.4]; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Step height"; readonly min: 0; readonly max: 2; readonly default: 1; readonly hint: "How far a terrace steps up from the next. 0 lays the floor flat, leaving fine unlit joints."; readonly randomRange: readonly [0.8, 1.05]; readonly slot: "warp"; readonly step: 0.01; }; readonly lit: { readonly slot: "a"; readonly label: "Lit"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "How many of the steps carry a strip of light. 1 lights every one."; readonly randomRange: readonly [0.35, 0.48]; }; readonly pulse: { readonly slot: "b"; readonly label: "Pulse"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "How much the light travels along a strip. 0 holds it steady."; readonly randomRange: readonly [0.25, 0.75]; }; readonly sheen: { readonly slot: "c"; readonly label: "Sheen"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The satin of the stone: the gloss a dim key light lays over the tops, and how much of a lit riser the tread in front reflects."; readonly randomRange: readonly [0.7, 1]; }; readonly haze: { readonly slot: "d"; readonly label: "Haze"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How soon the far slabs fall into the dark."; readonly randomRange: readonly [0.85, 1.2]; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Ember"; readonly colorA: "#fff1dc"; readonly colorB: "#1b1b1f"; readonly colorC: "#d9924f"; }, { readonly name: "Glacier"; readonly colorA: "#e4f3ff"; readonly colorB: "#0e1218"; readonly colorC: "#4f8fd9"; }, { readonly name: "Verdigris"; readonly colorA: "#e9ffee"; readonly colorB: "#0f1512"; readonly colorC: "#4fd98a"; }, { readonly name: "Rose"; readonly colorA: "#ffe6ee"; readonly colorB: "#18111a"; readonly colorC: "#d94f8a"; }]; }; readonly meadow: { readonly name: "Meadow"; readonly tagline: "Wind through silver grass above a misty valley"; readonly description: "Pale seed heads bend in rolling wind above an olive meadow. Layered mountain ridges and wooded slopes disappear into low golden mist beneath a clouded sunrise. A multi-pass HDR bloom catches the sun and the grass tips."; readonly family: "scene"; readonly tags: readonly ["hero", "grass", "landscape", "pointer"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.65; readonly max: 2; readonly randomRange: readonly [0.35, 1.2]; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 2; readonly randomRange: readonly [1.65, 2.85]; readonly hint: "Grass size. Lower is closer."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.12; readonly randomRange: readonly [0.05, 0.28]; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly intensity: { readonly randomRange: readonly [0.8, 1.2]; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly randomRange: readonly [0.8, 1.18]; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly flowers: { readonly randomRange: readonly [0.85, 1.65]; readonly slot: "a"; readonly label: "Density"; readonly min: 0.4; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How densely the silver grass grows."; }; readonly wind: { readonly randomRange: readonly [0.25, 1.3]; readonly slot: "b"; readonly label: "Wind"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.7; readonly hint: "How far the stems lean and recover."; }; readonly sun: { readonly randomRange: readonly [0.65, 1.3]; readonly slot: "c"; readonly label: "Sun"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The warm light pooling behind the field."; }; readonly focus: { readonly randomRange: readonly [0.25, 1.1]; readonly slot: "d"; readonly label: "Blur"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly hint: "Depth of field. 0 is everything sharp."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Golden hour"; readonly colorA: "#7c8991"; readonly colorB: "#414d27"; readonly colorC: "#f8cd87"; }, { readonly name: "Dawn"; readonly colorA: "#8a7ba8"; readonly colorB: "#33294a"; readonly colorC: "#ffc9d9"; }, { readonly name: "Noon"; readonly colorA: "#79a8d9"; readonly colorB: "#2e6b3a"; readonly colorC: "#fff0c4"; }, { readonly name: "Dusk"; readonly colorA: "#33305e"; readonly colorB: "#1d2a33"; readonly colorC: "#ff8a5c"; }]; }; readonly "pixel-isle": { readonly name: "Pixel Isle"; readonly tagline: "A pixel island with sandy shores and turquoise surf"; readonly description: "A procedural pixel-art island in a blue sea. Turquoise shallows wrap a broad sandy beach, grass grows in mottled patches, and shaded boulders gather on the rocky interior. Broken foam follows the coast while small wave crests drift offshore. Each seed changes the layout: a lone island, a pair, or a scattered archipelago."; readonly family: "pixel"; readonly tags: readonly ["pixel", "retro", "island", "map"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1.1; readonly hint: "Island size in the frame. Lower fills it."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.55; readonly max: 1.5; readonly hint: "Coastline character. More is more ragged."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; }; readonly pixels: { readonly slot: "a"; readonly label: "Pixels"; readonly min: 40; readonly max: 240; readonly step: 1; readonly default: 220; readonly hint: "Cells down the canvas height. Fewer is chunkier."; }; readonly sea: { readonly slot: "b"; readonly label: "Sea level"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.42; readonly hint: "How much of the island the water takes back."; }; readonly foam: { readonly slot: "c"; readonly label: "Surf"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The waves marching in and the foam line they feed."; }; readonly seed: { readonly slot: "d"; readonly label: "Seed"; readonly min: 0; readonly max: 40; readonly step: 1; readonly default: 7; readonly hint: "Island count, placement, size and coastline. Every seed draws a new map."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Tropical"; readonly colorA: "#195d94"; readonly colorB: "#99b666"; readonly colorC: "#f2dfac"; }, { readonly name: "Fjord"; readonly colorA: "#1d3a44"; readonly colorB: "#5c7d40"; readonly colorC: "#b8a883"; }, { readonly name: "Autumn"; readonly colorA: "#283a66"; readonly colorB: "#b07a35"; readonly colorC: "#d9b98a"; }, { readonly name: "Arctic"; readonly colorA: "#2c4a72"; readonly colorB: "#7d8f6e"; readonly colorC: "#a8adb5"; }]; }; readonly voronoi: { readonly name: "Voronoi"; readonly tagline: "Animated cells with lit edges"; readonly description: "Angular cells with lit edges, each tinted its own shade and darkest at its middle. The cells slide against each other as their seeds travel, so every border re-cuts continuously. Crystalline rather than organic."; readonly family: "geometric"; readonly tags: readonly ["cells", "crystal", "structured"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.55; readonly min: 0.15; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly jitter: { readonly slot: "a"; readonly label: "Jitter"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.85; readonly hint: "How far each seed wanders. 0 gives a rigid grid."; }; readonly edge: { readonly slot: "b"; readonly label: "Edge width"; readonly min: 0.005; readonly max: 0.3; readonly step: 0.005; readonly default: 0.06; readonly hint: "Thickness of the lit ridge between neighbouring cells."; }; readonly depth: { readonly slot: "c"; readonly label: "Cell depth"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "Darkening from the seed outwards. Makes the cells read as facets."; }; readonly drift: { readonly slot: "d"; readonly label: "Hue drift"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Speed at which cell tints walk along the palette."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly dunes: { readonly name: "Dunes"; readonly tagline: "A sand sea crawling downwind, crests picked out in light"; readonly description: "A sand sea drawn in points of light, crawling downwind. The crests are knife ridges that take the accent colour along their spines while the slip faces stay dark, and fine ripples ride over the much larger forms that carry them."; readonly family: "particles"; readonly tags: readonly ["particles", "3d", "hero", "landscape", "calm"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly hint: "Dune size. Lower is bigger weather."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1.35; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.05; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Meander"; readonly min: 0; readonly max: 2; readonly default: 0.7; readonly hint: "How much the dune belts snake instead of running in ruler lines."; readonly slot: "warp"; readonly step: 0.01; }; readonly ridge: { readonly slot: "a"; readonly label: "Ridge"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "0 is soft hills, 1 is sharp slip faces."; }; readonly wind: { readonly slot: "b"; readonly label: "Wind"; readonly min: -2; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly hint: "Drift of the whole sand sea. Negative reverses it."; }; readonly crest: { readonly slot: "c"; readonly label: "Crest glow"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The accent colour along the ridge spines."; }; readonly ripples: { readonly slot: "d"; readonly label: "Ripples"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "The fine wind ripples riding the dune faces."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Moonlit"; readonly colorA: "#1a1428"; readonly colorB: "#8a5fb8"; readonly colorC: "#ffd9a8"; }, { readonly name: "Sahara"; readonly colorA: "#2b1a10"; readonly colorB: "#c98544"; readonly colorC: "#ffe8bd"; }, { readonly name: "Ash"; readonly colorA: "#131417"; readonly colorB: "#5d6672"; readonly colorC: "#e6ecf2"; }, { readonly name: "Mars"; readonly colorA: "#200c08"; readonly colorB: "#a83f22"; readonly colorC: "#ffb37a"; }]; }; readonly starfield: { readonly name: "Starfield"; readonly tagline: "A warp corridor of depth-sorted stars"; readonly description: "Travel through layers of stars above a faint, distant sky. Foreground stars brighten and stretch along the direction of flight, while fine background points turn slowly with the camera. A soft glow marks the vanishing point; raise Streak for longer warp trails."; readonly family: "spatial"; readonly tags: readonly ["space", "motion", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.69; readonly max: 4; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 2.03; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1.44; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 0.44; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.672; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly brightness: { readonly slot: "a"; readonly label: "Star size"; readonly min: 0.1; readonly max: 3; readonly step: 0.01; readonly default: 2.01; readonly hint: "Radius of each star's falloff."; }; readonly streak: { readonly slot: "b"; readonly label: "Streak"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.63; readonly hint: "Radial motion blur. 0 is point stars, 1 is long warp trails."; }; readonly core: { readonly slot: "c"; readonly label: "Core glow"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1.04; readonly hint: "Light at the vanishing point."; }; readonly roll: { readonly slot: "d"; readonly label: "Roll"; readonly min: -3; readonly max: 3; readonly step: 0.01; readonly default: -2.93; readonly hint: "Camera roll around the direction of travel."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly ripple: { readonly name: "Ripple"; readonly tagline: "Interference between travelling circular waves"; readonly description: "Circular waves from several travelling sources cross into a standing interference pattern, with bright ridges where the fronts meet and flares where they focus. The colour bends along the slope of the water, so it reads as a surface rather than as stacked stripes."; readonly family: "organic"; readonly tags: readonly ["water", "interference", "calm"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.48; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.22; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 0.65; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 2; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly frequency: { readonly slot: "a"; readonly label: "Frequency"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 2.8; readonly hint: "Wavelength of every source. High values give fine ripples."; }; readonly spread: { readonly slot: "b"; readonly label: "Source spread"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.3; readonly hint: "How far the sources orbit from the centre."; }; readonly refraction: { readonly slot: "c"; readonly label: "Refraction"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "How much the wave slope bends the colour lookup."; }; readonly caustics: { readonly slot: "d"; readonly label: "Caustics"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.28; readonly hint: "Bright highlights where wavefronts cancel."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly louvres: { readonly name: "Louvres"; readonly tagline: "A gradient behind a run of slats, lit where the hand is"; readonly description: "A three-stop gradient laid across the frame at an angle and cut into a run of slats, each shaded across its own width like a louvre turned toward the light. A spotlight rides on the pointer: inside it the gradient shows through, outside it the slats fall to dark. The gradient drifts slowly along its own axis, and the bend control puts a gentle sine through the whole run."; readonly family: "gradient"; readonly tags: readonly ["stripes", "interactive", "pointer", "background", "hero"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1.6; readonly max: 2; readonly hint: "How fast the gradient drifts along the slats. 0 holds it still."; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; }; readonly scale: { readonly min: 0.5; readonly max: 4; readonly default: 1.18; readonly hint: "How many times the gradient runs across the frame. It mirrors, so it never jumps."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly max: 2; readonly default: 0.72; readonly hint: "Brightness of the spotlight. 0 leaves only the gradient on the slats; 1 burns the centre white."; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly step: 0.01; }; readonly vibrancy: { readonly default: 0.52; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.49; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Bend"; readonly min: 0; readonly max: 3; readonly default: 1.3; readonly hint: "A slow sine through the slats. 0 keeps them straight."; readonly slot: "warp"; readonly step: 0.01; }; readonly slats: { readonly slot: "a"; readonly label: "Slats"; readonly min: 2; readonly max: 48; readonly step: 1; readonly default: 13; readonly hint: "How many slats cut the gradient."; }; readonly angle: { readonly slot: "b"; readonly label: "Angle"; readonly min: 0; readonly max: 180; readonly step: 1; readonly default: 143; readonly hint: "The tilt of the slats, in degrees. 0 is upright."; }; readonly spotlight: { readonly slot: "c"; readonly label: "Spotlight"; readonly min: 0.1; readonly max: 1.5; readonly step: 0.01; readonly default: 0.68; readonly hint: "Radius of the lit circle around the pointer."; }; readonly softness: { readonly slot: "d"; readonly label: "Softness"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1.13; readonly hint: "How the light falls off toward the edge of the circle. Low is a hard disc, high is a glow."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Lagoon"; readonly colorA: "#00e5c3"; readonly colorB: "#2f7cff"; readonly colorC: "#6b2bff"; }, { readonly name: "Sunset"; readonly colorA: "#ff9a5c"; readonly colorB: "#ff4fa3"; readonly colorC: "#5a2bff"; }, { readonly name: "Candy"; readonly colorA: "#ff9ffc"; readonly colorB: "#c56cff"; readonly colorC: "#5227ff"; }, { readonly name: "Citrus"; readonly colorA: "#fff275"; readonly colorB: "#ff8c42"; readonly colorC: "#d63b3b"; }]; }; readonly truchet: { readonly name: "Truchet"; readonly tagline: "Quarter-arc tiles that flip in place"; readonly description: "Quarter-circle arcs on a black ground, joining tile to tile into one continuous maze. Each tile flips on its own clock, so the maze rewires itself while the whole field pans and turns. Hard-edged line art with no soft wash anywhere."; readonly family: "geometric"; readonly tags: readonly ["lines", "pattern", "graphic"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.5; readonly min: 0.1; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly weight: { readonly slot: "a"; readonly label: "Stroke weight"; readonly min: 0.1; readonly max: 2; readonly step: 0.01; readonly default: 0.5; readonly hint: "Thickness of each arc."; }; readonly flip: { readonly slot: "b"; readonly label: "Flip chance"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How often tiles change orientation. 0 freezes the maze."; }; readonly pan: { readonly slot: "c"; readonly label: "Pan"; readonly min: -3; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Sideways drift of the whole tiling."; }; readonly rotate: { readonly slot: "d"; readonly label: "Rotate"; readonly min: -3; readonly max: 3; readonly step: 0.01; readonly default: 0.5; readonly hint: "Slow rotation of the tile grid."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly kaleidoscope: { readonly name: "Kaleidoscope"; readonly tagline: "Polar mirror folding over a drifting field"; readonly description: "A radial rosette: one wedge of a drifting field mirrored around the centre into a symmetric flower of colour and rings. The pattern breathes and turns slowly. Segment count changes the character completely."; readonly family: "geometric"; readonly tags: readonly ["symmetry", "polar", "hypnotic"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.3; readonly max: 1.5; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; readonly hint: "How far the field is pushed around before it is sampled."; }; readonly segments: { readonly slot: "a"; readonly label: "Segments"; readonly min: 2; readonly max: 24; readonly step: 1; readonly default: 8; readonly hint: "Number of mirrored wedges. Even counts feel more ordered."; }; readonly rings: { readonly slot: "b"; readonly label: "Rings"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Frequency of the concentric ring pattern."; }; readonly blend: { readonly slot: "c"; readonly label: "Ring blend"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly hint: "How strongly the rings modulate the palette lookup."; }; readonly spin: { readonly slot: "d"; readonly label: "Spin"; readonly min: -3; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Rotation of the whole kaleidoscope."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly halftone: { readonly name: "Halftone"; readonly tagline: "A duotone image reproduced as a rotated dot screen"; readonly description: "A two-colour picture reproduced as a screen of dots on a rotated grid, dense in the shadows and open in the highlights, exactly as a printing plate lays ink down. Screen angle and dot pitch matter more here than any colour choice."; readonly family: "texture"; readonly tags: readonly ["print", "duotone", "editorial"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.4; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly pitch: { readonly slot: "a"; readonly label: "Dot pitch"; readonly min: 3; readonly max: 40; readonly step: 0.5; readonly default: 9; readonly hint: "Distance between dot centres, in device pixels."; }; readonly softness: { readonly slot: "b"; readonly label: "Dot softness"; readonly min: 0.005; readonly max: 0.4; readonly step: 0.005; readonly default: 0.03; readonly hint: "Edge blur on each dot. Keep low for a real print look."; }; readonly angle: { readonly slot: "c"; readonly label: "Screen angle"; readonly min: 0; readonly max: 1; readonly step: 0.005; readonly default: 0.25; readonly hint: "Rotation of the screen, in half-turns."; }; readonly gamma: { readonly slot: "d"; readonly label: "Ink gamma"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Bias of the coverage curve — how quickly dots fill in."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly tunnel: { readonly name: "Tunnel"; readonly tagline: "A corridor flying past lit rings"; readonly description: "A corrugated corridor seen from inside, curving away into the dark, with bright rings passing overhead at regular intervals. The camera flies forward continuously. The most expensive shader here, and the only one with real depth."; readonly family: "spatial"; readonly tags: readonly ["raymarching", "3d", "motion"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 3; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.45; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly radius: { readonly slot: "a"; readonly label: "Radius"; readonly min: 0.3; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Width of the corridor."; }; readonly ribs: { readonly slot: "b"; readonly label: "Ribs"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Corrugation of the tunnel wall."; }; readonly rings: { readonly slot: "c"; readonly label: "Ring light"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.5; readonly hint: "Brightness of the emissive rings passing by."; }; readonly fog: { readonly slot: "d"; readonly label: "Fog"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "How quickly the far end of the corridor disappears."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly julia: { readonly name: "Julia"; readonly tagline: "A morphing fractal ringed with colour bands"; readonly description: "A fractal caught between a solid body and a cloud of dust, ringed by tight bands of colour that crowd toward its edge. The shape morphs continuously between the two states, so it is never static and never repeats."; readonly family: "fractal"; readonly tags: readonly ["mathematical", "detail", "zoom"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.35; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1.15; readonly min: 0.2; readonly max: 6; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1.45; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly seed: { readonly slot: "a"; readonly label: "Seed radius"; readonly min: 0.6; readonly max: 1.25; readonly step: 0.005; readonly default: 0.86; readonly hint: "Distance of the orbiting seed from the origin. Near 1 is the interesting band."; }; readonly bias: { readonly slot: "b"; readonly label: "Seed bias"; readonly min: 0; readonly max: 1; readonly step: 0.005; readonly default: 0.5; readonly hint: "Shifts the seed along the real axis, changing the family of shapes."; }; readonly banding: { readonly slot: "c"; readonly label: "Banding"; readonly min: 0.1; readonly max: 4; readonly step: 0.01; readonly default: 1; readonly hint: "How many colour bands the escape count is spread across."; }; readonly rotate: { readonly slot: "d"; readonly label: "Rotate"; readonly min: -3; readonly max: 3; readonly step: 0.01; readonly default: 0.5; readonly hint: "Rotation of the viewing plane."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly silk: { readonly name: "Silk"; readonly tagline: "A sheen running across folded fibres"; readonly description: "Dense parallel fibres bent into wide folds, with a directional sheen that lights the ridges and darkens the creases. It reads as cloth catching the light rather than as liquid."; readonly family: "organic"; readonly tags: readonly ["fabric", "soft", "luxury"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1.16; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.41; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 0.72; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 0.51; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.7; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.52; readonly max: 1.5; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; readonly hint: "How far the field is pushed around before it is sampled."; }; readonly weave: { readonly slot: "a"; readonly label: "Weave"; readonly min: 0.1; readonly max: 3; readonly step: 0.01; readonly default: 2.71; readonly hint: "Density of the fibre lines."; }; readonly bend: { readonly slot: "b"; readonly label: "Bend"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.12; readonly hint: "How far the folds displace the fibres."; }; readonly sheen: { readonly slot: "c"; readonly label: "Sheen"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.3; readonly hint: "Strength of the directional highlight."; }; readonly crease: { readonly slot: "d"; readonly label: "Crease"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 1.27; readonly hint: "Darkening in the valleys of the fold."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly "neon-grid": { readonly name: "Neon Grid"; readonly tagline: "Perspective floor, banded sun, horizon haze"; readonly description: "A cyan grid running back to a horizon under a banded sun, with a haze band welding the floor to the sky. Synthwave played straight rather than ironically."; readonly family: "spatial"; readonly tags: readonly ["synthwave", "retro", "horizon"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.7; readonly max: 3; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vibrancy: { readonly default: 1.15; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly density: { readonly slot: "a"; readonly label: "Grid density"; readonly min: 0.2; readonly max: 4; readonly step: 0.01; readonly default: 1; readonly hint: "Number of grid cells across the floor."; }; readonly travel: { readonly slot: "b"; readonly label: "Travel"; readonly min: -4; readonly max: 4; readonly step: 0.01; readonly default: 1; readonly hint: "Speed the floor moves towards you. Negative reverses it."; }; readonly haze: { readonly slot: "c"; readonly label: "Haze"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.5; readonly hint: "Glow along the horizon line."; }; readonly sun: { readonly slot: "d"; readonly label: "Sun glow"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Bloom around the sun disc."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly bokeh: { readonly name: "Bokeh"; readonly tagline: "Out-of-focus lights drifting through depth"; readonly description: "Out-of-focus lights drifting in depth, each a soft disc with a brighter rim, which is how a fast lens renders a highlight it cannot resolve. Near discs are large and bright, far ones small and dim, so the field reads as depth instead of as flat circles."; readonly family: "spatial"; readonly tags: readonly ["lights", "depth", "festive"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.5; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.45; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly size: { readonly slot: "a"; readonly label: "Aperture"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Size of every out-of-focus disc."; }; readonly edge: { readonly slot: "b"; readonly label: "Edge"; readonly min: 0.02; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "How soft the disc edge is. Low values give hard, ringed bokeh."; }; readonly rim: { readonly slot: "c"; readonly label: "Rim"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Brightness of the ring at the edge of each disc."; }; readonly density: { readonly slot: "d"; readonly label: "Density"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Overall weight of every layer."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly dither: { readonly name: "Dither"; readonly tagline: "Flat colour and a visible dot pattern"; readonly description: "The layer crushed down to a few flat colours and screened through a coarse, visible dot pattern, with chunky pixel steps and no smoothing anywhere. Deliberately low-fi."; readonly family: "texture"; readonly tags: readonly ["lofi", "pixel", "poster"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.15; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly pixel: { readonly slot: "a"; readonly label: "Pixel size"; readonly min: 1; readonly max: 12; readonly step: 1; readonly default: 3; readonly hint: "Size of one output pixel, in device pixels."; }; readonly levels: { readonly slot: "b"; readonly label: "Levels"; readonly min: 2; readonly max: 12; readonly step: 1; readonly default: 4; readonly hint: "How many tones survive quantisation."; }; readonly sweep: { readonly slot: "c"; readonly label: "Sweep"; readonly min: -2; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Vertical gradient added to the source image."; }; readonly spread: { readonly slot: "d"; readonly label: "Dither spread"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Weight of the Bayer threshold. 0 gives hard banding."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly "mesh-gradient": { readonly name: "Mesh Gradient"; readonly tagline: "Flowing colour spots under swirl and noise"; readonly description: "Four soft colour spots drift on slow orbits and melt into one another, with a swirl at the centre that fades toward the edges and a gentle bend over the whole frame. The midpoints stay vivid instead of greying out. The default for marketing surfaces and card backgrounds."; readonly family: "gradient"; readonly tags: readonly ["ambient", "background", "soft"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly default: 1; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Distortion"; readonly max: 1.5; readonly hint: "How far the simplex field bends the sampling domain."; readonly slot: "warp"; readonly min: 0; readonly step: 0.01; readonly default: 0.6; }; readonly swirl: { readonly slot: "a"; readonly label: "Swirl"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.7; readonly hint: "Rotation of the domain around the centre; decays toward the edges."; }; readonly scale: { readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly "film-grain": { readonly name: "Film Grain"; readonly tagline: "Stock grain, halation and scanlines over a slow wash"; readonly description: "A slow, almost featureless wash of colour buried in grain, with soft scanlines over it and a halo around anything bright. The colour separates a little at the edges, the way film stock does. At low strength it sits quietly behind text."; readonly family: "texture"; readonly tags: readonly ["analog", "overlay", "noise"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1.2; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 0.7; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 0.8; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.55; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly stock: { readonly slot: "a"; readonly label: "Stock grain"; readonly min: 0; readonly max: 0.6; readonly step: 0.005; readonly default: 0.14; readonly hint: "The main grain amount. This is the point of the shader."; }; readonly scanlines: { readonly slot: "b"; readonly label: "Scanlines"; readonly min: 0; readonly max: 0.6; readonly step: 0.005; readonly default: 0.08; readonly hint: "Horizontal line darkening."; }; readonly aberration: { readonly slot: "c"; readonly label: "Aberration"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.5; readonly hint: "Lateral split between the red and blue channels."; }; readonly "grain-size": { readonly slot: "d"; readonly label: "Grain size"; readonly min: 0.5; readonly max: 6; readonly step: 0.1; readonly default: 1.5; readonly hint: "Physical size of one grain cell, in device pixels."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly radiance: { readonly name: "Radiance"; readonly tagline: "Lamps in a dark room, traced to whatever they light"; readonly description: "A dark room with a few small lamps in it, and everything they light. Shadows are hard beside a small lamp and soft beside a near one, and turning bars sweep shadow blades across the floor. The pointer is the brightest lamp in the room, so moving it moves every shadow."; readonly family: "spatial"; readonly tags: readonly ["light", "shadow", "dark", "pointer"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.7; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1.1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly rays: { readonly slot: "a"; readonly label: "Rays"; readonly min: 3; readonly max: 48; readonly step: 1; readonly default: 24; readonly hint: "Directions each pixel samples. Low is streaky and cheap; high is smooth and is what costs."; }; readonly reach: { readonly slot: "b"; readonly label: "Reach"; readonly min: 0.05; readonly max: 1.5; readonly step: 0.01; readonly default: 0.42; readonly hint: "How far a lamp throws before the inverse square eats it."; }; readonly walls: { readonly slot: "c"; readonly label: "Walls"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Size of the bars that block light. 0 removes them and the shadows with them."; }; readonly skylight: { readonly slot: "d"; readonly label: "Skylight"; readonly min: 0; readonly max: 0.5; readonly step: 0.005; readonly default: 0.06; readonly hint: "Ambient floor, so the bars read as objects in a room rather than holes cut out of it."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly lumen: { readonly name: "Lumen"; readonly tagline: "A lattice of dots, each one a lamp and a wall at once"; readonly description: "A lattice of glowing dots on a coloured ground, where every dot both gives light and blocks it, so shadows run the full width of the frame. A wave decides which dots are lit; the dark ones stay in the picture as grey and keep casting."; readonly family: "geometric"; readonly tags: readonly ["light", "grid", "loader", "dark"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.3; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1.1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.45; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly rays: { readonly slot: "a"; readonly label: "Rays"; readonly min: 3; readonly max: 40; readonly step: 1; readonly default: 20; readonly hint: "Directions each pixel samples. Low is streaky and cheap; high is smooth and is what costs."; }; readonly dot: { readonly slot: "b"; readonly label: "Dot size"; readonly min: 0.02; readonly max: 0.45; readonly step: 0.005; readonly default: 0.16; readonly hint: "Radius of a dot, in cells. Big dots shadow more of the lattice than they light."; }; readonly lit: { readonly slot: "c"; readonly label: "Lit"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.25; readonly hint: "Share of the lattice that is emitting at any moment."; }; readonly reach: { readonly slot: "d"; readonly label: "Reach"; readonly min: 0.3; readonly max: 8; readonly step: 0.05; readonly default: 1.6; readonly hint: "How many cells a dot throws across before the inverse square eats it."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly beacon: { readonly name: "Beacon"; readonly tagline: "A triangle of LEDs on a floor that catches what they throw"; readonly description: "A triangle of LED strip glowing in the dark, with the round emitters visible along each edge and a widening reflection on the floor below. The halo holds its shape at any size and the LEDs stay round at any pixel density. Give two edges different colours and the floor picks up both."; readonly family: "geometric"; readonly tags: readonly ["hero", "neon", "dark", "pointer"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.8; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.3; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly leds: { readonly slot: "a"; readonly label: "LEDs"; readonly min: 2; readonly max: 40; readonly step: 1; readonly default: 13; readonly hint: "Emitters per edge. Few reads as a marquee, many as a strip."; }; readonly bleed: { readonly slot: "b"; readonly label: "Bleed"; readonly min: 0.004; readonly max: 0.2; readonly step: 0.002; readonly default: 0.04; readonly hint: "How far light carries off an edge. Small is a hard point, large is a wash."; }; readonly reflection: { readonly slot: "c"; readonly label: "Reflection"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.6; readonly hint: "How much of the triangle the floor gives back."; }; readonly chase: { readonly slot: "d"; readonly label: "Chase"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "0 holds every LED steady, 1 runs a pulse around the perimeter."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly orb: { readonly name: "Orb"; readonly tagline: "A liquid blob suspended in a sphere of glass"; readonly description: "A liquid blob suspended inside a glass sphere, lit like a studio object: highlights on the glass, refraction through it, and lobes melted into one soft body inside. Nothing has a hard edge. The pointer turns the studio, so the highlights travel across the glass."; readonly family: "organic"; readonly tags: readonly ["glass", "hero", "3d", "pointer"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.45; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Refraction"; readonly min: 0; readonly max: 2; readonly default: 0.75; readonly hint: "How hard the glass bends a ray. 0 is a clear shell, 2 is a heavy lens."; readonly slot: "warp"; readonly step: 0.01; }; readonly core: { readonly slot: "a"; readonly label: "Core"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.8; readonly hint: "0 is one round drop. 1 pulls the lobes apart and ripples the skin, so the body churns and pinches."; }; readonly dispersion: { readonly slot: "b"; readonly label: "Dispersion"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.45; readonly hint: "How far the red and blue ends part on the way out of the glass."; }; readonly lobes: { readonly slot: "c"; readonly label: "Lobes"; readonly min: 1; readonly max: 8; readonly step: 1; readonly default: 5; readonly hint: "Bodies melted into the blob. Each one costs a distance every step of the march."; }; readonly studio: { readonly slot: "d"; readonly label: "Studio"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Strength of the two softboxes the glass reflects."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly eyes: { readonly name: "Eyes"; readonly tagline: "A wall of eyes that look where the pointer goes"; readonly description: "A wall of eyes, each a pale almond of sclera around a coloured iris, blinking on its own clock. Move the pointer and every iris turns to follow it. With no pointer they wander, each on its own phase, so the frame is never a grid of dead centres."; readonly family: "geometric"; readonly tags: readonly ["interactive", "pointer", "playful"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly follow: { readonly slot: "a"; readonly label: "Follow"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.85; readonly hint: "0 lets every eye wander on its own, 1 locks them all onto the pointer."; }; readonly blink: { readonly slot: "b"; readonly label: "Blink"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Blink rate. 0 stares, which is worse."; }; readonly iris: { readonly slot: "c"; readonly label: "Iris"; readonly min: 0.4; readonly max: 1.6; readonly step: 0.01; readonly default: 1; readonly hint: "Size of the iris inside the almond."; }; readonly pupil: { readonly slot: "d"; readonly label: "Pupil"; readonly min: 0.15; readonly max: 0.9; readonly step: 0.01; readonly default: 0.45; readonly hint: "Pupil as a share of the iris. Big is dark-adapted, or alarmed."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly tesla: { readonly name: "Tesla"; readonly tagline: "A plasma globe whose filament reaches for your finger"; readonly description: "A plasma globe: bright filaments branch from a core out to the inside of the glass, wandering and then snapping to new headings. One filament always reaches for the pointer and stops at the glass, exactly what the real toy does when a hand touches the dome."; readonly family: "organic"; readonly tags: readonly ["interactive", "pointer", "dark", "hero"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.4; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Wiggle"; readonly min: 0; readonly max: 2; readonly default: 0.8; readonly hint: "How hard a filament thrashes as it travels. 0 is spokes."; readonly slot: "warp"; readonly step: 0.01; }; readonly bolts: { readonly slot: "a"; readonly label: "Bolts"; readonly min: 2; readonly max: 8; readonly step: 1; readonly default: 5; readonly hint: "Free-roaming filaments, not counting the one that seeks the pointer."; }; readonly glow: { readonly slot: "b"; readonly label: "Glow"; readonly min: 0.3; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Width of the halo riding each filament."; }; readonly flicker: { readonly slot: "c"; readonly label: "Flicker"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How often the bolts re-roll their heading."; }; readonly haze: { readonly slot: "d"; readonly label: "Haze"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "The gas glow filling the globe behind the filaments."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly magnet: { readonly name: "Magnet"; readonly tagline: "Field lines of three charges, one riding the pointer"; readonly description: "The field lines of three charges, drawn as smooth curves that fan out of each pole and loop into the next, over softly shaded equipotentials. The pointer carries the third charge, so dragging it re-routes every line on screen."; readonly family: "geometric"; readonly tags: readonly ["interactive", "pointer", "diagram"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly lines: { readonly slot: "a"; readonly label: "Lines"; readonly min: 4; readonly max: 48; readonly step: 1; readonly default: 14; readonly hint: "Field lines leaving each unit of charge."; }; readonly flow: { readonly slot: "b"; readonly label: "Flow"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "The phase sliding along the lines. 0 is a printed diagram."; }; readonly charge: { readonly slot: "c"; readonly label: "Charge"; readonly min: -2; readonly max: 2; readonly step: 1; readonly default: 1; readonly hint: "The pointer's charge. Whole numbers only — the picture tears otherwise. 0 removes it."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly torch: { readonly name: "Torch"; readonly tagline: "A light in your hand, moving over rock in the dark"; readonly description: "Rough rock in the dark, with a light in your hand. Crevices light up and fall dark as the pointer passes over them, so the surface reads as carved rather than printed. The flame gutters on a slow breathe under a fast sputter, and dust drifts through the beam."; readonly family: "spatial"; readonly tags: readonly ["interactive", "pointer", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.5; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Relief"; readonly min: 0; readonly max: 2.5; readonly default: 1; readonly hint: "Steepness of the rock. It scales the slope, not the texture."; readonly slot: "warp"; readonly step: 0.01; }; readonly beam: { readonly slot: "a"; readonly label: "Beam"; readonly min: 0.15; readonly max: 1.5; readonly step: 0.01; readonly default: 0.7; readonly hint: "Radius of the pool of light around the pointer."; }; readonly gutter: { readonly slot: "b"; readonly label: "Gutter"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How much the flame wavers. 0 is an LED."; }; readonly motes: { readonly slot: "c"; readonly label: "Motes"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Dust drifting through the beam."; }; readonly ambient: { readonly slot: "d"; readonly label: "Ambient"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "What little the dark still shows. 0 is a cave."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly parallax: { readonly name: "Parallax"; readonly tagline: "Ridgelines in depth, and the pointer moves the camera"; readonly description: "Ridgelines stacked into the distance, each a flat silhouette paler than the one in front, under a low sun. Move the pointer and the near ridge slides furthest, which turns the flat stack into a landscape you are standing in. The world scrolls slowly on its own."; readonly family: "organic"; readonly tags: readonly ["interactive", "pointer", "hero", "calm"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Jaggedness"; readonly min: 0.2; readonly max: 2; readonly default: 1; readonly hint: "How sharp the ridgelines cut. Low rolls, high tears."; readonly slot: "warp"; readonly step: 0.01; }; readonly height: { readonly slot: "b"; readonly label: "Height"; readonly min: 0.3; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Amplitude of the mountains against the sky."; }; readonly pan: { readonly slot: "c"; readonly label: "Pan"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How far the pointer swings the camera."; }; readonly sun: { readonly slot: "d"; readonly label: "Sun"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The low sun and the rim light it puts on every ridge."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly gravity: { readonly name: "Gravity"; readonly tagline: "A starfield lensed by a mass that rides the pointer"; readonly description: "A starfield behind a heavy mass: the stars smear into arcs around it, a bright ring stands at the lensing radius, and images double inside that ring. Dragging the pointer drags the whole distortion across the sky."; readonly family: "spatial"; readonly tags: readonly ["interactive", "pointer", "dark", "hero"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.8; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly mass: { readonly slot: "a"; readonly label: "Mass"; readonly min: 0.1; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "The Einstein radius. Everything else scales from it."; }; readonly ring: { readonly slot: "b"; readonly label: "Ring"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.9; readonly hint: "The photon ring, and the hot rim on the shadow's edge."; }; readonly grid: { readonly slot: "c"; readonly label: "Grid"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.25; readonly hint: "The spacetime grid, bent through the same lens. 0 hides it."; }; readonly stars: { readonly slot: "d"; readonly label: "Stars"; readonly min: 0.2; readonly max: 1.6; readonly step: 0.01; readonly default: 1; readonly hint: "Density of the field behind the lens."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly particles: { readonly name: "Particles"; readonly tagline: "A hundred thousand embers riding a wind you can bend"; readonly description: "A hundred thousand embers riding a turbulent wind, drawn as a long exposure that never quite forgets — the trails are history and the colour is speed. The streams braid and circulate instead of pooling. The pointer is a vortex that gathers the swarm; push its charge below zero and it scatters instead."; readonly family: "compute"; readonly tags: readonly ["simulation", "interactive", "pointer", "hero", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1.92; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 2.27; readonly min: 0.3; readonly max: 2.5; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 2.46; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.81; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Turbulence"; readonly min: 0; readonly max: 2; readonly default: 0.1; readonly hint: "Strength of the wind. 0 lets the pointer do all the work."; readonly slot: "warp"; readonly step: 0.01; }; readonly count: { readonly slot: "a"; readonly label: "Count"; readonly min: 0.05; readonly max: 1; readonly step: 0.01; readonly default: 0.45; readonly hint: "Share of the 131,072 particles that fly. More is denser and softer."; }; readonly trail: { readonly slot: "b"; readonly label: "Trail"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.5; readonly hint: "How long the exposure remembers. 0 is dots, 1 is light painting."; }; readonly pull: { readonly slot: "c"; readonly label: "Pull"; readonly min: -2; readonly max: 2; readonly step: 0.01; readonly default: 0.09; readonly hint: "The pointer's charge. Positive gathers the swarm, negative scatters it."; }; readonly glow: { readonly slot: "d"; readonly label: "Glow"; readonly min: 0.1; readonly max: 2; readonly step: 0.01; readonly default: 0.69; readonly hint: "Energy each particle deposits as it passes."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly fluid: { readonly name: "Fluid"; readonly tagline: "Ink in water that answers the pointer"; readonly description: "Ink in water. Drag the pointer and colour lays down in one unbroken stroke, then curls and frays into the whirls a real stroke leaves behind. Leave it alone and the surface breathes, throwing slow plumes of its own."; readonly family: "compute"; readonly tags: readonly ["simulation", "interactive", "pointer", "hero", "liquid"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.37; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly intensity: { readonly default: 0.9; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.41; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Swirl"; readonly min: 0; readonly max: 2; readonly default: 1.43; readonly hint: "Vorticity fed back into the field. High values curl every stroke into eddies."; readonly slot: "warp"; readonly step: 0.01; }; readonly splat: { readonly slot: "a"; readonly label: "Splat size"; readonly min: 0.05; readonly max: 1; readonly step: 0.01; readonly default: 1; readonly hint: "Radius of the ink and force the pointer lays down."; }; readonly fade: { readonly slot: "b"; readonly label: "Fade"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1.43; readonly hint: "How quickly the ink thins back to water."; }; readonly force: { readonly slot: "c"; readonly label: "Force"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 0.17; readonly hint: "How hard a pointer stroke pushes the water."; }; readonly plumes: { readonly slot: "d"; readonly label: "Plumes"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The idle state: gusts the fluid throws for itself when the pointer rests."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly cloth: { readonly name: "Cloth"; readonly tagline: "A sheet of silk in a wind, and the pointer is a hand"; readonly description: "A sheet of silk hanging from its top edge, billowing on a two-speed wind, with soft folds and a sheen running along the thread. The pointer carries an invisible ball: a slow hand presses a bulge into the sheet, a fast one throws a fold across the whole width."; readonly family: "compute"; readonly tags: readonly ["simulation", "interactive", "pointer", "fabric", "3d"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.77; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.82; readonly min: 0.4; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 0.63; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.48; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Wind"; readonly min: 0; readonly max: 2; readonly default: 0.04; readonly hint: "The gusts. 0 hangs dead still, 2 is a storm the pins barely survive."; readonly slot: "warp"; readonly step: 0.01; }; readonly sheen: { readonly slot: "b"; readonly label: "Sheen"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.29; readonly hint: "The highlight running along the threads. This is what makes it silk."; }; readonly reach: { readonly slot: "c"; readonly label: "Reach"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.7; readonly hint: "Size of the sphere the pointer presses into the sheet."; }; readonly drape: { readonly slot: "d"; readonly label: "Drape"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.37; readonly hint: "Weight of the fabric. Light chiffon flies, heavy velvet hangs."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly chladni: { readonly name: "Chladni"; readonly tagline: "A singing plate, mapped by the sand on its silent lines"; readonly description: "A square plate that sings, mapped by the bright points that gather on the lines which never move — the same way sand walks to the silence on a real vibrating plate. The figure ripples through zero as the plate rings, and sweeping the mode numbers re-solves one figure into the next instead of cutting."; readonly family: "particles"; readonly tags: readonly ["particles", "3d", "hero", "dark", "scientific"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.9; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly min: 0.4; readonly max: 2; readonly hint: "Zoom of the plate in the frame."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Ripple"; readonly min: 0; readonly max: 2; readonly default: 0.5; readonly hint: "A travelling wave from the driver at the centre, on top of the figure."; readonly slot: "warp"; readonly step: 0.01; }; readonly "mode-m": { readonly slot: "a"; readonly label: "Mode m"; readonly min: 1; readonly max: 9; readonly step: 1; readonly default: 3; readonly hint: "First mode number. The pair decides which figure the plate sings."; }; readonly "mode-n": { readonly slot: "b"; readonly label: "Mode n"; readonly min: 1; readonly max: 9; readonly step: 1; readonly default: 5; readonly hint: "Second mode number. Equal numbers cancel to a flat plate."; }; readonly sand: { readonly slot: "c"; readonly label: "Sand"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.1; readonly hint: "How brightly the nodal lines collect the accent colour."; }; readonly sweep: { readonly slot: "d"; readonly label: "Sweep"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly hint: "Drifts both mode numbers, morphing one figure into the next. 0 holds still."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Workshop"; readonly colorA: "#101b2e"; readonly colorB: "#3f6fde"; readonly colorC: "#f5e9c8"; }, { readonly name: "Oscilloscope"; readonly colorA: "#04140c"; readonly colorB: "#1fbf6e"; readonly colorC: "#d8ffe9"; }, { readonly name: "Rose"; readonly colorA: "#1d0f1e"; readonly colorB: "#b04a8f"; readonly colorC: "#ffd9e8"; }, { readonly name: "Heat"; readonly colorA: "#1a0d08"; readonly colorB: "#c2521f"; readonly colorC: "#ffe3a3"; }]; }; readonly "liquid-metal": { readonly name: "Liquid Metal"; readonly tagline: "Polished chrome, rippling"; readonly description: "Polished chrome, rippling. Banded reflections slide across the surface and a moving key light picks out the crests; the banding is what separates metal from plastic, so turn Polish up before you turn Strength up."; readonly family: "organic"; readonly tags: readonly ["chrome", "reflective", "premium"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.29; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.86; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 2.05; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 0.03; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.87; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.79; readonly max: 2; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; readonly hint: "How far the field is pushed around before it is sampled."; }; readonly relief: { readonly slot: "a"; readonly label: "Relief"; readonly min: 0.05; readonly max: 3; readonly step: 0.01; readonly default: 2.57; readonly hint: "Steepness of the surface. High values give a boiling, molten look."; }; readonly polish: { readonly slot: "b"; readonly label: "Polish"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.31; readonly hint: "Tightness of the specular highlight."; }; readonly body: { readonly slot: "c"; readonly label: "Body"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.18; readonly hint: "Weight of the environment reflection under the highlight."; }; readonly rim: { readonly slot: "d"; readonly label: "Rim"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.21; readonly hint: "Fresnel glow at grazing angles."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly maelstrom: { readonly name: "Maelstrom"; readonly tagline: "A whirlpool of particles, wound into the drain"; readonly description: "A whirlpool of points seen from the rim, its arms winding tighter as they near a funnel at the centre. The dots visibly circle the drain rather than bob on a waving floor, and froth rides the forward face of each arm and thickens toward the eye."; readonly family: "particles"; readonly tags: readonly ["particles", "3d", "hero", "dark", "motion"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.52; readonly max: 2.5; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1.76; readonly min: 0.4; readonly max: 2; readonly hint: "Zoom of the vortex in the frame."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 0.43; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 0.59; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.76; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Wander"; readonly min: 0; readonly max: 2; readonly default: 1.54; readonly hint: "How far the eye drifts from centre. 0 pins it like a screensaver."; readonly slot: "warp"; readonly step: 0.01; }; readonly arms: { readonly slot: "a"; readonly label: "Arms"; readonly min: 1; readonly max: 8; readonly step: 1; readonly default: 5; readonly hint: "Spiral arms wound into the funnel."; }; readonly twist: { readonly slot: "b"; readonly label: "Twist"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 2.84; readonly hint: "How tightly the arms wind. 0 makes straight spokes."; }; readonly churn: { readonly slot: "c"; readonly label: "Churn"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.56; readonly hint: "Broken water riding the arms, and the froth it feeds."; }; readonly depth: { readonly slot: "d"; readonly label: "Depth"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.54; readonly hint: "The funnel at the middle. 0 flattens the drain shut."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "North sea"; readonly colorA: "#0a1a24"; readonly colorB: "#1e8f9e"; readonly colorC: "#dffbff"; }, { readonly name: "Ink"; readonly colorA: "#0d0d16"; readonly colorB: "#4b3f9e"; readonly colorC: "#c9bfff"; }, { readonly name: "Lava"; readonly colorA: "#170a06"; readonly colorB: "#b8461c"; readonly colorC: "#ffd9a0"; }, { readonly name: "Lagoon"; readonly colorA: "#062621"; readonly colorB: "#17a884"; readonly colorC: "#e8fff2"; }]; }; readonly plasma: { readonly name: "Plasma"; readonly tagline: "Loud blobs of colour, cut by contour lines"; readonly description: "Big soft blobs of saturated colour, cut by thin contour lines and cycling continuously through the palette. Loud on purpose — the counterweight to the quiet gradients in this catalogue."; readonly family: "geometric"; readonly tags: readonly ["retro", "loud", "cycling"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 0.7; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.55; readonly min: 0.1; readonly max: 2; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vibrancy: { readonly default: 1.25; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly radial: { readonly slot: "a"; readonly label: "Radial"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Weight of the concentric ring field."; }; readonly swirl: { readonly slot: "b"; readonly label: "Swirl"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Rotation rate of the secondary interference field."; }; readonly interference: { readonly slot: "c"; readonly label: "Interference"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "How strongly the rotating field beats against the rest."; }; readonly cycles: { readonly slot: "d"; readonly label: "Colour cycles"; readonly min: 0.2; readonly max: 4; readonly step: 0.01; readonly default: 1; readonly hint: "Number of times the palette repeats across the field."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly pulsar: { readonly name: "Pulsar"; readonly tagline: "A breathing globe of particles that leans toward your cursor"; readonly description: "A globe of bright points hanging in the dark, breathing, its surface boiling slowly with no seam anywhere while bands of light sweep its latitudes. The pointer is a gentle gravity: the globe drifts that way and stretches into a soft teardrop, brightest on the side being pulled."; readonly family: "particles"; readonly tags: readonly ["particles", "3d", "interactive", "pointer", "hero", "space"]; readonly cost: "heavy"; readonly controls: { readonly speed: { readonly default: 0.66; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 0.92; readonly min: 0.5; readonly max: 1.6; readonly hint: "Size of the globe in the frame."; readonly slot: "scale"; readonly label: "Scale"; readonly step: 0.01; }; readonly intensity: { readonly default: 0.7; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly default: 1.1; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly vignette: { readonly default: 0.48; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Pull"; readonly min: 0; readonly max: 2; readonly default: 0.37; readonly hint: "How strongly the globe leans toward your cursor. 0 lets it rest."; readonly slot: "warp"; readonly step: 0.01; }; readonly bands: { readonly slot: "a"; readonly label: "Bands"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.45; readonly hint: "How many streaks of light sweep the latitudes."; }; readonly relief: { readonly slot: "b"; readonly label: "Relief"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.18; readonly hint: "The boiling surface. 0 is a perfect sphere."; }; readonly breath: { readonly slot: "c"; readonly label: "Breath"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.18; readonly hint: "The swell and settle of the whole globe."; }; readonly spin: { readonly slot: "d"; readonly label: "Spin"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1.02; readonly hint: "Rotation of the globe under the bands."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Verdant"; readonly colorA: "#08130c"; readonly colorB: "#1e7a4a"; readonly colorC: "#d9ffe8"; }, { readonly name: "Neutron"; readonly colorA: "#0b0d18"; readonly colorB: "#4a3d8f"; readonly colorC: "#c9e8ff"; }, { readonly name: "Ember"; readonly colorA: "#160b08"; readonly colorB: "#8f3d1e"; readonly colorC: "#ffd9a3"; }, { readonly name: "Signal"; readonly colorA: "#120812"; readonly colorB: "#8a2e7a"; readonly colorC: "#ffd0f5"; }]; }; readonly glass: { readonly name: "Glass"; readonly tagline: "A refracting, frosted sheet over the layer behind it"; readonly description: "A frosted, refracting sheet over whatever sits behind it. The layer bends along the slope of the glass, the red and blue ends pull apart, light catches along the steep ground, and the frost grains up instead of banding. Point it at an image, a video, or another shadertown shader."; readonly family: "optical"; readonly tags: readonly ["glass", "refraction", "overlay"]; readonly cost: "medium"; readonly defaultSource: "neon-grid"; readonly controls: { readonly speed: { readonly default: 0.35; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly default: 1; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Refraction"; readonly default: 0.8; readonly max: 2.5; readonly hint: "How far the sheet bends what is behind it."; readonly slot: "warp"; readonly min: 0; readonly step: 0.01; }; readonly frost: { readonly slot: "a"; readonly label: "Frost"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "Blur radius. Past about 0.6 the layer below stops being readable."; }; readonly dispersion: { readonly slot: "b"; readonly label: "Dispersion"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.25; readonly hint: "Colour fringing where the sheet is steepest, as in real glass."; }; readonly edge: { readonly slot: "c"; readonly label: "Edge light"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.6; readonly hint: "Highlight along the ridges. This is what makes it read as thick."; }; readonly tint: { readonly slot: "d"; readonly label: "Tint"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.15; readonly hint: "Pulls the whole sheet towards the palette. 0 leaves it colourless."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly lens: { readonly name: "Lens"; readonly tagline: "Barrel distortion, colour fringing and soft corners"; readonly description: "What a real lens does to a picture: straight lines bow outwards, colour fringes appear in the corners and nowhere in the middle, and the corners lose both light and sharpness. Set distortion below zero for the pincushion a long lens gives you instead."; readonly family: "optical"; readonly tags: readonly ["camera", "distortion", "retro"]; readonly cost: "medium"; readonly defaultSource: "neon-grid"; readonly controls: { readonly vignette: { readonly default: 0.15; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Distortion"; readonly min: -1; readonly max: 2; readonly default: 0.5; readonly hint: "Above zero bows outwards (barrel), below zero pulls inwards (pincushion)."; readonly slot: "warp"; readonly step: 0.01; }; readonly softness: { readonly slot: "a"; readonly label: "Corner softness"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "How far off the focal plane the corners sit."; }; readonly fringing: { readonly slot: "b"; readonly label: "Fringing"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "How far apart the red and blue ends are bent."; }; readonly zoom: { readonly slot: "c"; readonly label: "Zoom"; readonly min: 0.5; readonly max: 1.5; readonly step: 0.01; readonly default: 1; readonly hint: "Below 1 pulls back and shows the black outside the frame."; }; readonly falloff: { readonly slot: "d"; readonly label: "Corner falloff"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "Light lost towards the corners, as distortion spreads it thinner."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly bloom: { readonly name: "Bloom"; readonly tagline: "Light bleeding out of the bright parts of the layer below"; readonly description: "Light bleeding out of the bright parts of the layer below, spreading wide and keeping its colour, so a highlight glows rather than merely brightens. A dark neighbour never dims it. Streak stretches the glow sideways into the flare an anamorphic lens puts on every point of light."; readonly family: "optical"; readonly tags: readonly ["glow", "light", "hero"]; readonly cost: "heavy"; readonly defaultSource: "starfield"; readonly controls: { readonly vignette: { readonly default: 0.1; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Streak"; readonly min: 0; readonly max: 1; readonly default: 0.15; readonly hint: "Stretches the halo sideways. Small values read as a lens, large as a smear."; readonly slot: "warp"; readonly step: 0.01; }; readonly threshold: { readonly slot: "a"; readonly label: "Threshold"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.55; readonly hint: "How bright a pixel has to be before it blooms at all."; }; readonly radius: { readonly slot: "b"; readonly label: "Radius"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.5; readonly hint: "How far the light carries. Wide radii need bright, sparse sources."; }; readonly amount: { readonly slot: "c"; readonly label: "Amount"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly default: 1.2; readonly hint: "How much of the halo is added back on top."; }; readonly tint: { readonly slot: "d"; readonly label: "Tint"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.3; readonly hint: "Colours the halo from the palette. Real coatings are rarely neutral."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly shockwave: { readonly name: "Shockwave"; readonly tagline: "Expanding rings that shove the layer aside as they pass"; readonly description: "Rings expanding outward, shoving the layer aside as they pass and spending their force as they grow. The picture compresses ahead of each crest and pulls apart behind it, which is what makes it read as a wave rather than a glowing ring. Turn pointer tracking on and it starts wherever the cursor is."; readonly family: "distortion"; readonly tags: readonly ["impact", "pulse", "interactive"]; readonly cost: "medium"; readonly defaultSource: "truchet"; readonly controls: { readonly speed: { readonly default: 0.8; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly vignette: { readonly default: 0.15; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Force"; readonly min: 0; readonly max: 2; readonly default: 0.9; readonly hint: "How far the front shoves what it passes over."; readonly slot: "warp"; readonly step: 0.01; }; readonly reach: { readonly slot: "a"; readonly label: "Reach"; readonly min: 0.1; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How far a ring travels before it is spent."; }; readonly width: { readonly slot: "b"; readonly label: "Width"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "Thickness of the front. Thin is a crack, thick is a swell."; }; readonly decay: { readonly slot: "c"; readonly label: "Decay"; readonly min: 0.1; readonly max: 4; readonly step: 0.01; readonly default: 1.5; readonly hint: "How quickly a ring loses force. High values die close to the centre."; }; readonly fringing: { readonly slot: "d"; readonly label: "Fringing"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "Colour separation across the crest."; }; readonly scale: { readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly swirl: { readonly name: "Swirl"; readonly tagline: "A vortex that winds the layer around a point"; readonly description: "A vortex that winds the layer around a point: the middle turns hard, the edges stay put. Near a falloff of one it is a gentle whirlpool, near four a tight knot in still water. The colours wind by slightly different angles, which smears them along the spin."; readonly family: "distortion"; readonly tags: readonly ["vortex", "twist", "interactive"]; readonly cost: "light"; readonly defaultSource: "voronoi"; readonly controls: { readonly speed: { readonly default: 1; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly max: 3; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly vignette: { readonly default: 0.15; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Twist"; readonly min: 0; readonly max: 3; readonly default: 1.2; readonly hint: "Turns at the centre. Past about 2 the middle stops being readable."; readonly slot: "warp"; readonly step: 0.01; }; readonly radius: { readonly slot: "a"; readonly label: "Radius"; readonly min: 0.02; readonly max: 1.2; readonly step: 0.01; readonly default: 0.55; readonly hint: "How far the vortex reaches before the layer is untouched."; }; readonly falloff: { readonly slot: "b"; readonly label: "Falloff"; readonly min: 0.1; readonly max: 5; readonly step: 0.01; readonly default: 1.6; readonly hint: "Shape of the edge. Low is a wide whirlpool, high is a tight knot."; }; readonly spin: { readonly slot: "c"; readonly label: "Spin"; readonly min: -1; readonly max: 1; readonly step: 0.01; readonly default: 0.15; readonly hint: "Steady rotation over time. Negative winds the other way."; }; readonly smear: { readonly slot: "d"; readonly label: "Smear"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.3; readonly hint: "Colour trailing along the direction of travel."; }; readonly scale: { readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly flow: { readonly name: "Flow"; readonly tagline: "The layer pushed around by a slow, turbulent field"; readonly description: "The layer stirred by a slow, turbulent current, smearing along the direction of travel rather than in place, so it looks mixed instead of merely blurred. Turbulence trades broad lazy currents for stringy filaments."; readonly family: "distortion"; readonly tags: readonly ["liquid", "organic", "ambient"]; readonly cost: "heavy"; readonly defaultSource: "halftone"; readonly controls: { readonly speed: { readonly default: 0.5; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Strength"; readonly min: 0; readonly max: 2; readonly default: 0.7; readonly hint: "How far the field pushes the layer."; readonly slot: "warp"; readonly step: 0.01; }; readonly turbulence: { readonly slot: "a"; readonly label: "Turbulence"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "0 is broad lazy currents, 1 is sharp filaments."; }; readonly curl: { readonly slot: "b"; readonly label: "Curl"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.75; readonly hint: "Turns the drift into circulation. 0 pulls everything one way."; }; readonly smear: { readonly slot: "c"; readonly label: "Smear"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "Blur along the flow, which is what reads as motion."; }; readonly tint: { readonly slot: "d"; readonly label: "Tint"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.2; readonly hint: "Colours the fast water from the palette."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly duotone: { readonly name: "Duotone"; readonly tagline: "The layer's brightness read through your palette"; readonly description: "The layer's brightness read through your own palette: dark tones take the first colour, highlights the last, and the midtones walk between them. Keep colour mixes the original hues back in, for when a busy photograph should not become a flat poster."; readonly family: "image"; readonly tags: readonly ["colour", "poster", "brand"]; readonly cost: "light"; readonly defaultSource: "julia"; readonly controls: { readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly black: { readonly slot: "a"; readonly label: "Black point"; readonly min: 0; readonly max: 0.6; readonly step: 0.01; readonly default: 0.05; readonly hint: "Brightness that maps to the first colour. Raise it to crush shadows."; }; readonly white: { readonly slot: "b"; readonly label: "White point"; readonly min: 0.4; readonly max: 1; readonly step: 0.01; readonly default: 0.9; readonly hint: "Brightness that maps to the last colour. Lower it to blow highlights."; }; readonly contrast: { readonly slot: "c"; readonly label: "Contrast"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1.2; readonly hint: "Steepness of the ramp between the two points."; }; readonly keep: { readonly slot: "d"; readonly label: "Keep colour"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "Mixes the original chroma back over the mapped tone."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly edges: { readonly name: "Edges"; readonly tagline: "The layer reduced to its outlines"; readonly description: "The layer reduced to its outlines — drawn lines on a flat ground, thick enough to read at any size rather than hairlines that break up. Fill decides how much of the original shows under the ink, from a clean line drawing to a traced photograph."; readonly family: "image"; readonly tags: readonly ["outline", "line art", "technical"]; readonly cost: "medium"; readonly defaultSource: "truchet"; readonly controls: { readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly thickness: { readonly slot: "a"; readonly label: "Thickness"; readonly min: 0.5; readonly max: 6; readonly step: 0.1; readonly default: 1.5; readonly hint: "How far apart the kernel taps sit, in source texels."; }; readonly threshold: { readonly slot: "b"; readonly label: "Threshold"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.15; readonly hint: "How steep a gradient has to be to count as an edge."; }; readonly fill: { readonly slot: "c"; readonly label: "Fill"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "How much of the original shows under the lines."; }; readonly glow: { readonly slot: "d"; readonly label: "Glow"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.4; readonly hint: "Bleed off the line, which reads as ink rather than aliasing."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly mosaic: { readonly name: "Mosaic"; readonly tagline: "The layer rebuilt out of tiles"; readonly description: "The layer rebuilt out of hard-edged tiles, each one a single flat colour from a cut-back palette, so it looks assembled from a limited set rather than merely coarse. Roundness turns the tiles into dots that grow with brightness, the way a printed screen does."; readonly family: "image"; readonly tags: readonly ["pixelate", "print", "retro"]; readonly cost: "light"; readonly defaultSource: "aurora"; readonly controls: { readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly tiles: { readonly slot: "a"; readonly label: "Tiles"; readonly min: 4; readonly max: 160; readonly step: 1; readonly default: 42; readonly hint: "Tiles across the short axis. They stay square on any canvas."; }; readonly roundness: { readonly slot: "b"; readonly label: "Roundness"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "0 is a solid tile, 1 is a dot that shrinks as the tile darkens."; }; readonly gap: { readonly slot: "c"; readonly label: "Gap"; readonly min: 0; readonly max: 0.45; readonly step: 0.01; readonly default: 0.02; readonly hint: "Ground left showing between tiles."; }; readonly steps: { readonly slot: "d"; readonly label: "Colour steps"; readonly min: 2; readonly max: 32; readonly step: 1; readonly default: 12; readonly hint: "Levels each channel is quantised to. Low values band on purpose."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly reveal: { readonly name: "Reveal"; readonly tagline: "The layer wiped in over a colour ground"; readonly description: "The layer wiped in over a flat colour ground: noise dissolves it in speckles, a rotated ramp wipes it in a line, and shape slides between the two. At speed 0 the progress control is a scrubber you can drive from your own code; above 0 it loops on its own."; readonly family: "transition"; readonly tags: readonly ["wipe", "dissolve", "entrance"]; readonly cost: "light"; readonly defaultSource: "mesh-gradient"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Edge glow"; readonly min: 0; readonly max: 2; readonly default: 0.6; readonly hint: "Light riding the boundary, the way a burn does."; readonly slot: "warp"; readonly step: 0.01; }; readonly progress: { readonly slot: "a"; readonly label: "Progress"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "Position of the wipe. Set speed to 0 and drive this yourself."; }; readonly shape: { readonly slot: "b"; readonly label: "Shape"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "0 dissolves through noise, 1 wipes along a straight edge."; }; readonly angle: { readonly slot: "c"; readonly label: "Angle"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "Direction of the wipe, as a full turn from 0 to 1."; }; readonly softness: { readonly slot: "d"; readonly label: "Softness"; readonly min: 0.001; readonly max: 0.4; readonly step: 0.001; readonly default: 0.08; readonly hint: "Width of the boundary band. Small is a hard cut."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly "neon-sign": { readonly name: "Neon Sign"; readonly tagline: "The layer's edges bent into glass tube and lit"; readonly description: "The layer's edges bent into glass tube and lit, with the halo landing where the ink is. It works on anything but sings on text, because a letter's boundary is one clean line and the band around it becomes the glass. Hand it `source={{ text: \"OPEN\" }}` and it is a sign."; readonly family: "optical"; readonly tags: readonly ["text", "neon", "dark", "sign"]; readonly cost: "heavy"; readonly defaultSource: "truchet"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Glow"; readonly min: 0.05; readonly max: 2; readonly default: 0.6; readonly hint: "How far the tube's light carries onto the wall."; readonly slot: "warp"; readonly step: 0.01; }; readonly threshold: { readonly slot: "a"; readonly label: "Threshold"; readonly min: 0.05; readonly max: 0.95; readonly step: 0.01; readonly default: 0.45; readonly hint: "The luma level the tube is bent along."; }; readonly fill: { readonly slot: "b"; readonly label: "Fill"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "The dim glow inside the letterforms, behind the tube."; }; readonly flicker: { readonly slot: "c"; readonly label: "Flicker"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.35; readonly hint: "Sputter. The dropouts arrive as events, not as noise."; }; readonly boost: { readonly slot: "d"; readonly label: "Boost"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Overall drive into the tube."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly ascii: { readonly name: "ASCII"; readonly tagline: "The layer redrawn as a density ramp of glyphs"; readonly description: "The layer redrawn as a grid of glyphs, dense characters where the picture is bright and open ones where it is dark. The font travels inside the shader, so it runs with no assets at all. Colorize slides between pure phosphor and the source's own colour pushed through the glyphs; scan adds the monitor the font implies."; readonly family: "image"; readonly tags: readonly ["text", "retro", "terminal"]; readonly cost: "light"; readonly defaultSource: "aurora"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly cells: { readonly slot: "a"; readonly label: "Cells"; readonly min: 8; readonly max: 120; readonly step: 1; readonly default: 48; readonly hint: "Characters across the short axis."; }; readonly contrast: { readonly slot: "b"; readonly label: "Contrast"; readonly min: 0.3; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "Gamma on the luma before it picks a glyph."; }; readonly colorize: { readonly slot: "c"; readonly label: "Colorize"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "0 is phosphor, 1 keeps the source's own colours."; }; readonly scan: { readonly slot: "d"; readonly label: "Scan"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.4; readonly hint: "Scanlines and a slow refresh bar."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly shatter: { readonly name: "Shatter"; readonly tagline: "The layer breaks into shards that fly from the pointer"; readonly description: "The layer breaks into shards that fly away from the pointer. The crack pattern holds still while the picture inside each shard slides and turns outward. At speed 0 the progress slider is a scrubber, the same contract as reveal, so the break can happen under the reader's thumb."; readonly family: "distortion"; readonly tags: readonly ["interactive", "pointer", "text", "transition"]; readonly cost: "medium"; readonly defaultSource: "kaleidoscope"; readonly controls: { readonly speed: { readonly default: 0.6; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.25; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Scatter"; readonly min: 0; readonly max: 2; readonly default: 1; readonly hint: "How far the shards travel from the impact."; readonly slot: "warp"; readonly step: 0.01; }; readonly progress: { readonly slot: "a"; readonly label: "Progress"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0; readonly hint: "Position of the break. Set speed to 0 and drive this yourself."; }; readonly shards: { readonly slot: "b"; readonly label: "Shards"; readonly min: 2; readonly max: 24; readonly step: 1; readonly default: 8; readonly hint: "Density of the crack pattern."; }; readonly spin: { readonly slot: "c"; readonly label: "Spin"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "How much each shard rotates as it flies."; }; readonly glint: { readonly slot: "d"; readonly label: "Glint"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Light catching the fresh crack edges."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly melt: { readonly name: "Melt"; readonly tagline: "The layer runs downhill, and the pointer is the heat"; readonly description: "The layer runs downhill in drips, each column dragging its own streak of colour down and carrying the highlight at the front of the run. The pointer is the heat: hold it on text and the text sags."; readonly family: "distortion"; readonly tags: readonly ["interactive", "pointer", "text"]; readonly cost: "medium"; readonly defaultSource: "neon-grid"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.25; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly label: "Wobble"; readonly min: 0; readonly max: 2; readonly default: 0.8; readonly hint: "Sideways sway in the runs, so no drip is perfectly plumb."; readonly slot: "warp"; readonly step: 0.01; }; readonly heat: { readonly slot: "a"; readonly label: "Heat"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.8; readonly hint: "Overall melting. The pointer adds its own on top."; }; readonly drips: { readonly slot: "b"; readonly label: "Drips"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly default: 1; readonly hint: "How many runs share the width of the frame."; }; readonly streaks: { readonly slot: "c"; readonly label: "Streaks"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "The bright smear a run drags down with it."; }; readonly torch: { readonly slot: "d"; readonly label: "Torch"; readonly min: 0.05; readonly max: 0.8; readonly step: 0.01; readonly default: 0.25; readonly hint: "Radius of the pointer's heat."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; }; readonly "pixel-sea": { readonly name: "Pixel Sea"; readonly tagline: "A 16-bit sea: dithered sky, low sun, dashes of light"; readonly description: "A 16-bit seascape: a dithered sky over a low sun, rows of water packing tighter as they recede, and the sun's reflection breaking into dashes on the swell. Nothing ever moves by less than a whole pixel."; readonly family: "pixel"; readonly tags: readonly ["pixel", "retro", "water", "game"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly pixels: { readonly slot: "a"; readonly label: "Pixels"; readonly min: 40; readonly max: 240; readonly step: 1; readonly default: 110; readonly hint: "Cells down the short edge. Fewer is chunkier."; }; readonly waves: { readonly slot: "b"; readonly label: "Waves"; readonly min: 0.3; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "How busy the swell is."; }; readonly sun: { readonly slot: "c"; readonly label: "Sun"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Size of the sun disc."; }; readonly dither: { readonly slot: "d"; readonly label: "Dither"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Width of the cross-hatched seam between bands."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Day"; readonly colorA: "#3f9ad2"; readonly colorB: "#2a72b8"; readonly colorC: "#ffe9ae"; }, { readonly name: "Sunset"; readonly colorA: "#2b2a5e"; readonly colorB: "#3a3f7a"; readonly colorC: "#ffb347"; }, { readonly name: "Night"; readonly colorA: "#0a0f2a"; readonly colorB: "#162a54"; readonly colorC: "#e8f0f4"; }, { readonly name: "Handheld"; readonly colorA: "#8bac0f"; readonly colorB: "#306230"; readonly colorC: "#9bbc0f"; }]; }; readonly "pixel-clouds": { readonly name: "Pixel Clouds"; readonly tagline: "Sprite clouds on a flat blue sky"; readonly description: "Flat-bottomed pixel clouds drifting across a plain blue sky, each one a stack of round bumps of uneven size with a hard shade line underneath, the way a pixel artist builds one. The rows drift at their own speeds, a whole cell at a time."; readonly family: "pixel"; readonly tags: readonly ["pixel", "retro", "sky", "calm"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly pixels: { readonly slot: "a"; readonly label: "Pixels"; readonly min: 32; readonly max: 160; readonly step: 1; readonly default: 64; readonly hint: "Cells down the short edge. Fewer is chunkier."; }; readonly cover: { readonly slot: "b"; readonly label: "Cover"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 1.1; readonly hint: "How many lattice slots grow a cloud."; }; readonly size: { readonly slot: "c"; readonly label: "Size"; readonly min: 0.5; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How big each cloud is drawn."; }; readonly shade: { readonly slot: "d"; readonly label: "Shade"; readonly min: 0; readonly max: 1; readonly step: 1; readonly default: 1; readonly hint: "1 also shades the west-facing hollows."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Day"; readonly colorA: "#5a9ae8"; readonly colorB: "#ffffff"; readonly colorC: "#a6c6ec"; }, { readonly name: "Sunset"; readonly colorA: "#e08a7a"; readonly colorB: "#fff3e0"; readonly colorC: "#e8b0a8"; }, { readonly name: "Night"; readonly colorA: "#1c2a5e"; readonly colorB: "#aebadb"; readonly colorC: "#7a8ab8"; }, { readonly name: "Handheld"; readonly colorA: "#306230"; readonly colorB: "#9bbc0f"; readonly colorC: "#8bac0f"; }]; }; readonly "pixel-fire": { readonly name: "Pixel Fire"; readonly tagline: "The Doom fire, tongue by tongue"; readonly description: "The Doom fire: a bed of orange along the bottom edge shredding upward into tongues and sparks, and going black before the top. Every cell is one of a dozen flat colours, and the whole slab flickers on a low frame rate."; readonly family: "pixel"; readonly tags: readonly ["pixel", "retro", "fire", "dark"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly pixels: { readonly slot: "a"; readonly label: "Pixels"; readonly min: 40; readonly max: 240; readonly step: 1; readonly default: 100; readonly hint: "Cells down the short edge. Fewer is chunkier."; }; readonly flames: { readonly slot: "b"; readonly label: "Flames"; readonly min: 0.4; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How high the heat climbs before it shreds."; }; readonly embers: { readonly slot: "c"; readonly label: "Embers"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Lit cells that detach above the flame top."; }; readonly flicker: { readonly slot: "d"; readonly label: "Flicker"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The per-cell decay grain. 0 is eerily smooth."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Ember"; readonly colorA: "#1c0908"; readonly colorB: "#e2571b"; readonly colorC: "#ffe8b0"; }, { readonly name: "Gas ring"; readonly colorA: "#081020"; readonly colorB: "#2a6ce0"; readonly colorC: "#c8ecff"; }, { readonly name: "Cauldron"; readonly colorA: "#081408"; readonly colorB: "#3fae3f"; readonly colorC: "#e8ffb0"; }, { readonly name: "Arcane"; readonly colorA: "#150822"; readonly colorB: "#8a3fd6"; readonly colorC: "#ffd9f0"; }]; }; readonly "pixel-rain": { readonly name: "Pixel Rain"; readonly tagline: "Rain over a sleeping skyline, one lit window at a time"; readonly description: "Rain over a sleeping pixel skyline: two ranks of buildings under flat bands of night sky and a moon, a sparse grid of windows whose lights toggle rarely, and drops falling a whole cell at a time onto a shimmering street. Nothing is blended; every pixel is one of a dozen stops."; readonly family: "pixel"; readonly tags: readonly ["pixel", "retro", "rain", "dark", "city"]; readonly cost: "light"; readonly controls: { readonly vignette: { readonly default: 0; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly pixels: { readonly slot: "a"; readonly label: "Pixels"; readonly min: 40; readonly max: 240; readonly step: 1; readonly default: 130; readonly hint: "Cells down the short edge. Fewer is chunkier."; }; readonly rain: { readonly slot: "b"; readonly label: "Rain"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.55; readonly hint: "How many columns carry a falling drop."; }; readonly windows: { readonly slot: "c"; readonly label: "Windows"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How much of the city is still awake."; }; readonly wind: { readonly slot: "d"; readonly label: "Wind"; readonly min: -1; readonly max: 1; readonly step: 0.01; readonly default: 0.3; readonly hint: "Shears the rain. 0 falls straight down."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Midnight"; readonly colorA: "#232742"; readonly colorB: "#8fb4d9"; readonly colorC: "#ffce6b"; }, { readonly name: "Last train"; readonly colorA: "#1d3340"; readonly colorB: "#9fd0d9"; readonly colorC: "#ffb37a"; }, { readonly name: "Noir"; readonly colorA: "#20242a"; readonly colorB: "#9aa4b0"; readonly colorC: "#e8ecf0"; }, { readonly name: "Neon rain"; readonly colorA: "#291d3f"; readonly colorB: "#a89fd9"; readonly colorC: "#ff9ec4"; }]; }; readonly lagoon: { readonly name: "Lagoon"; readonly tagline: "An atoll from above: sand ring, shallows, the reef wall"; readonly description: "An atoll from above: a sand ring around a pale turquoise lagoon, dropping to deep blue outside the reef. Depth does the colouring the way light actually dies in water, so the shallows read as sand seen through cyan and the open sea keeps only blue. Surf stacks against the reef and coral mottles the floor."; readonly family: "scene"; readonly tags: readonly ["island", "water", "tropical", "ambient"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Atoll size in the frame. Lower fills it."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.6; readonly max: 1.5; readonly hint: "How far the ring wanders from a circle."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; }; readonly reef: { readonly slot: "a"; readonly label: "Reef"; readonly min: 0.4; readonly max: 1.6; readonly step: 0.01; readonly default: 1; readonly hint: "Radius of the ring the cays grow on."; }; readonly shallows: { readonly slot: "b"; readonly label: "Shallows"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.55; readonly hint: "How much sand shows through the lagoon."; }; readonly surf: { readonly slot: "c"; readonly label: "Surf"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Breakers on the reef and foam at the shore."; }; readonly coral: { readonly slot: "d"; readonly label: "Coral"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Mottling of the lagoon floor."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Tropical"; readonly colorA: "#0b3a6b"; readonly colorB: "#22b8a8"; readonly colorC: "#eed9ab"; }, { readonly name: "Jade"; readonly colorA: "#053a36"; readonly colorB: "#3fae8f"; readonly colorC: "#e8e3c8"; }, { readonly name: "Dusk"; readonly colorA: "#141f4f"; readonly colorB: "#4e7d99"; readonly colorC: "#d9b8a6"; }, { readonly name: "Polar"; readonly colorA: "#10243a"; readonly colorB: "#6fa8c4"; readonly colorC: "#c9ccc9"; }]; }; readonly island: { readonly name: "Island"; readonly tagline: "Sea to the horizon, a low sun, and land in the haze"; readonly description: "Sea to the horizon under a low sun, a glitter path running toward the camera, and land sitting in the haze. The glitter is tight across and smeared down, and it widens as it comes nearer. The pointer leans the whole view."; readonly family: "scene"; readonly tags: readonly ["island", "hero", "horizon", "pointer"]; readonly cost: "light"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Grain of the glitter. Higher is finer."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly sun: { readonly slot: "a"; readonly label: "Sun"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.6; readonly hint: "Height of the sun above the horizon."; }; readonly land: { readonly slot: "b"; readonly label: "Land"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How much island breaks the horizon."; }; readonly glitter: { readonly slot: "c"; readonly label: "Glitter"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The sparkle in the sun's path on the water."; }; readonly clouds: { readonly slot: "d"; readonly label: "Clouds"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Thin shelves of cloud above the horizon."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Dusk"; readonly colorA: "#1e3a6e"; readonly colorB: "#e6926b"; readonly colorC: "#ffd9a0"; }, { readonly name: "Noon"; readonly colorA: "#2e6db8"; readonly colorB: "#a8d4e8"; readonly colorC: "#fff0b8"; }, { readonly name: "Ember"; readonly colorA: "#331a4f"; readonly colorB: "#d95a4a"; readonly colorC: "#ffb35c"; }, { readonly name: "Night"; readonly colorA: "#0c1638"; readonly colorB: "#3a5a8c"; readonly colorC: "#dce8f4"; }]; }; readonly shore: { readonly name: "Shore"; readonly tagline: "The swash zone from above: run-up, foam, wet sand"; readonly description: "The swash zone from above: bands of turquoise water running up over pale sand, foam along each front, and wet sand that is darkest at the waterline and dries to nothing behind it. The waterline breathes in and out and stays ragged."; readonly family: "scene"; readonly tags: readonly ["island", "water", "calm", "ambient"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.7; readonly max: 1.5; readonly hint: "How ragged the waterline runs."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; }; readonly tide: { readonly slot: "a"; readonly label: "Tide"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How far the swash runs up and pulls back."; }; readonly waves: { readonly slot: "b"; readonly label: "Waves"; readonly min: 0.3; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "How many fronts are on their way in."; }; readonly foam: { readonly slot: "c"; readonly label: "Foam"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "The lace at the waterline and on the crests."; }; readonly wet: { readonly slot: "d"; readonly label: "Wet sand"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How dark the swash leaves the beach."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Daylight"; readonly colorA: "#1a6e8c"; readonly colorB: "#47bfc7"; readonly colorC: "#eed9ab"; }, { readonly name: "Golden hour"; readonly colorA: "#2b5780"; readonly colorB: "#7fb5a3"; readonly colorC: "#f0c98c"; }, { readonly name: "Overcast"; readonly colorA: "#3a4f57"; readonly colorB: "#70898a"; readonly colorC: "#b8b09e"; }, { readonly name: "Moonlit"; readonly colorA: "#0a1429"; readonly colorB: "#26405f"; readonly colorC: "#575c70"; }]; }; readonly caldera: { readonly name: "Caldera"; readonly tagline: "A volcanic island at night, lit by its own veins"; readonly description: "An elevated view of a volcanic island at night. Moonlight reveals the basalt cone and sunken crater, molten channels run down its slopes, and a crusted lava pool lights the rim beneath drifting embers."; readonly family: "scene"; readonly tags: readonly ["island", "dark", "hero", "fire"]; readonly cost: "heavy"; readonly controls: { readonly vibrancy: { readonly default: 1.05; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly intensity: { readonly default: 0.92; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly speed: { readonly default: 0.49; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Island size in the frame. Lower fills it."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.3; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.95; readonly max: 1.5; readonly hint: "How much the lava channels wander."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; }; readonly crater: { readonly slot: "a"; readonly label: "Crater"; readonly min: 0.4; readonly max: 1.8; readonly step: 0.01; readonly default: 1.2; readonly hint: "Size of the pool at the summit."; }; readonly lava: { readonly slot: "b"; readonly label: "Lava"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.99; readonly hint: "How many channels still carry heat."; }; readonly glow: { readonly slot: "c"; readonly label: "Glow"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.85; readonly hint: "The bloom the mountain throws on the night."; }; readonly embers: { readonly slot: "d"; readonly label: "Embers"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 0.8; readonly hint: "Sparks over the crater."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Night"; readonly colorA: "#10131f"; readonly colorB: "#f2600f"; readonly colorC: "#ffd9a8"; }, { readonly name: "Cold star"; readonly colorA: "#0c1220"; readonly colorB: "#3a7de0"; readonly colorC: "#c8ecff"; }, { readonly name: "Ash dawn"; readonly colorA: "#1d1a24"; readonly colorB: "#e03a3a"; readonly colorC: "#ffc9a0"; }, { readonly name: "Witchfire"; readonly colorA: "#0e1414"; readonly colorB: "#2fae62"; readonly colorC: "#d9ffd0"; }]; }; readonly archipelago: { readonly name: "Archipelago"; readonly tagline: "A nautical chart on a slow drift"; readonly description: "A nautical chart on a slow drift: green land, pale blue water, and contour lines that hold their weight at any size. Every fifth line is drawn heavier, the shallows carry the soft glow an old map puts along a coast, and the relief looks engraved. The map scrolls forever without repeating."; readonly family: "scene"; readonly tags: readonly ["island", "map", "editorial", "calm"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 1; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; readonly hint: "Zoom of the underlying field. Lower is bigger, softer shapes."; }; readonly vignette: { readonly default: 0.2; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly warp: { readonly default: 0.5; readonly max: 1.2; readonly hint: "Coastline character. More is more ragged."; readonly slot: "warp"; readonly label: "Warp"; readonly min: 0; readonly step: 0.01; }; readonly contours: { readonly slot: "a"; readonly label: "Contours"; readonly min: 4; readonly max: 24; readonly step: 1; readonly default: 12; readonly hint: "How many height levels the ink traces."; }; readonly sea: { readonly slot: "b"; readonly label: "Sea level"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.5; readonly hint: "How much of the chart is water."; }; readonly ink: { readonly slot: "c"; readonly label: "Ink"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Weight of the contour and coastline strokes."; }; readonly relief: { readonly slot: "d"; readonly label: "Relief"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly default: 0.7; readonly hint: "Hillshading on the land. 0 is a flat fill."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Classic"; readonly colorA: "#9dc3d4"; readonly colorB: "#a8c08a"; readonly colorC: "#e8dbb5"; }, { readonly name: "Sepia"; readonly colorA: "#d9c9a3"; readonly colorB: "#c2a877"; readonly colorC: "#e9dcbd"; }, { readonly name: "Night watch"; readonly colorA: "#122034"; readonly colorB: "#2e3f50"; readonly colorC: "#40596d"; }, { readonly name: "Moss"; readonly colorA: "#7fae9e"; readonly colorB: "#8fae64"; readonly colorC: "#dcd9ae"; }]; }; readonly blossom: { readonly name: "Blossom"; readonly tagline: "One flower, drawn large"; readonly description: "One flower, drawn large: three layers of curved petals with fine veins, softly lit edges, and overlapping shadows around a textured pollen head. The whole flower breathes and leans."; readonly family: "scene"; readonly tags: readonly ["hero", "flowers", "centerpiece", "calm"]; readonly cost: "medium"; readonly controls: { readonly speed: { readonly default: 0.94; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Flower size in the frame. Lower fills it."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.35; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly petals: { readonly slot: "a"; readonly label: "Petals"; readonly min: 4; readonly max: 14; readonly step: 1; readonly default: 7; readonly hint: "How many petals each ring carries."; }; readonly breathe: { readonly slot: "b"; readonly label: "Breathe"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "How much the bloom swells and settles."; }; readonly pollen: { readonly slot: "c"; readonly label: "Pollen"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Motes drifting behind the flower."; }; readonly heart: { readonly slot: "d"; readonly label: "Heart"; readonly min: 0.4; readonly max: 1.6; readonly step: 0.01; readonly default: 1; readonly hint: "Size of the pollen head."; }; readonly intensity: { readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 1; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly vibrancy: { readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 1; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Rose"; readonly colorA: "#1c1626"; readonly colorB: "#b03a5e"; readonly colorC: "#f6c9a0"; }, { readonly name: "Lily"; readonly colorA: "#182030"; readonly colorB: "#7a8ca8"; readonly colorC: "#f4f6f8"; }, { readonly name: "Marigold"; readonly colorA: "#231c10"; readonly colorB: "#d98a2a"; readonly colorC: "#fff3c4"; }, { readonly name: "Iris"; readonly colorA: "#120f20"; readonly colorB: "#6a4fd6"; readonly colorC: "#d9c9ff"; }]; }; readonly hills: { readonly name: "Hills"; readonly tagline: "Rolling grassland under a low sun"; readonly description: "Rolling green grassland under a wide sky, lit by a low sun with a cool fill from above and a warm bounce off the far side. Sun-tinted fog folds the distant hills into the sky."; readonly family: "scene"; readonly tags: readonly ["hero", "3d", "raymarching", "pointer"]; readonly cost: "heavy"; readonly controls: { readonly vibrancy: { readonly default: 1.77; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly intensity: { readonly default: 1.06; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly speed: { readonly default: 0.29; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 1; readonly hint: "Unused by the terrain; feeds post."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.58; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly sun: { readonly slot: "a"; readonly label: "Sun"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.76; readonly hint: "Height of the sun. Low sun, long light."; }; readonly relief: { readonly slot: "b"; readonly label: "Relief"; readonly min: 0.3; readonly max: 1.6; readonly step: 0.01; readonly default: 0.86; readonly hint: "How tall the hills roll."; }; readonly haze: { readonly slot: "c"; readonly label: "Haze"; readonly min: 0.2; readonly max: 2.5; readonly step: 0.01; readonly default: 0.79; readonly hint: "How soon distance turns to sky."; }; readonly clouds: { readonly slot: "d"; readonly label: "Clouds"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly default: 0.37; readonly hint: "The fair-weather shelf above the hills."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Morning"; readonly colorA: "#578ddb"; readonly colorB: "#4d9938"; readonly colorC: "#ffedbf"; }, { readonly name: "High summer"; readonly colorA: "#8cb8e0"; readonly colorB: "#73a847"; readonly colorC: "#fffae6"; }, { readonly name: "Autumn"; readonly colorA: "#8c94a8"; readonly colorB: "#b8943f"; readonly colorC: "#ffcc8c"; }, { readonly name: "Dusk"; readonly colorA: "#403866"; readonly colorB: "#2e4d38"; readonly colorC: "#ffa073"; }]; }; readonly cumulus: { readonly name: "Cumulus"; readonly tagline: "Fair-weather cloud on a summer sky"; readonly description: "Fair-weather cloud on a blue sky, lit from one side with grey undersides and soft god rays reaching down from the sun. The clouds build and slide past overhead. It reads as a summer afternoon rather than as weather."; readonly family: "scene"; readonly tags: readonly ["hero", "sky", "soft", "pointer"]; readonly cost: "medium"; readonly controls: { readonly vibrancy: { readonly default: 1.88; readonly slot: "vibrancy"; readonly label: "Vibrancy"; readonly min: 0; readonly max: 2; readonly step: 0.01; readonly hint: "Saturation. 0 is greyscale, 1 is as authored, 2 is punched."; }; readonly intensity: { readonly default: 1.57; readonly slot: "intensity"; readonly label: "Strength"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly hint: "Overall brightness of the effect before the post chain."; }; readonly speed: { readonly default: 0.64; readonly max: 2; readonly slot: "speed"; readonly label: "Speed"; readonly min: 0; readonly step: 0.01; readonly hint: "Time multiplier. 0 freezes the shader on its current frame."; }; readonly scale: { readonly default: 2.11; readonly hint: "Cloud size. Lower is bigger weather."; readonly slot: "scale"; readonly label: "Scale"; readonly min: 0.2; readonly max: 3; readonly step: 0.01; }; readonly vignette: { readonly default: 0.47; readonly slot: "vignette"; readonly label: "Vignette"; readonly min: 0; readonly max: 1; readonly step: 0.01; readonly hint: "Darkening towards the edges of the frame."; }; readonly cover: { readonly slot: "a"; readonly label: "Cover"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 0.65; readonly hint: "How much of the sky the clouds take."; }; readonly softness: { readonly slot: "b"; readonly label: "Softness"; readonly min: 0.2; readonly max: 2; readonly step: 0.01; readonly default: 0.41; readonly hint: "Edge width. Low is cauliflower, high is mist."; }; readonly sun: { readonly slot: "c"; readonly label: "Sun"; readonly min: 0; readonly max: 1.5; readonly step: 0.01; readonly default: 1.36; readonly hint: "Height of the sun the clouds answer to."; }; readonly rays: { readonly slot: "d"; readonly label: "Rays"; readonly min: 0; readonly max: 2.5; readonly step: 0.01; readonly default: 0.71; readonly hint: "God rays through the gaps."; }; readonly grain: { readonly slot: "grain"; readonly label: "Grain"; readonly min: 0; readonly max: 0.35; readonly step: 0.005; readonly default: 0; readonly hint: "Per-pixel noise. A little hides banding on flat gradients."; }; }; readonly colors: { readonly colorA: ColorControl; readonly colorB: ColorControl; readonly colorC: ColorControl; }; readonly presets: readonly [{ readonly name: "Before the storm"; readonly colorA: "#4a5a6e"; readonly colorB: "#5d6b7a"; readonly colorC: "#f0f4f8"; }, { readonly name: "Fair weather"; readonly colorA: "#3a6bc4"; readonly colorB: "#8fa3c9"; readonly colorC: "#ffe9c4"; }, { readonly name: "Dawn"; readonly colorA: "#8c6a9e"; readonly colorB: "#c9a3b8"; readonly colorC: "#ffd9a0"; }, { readonly name: "Dusk"; readonly colorA: "#28306e"; readonly colorB: "#5a6494"; readonly colorC: "#ff9e6b"; }]; }; }; export type ShaderRegistry = typeof shaderRegistry; export type ShaderName = keyof ShaderRegistry; export declare const shaderNames: ("alloy" | "archipelago" | "ascii" | "aurora" | "basalt" | "beacon" | "billow" | "bloom" | "blossom" | "blueprint" | "bokeh" | "caldera" | "caustics" | "chladni" | "chromatic-city" | "cloth" | "cumulus" | "dither" | "dunes" | "duotone" | "edges" | "eyes" | "ferro" | "filament" | "film-grain" | "flow" | "fluid" | "glass" | "gossamer" | "gravity" | "halftone" | "hills" | "island" | "julia" | "kaleidoscope" | "lagoon" | "lens" | "liquid-light" | "liquid-metal" | "louvres" | "lumen" | "maelstrom" | "magnet" | "meadow" | "melt" | "mesh-gradient" | "mosaic" | "neon-grid" | "neon-sign" | "orb" | "parallax" | "particles" | "pixel-clouds" | "pixel-fire" | "pixel-isle" | "pixel-rain" | "pixel-sea" | "plasma" | "pulsar" | "radiance" | "reveal" | "ripple" | "shafts" | "shatter" | "shockwave" | "shore" | "silk" | "spectra" | "starfield" | "strata" | "swell" | "swirl" | "tesla" | "torch" | "truchet" | "tunnel" | "voronoi")[]; export declare function getShader(name: K): ShaderRegistry[K]; export declare function isShaderName(value: string): value is ShaderName; /** * Whether a shader invents its picture or reads one. * * Comes from the build, which reads it off the folder the WGSL lives in, so it * cannot disagree with the bindings the shader actually declares. */ export declare function shaderKind(name: ShaderName): ShaderKind; /** * Whether a shader binds a layer: every source shader, and the graph shaders * whose flavour reads one. This is the question a caller actually has — do I * hand this a `source`? — and `shaderKind` alone stopped answering it once a * graph could read a layer too. */ export declare function isSourceShader(name: ShaderName): boolean; /** * The shader a source shader reads when the caller supplies nothing. * * Read through the wide `ShaderDefinition` type on purpose: only source shaders * carry `defaultSource`, so the narrowed literal union does not have the * property and every call site would otherwise need its own cast. */ export declare function defaultSourceOf(name: ShaderName): ShaderName | undefined; /** Every control name a given shader exposes. */ export type ControlName = keyof ShaderRegistry[K]["controls"]; /** The params object a user writes in a config for shader `K`. */ export type ShaderParams = Partial, number> & Record<"colorA" | "colorB" | "colorC", string>>; //# sourceMappingURL=registry.d.ts.map