Presets

Presets are premade GM screens – complete layouts with screens, tiles, extensions, and backgrounds that other GMs can load and start using immediately. A preset might contain screens for each scene in an adventure module, or a ready-to-go encounter setup with initiative trackers, maps, and character sheets already arranged. The goal is less prep time and more time playing.

Creating a preset

The easiest way to create a preset is to build the layout you want in Overseer, then export it:

  1. Set up your screens, tiles, backgrounds, and extensions
  2. Open the main menu and select Save as Preset
  3. Overseer exports the layout as a preset manifest with all referenced assets

The exported files can then be packaged as a plugin.

Packaging a preset as a plugin

Wrap the exported preset in a plugin directory:

Directory structure

@myname/curse-of-strahd/
  manifest.json
  presets/
    manifest.json
    assets/
      castle-ravenloft.jpg
      village-of-barovia.jpg
      icon.png

Plugin manifest

The plugin manifest references the preset via $ref:

{
  "id": "@myname/curse-of-strahd",
  "name": "Curse of Strahd",
  "version": "1.0.0",
  "author": "Your Name",
  "description": "Ready-to-play GM screens for Curse of Strahd.",
  "presets": [
    { "$ref": "presets/manifest.json" }
  ]
}

Preset manifest

The preset manifest defines the full layout. Key fields:

FieldTypeDescription
idstringUnique preset identifier.
labelstringDisplay name in the preset browser.
descriptionstringShort description.
versionstringSemantic version.
iconobjectIcon image: { "$ref": "assets/icon.png" }.
authorstringPreset author.
categorystringPreset category. Examples: "Native", "Other".
assetsarrayBackground images and other files. Each entry: { "id": "...", "$ref": "./assets/..." }. Valid IDs: "background" (background image), "screenshot" (preview image).
stateobjectThe saved layout state (screens, tiles, and their configuration).

The state object contains:

FieldTypeDescription
currentScreenstringID of the screen shown when the preset loads.
screensarrayScreen definitions – each with grid settings, background image, camera position, and a name.
tilesarrayTile definitions – each with position, size, assigned extension, and configuration values.

A few fields worth noting:

  • gridColor – Grid color as a decimal integer. Convert from hex: 0x717171 = 7434609. Use any hex-to-decimal converter.
  • type (on tiles) – References an extension by its id. When a tile uses one of your plugin’s extensions, use that extension’s id value.

Example: Preset manifest

{
  "id": "@myname/curse-of-strahd-preset",
  "label": "Curse of Strahd",
  "description": "Three screens covering the opening scenes of Curse of Strahd.",
  "version": "1.0.0",
  "icon": { "$ref": "./assets/icon.png" },
  "author": "Your Name",
  "category": "Other",
  "assets": [
    { "id": "background", "$ref": "./assets/castle-ravenloft.jpg" },
    { "id": "screenshot", "$ref": "./assets/screenshot.png" }
  ],
  "state": {
    "currentScreen": "village",
    "screens": [
      {
        "id": "village",
        "name": "Village of Barovia",
        "backgroundPath": { "$ref": "./assets/village-of-barovia.jpg" },
        "camera": { "x": 6000, "y": 6000, "height": 900, "width": 1200 },
        "gridSize": 60,
        "gridStyle": "dots",
        "gridColor": 7434609,
        "gridGap": 0,
        "enableCollision": false,
        "lockGrid": false,
        "lockPan": false,
        "lockZoom": false
      },
      {
        "id": "castle",
        "name": "Castle Ravenloft",
        "backgroundPath": { "$ref": "./assets/castle-ravenloft.jpg" },
        "camera": { "x": 6000, "y": 6000, "height": 900, "width": 1200 },
        "gridSize": 60,
        "gridStyle": "dots",
        "gridColor": 7434609,
        "gridGap": 0,
        "enableCollision": false,
        "lockGrid": false,
        "lockPan": false,
        "lockZoom": false
      }
    ],
    "tiles": [
      {
        "id": "tile-notes",
        "screenId": "village",
        "name": "Session Notes",
        "type": "@myname/session-notes",
        "config": {
          "title": "Village of Barovia"
        },
        "x": 5400,
        "y": 5700,
        "width": 600,
        "height": 400,
        "visible": true,
        "locked": false,
        "transparent": false,
        "fullScreen": false,
        "parentId": null
      }
    ]
  }
}

Multiple presets in one plugin

A plugin can package several presets – for example, one per chapter of an adventure:

{
  "id": "@myname/adventure-pack",
  "name": "Adventure Pack",
  "version": "1.0.0",
  "presets": [
    { "$ref": "presets/chapter-1/manifest.json" },
    { "$ref": "presets/chapter-2/manifest.json" },
    { "$ref": "presets/chapter-3/manifest.json" }
  ]
}

Mixing presets with other content

Plugins can include presets alongside extensions, themes, or locales. For example, a plugin could ship a custom initiative tracker extension and a preset that uses it:

{
  "id": "@myname/encounter-kit",
  "name": "Encounter Kit",
  "version": "1.0.0",
  "extensions": [
    { "$ref": "extensions/initiative-tracker/manifest.json" }
  ],
  "presets": [
    { "$ref": "presets/manifest.json" }
  ]
}