fm.freemix.sample

lex-publisher.freemix.fm

Documentation

A sample: a first-class leaf audio record (FM-549 s38: promoted from a DB-only concept to a real ATProto record). A building block — samples carry a 0% royalty by tier principle and no structured credits/notes (s41).

main record

A sample: a first-class leaf audio record (FM-549 s38: promoted from a DB-only concept to a real ATProto record). A building block — samples carry a 0% royalty by tier principle and no structured credits/notes (s41).

Record Key tid Timestamp-based ID

Properties

aiDeclaration object Optional

Declaration of AI involvement in creation.

audioDurationMs integer Required

Duration of the sample in milliseconds.

audioFormat string Required

Audio file format.

maxLength: 100 bytes
Known values: wav, flac, mp3, aiff
audioHash string Required

SHA-256 hash of the sample audio content.

maxLength: 200 bytes
audioSizeBytes integer Required

Size of the audio file in bytes.

audioUrl string uri Optional

DEPRECATED-by-default (FM-508 parity): sample audio is private (gated download / app-served preview), not surfaced in the portable record. Samples never carry a public clip. Optional, tolerated for compatibility.

maxLength: 3000 bytes
bpmCentis integer Optional

Centi-BPM (BPM x 100), integer — decode as bpmCentis/100 on read. Mirrors the track/stem lexicons. Relevant for loops.

minimum: 2000maximum: 99900
coverArtUrl string uri Optional

URL to cover art image.

maxLength: 3000 bytes
createdAt string datetime Required

Record creation timestamp.

maxLength: 100 bytes
description string Optional

Sample description.

maxLength: 5000 bytes
genres array of string Optional

Genre classifications. Plural `genres` (it IS an array), matching the stem lexicon convention.

maxLength: 10 items
label string Required

Human-readable name (e.g., '808 Kick', 'Vinyl Crackle', 'Amen Break Chop').

maxLength: 100 bytes
license string at-uri Optional

AT URI of the license grant record. License lives on the leaf (s40).

maxLength: 3000 bytes
musicalKey string Optional

Musical key (e.g., 'Am', 'F#m', 'Bb'). Named musicalKey (collision-proof), matching the stem lexicon's intentional divergence from track's `key`.

maxLength: 10 bytes
parentGroup string at-uri Optional

AT URI of a parent group/release this sample belongs to (optional). Samples are referenceable as release/collection/samplePack members.

maxLength: 3000 bytes
sampleType string Required

Category of the sample. Note: one-shot vs loop/snippet matters for the sampling royalty cap at the product layer (one-shot 0%, loop/snippet capped) — but samples as an UPLOAD type carry 0% royalty by the tier principle.

maxLength: 100 bytes
Known values: oneShot, loop, snippet, fx, other
tags array of string Optional

Freeform tags.

maxLength: 10 items
title string Optional

Sample title. `label` remains the required human-readable name; `title` mirrors the stem lexicon's unified-on-title field.

maxLength: 300 bytes
View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "sampleType",
      "label",
      "audioHash",
      "audioDurationMs",
      "audioFormat",
      "audioSizeBytes",
      "createdAt"
    ],
    "properties": {
      "tags": {
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 50
        },
        "maxLength": 10,
        "description": "Freeform tags."
      },
      "label": {
        "type": "string",
        "maxLength": 100,
        "description": "Human-readable name (e.g., '808 Kick', 'Vinyl Crackle', 'Amen Break Chop')."
      },
      "title": {
        "type": "string",
        "maxLength": 300,
        "description": "Sample title. `label` remains the required human-readable name; `title` mirrors the stem lexicon's unified-on-title field."
      },
      "genres": {
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 50
        },
        "maxLength": 10,
        "description": "Genre classifications. Plural `genres` (it IS an array), matching the stem lexicon convention."
      },
      "license": {
        "type": "string",
        "format": "at-uri",
        "maxLength": 3000,
        "description": "AT URI of the license grant record. License lives on the leaf (s40)."
      },
      "audioUrl": {
        "type": "string",
        "format": "uri",
        "maxLength": 3000,
        "description": "DEPRECATED-by-default (FM-508 parity): sample audio is private (gated download / app-served preview), not surfaced in the portable record. Samples never carry a public clip. Optional, tolerated for compatibility."
      },
      "audioHash": {
        "type": "string",
        "maxLength": 200,
        "description": "SHA-256 hash of the sample audio content."
      },
      "bpmCentis": {
        "type": "integer",
        "maximum": 99900,
        "minimum": 2000,
        "description": "Centi-BPM (BPM x 100), integer — decode as bpmCentis/100 on read. Mirrors the track/stem lexicons. Relevant for loops."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "maxLength": 100,
        "description": "Record creation timestamp."
      },
      "musicalKey": {
        "type": "string",
        "maxLength": 10,
        "description": "Musical key (e.g., 'Am', 'F#m', 'Bb'). Named musicalKey (collision-proof), matching the stem lexicon's intentional divergence from track's `key`."
      },
      "sampleType": {
        "type": "string",
        "maxLength": 100,
        "description": "Category of the sample. Note: one-shot vs loop/snippet matters for the sampling royalty cap at the product layer (one-shot 0%, loop/snippet capped) — but samples as an UPLOAD type carry 0% royalty by the tier principle.",
        "knownValues": [
          "oneShot",
          "loop",
          "snippet",
          "fx",
          "other"
        ]
      },
      "audioFormat": {
        "type": "string",
        "maxLength": 100,
        "description": "Audio file format.",
        "knownValues": [
          "wav",
          "flac",
          "mp3",
          "aiff"
        ]
      },
      "coverArtUrl": {
        "type": "string",
        "format": "uri",
        "maxLength": 3000,
        "description": "URL to cover art image."
      },
      "description": {
        "type": "string",
        "maxLength": 5000,
        "description": "Sample description."
      },
      "parentGroup": {
        "type": "string",
        "format": "at-uri",
        "maxLength": 3000,
        "description": "AT URI of a parent group/release this sample belongs to (optional). Samples are referenceable as release/collection/samplePack members."
      },
      "aiDeclaration": {
        "type": "object",
        "required": [
          "category"
        ],
        "properties": {
          "tools": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "maxLength": 10,
            "description": "AI tools used."
          },
          "category": {
            "type": "string",
            "maxLength": 100,
            "description": "Level of AI involvement.",
            "knownValues": [
              "none",
              "assisted",
              "augmented",
              "generated"
            ]
          },
          "description": {
            "type": "string",
            "maxLength": 1000,
            "description": "Creator's description of how AI was used."
          }
        },
        "description": "Declaration of AI involvement in creation."
      },
      "audioSizeBytes": {
        "type": "integer",
        "description": "Size of the audio file in bytes."
      },
      "audioDurationMs": {
        "type": "integer",
        "description": "Duration of the sample in milliseconds."
      }
    }
  },
  "description": "A sample: a first-class leaf audio record (FM-549 s38: promoted from a DB-only concept to a real ATProto record). A building block — samples carry a 0% royalty by tier principle and no structured credits/notes (s41)."
}

Lexicon Garden

@