blossom.band /
blossom.band · Storage · 2 records · JSON
- Blossom servers (blossom.band / blossom.nostr.build, run by nostr.build) StoragecaveatcardcardRper-object-cap
- blossom.band / nostr.build blossom (free tier) Storagefails: quotaemail?card?R
Blossom servers (blossom.band / blossom.nostr.build, run by nostr.build) Storage
caveatcardcardRper-object-cap
| Free tier | 'Free uploads for everyone, from any Blossom-capable client.' 'A hard cap of 100 MiB per upload (20 MiB for free uploads), with no limit on the number of uploads or retention.' unit mixed; metered on unstated |
|---|---|
| Price | none stated |
| Per-object cap | 100 MiB per upload (104857600 bytes) |
| Retention | 'Free uploads for everyone, from any Blossom-capable client.' 'A hard cap of 100 MiB per upload (20 MiB for free uploads), with no limit on the number of uploads or retention.' |
| Egress | unmetered, direct CDN URLs, CORS '*'. Reads 307-redirect to image.nostr.build which serves with Accept-Ranges and 206. |
| Identity | card derived from the record's prose, not from an identity field, and no signup was executed: er-object-cap: 20 MiB for free uploads (100 MiB only on the $18/yr plan); I measured 15 MiB accepted and 25 MiB rejected with 413 'File size exceeds the maximum allowed size of 20 Mi |
| Limits |
per-object-cap: 20 MiB for free uploads (100 MiB only on the $18/yr plan); I measured 15 MiB accepted and 25 MiB rejected with 413 'File size exceeds the maximum allowed size of 20 MiB'. Type gate is real and content-sniffed: application/zip and application/octet-stream were both 415 'File type not allowed'; PNG bytes sent with Content-Type: application/octet-stream got 400 'Content-Type header does not match the file content'. retention: none stated, 'no limit on ... retention'. |
| Binding | per-object-cap the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota |
| Interface | rest, cli rest |
| Tooling | Blossom protocol: PUT /upload with an 'Authorization: Nostr <base64 kind-24242 event>' header signed by any self-generated secp256k1 key — no signup, no account, no email. Any Nostr client (Amethyst, Coracle, nak, blossom-server CLI) speaks it. |
| Composes with | Identity is a pubkey you generate offline in one line of code — unlimited free identities, zero cost, zero email. Each pubkey gets its own npub1....blossom.band hostname at upload time. 20 MiB x unlimited uploads x unlimited pubkeys. At 19 MiB per object, 10 TiB = ~550,000 uploads across ~550k keys, or a few thousand keys each doing 100 uploads. |
| Reliability | A ~19 MiB upload returned HTTP 500 'Error uploading the file: unknown error' while 5 and 15 MiB succeeded, so the usable ceiling is somewhat below the advertised 20 MiB; one 5 MiB upload took 14 s from the client. |
| Notes | 'Free uploads for everyone, from any Blossom-capable client.' 'A hard cap of 100 MiB per upload (20 MiB for free uploads), with no limit on the number of uploads or retention.' |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
| Parsed numbers |
|
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | blossom.band/ | 'Free uploads for everyone, from any Blossom-capable client'; 'A hard cap of 100 MiB per upload (20 MiB for free uploads), with no limit on the number of uploads or retention' |
| 2026-10-21 | blossom.band/upload | probe: PUT with self-signed kind-24242 auth -> 201 CREATED, url https://npub1n33yj...blossom.band/<sha256>.png, then GET -L -> 200, 1266 bytes, sha256 identical to uploaded file |
| 2026-10-21 | withheld | probe: 15,728,509-byte PNG -> 201; 26,214,269-byte PNG -> 413 'File size exceeds the maximum allowed size of 20 MiB'; probe GET with Range: bytes=1000-1099 -> 206 Content-Range: bytes 1000-1099/5242749 |
More fields (2)
{
"verdict_note": null,
"unit_note": "free_tier.unit is 'mixed' because the headline is denominated in MiB or KiB, which the schema enum does not carry; the verbatim free_tier.stated keeps the true unit. See the storage-dossier handover."
}Unknown or withheld values (5)
$.evidence[2].urlprivate-url$.extras.verdict_notewithheld$.free_tier.notesprocess$.per_object_cap.notesnot-extracted$.retention.notesnot-extracted
blossom.band / nostr.build blossom (free tier) Storage
fails: quotaemail?card?R
| Free tier | Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie unit none; metered on none |
|---|---|
| Price | none stated |
| Per-object cap | not recorded |
| Retention | not recorded |
| Egress | not recorded |
| Identity | email (placeholder) not published |
| Binding | none no constraint of a named kind was recorded; the verdict rests on the quota sentence rather than on a named limit |
| Interface | unknown |
| Tooling | not recorded |
| Composes with | not recorded |
| Reliability | Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie |
| Notes | Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie |
| Evidence rung | reported |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (3)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | blossom.band/ | Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie |
| 2026-10-21 | b.nostr.build/ | cited as the basis of the rejection: Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie |
| 2026-10-21 | blossom.band/upload | cited as the basis of the rejection: Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie |
More fields (1)
{
"dead_end": {
"failure_class": "retention",
"why": "Free uploads are 20 MiB per file with no retention guarantee ('A hard cap of 100 MiB per upload (20 MiB for free uploads)'), and the BUD-06 pre-flight is actively refused to non-browser clie",
"retry_when": null,
"first_recorded": "2026-10-21"
}
}Unknown or withheld values (15)
$.chainingnot-recorded$.confidence_notewithheld$.egress.termsnot-recorded$.extras.dead_end.retry_whenprocess$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.interfaceinterface-unknown$.interface_detailwithheld$.limits_noteprocess$.per_object_cap.notesnot-recorded$.per_object_cap.statednot-recorded$.retention.notesprocess$.retention.statednot-recorded$.toolingnot-recorded