Nightcord Storage v2.0.0

Object storage proxy with SEKAI v2 resource facade. Legacy upload paths remain; new clients should prefer /v2/upload and typed resolve URLs.

Hosts

Storage (upload + legacy) https://storage.nightcord.de5.net
R2 facade (public media) https://r2.nightcord.de5.net

Both hosts hit this Worker when bound. Prefer the media host for public SEKAI GETs; uploads may use either host.

SEKAI v2 — prefer this

PUT/v2/upload

Headers X-Filename, Content-Type, Content-Length
optional: X-Sekai-Kind, X-Image-Width, X-Image-Height
for uploads > 512 MiB: Authorization: Bearer <sekai-pass-token>
Bodyraw file bytes
LimitsAnonymous ≤ 512 MiB. Larger (up to ~1GB) needs a SEKAI Pass token (else 401); over ~1GB → 413. Cloudflare per-plan request-body limits may cap large uploads further.
Responseuuid, type, size (kB), name, kind, url, optional w/h
curl -X PUT https://storage.nightcord.de5.net/v2/upload -H "X-Filename: photo.jpg" -H "Content-Type: image/jpeg" --data-binary @photo.jpg

GET Resolve

Message payload (Nightcord / SEKAI markup)

<$SEKAI:Image:w=…;h=…;name=…:{uuid}>
<$SEKAI:Files:type=…;size=…;name=…:{uuid}>
<$SEKAI:Stamp:custom=true:{uuid}>

Legacy — still supported

PUT/{ key, url, size } where key is {uid}/{fileUuid}.ext

GETDEL/{key} · chunked under /chunked/…

Use for older clients and historical messages. New Nightcord builds use v2.

Machine-readable / agents

GET /?format=json · GET /?format=md · /v2

Content policy & abuse

Anonymous file service. Arbitrary file types are allowed (including executables). Illegal content is prohibited and removed on report. Stored objects are served as downloads (Content-Disposition: attachment) with X-Content-Type-Options: nosniff.

Report abuse or illegal content to abuse@nightcord.de5.net. Include the public URL and the reason. Do NOT attach or re-upload the offending content.