Backends
Bunny Stream
A deliberately lossy filesystem projection over the Bunny.net Stream video API.
A vfs.FileSystem projection over the
Bunny.net Stream video API
(HTTP, no SDK). Auth is the Stream API key in the AccessKey header.
This is an intentionally lossy projection — Stream is an API, not a byte store (it keeps HLS renditions, not your original file). The path tree is a convenience surface, not a faithful filesystem. It is dumont's one deliberate, clearly-labelled exception to the "no lossy projections" rule.
Configuration
remotes:
vid: # addressed as vid://collection/title
type: bunnystream
library_id: "<your-library-id>"
cdn_host: vz-xxxx.b-cdn.net # optional, enables best-effort MP4 download
credentials:
api_key: env:BUNNY_STREAM_KEYPath projection
| Path | Meaning |
|---|---|
/ | the library root |
/<collection> | a collection (directory) |
/<collection>/<title> | a video (file), named by its title |
/<title> | an uncollectioned video at the root |
Duplicate titles within a collection are disambiguated with a #<guid> suffix
(e.g. intro#a1b2c3…), and that form is accepted for reads.
Capabilities
| Cap | Value | Why |
|---|---|---|
| Directories | ✅ | collections are real |
| MTime | ✅ | dateUploaded |
| RandomRead | ❌ | downloads stream whole renditions |
| RandomWrite / Append / Truncate | ❌ | uploads are whole-video |
| AtomicRename | ❌ | rename is not supported (ErrNotSupported) |
Operation mapping
- Mkdir
/<name>→ create a collection. Only one directory level exists (collections); deeperMkdir→ErrNotSupported. - Write
/<collection>/<title>→ create a video then upload the bytes onClose. The collection must already exist (Mkdirit first). - ReadDir → collections (+ root videos) at the root; videos within a collection.
- Stat → video
storageSize/dateUploaded(size is0until Bunny finishes processing the upload). - Remove → delete a video or collection.
- Read → best-effort: Stream has no original-bytes download, so a read
tries the CDN MP4 renditions (
https://<cdn_host>/<guid>/play_<res>p.mp4) and returnsErrNotSupportedif none is available (nocdn_host, MP4 fallback disabled, or still processing).