- Add "External Link" and "Magnet Link" upload methods. - Document advanced NIP-71 metadata fields (Content Warning, Duration, IMETA). - Clarify file type support and browser-based size limits. - Add troubleshooting for CORS and memory issues. - Provide examples for S3-compatible providers (MinIO, DigitalOcean). Co-authored-by: PR0M3TH3AN <[email protected]>
7.4 KiB
How to Upload Content
bitvid is a decentralized platform that supports multiple ways to share video content. For direct uploads, we support Cloudflare R2 and S3-compatible storage backends (like MinIO, DigitalOcean Spaces, or AWS S3), allowing you to upload files directly from your browser to a high-performance storage bucket.
Upload Methods
bitvid offers three ways to publish content:
- Direct Upload: Upload a video file from your device to your configured storage bucket (R2 or S3). The client handles the upload, generates a magnet link for WebTorrent, and publishes the metadata to Nostr.
- External Link: Provide a direct URL to a video file hosted elsewhere (e.g., on a personal server or another CDN). This URL serves as the primary playback source.
- Magnet Link: assist the network by providing a magnet link for an existing torrent. Note that magnet-only uploads require at least one active seeder to be playable.
Supported Media & Limits
Before you start, ensure your content meets the following requirements:
Accepted File Types
- Video:
.mp4,.webm,.mov,.mkv,.ts,.m3u8,.mpg,.mpeg - Thumbnail: Any standard image format (
image/*)
File Size
- Recommended: Up to 2GB per file.
- Why? Browser-based uploads rely on your device's memory for hashing and chunk management. Files larger than 2GB may cause browser instability or crashes.
Metadata & Options
When publishing a video, you can configure the following:
Basic Info
- Title: Required.
- Description: Optional.
- Thumbnail: Optional (URL or upload).
- Tags (Hashtags): Optional but highly recommended for discoverability.
Audience & Engagement
- Enable Comments: Toggle to allow or disable comments on your video.
- NSFW: Mark content as "Not Safe For Work" (e.g., artistic nudity, sensitive topics).
- For Kids: Mark content as specifically made for children.
Advanced Options (NIP-71)
For power users and technical configurations:
- Content Warning: A text label for sensitive content (automatically set to "NSFW" if the NSFW toggle is on).
- Duration: Manually specify the video duration in seconds.
- Summary: A short summary separate from the full description.
- IMETA (Video Variants): Define alternative video sources, resolutions, or MIME types.
- Web Seed (ws): Manually provide a web seed URL for the torrent.
- Torrent File (xs): Manually provide a URL to a
.torrentfile.
Step-by-Step Guide: Direct Upload
1. Create a Bucket & Enable Public Access
- Log in to your provider's dashboard (e.g., Cloudflare).
- Create a new bucket (e.g.,
my-bitvid-videos). - Enable Public Access:
- Cloudflare R2: Go to Settings > Public Access and enable "R2.dev subdomain" or connect a custom domain.
- S3 Compatible: Ensure the bucket policy allows public read access for objects.
- Copy the Public Bucket URL (e.g.,
https://pub-xxxxxx.r2.dev). You will need this later.
2. Configure CORS
To allow your browser to upload files directly to the storage bucket, you must allow Cross-Origin Resource Sharing (CORS).
Cloudflare R2 (Manual Configuration Required): bitvid will attempt to configure CORS automatically if your API keys have "Admin Read & Write" permissions. However, standard "Object Read & Write" tokens (recommended) cannot modify bucket settings, so you must configure this manually:
- In your bucket's Settings tab, scroll down to "CORS Policy".
- Click "Add CORS Policy" (or Edit).
- Paste the following JSON configuration. You must allow headers used by the AWS SDK (
amz-sdk-*).
[
{
"AllowedOrigins": ["http://localhost:5500", "https://bitvid.network"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD", "OPTIONS"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag", "Content-Length", "Content-Range", "Accept-Ranges"],
"MaxAgeSeconds": 3600
}
]
Note: Replace
AllowedOriginswith your actual origins. If you are using the official site, keephttps://bitvid.network. If you are running a local instance, usehttp://localhost:5500.
S3 Compatible Providers: bitvid will attempt to configure CORS automatically for generic S3 providers if your credentials have sufficient permissions. However, if uploads fail with CORS errors, apply a similar policy manually in your provider's console.
3. Create API Credentials
- Create an API Token or Access Key pair.
- Permissions: Ensure "Object Read & Write" access (or
s3:PutObject,s3:DeleteObject). - Copy the credentials: You will need the Access Key ID and Secret Access Key.
4. Configure bitvid
- In bitvid, open your Profile (click your avatar).
- Navigate to the Storage tab in the sidebar menu (or click "Configure Storage" in the Upload Modal).
- Select Cloudflare R2 or S3 Compatible from the dropdown.
- Enter your credentials:
- Cloudflare R2:
- Account ID: Found in your Cloudflare dashboard sidebar.
- Access Key ID & Secret Access Key: From Step 3.
- Bucket Name: The exact name of your bucket.
- Public Access URL: The R2.dev or custom domain URL from Step 1 (e.g.,
https://pub-xxx.r2.dev).
- S3 Compatible:
- Endpoint: The S3 API endpoint (e.g.,
https://s3.us-east-1.amazonaws.comorhttps://nyc3.digitaloceanspaces.com). - Region: (e.g.,
us-east-1,nyc3, orauto). - Access Key ID & Secret Access Key: From Step 3.
- Bucket Name: The exact name of your bucket.
- Public Access URL: The base URL for public file access (e.g.,
https://my-bucket.s3.amazonaws.comor a CDN URL).
- Endpoint: The S3 API endpoint (e.g.,
- Cloudflare R2:
- Click "Save Connection".
bitvid will verify your credentials by attempting to list or upload a test file. Once verified, return to the Upload Modal to start sharing!
Troubleshooting
Common Issues
- CORS Errors: If you see "Network Error" or "CORS" in the console during upload, verify your bucket's CORS policy matches the JSON above. Ensure
AllowedHeadersincludes*oramz-sdk-*. - Upload Fails Immediately: Check your API credentials and ensure the bucket name is correct.
- Browser Crashes / Slow Performance: Large files (>2GB) can exhaust browser memory during the hashing process. Try using a smaller file or ensuring you have plenty of free RAM.
- Playback Issues: If the video uploads but doesn't play, ensure the "Public Access URL" is correct and publicly reachable.
Upload Lifecycle & Moderation
How Uploads Work
- Direct Upload: Your browser uploads the file directly to your storage bucket. No video data passes through a bitvid server.
- Client-Side Hashing: Your browser calculates a cryptographic hash (info hash) of the file to enable WebTorrent support.
- Publication: The video metadata (title, URL, hash, tags) is signed by your Nostr key and published to relays.
Moderation & Visibility
While publication is decentralized and permissionless, the bitvid.network instance may enforce moderation policies:
- Whitelists: If the instance is in "whitelist mode", you may need approval before your videos appear in public feeds.
- Blacklists: Violating community guidelines may result in your account being hidden from this instance.
- User Blocks: Viewers can mute or block your content individually.
Check the Community Guidelines for more details.