An item in the player's inventory. Self-contained with all data needed for rendering and display. The give URI and assetCid enable verification against the provider's attestation. Each record is one item.
any
Any valid record key
Properties
acceptedAt
string
datetime
Required
When the player accepted this item.
asset
blob
Optional
The item's sprite layer artwork (144x192 PNG). Required for 'layer' items, optional for 'inventory' items.
assetCid
string
Optional
CID of the canonical asset PNG, copied from the give. Matches the asset blob's ref when the copy is genuine.
maxLength: 200 bytesbehindRows
array
of
integer
Optional
Sprite-sheet row indices (0-3) where this layer composites behind the body via destination-over blending. Row 0=down, 1=left, 2=right, 3=up. Omit for normal source-over on all rows.
maxLength: 4 itemsbodyTypeAlt
unknown
Optional
Per-body-class alternate artwork map. Keys such as body.feminine map to structured fallbacks matching #fallback.
category
string
Optional
Generator layer category for 'layer' items (e.g. 'tops', 'righthand'). Ignored for 'inventory' items.
maxLength: 30 byteschannels
array
of
ref
#channel
Optional
Color channels defined by this item's colorway. Each entry names a recolorable region and declares its sentinel color and optional default.
maxLength: 8 itemscolorway
blob
Optional
Colorway map (_c) for the asset. A 144x192 PNG with sentinel-colored pixels indicating recolorable regions. Required for 'layer' items that support recoloring.
context
string
Optional
Origin description copied from the give record.
maxLength: 200 bytesdescription
string
Optional
Flavour text or description.
maxLength: 500 bytesfitClass
string
Optional
Fit-class tag for this item (format <category>.<name>) used by class-based suppression.
maxLength: 90 bytesgive
string
at-uri
Required
AT URI of the equipment.rpg.give record on the provider's PDS.
icon
blob
Optional
Small standalone icon for the item (e.g. 64x64 PNG). Used in inventory displays and profile panels.
iconCid
string
Optional
CID of the canonical icon PNG, copied from the give. Matches the icon blob's ref when the copy is genuine. Omit if there's no icon.
maxLength: 200 bytesitem
string
Required
Item identifier matching the give record (e.g. 'popcorn', 'theatre_shirt').
maxLength: 50 byteskind
string
Optional
Item kind. 'layer' for sprite-generator wearables (requires category + asset). For non-wearable inventory items, use any descriptive type string such as 'badge', 'potion', 'map', 'key', 'ticket', etc. This value is shown as the item's type label in the player's inventory. Defaults to 'layer' if omitted.
maxLength: 20 bytesprovider
string
did
Required
DID of the provider who gave this item.
stats
unknown
Optional
Item properties copied from the give record at acceptance time.
submaskExclusions
ref
#submaskExclusions
Optional
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.
submaskRule
string
Optional
Controls which external subtractive masks may affect this asset. Omission means respect-all.
maxLength: 24 bytesrespect-all, ignore-all, ignore-layers-above, ignore-layers-belowsuppress
ref
#suppressionRules
Optional
No description available.
suppressAs
string
Optional
When this item is suppressed, render this same-category item name instead (e.g. replace pigtails with basic short).
maxLength: 120 bytessuppressAsFallback
ref
#fallback
Optional
Self-contained artwork for suppressAs when the fallback is not otherwise available to the generator.
suppressClasses
array
of
string
Optional
Fit-class identifiers that should be hidden while this item is equipped (e.g. hide all items tagged hair.*).
maxLength: 20 itemssuppressLayers
array
of
string
Optional
Layer IDs that should be hidden while this item is equipped (e.g. a hat suppressing hair and bangs).
maxLength: 20 itemssuppressSpecific
unknown
Optional
Per-suppressor override map. Values may be a structured #fallback or a rule with default and bodyTypeAlt fallbacks. The active body-specific value takes priority over the class default, then suppressAs.
title
string
Required
Display name for the item.
maxLength: 100 byteszSlot
integer
Optional
Legacy all-direction draw-order slot. zSlotByDir takes precedence.
minimum: 0maximum: 30zSlotByDir
unknown
Optional
Per-direction draw-order slots [down, left, right, up]. Entries are non-negative integers or null when the category default applies.
View raw schema
{
"description": "An item in the player's inventory. Self-contained with all data needed for rendering and display. The give URI and assetCid enable verification against the provider's attestation. Each record is one item.",
"key": "any",
"record": {
"properties": {
"acceptedAt": {
"description": "When the player accepted this item.",
"format": "datetime",
"type": "string"
},
"asset": {
"accept": [
"image/png"
],
"description": "The item's sprite layer artwork (144x192 PNG). Required for 'layer' items, optional for 'inventory' items.",
"type": "blob"
},
"assetCid": {
"description": "CID of the canonical asset PNG, copied from the give. Matches the asset blob's ref when the copy is genuine.",
"maxLength": 200,
"type": "string"
},
"behindRows": {
"description": "Sprite-sheet row indices (0-3) where this layer composites behind the body via destination-over blending. Row 0=down, 1=left, 2=right, 3=up. Omit for normal source-over on all rows.",
"items": {
"maximum": 3,
"minimum": 0,
"type": "integer"
},
"maxLength": 4,
"type": "array"
},
"bodyTypeAlt": {
"description": "Per-body-class alternate artwork map. Keys such as body.feminine map to structured fallbacks matching #fallback.",
"type": "unknown"
},
"category": {
"description": "Generator layer category for 'layer' items (e.g. 'tops', 'righthand'). Ignored for 'inventory' items.",
"maxLength": 30,
"type": "string"
},
"channels": {
"description": "Color channels defined by this item's colorway. Each entry names a recolorable region and declares its sentinel color and optional default.",
"items": {
"ref": "#channel",
"type": "ref"
},
"maxLength": 8,
"type": "array"
},
"colorway": {
"accept": [
"image/png"
],
"description": "Colorway map (_c) for the asset. A 144x192 PNG with sentinel-colored pixels indicating recolorable regions. Required for 'layer' items that support recoloring.",
"type": "blob"
},
"context": {
"description": "Origin description copied from the give record.",
"maxLength": 200,
"type": "string"
},
"description": {
"description": "Flavour text or description.",
"maxLength": 500,
"type": "string"
},
"fitClass": {
"description": "Fit-class tag for this item (format <category>.<name>) used by class-based suppression.",
"maxLength": 90,
"type": "string"
},
"give": {
"description": "AT URI of the equipment.rpg.give record on the provider's PDS.",
"format": "at-uri",
"type": "string"
},
"icon": {
"accept": [
"image/png"
],
"description": "Small standalone icon for the item (e.g. 64x64 PNG). Used in inventory displays and profile panels.",
"type": "blob"
},
"iconCid": {
"description": "CID of the canonical icon PNG, copied from the give. Matches the icon blob's ref when the copy is genuine. Omit if there's no icon.",
"maxLength": 200,
"type": "string"
},
"item": {
"description": "Item identifier matching the give record (e.g. 'popcorn', 'theatre_shirt').",
"maxLength": 50,
"type": "string"
},
"kind": {
"description": "Item kind. 'layer' for sprite-generator wearables (requires category + asset). For non-wearable inventory items, use any descriptive type string such as 'badge', 'potion', 'map', 'key', 'ticket', etc. This value is shown as the item's type label in the player's inventory. Defaults to 'layer' if omitted.",
"maxLength": 20,
"type": "string"
},
"provider": {
"description": "DID of the provider who gave this item.",
"format": "did",
"type": "string"
},
"stats": {
"description": "Item properties copied from the give record at acceptance time.",
"type": "unknown"
},
"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 asset. Omission means respect-all.",
"knownValues": [
"respect-all",
"ignore-all",
"ignore-layers-above",
"ignore-layers-below"
],
"maxLength": 24,
"type": "string"
},
"suppress": {
"ref": "#suppressionRules",
"type": "ref"
},
"suppressAs": {
"description": "When this item is suppressed, render this same-category item name instead (e.g. replace pigtails with basic short).",
"maxLength": 120,
"type": "string"
},
"suppressAsFallback": {
"description": "Self-contained artwork for suppressAs when the fallback is not otherwise available to the generator.",
"ref": "#fallback",
"type": "ref"
},
"suppressClasses": {
"description": "Fit-class identifiers that should be hidden while this item is equipped (e.g. hide all items tagged hair.*).",
"items": {
"maxLength": 90,
"type": "string"
},
"maxLength": 20,
"type": "array"
},
"suppressLayers": {
"description": "Layer IDs that should be hidden while this item is equipped (e.g. a hat suppressing hair and bangs).",
"items": {
"maxLength": 30,
"type": "string"
},
"maxLength": 20,
"type": "array"
},
"suppressSpecific": {
"description": "Per-suppressor override map. Values may be a structured #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": {
"description": "Display name for the item.",
"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": [
"item",
"title",
"give",
"provider",
"acceptedAt"
],
"type": "object"
},
"type": "record"
}