actor.rpg.generator

rpg.actor

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "colors": {
      "description": "Selected recolor channels.",
      "properties": {
        "main": {
          "maxLength": 7,
          "type": "string"
        },
        "sub1": {
          "maxLength": 7,
          "type": "string"
        },
        "sub2": {
          "maxLength": 7,
          "type": "string"
        },
        "sub3": {
          "maxLength": 7,
          "type": "string"
        }
      },
      "type": "object"
    },
    "eyes": {
      "description": "Eye color configuration.",
      "properties": {
        "hex": {
          "maxLength": 7,
          "type": "string"
        },
        "mode": {
          "maxLength": 10,
          "type": "string"
        },
        "tone": {
          "maximum": 100,
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "fallback": {
      "description": "Rendered replacement used when a layer is class-suppressed.",
      "properties": {
        "assetName": {
          "maxLength": 100,
          "type": "string"
        },
        "behindRows": {
          "items": {
            "maximum": 3,
            "minimum": 0,
            "type": "integer"
          },
          "maxLength": 4,
          "type": "array"
        },
        "blob": {
          "accept": [
            "image/png"
          ],
          "maxSize": 1000000,
          "type": "blob"
        },
        "colors": {
          "ref": "#colors",
          "type": "ref"
        },
        "subtractMask": {
          "accept": [
            "image/png"
          ],
          "maxSize": 50000,
          "type": "blob"
        },
        "title": {
          "maxLength": 100,
          "type": "string"
        },
        "zSlot": {
          "maximum": 30,
          "minimum": 0,
          "type": "integer"
        },
        "zSlotByDir": {
          "type": "unknown"
        }
      },
      "required": [
        "assetName",
        "blob"
      ],
      "type": "object"
    },
    "layer": {
      "description": "A rendered generator layer and its recomposition metadata.",
      "properties": {
        "assetName": {
          "maxLength": 100,
          "type": "string"
        },
        "behindRows": {
          "description": "Rows rendered behind the body. Empty explicitly means all rows render in front.",
          "items": {
            "maximum": 3,
            "minimum": 0,
            "type": "integer"
          },
          "maxLength": 4,
          "type": "array"
        },
        "blob": {
          "accept": [
            "image/png"
          ],
          "maxSize": 1000000,
          "type": "blob"
        },
        "colors": {
          "ref": "#colors",
          "type": "ref"
        },
        "disabled": {
          "type": "boolean"
        },
        "id": {
          "maxLength": 30,
          "type": "string"
        },
        "layerClass": {
          "description": "Class assigned to this layer, such as hind.cloak.",
          "maxLength": 90,
          "type": "string"
        },
        "submaskExclusions": {
          "description": "Target-side exceptions to submaskRule. The layers array contains exact canonical source layer IDs and the classes array contains exact source layerClass or fitClass values; matching source masks are skipped before submaskRule is evaluated. Omission or empty arrays means no source-specific exclusions.",
          "ref": "#submaskExclusions",
          "type": "ref"
        },
        "submaskRule": {
          "description": "Controls which external subtractive masks may affect this layer. Omission means respect-all.",
          "knownValues": [
            "respect-all",
            "ignore-all",
            "ignore-layers-above",
            "ignore-layers-below"
          ],
          "maxLength": 24,
          "type": "string"
        },
        "subtractMask": {
          "accept": [
            "image/png"
          ],
          "maxSize": 50000,
          "type": "blob"
        },
        "suppress": {
          "ref": "#suppressionRules",
          "type": "ref"
        },
        "suppressAs": {
          "ref": "#fallback",
          "type": "ref"
        },
        "suppressSpecific": {
          "description": "Map from suppressor layerClass to either a structured fallback matching #fallback or a rule with default and bodyTypeAlt fallbacks. The active body-specific value takes priority over the class default, then suppressAs.",
          "type": "unknown"
        },
        "title": {
          "maxLength": 100,
          "type": "string"
        },
        "zSlot": {
          "description": "Legacy all-direction draw-order slot. zSlotByDir takes precedence.",
          "maximum": 30,
          "minimum": 0,
          "type": "integer"
        },
        "zSlotByDir": {
          "description": "Per-direction draw-order slots [down, left, right, up]. Entries are non-negative integers or null when the category default applies.",
          "type": "unknown"
        }
      },
      "required": [
        "id",
        "blob"
      ],
      "type": "object"
    },
    "main": {
      "description": "Stores the recolored layers and configuration used to rebuild a generated sprite.",
      "key": "literal:self",
      "record": {
        "properties": {
          "bodyType": {
            "maxLength": 20,
            "type": "string"
          },
          "createdAt": {
            "format": "datetime",
            "type": "string"
          },
          "eyes": {
            "ref": "#eyes",
            "type": "ref"
          },
          "faceMode": {
            "description": "Whether face layers are selected intentionally. Omission is reserved for legacy records pending migration.",
            "knownValues": [
              "standard",
              "faceless"
            ],
            "type": "string"
          },
          "items": {
            "items": {
              "maxLength": 50,
              "type": "string"
            },
            "maxLength": 20,
            "type": "array"
          },
          "layers": {
            "description": "Ordered recolored layers, back-to-front.",
            "items": {
              "ref": "#layer",
              "type": "ref"
            },
            "maxLength": 32,
            "type": "array"
          },
          "skin": {
            "ref": "#skin",
            "type": "ref"
          },
          "updatedAt": {
            "format": "datetime",
            "type": "string"
          }
        },
        "required": [
          "bodyType",
          "skin",
          "eyes",
          "layers",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "skin": {
      "description": "Skin color configuration.",
      "properties": {
        "hex": {
          "maxLength": 7,
          "type": "string"
        },
        "mode": {
          "maxLength": 10,
          "type": "string"
        },
        "tone": {
          "maximum": 100,
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "submaskExclusions": {
      "description": "Target-side exceptions for subtractive masks. List exact canonical source layer IDs in layers, or exact source layerClass or fitClass values in classes; matching source masks must not erase the target layer. Omission or empty arrays means no source-specific exclusions.",
      "properties": {
        "classes": {
          "description": "Exact source layerClass or fitClass values whose subtractive masks must be skipped.",
          "items": {
            "maxLength": 90,
            "type": "string"
          },
          "maxLength": 64,
          "type": "array"
        },
        "layers": {
          "description": "Exact canonical source layer IDs whose subtractive masks must be skipped.",
          "items": {
            "maxLength": 30,
            "type": "string"
          },
          "maxLength": 32,
          "type": "array"
        }
      },
      "type": "object"
    },
    "suppressionRules": {
      "description": "Layer IDs and classes hidden while this layer is active.",
      "properties": {
        "classes": {
          "items": {
            "maxLength": 90,
            "type": "string"
          },
          "maxLength": 20,
          "type": "array"
        },
        "layers": {
          "items": {
            "maxLength": 30,
            "type": "string"
          },
          "maxLength": 20,
          "type": "array"
        }
      },
      "type": "object"
    }
  },
  "description": "Generator metadata and decomposed layers for a sprite built with the rpg.actor sprite generator.",
  "id": "actor.rpg.generator",
  "lexicon": 1
}

Validate Record

Validate a record against actor.rpg.generator

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:kwgllf365cwmxbnxitx4pjdj
CID
bafyreianalehdfwlakfry7ohafwz3wotzs64wvojg7f4job54eono7xshe
Indexed At
2026-10-09 12:54 UTC
AT-URI
at://did:plc:kwgllf365cwmxbnxitx4pjdj/com.atproto.lexicon.schema/actor.rpg.generator

Version History (3 versions)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • A player's owned item, accepted from a provider's give record. Lives on the player's PDS.

Lexicon Garden

@