at.meme-museum.meme

A single meme asset (still image, animated image, or short video clip) in a user's library.

Repository @meme-museum.at did:plc:rerdjlp4sbpnw6m3t35m27zb namespace authority
Details · record, key tid
Kindrecord
Record keytid
Authoritymeme-museum.at
Indexed

Record

record · key tid

Properties

alt

requiredstring

Accessibility alt text. Required, same convention as app.bsky.embed.images.

  • maxLength: 2000
  • maxGraphemes: 1000

createdAt

requiredstring · datetime

duration

integer

Video memes only: clip length in milliseconds, read client-side at upload time. Omitted when the browser couldn't decode metadata for the picked file.

  • minimum: 1

height

integer
  • minimum: 1

image

blob

The asset, when this meme is an image. Exactly one of image/video is set -- a constraint Lexicon can't express, so it's enforced client-side. Neither is required here so that adding video didn't have to break records written before it existed. maxSize matches the atproto PDS default blob upload cap (5 MiB) rather than exceeding it: a larger ceiling here would only describe memes that are schema-valid and impossible to store, since the PDS refuses the blob with a 413 long before the record is ever written.

  • maxSize: 5242880
  • accept: image/png, image/jpeg, image/webp, image/gif

isAnimated

boolean

Image memes only: set client-side from frame-count inspection at upload time, since it isn't reliably inferable from mimetype alone. Not written for video, where it would be trivially true.

Animated images only: an mp4 rendition of `image`, so posting an animated GIF doesn't lose its animation. Bluesky serves post image embeds through a CDN that re-encodes to JPEG, flattening any animation, so an animated image is posted as app.bsky.embed.video with presentation=gif instead -- and that embed only plays blobs Bluesky's own video service produced. Transcoded once at save time, like `video`. Not the asset: `image` remains what the library displays and what this meme fundamentally is.

  • maxSize: 100000000
  • accept: video/mp4
Reference

tags

array
  • maxLength: 25
itemsstring
  • maxLength: 64

title

string

Short human label for the meme, distinct from alt text (e.g. "distracted boyfriend").

  • maxLength: 300
  • maxGraphemes: 100

video

blob

The asset, when this meme is a video clip. Always mp4 regardless of what the user picked: the blob is the one Bluesky's video service transcodes and writes back to the PDS, and app.bsky.embed.video accepts nothing else.

  • maxSize: 100000000
  • accept: video/mp4

Soft signal only, not access control -- see docs/data-model.md.

  • maxLength: 64
  • default: "public"
  • knownValues: public | unlisted

width

integer
  • minimum: 1

#source

object

Provenance/attribution for a meme, if known.

Properties

importedFrom

string · at-uri

If copied in from another ATProto app's or user's collection, the original record's at-uri.

note

string

Free-text credit, e.g. "via @someone.bsky.social".

  • maxLength: 500

url

string · uri

A webpage the image came from, if relevant.

Similar lexicons

semantic match

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