Divine Blossom Server BETAFASTLY

Content-addressable blob storage implementing the Blossom protocol with AI-powered moderation, HLS, and transcript generation

API Endpoints

GET
/<sha256>[.ext]

Retrieve a blob by its SHA-256 hash. Supports optional file extension and range requests. Use .jpg extension to get video thumbnails. (BUD-01)

GET
/<sha256>.hls

Get HLS master manifest for adaptive streaming. Automatically triggers on-demand transcoding for videos that haven't been transcoded yet. Returns 202 Accepted with Retry-After header while transcoding is in progress.

GET
/<sha256>/hls/master.m3u8

Alternative HLS manifest URL for player compatibility. Same behavior as the .hls endpoint above.

GET
/<sha256>/720p

Direct download of the 720p H.264 transcoded variant (2.5 Mbps). Triggers transcoding on-demand if not yet available.

GET
/<sha256>/480p

Direct download of the 480p H.264 transcoded variant (1 Mbps). Triggers transcoding on-demand if not yet available.

GET
/<sha256>.vtt

Stable WebVTT URL for audio/video transcripts. Automatically triggers on-demand transcription if it has not been generated yet.

GET
/<sha256>/VTT

Alias for transcript retrieval, compatible with legacy clients.

POST
/v1/subtitles/jobs

Create or reuse a subtitle job by hash. Request body: video_sha256, optional lang, optional force.

GET
/v1/subtitles/jobs/<job_id>

Get subtitle job status: queued, processing, ready, or failed.

GET
/v1/subtitles/by-hash/<sha256>

Idempotent lookup for the current subtitle job by media hash.

HEAD
/<sha256>[.ext]

Check if a blob exists and get its metadata. (BUD-01)

PUT
/upload

Upload a new blob. Requires Nostr authentication (kind 24242 event). Video uploads automatically generate a thumbnail. (BUD-02)

HEAD
/upload

Pre-validate upload with X-SHA-256, X-Content-Length, X-Content-Type headers. (BUD-06)

GET
/list/<pubkey>

List all blobs uploaded by a public key. (BUD-02)

DELETE
/<sha256>

Delete a blob with ref-counting. Sole owner: full delete. Shared: transfers ownership. Non-owner ref: unlinks. Requires Nostr authentication. (BUD-02)

DELETE
/vanish

GDPR Right to Erasure. Deletes all blobs and data for the authenticated user. Requires Nostr authentication.

PUT
/report

Report problematic content using NIP-56 events (kind 1984). (BUD-09)

PUT
/mirror

Mirror a blob from a remote URL. Requires Nostr authentication. (BUD-04)

Features

Nostr Authentication

Secure uploads using NIP-98 HTTP Auth with Schnorr signatures.

Content Moderation

AI-powered moderation with SAFE, REVIEW, AGE_RESTRICTED, and PERMANENT_BAN levels.

Edge Computing

Powered by Fastly Compute for low-latency global delivery.

Video Thumbnails

Automatic JPEG thumbnail generation for uploaded videos, accessible at /<sha256>.jpg.

HLS Video Streaming

On-demand H.264 transcoding to 720p and 480p with HLS adaptive streaming. Direct quality access via /<sha256>/720p and /<sha256>/480p.

WebVTT Transcripts

On-demand transcript generation for audio/video blobs, served from immutable URLs at /<sha256>.vtt.

GCS Storage

Reliable blob storage backed by Google Cloud Storage.

Protocol

This server implements the Blossom protocol for decentralized media hosting on Nostr.

Implemented BUDs: BUD-01 (Blob Retrieval), BUD-02 (Upload/List/Delete), BUD-04 (Mirroring), BUD-06 (Upload Pre-validation), BUD-09 (Reporting)

Maximum upload size: 50 GB