







The tiles appendix recommends `application/octet-stream` as the `mimeType` of every blob reference. On some PDS implementations that recommendation makes a tile unpublishable as soon as it contains a file whose type can be recognised from its bytes. The reference implementation (bluesky-social/atproto, packages/pds, actor-`store/blob/transactor.ts`) does two things that together cause it: - On `com.atproto.repo.uploadBlob` it sniffs the bytes and stores the blob under the type it recognises (`image/png`, `audio/wav`, `font/woff2`, ...). The type the upload declared is used only when nothing is recognised, which is the case for HTML, CSS, JavaScript and JSON. - When a record that references a newly uploaded blob is written, it compares the reference's `mimeType` with the stored type and refuses the whole write if they differ: "Referenced Mimetype does not match stored blob. Expected: image/png". So a publisher that follows the appendix and writes `application/octet-stream` everywhere succeeds for a tile made only of text, and fails at the `com.atproto.repo.putRecord` of the tile's record for any tile with an image, a sound or a font in it. appmosphe.re's publish page does exactly this and fails that way, for example with "Expected: audio/wav" for a tile carrying a WAV sample. `atile publish` does not fail, because it sniffs each file itself with the same file-type library and writes what it finds; that only works as long as its sniffing agrees with that of the implementation it publishes to. `uploadBlob` already answers with the complete blob reference, `mimeType` included. Using that reference as the resource's src is correct on every implementation: one that sniffs reports the type it stored, and one that does not reports the declared `application/octet-stream`, which is what the appendix recommended before. The content-type the tile is served with stays separate and unaffected.
Blob store design challenges
It's just hashed data, what's so complex about a blob store anyway?
Blooym/porxie
[Mirror] A correct and efficient ATProto blob proxy for secure content delivery.
blooym.dev/porxie
[MIRROR ONLY] A correct and efficient ATProto blob proxy for secure content delivery.
bluesky-social/atproto | DeepWiki
This documentation describes the AT Protocol TypeScript reference implementation maintained in the $1 repository. This implementation provides both the core protocol libraries and the reference servic

SkyLink - Bluesky DID Detector - Chrome Web Store
Detects Bluesky DIDs in domain TXT records and .well-known/atproto-did files, linking to the associated profile.
Content Model & Wire Format — szzt docs
The on-PDS content model and the wire formats of a Szzt (a.k.a. "Mini-Site" / @minisite) mini-site: the three atproto records that describe a site, the StrongRef links between them, the CID codecs, the byte encodings, and how a served request path resolves to a specific block of bytes. A compatible publisher writes these records; a compatible verifier re-derives every CID from signed state and trusts no source's assertion.
Pinata | Autonomous File Storage
Add file uploads and retrieval in minutes so you can focus on your app —because you’ve got better things to code than infrastructure.

Hey @dholms.at, do you have plans for blobs in spaces? We're chatting about it on @iame.li's stream. The proposal says blobs are uploaded to space host, right? That makes sense when the space host is a PDS because it has `com.atproto.repo.uploadBlob`, but not if the space host is something else.
at this point for each day that goes i hate the atproto blob type more and more. like. not blobs themselves at all. but the damn data model representation of a blob reference. why does it have the mime type there ... arguably even the size. could technically even just be a plain CID link but cant
devs working with bsky image embeds: we are planning to bump the image embed blob max size from 1 MByte to 2 MByte. first in the lexicon schema, and then in the Bluesky Social app. more about impacts, and what this means in terms of lexicon evolution, in this github discussion
Increasing Bluesky Post Image Size Limit · bluesky-social atproto · Discussion #4832
github.com