ExoAVT Protocol

Public return-link contract for external chatbots

This page tells ChatGPT, Gemini, Claude, Grok, X AI, and other web agents how to return a single browser-openable ExoAVT composition link. The browser reads the payload from the URL and hydrates the visible audiovisual state directly.

How it works

  1. 1. The chatbot plans an ExoAVT audiovisual state in JSON.
  2. 2. It encodes that JSON as base64url.
  3. 3. It returns one ExoAVT URL with the payload in the exo query param.
  4. 4. ExoAVT opens, parses the payload, updates the visible code, and applies the audio and visual state.
  5. 5. If a delivery block is present, the browser also pre-arms the export settings for a tap-to-render clip.

Return rules

  • Return one link only.
  • Do not rely on hidden renderer state.
  • Keep audio, transport, visuals, and metadata inside the JSON payload.
  • Use the optional delivery block to pre-arm MP4, WEBM, or GIF export without auto-downloading.
  • Use the schema JSON endpoint for exact ranges and enums.

Paste this into a chatbot

Create one ExoAVT audiovisual state.
Return exactly one ExoAVT URL and no extra prose.
Use exoavt-terminal-bridge.v1.
Put the base64url-encoded JSON payload in the exo query parameter.
Make sure both audio and visuals are described inside the JSON payload.
If you want one-tap clip export, include the optional delivery block and set clipReady to true.

Example payload

{
  "version": "exoavt-terminal-bridge.v1",
  "transport": {
    "bpm": 124,
    "playing": true
  },
  "audio": {
    "enabled": true,
    "masterGain": 0.28,
    "voices": [
      {
        "id": "voice-a",
        "enabled": true,
        "oscillatorType": "sawtooth",
        "frequencyHz": 98,
        "detuneCents": -4,
        "gain": 0.42,
        "pan": -0.2,
        "octaveOffset": 0,
        "semitoneOffset": 0
      },
      {
        "id": "voice-b",
        "enabled": true,
        "oscillatorType": "triangle",
        "frequencyHz": 196,
        "detuneCents": 5,
        "gain": 0.3,
        "pan": 0.18,
        "octaveOffset": 0,
        "semitoneOffset": 7
      }
    ],
    "filter": {
      "enabled": true,
      "type": "bandpass",
      "cutoffHz": 1620,
      "resonance": 3.4,
      "envelopeAmount": 0.46
    },
    "distortion": {
      "enabled": true,
      "curve": "sine-fold",
      "amount": 0.38,
      "mix": 0.3,
      "oversample": "4x"
    },
    "envelope": {
      "attack": 0.03,
      "decay": 0.18,
      "sustain": 0.64,
      "release": 0.38,
      "gateRatio": 0.78
    }
  },
  "visuals": {
    "module": "patch",
    "active": true,
    "phaseLabel": "External model return link armed.",
    "geometryType": "glyphs",
    "paletteId": "violet-cyan",
    "palette": {
      "primary": "#8d7cff",
      "secondary": "#38f1ff",
      "accent": "#ff4478",
      "glow": "#c5fffd",
      "background": [
        "#05010d",
        "#13051f"
      ]
    },
    "glitchIntensity": 0.72,
    "patch": {
      "speed": 0.66,
      "feedback": 0.42,
      "detail": 18,
      "contrast": 1.36,
      "glitch": 0.72,
      "glyph": 0.6,
      "threshold": 0.34,
      "drift": 0.44,
      "smear": 0.32,
      "strobe": 0.16,
      "imageMix": 0.12
    }
  },
  "delivery": {
    "clipReady": true,
    "format": "mp4",
    "media": "video-audio",
    "duration": "30s",
    "resolution": "1920x1080",
    "fps": 30,
    "includeAudio": true,
    "audioSource": "generated-audio",
    "openPanel": true
  },
  "meta": {
    "source": "external-ai",
    "timestamp": "2026-04-14T18:40:00.000Z",
    "note": "Cold terminal bloom with unstable glyph breakup."
  }
}

Example return link

