# app.tempomusic.actor.profile

> Published by [lexicons.tempomusic.fan](https://lexicon.garden/identity/did:plc:pxsuqmultto34oks44m2lgxm)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:pxsuqmultto34oks44m2lgxm/app.tempomusic.actor.profile)
- [Documentation](https://lexicon.garden/lexicon/did:plc:pxsuqmultto34oks44m2lgxm/app.tempomusic.actor.profile/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:pxsuqmultto34oks44m2lgxm/app.tempomusic.actor.profile/examples)

## Definitions

### `app.tempomusic.actor.profile`

**Type**: `record`

Customizable profile attributes for a Tempo actor. Stored as a singleton per repository under the literal record key 'self'.

**Key**: `literal:self`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `avatar` | `union` | No | Actor's avatar selection. Open union: currently only catalog-based avatars; future variants (e.g. custom blob upload) may be added without a breaking change. |
| `createdAt` | `string` (datetime) | Yes | Client-declared timestamp when this revision of the profile was authored. NOTE: with the singleton 'self' key, this advances on every edit; it is NOT a ToS-acceptance baseline. AppViews wanting an immutable first-acceptance timestamp must capture it separately. |
| `displayName` | `string` | Yes | User-chosen display name shown in posts, replies and profile views. Bounded in graphemes (visible characters) so the UI can render it predictably; the byte budget is set to 10x the grapheme budget to leave headroom for multi-byte UTF-8 sequences. |

### `app.tempomusic.actor.profile#catalogAvatar`

**Type**: `object`

Reference to an avatar from the curated illustration catalog bundled with Tempo clients. The avatar is composed of (1) a character illustration identified by `id` and (2) a background color identified by `backgroundColor`. Clients resolve both against their local catalog/theme at render time and fall back to defaults when a value is unknown.

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | `string` | Yes | Stable catalog identifier (e.g. 'hoodie_jacket'). Lowercase ASCII with underscores; opaque to the protocol. |
| `backgroundColor` | `string` | Yes | Stable identifier of the background color, resolved by the client against the Tempo extended theme palette. `knownValues` is informational; AppViews and clients MUST accept unknown values gracefully so the palette can grow non-breakingly. |

## Raw Schema

```json
{
  "id": "app.tempomusic.actor.profile",
  "defs": {
    "main": {
      "key": "literal:self",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "displayName",
          "createdAt"
        ],
        "properties": {
          "avatar": {
            "refs": [
              "#catalogAvatar"
            ],
            "type": "union",
            "description": "Actor's avatar selection. Open union: currently only catalog-based avatars; future variants (e.g. custom blob upload) may be added without a breaking change."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Client-declared timestamp when this revision of the profile was authored. NOTE: with the singleton 'self' key, this advances on every edit; it is NOT a ToS-acceptance baseline. AppViews wanting an immutable first-acceptance timestamp must capture it separately."
          },
          "displayName": {
            "type": "string",
            "maxLength": 180,
            "minLength": 1,
            "description": "User-chosen display name shown in posts, replies and profile views. Bounded in graphemes (visible characters) so the UI can render it predictably; the byte budget is set to 10x the grapheme budget to leave headroom for multi-byte UTF-8 sequences.",
            "maxGraphemes": 18
          }
        }
      },
      "description": "Customizable profile attributes for a Tempo actor. Stored as a singleton per repository under the literal record key 'self'."
    },
    "catalogAvatar": {
      "type": "object",
      "required": [
        "id",
        "backgroundColor"
      ],
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 64,
          "description": "Stable catalog identifier (e.g. 'hoodie_jacket'). Lowercase ASCII with underscores; opaque to the protocol."
        },
        "backgroundColor": {
          "type": "string",
          "maxLength": 32,
          "description": "Stable identifier of the background color, resolved by the client against the Tempo extended theme palette. `knownValues` is informational; AppViews and clients MUST accept unknown values gracefully so the palette can grow non-breakingly.",
          "knownValues": [
            "userOrange",
            "userBlue",
            "userPink",
            "userRed",
            "userCyan",
            "userGrey"
          ]
        }
      },
      "description": "Reference to an avatar from the curated illustration catalog bundled with Tempo clients. The avatar is composed of (1) a character illustration identified by `id` and (2) a background color identified by `backgroundColor`. Clients resolve both against their local catalog/theme at render time and fall back to defaults when a value is unknown."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
