fm.freemix.release

lex-publisher.freemix.fm

{
  "id": "fm.freemix.release",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "kind",
          "title",
          "seller",
          "createdAt"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "maxLength": 50,
            "description": "The product form of the release (FM-549 s41: 8 values). OPEN enum by design — adding a kind later is a data change, not a lexicon change. `stems` = a stems bundle; `trackWithStems` = track + its stems; `samplePack` = samples as members; `djSet` = a DJ set.",
            "knownValues": [
              "single",
              "ep",
              "album",
              "compilation",
              "stems",
              "trackWithStems",
              "samplePack",
              "djSet"
            ]
          },
          "title": {
            "type": "string",
            "maxLength": 300,
            "description": "Release title."
          },
          "seller": {
            "type": "string",
            "format": "did",
            "description": "parties.seller (s39): the single account DID that owns and sells this release (owner = seller = uploader; may be an org account). Charge/entitlement read THIS field. INLINE — keep in sync."
          },
          "members": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "uri"
              ],
              "properties": {
                "cid": {
                  "type": "string",
                  "format": "cid",
                  "maxLength": 200,
                  "description": "CID of the member record (pins to exact version). Optional."
                },
                "uri": {
                  "type": "string",
                  "format": "at-uri",
                  "maxLength": 3000,
                  "description": "AT URI of the member leaf record (fm.freemix.track / .stem / .sample / .group.stems)."
                },
                "position": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Display order within the release (0-indexed)."
                }
              }
            },
            "maxLength": 200,
            "description": "Ordered member leaves of this release (FM-549 s38: containers point DOWN at members). Each is an AT-URI ref to a track / stem / sample / group.stems record."
          },
          "currency": {
            "type": "string",
            "maxLength": 3,
            "description": "ISO-4217 currency code. Phase 1 = USD only. INLINE sellability shape — keep in sync across sellable types.",
            "knownValues": [
              "USD"
            ]
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "maxLength": 100,
            "description": "Record creation timestamp."
          },
          "priceCents": {
            "type": "integer",
            "minimum": 0,
            "description": "On-network price in integer cents (FM-549: price on-network; offer public, sale private). 0 or absent = free. Hard price floor enforced in app, not schema. INLINE sellability shape — authored identically in fm.freemix.release and fm.freemix.group.stemsGroup; keep in sync (s41)."
          },
          "coverArtUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 3000,
            "description": "URL to cover art image."
          },
          "description": {
            "type": "string",
            "maxLength": 5000,
            "description": "Release description."
          },
          "coverArtHash": {
            "type": "string",
            "maxLength": 200,
            "description": "SHA-256 hash of the cover art."
          },
          "licenseSummary": {
            "type": "string",
            "maxLength": 100,
            "description": "DERIVED summary cache (FM-549 s40): the shared license value when all member leaves agree, or 'mixed' when they differ. Powers Browse license search + display. Recomputed at publish and on any post-publish leaf edit. READ-ONLY for sort/display — NEVER read by enforcement (gate/cascade/charge read the LEAF, not this)."
          },
          "royaltySummary": {
            "type": "string",
            "maxLength": 100,
            "description": "DERIVED summary cache (FM-549 s40): the shared royalty posture when member leaves agree, or 'mixed' when they differ. Same rules as licenseSummary — read-only, never read by enforcement. Royalties themselves stay track-level only."
          }
        }
      },
      "description": "A release: a top-level container that groups member leaves into a put-out work (FM-549 s38). Single-owner (distinct from collection.*, the curatorial multi-owner lens). Container points DOWN at its members."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

Validate Record

Validate a record against fm.freemix.release

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:bt7c6cqevgefnvej5cmgke4g
CID
bafyreie7ktqct3lep6m2ezffwn36sngwxwdqpyjl5kykkfg3qgdjgfb7hm
Indexed At
2026-07-26 20:07 UTC
AT-URI
at://did:plc:bt7c6cqevgefnvej5cmgke4g/com.atproto.lexicon.schema/fm.freemix.release

Lexicon Garden

@