https://www.filippogalbo.com/recombinase/avterminal?exo=eyJ2ZXJzaW9uIjoiZXhvYXZ0LXRlcm1pbmFsLWJyaWRnZS52MSIsInRyYW5zcG9ydCI6eyJicG0iOjEyNCwicGxheWluZyI6dHJ1ZX0sImF1ZGlvIjp7ImVuYWJsZWQiOnRydWUsIm1hc3RlckdhaW4iOjAuMjgsInZvaWNlcyI6W3siaWQiOiJ2b2ljZS1hIiwiZW5hYmxlZCI6dHJ1ZSwib3NjaWxsYXRvclR5cGUiOiJzYXd0b290aCIsImZyZXF1ZW5jeUh6Ijo5OCwiZGV0dW5lQ2VudHMiOi00LCJnYWluIjowLjQyLCJwYW4iOi0wLjIsIm9jdGF2ZU9mZnNldCI6MCwic2VtaXRvbmVPZmZzZXQiOjB9LHsiaWQiOiJ2b2ljZS1iIiwiZW5hYmxlZCI6dHJ1ZSwib3NjaWxsYXRvclR5cGUiOiJ0cmlhbmdsZSIsImZyZXF1ZW5jeUh6IjoxOTYsImRldHVuZUNlbnRzIjo1LCJnYWluIjowLjMsInBhbiI6MC4xOCwib2N0YXZlT2Zmc2V0IjowLCJzZW1pdG9uZU9mZnNldCI6N31dLCJmaWx0ZXIiOnsiZW5hYmxlZCI6dHJ1ZSwidHlwZSI6ImJhbmRwYXNzIiwiY3V0b2ZmSHoiOjE2MjAsInJlc29uYW5jZSI6My40LCJlbnZlbG9wZUFtb3VudCI6MC40Nn0sImRpc3RvcnRpb24iOnsiZW5hYmxlZCI6dHJ1ZSwiY3VydmUiOiJzaW5lLWZvbGQiLCJhbW91bnQiOjAuMzgsIm1peCI6MC4zLCJvdmVyc2FtcGxlIjoiNHgifSwiZW52ZWxvcGUiOnsiYXR0YWNrIjowLjAzLCJkZWNheSI6MC4xOCwic3VzdGFpbiI6MC42NCwicmVsZWFzZSI6MC4zOCwiZ2F0ZVJhdGlvIjowLjc4fX0sInZpc3VhbHMiOnsibW9kdWxlIjoicGF0Y2giLCJhY3RpdmUiOnRydWUsInBoYXNlTGFiZWwiOiJFeHRlcm5hbCBtb2RlbCByZXR1cm4gbGluayBhcm1lZC4iLCJnZW9tZXRyeVR5cGUiOiJnbHlwaHMiLCJwYWxldHRlSWQiOiJ2aW9sZXQtY3lhbiIsInBhbGV0dGUiOnsicHJpbWFyeSI6IiM4ZDdjZmYiLCJzZWNvbmRhcnkiOiIjMzhmMWZmIiwiYWNjZW50IjoiI2ZmNDQ3OCIsImdsb3ciOiIjYzVmZmZkIiwiYmFja2dyb3VuZCI6WyIjMDUwMTBkIiwiIzEzMDUxZiJdfSwiZ2xpdGNoSW50ZW5zaXR5IjowLjcyLCJwYXRjaCI6eyJzcGVlZCI6MC42NiwiZmVlZGJhY2siOjAuNDIsImRldGFpbCI6MTgsImNvbnRyYXN0IjoxLjM2LCJnbGl0Y2giOjAuNzIsImdseXBoIjowLjYsInRocmVzaG9sZCI6MC4zNCwiZHJpZnQiOjAuNDQsInNtZWFyIjowLjMyLCJzdHJvYmUiOjAuMTYsImltYWdlTWl4IjowLjEyfX0sImRlbGl2ZXJ5Ijp7ImNsaXBSZWFkeSI6dHJ1ZSwiZm9ybWF0IjoibXA0IiwibWVkaWEiOiJ2aWRlby1hdWRpbyIsImR1cmF0aW9uIjoiMzBzIiwicmVzb2x1dGlvbiI6IjE5MjB4MTA4MCIsImZwcyI6MzAsImluY2x1ZGVBdWRpbyI6dHJ1ZSwiYXVkaW9Tb3VyY2UiOiJnZW5lcmF0ZWQtYXVkaW8iLCJvcGVuUGFuZWwiOnRydWV9LCJtZXRhIjp7InNvdXJjZSI6ImV4dGVybmFsLWFpIiwidGltZXN0YW1wIjoiMjAyNi0wNC0xNFQxODo0MDowMC4wMDBaIiwibm90ZSI6IkNvbGQgdGVybWluYWwgYmxvb20gd2l0aCB1bnN0YWJsZSBnbHlwaCBicmVha3VwLiJ9fQ

Schema excerpt

