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:
- Set up your screens, tiles, backgrounds, and extensions
- Open the main menu and select Save as Preset
- 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.pngPlugin 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:
| Field | Type | Description |
|---|---|---|
id | string | Unique preset identifier. |
label | string | Display name in the preset browser. |
description | string | Short description. |
version | string | Semantic version. |
icon | object | Icon image: { "$ref": "assets/icon.png" }. |
author | string | Preset author. |
category | string | Preset category. Examples: "Native", "Other". |
assets | array | Background images and other files. Each entry: { "id": "...", "$ref": "./assets/..." }. Valid IDs: "background" (background image), "screenshot" (preview image). |
state | object | The saved layout state (screens, tiles, and their configuration). |
The state object contains:
| Field | Type | Description |
|---|---|---|
currentScreen | string | ID of the screen shown when the preset loads. |
screens | array | Screen definitions – each with grid settings, background image, camera position, and a name. |
tiles | array | Tile 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 itsid. When a tile uses one of your plugin’s extensions, use that extension’sidvalue.
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" }
]
}