{
  "schema": "portable-shader-material/v1",
  "id": "2026-06-07-liquid-metal-cursor",
  "title": "Liquid Metal Cursor",
  "version": "0.1.0",
  "created": "2026-06-07",
  "description": "Dark liquid-metal field with pointer-driven distortion, warm seams, and chrome-like highlights.",
  "authoringModel": "research-to-daily-output",
  "formats": {
    "web": {
      "entry": "./index.html",
      "fragmentShaderSource": "./main.js",
      "runtime": "vanilla-webgl"
    },
    "isf": {
      "entry": "./liquid-metal-cursor.fs",
      "isfVersion": "2"
    },
    "vj": {
      "entry": "./adapters/vj/vj-material.json"
    }
  },
  "inputs": [
    {
      "name": "pointer",
      "type": "point2D",
      "default": [0.5, 0.5],
      "range": [[0, 1], [0, 1]],
      "role": "primary-position",
      "description": "Primary normalized 2D position. Mouse, finger, sensor projection, tracked body point, or remote control cursor."
    },
    {
      "name": "pointerVelocity",
      "type": "point2D",
      "default": [0, 0],
      "range": [[-1, 1], [-1, 1]],
      "role": "motion-force",
      "description": "Frame-to-frame normalized velocity for directional wake."
    },
    {
      "name": "intensity",
      "type": "float",
      "default": 1.08,
      "min": 0,
      "max": 2,
      "role": "interaction-strength",
      "description": "Overall distortion and response strength."
    },
    {
      "name": "heat",
      "type": "float",
      "default": 0.48,
      "min": 0,
      "max": 1,
      "role": "color-temperature",
      "description": "Cool violet-to-warm ember balance."
    },
    {
      "name": "speed",
      "type": "float",
      "default": 0.74,
      "min": 0,
      "max": 2,
      "role": "time-scale",
      "description": "Animation speed multiplier."
    }
  ],
  "inputSources": [
    {
      "id": "mouse",
      "label": "Mouse / Touch",
      "maps": {
        "pointer": "normalized pointer position",
        "pointerVelocity": "smoothed pointer delta"
      }
    },
    {
      "id": "device-orientation",
      "label": "Device Orientation",
      "maps": {
        "pointer": "tilt beta/gamma normalized to screen space",
        "intensity": "absolute tilt magnitude"
      }
    },
    {
      "id": "hand-tracking",
      "label": "Camera Hand Tracking",
      "maps": {
        "pointer": "index finger tip landmark",
        "pointerVelocity": "landmark delta",
        "intensity": "pinch distance or hand confidence"
      }
    },
    {
      "id": "weather",
      "label": "Weather Data",
      "maps": {
        "heat": "temperature normalized",
        "speed": "wind speed normalized",
        "intensity": "precipitation or cloud cover normalized"
      }
    },
    {
      "id": "vj-host",
      "label": "Browser VJ Host",
      "maps": {
        "pointer": "deck cursor, scene anchor, or control bus xy",
        "intensity": "audio RMS, fader, or automation lane",
        "heat": "macro control",
        "speed": "BPM-relative rate"
      }
    }
  ],
  "renderDefaults": {
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "durationSeconds": 8,
    "loop": true
  },
  "tags": ["webgl", "glsl", "isf", "touchdesigner", "vj", "interactive", "liquid-metal"]
}