{
  "version": {
    "const": "exoavt-terminal-bridge.v1"
  },
  "transport": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "bpm": {
        "type": "number",
        "minimum": 30,
        "maximum": 240
      },
      "playing": {
        "type": "boolean"
      }
    }
  },
  "audio": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "enabled": {
        "type": "boolean"
      },
      "masterGain": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "voices": {
        "type": "array",
        "items": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "id",
            "oscillatorType",
            "frequencyHz"
          ],
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            },
            "enabled": {
              "type": "boolean"
            },
            "oscillatorType": {
              "enum": [
                "sine",
                "square",
                "sawtooth",
                "triangle"
              ]
            },
            "frequencyHz": {
              "type": "number",
              "minimum": 20,
              "maximum": 12000
            },
            "detuneCents": {
              "type": "number",
              "minimum": -2400,
              "maximum": 2400
            },
            "gain": {
              "type": "number",
              "minimum": 0,
              "maximum": 1
            },
            "pan": {
              "type": "number",
              "minimum": -1,
              "maximum": 1
            },
            "octaveOffset": {
              "type": "number",
              "minimum": -4,
              "maximum": 4
            },
            "semitoneOffset": {
              "type": "number",
              "minimum": -24,
              "maximum": 24
            }
          }
        }
      },
      "filter": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "type": {
            "enum": [
              "lowpass",
              "highpass",
              "bandpass",
              "lowshelf",
              "highshelf",
              "peaking",
              "notch",
              "allpass"
            ]
          },
          "cutoffHz": {
            "type": "number",
            "minimum": 20,
            "maximum": 20000
          },
          "resonance": {
            "type": "number",
            "minimum": 0.0001,
            "maximum": 32
          },
          "envelopeAmount": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      },
      "distortion": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "curve": {
            "enum": [
              "clean",
              "soft-clip",
              "hard-clip",
              "sine-fold"
            ]
          },
          "amount": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "mix": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "oversample": {
            "enum": [
              "none",
              "2x",
              "4x"
            ]
          }
        }
      },
      "envelope": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "attack": {
            "type": "number",
            "minimum": 0,
            "maximum": 8
          },
          "decay": {
            "type": "number",
            "minimum": 0,
            "maximum": 8
          },
          "sustain": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "release": {
            "type": "number",
            "minimum": 0,
            "maximum": 12
          },
          "gateRatio": {
            "type": "number",
            "minimum": 0.05,
            "maximum": 1.5
          }
        }
      }
    }
  },
  "visuals": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "module": {
        "enum": [
          "patch",
          "spectral",
          "transcode"
        ]
      },
      "active": {
        "type": "boolean"
      },
      "phaseLabel": {
        "type": "string"
      },
      "geometryType": {
        "enum": [
          "lattice",
          "rings",
          "surveillance",
          "fracture",
          "glyphs",
          "radial"
        ]
      },
      "paletteId": {
        "enum": [
          "violet-cyan",
          "amber-void",
          "mono-phosphor"
        ]
      },
      "palette": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "primary",
          "secondary",
          "accent",
          "glow",
          "background"
        ],
        "properties": {
          "primary": {
            "type": "string",
            "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
          },
          "secondary": {
            "type": "string",
            "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
          },
          "accent": {
            "type": "string",
            "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
          },
          "glow": {
            "type": "string",
            "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
          },
          "background": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "items": {
              "type": "string",
              "pattern": "^#(?:[0-9a-f]{3}|[0-9a-f]{6})$"
            }
          }
        }
      },
      "glitchIntensity": {
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "patch": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "speed": {
            "type": "number",
            "minimum": 0.08,
            "maximum": 1.25
          },
          "feedback": {
            "type": "number",
            "minimum": 0,
            "maximum": 0.95
          },
          "detail": {
            "type": "number",
            "minimum": 4,
            "maximum": 32
          },
          "contrast": {
            "type": "number",
            "minimum": 0.7,
            "maximum": 1.9
          },
          "glitch": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "glyph": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "threshold": {
            "type": "number",
            "minimum": 0.05,
            "maximum": 1
          },
          "drift": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "smear": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "strobe": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "imageMix": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        }
      }
    }
  },
  "delivery": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "clipReady": {
        "type": "boolean"
      },
      "format": {
        "enum": [
          "mp4",
          "webm",
          "gif"
        ]
      },
      "media": {
        "enum": [
          "video-only",
          "video-audio"
        ]
      },
      "duration": {
        "enum": [
          "15s",
          "30s",
          "60s",
          "whole-song"
        ]
      },
      "resolution": {
        "enum": [
          "1280x720",
          "1920x1080",
          "1080x1080"
        ]
      },
      "fps": {
        "enum": [
          30,
          60
        ]
      },
      "includeAudio": {
        "type": "boolean"
      },
      "audioSource": {
        "enum": [
          "none",
          "uploaded-track",
          "generated-audio"
        ]
      },
      "openPanel": {
        "type": "boolean"
      }
    }
  }
}

Full schema JSON: /api/exoavt/terminal-bridge

Protocol page path: /recombinase/avterminal/protocol