Skip to the content.

Templates — the .avtheme format

One JSON file = one complete look: visual mode + parameters, background, text/logo layers (assets embedded as data URLs), timeline scenes, post chain, motion masters, plus metadata. Import by dropping the file onto the app window. Export via Settings → Templates → Save as template…

Templates contain no code. A template can only select and parameterize the app’s built-in visuals, so importing one is exactly as safe as clicking around the UI. Share them anywhere — a GitHub discussion, Discord, a zip. Community templates live in Discussions.

File layout

{
  "kind": "avtheme",
  "schemaVersion": 1, // .avtheme format version
  "projectSchemaVersion": 6, // embedded document schema (same as .avproj)
  "appVersion": "2.17.0", // app that wrote it (informational)
  "meta": {
    "name": "Midnight Phonk", // required
    "author": "you", // defaults to "unknown"
    "license": "CC0-1.0", // defaults to "unspecified"
    "description": "…", // optional
    "bpmHint": [120, 165], // optional [lo, hi] — a hint, not a gate
    "thumbnail": "data:image/png;base64,…", // optional, inline images only
  },
  "document": {
    "presetId": "bass-circle",
    "paramsByPreset": { "bass-circle": { "hue": 20 } }, // partial: rest = defaults
    "syncByPreset": { "bass-circle": { "mode": "kick", "smooth": 0.35 } },
    "bg": { "mode": 0, "color": [0, 0, 0] },
    "overlayLayers": [],
    "assets": {},
    "aspect": "16:9",
    "modsByPreset": {},
    "smoothSpectrum": false,
    "timeline": { "enabled": false, "scenes": [], "lanes": [] },
    "post": {
      "bloom": 0.45,
      "bloomThreshold": 0.8,
      "exposure": 1,
      "tonemap": true,
      "vignette": 0.35,
      "grain": 0,
      "chromatic": 0,
    },
    "motion": { "rotation": 1, "pulse": 1, "detail": 1, "spectrumSmooth": 0 },
  },
}

Compatibility rules

Authoring tips