Files
bitvid/content/docs/guides/upload-content.md
T
google-labs-jules[bot]andPR0M3TH3AN 75598e3eff docs: update upload guides to match code behavior
- 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]>
2026-02-08 02:54:44 +00:00

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:

  1. 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.
  2. 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.
  3. 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 .torrent file.

Step-by-Step Guide: Direct Upload

1. Create a Bucket & Enable Public Access

  1. Log in to your provider's dashboard (e.g., Cloudflare).
  2. Create a new bucket (e.g., my-bitvid-videos).
  3. 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.
  4. 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:

  1. In your bucket's Settings tab, scroll down to "CORS Policy".
  2. Click "Add CORS Policy" (or Edit).
  3. 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 AllowedOrigins with your actual origins. If you are using the official site, keep https://bitvid.network. If you are running a local instance, use http://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

  1. Create an API Token or Access Key pair.
  2. Permissions: Ensure "Object Read & Write" access (or s3:PutObject, s3:DeleteObject).
  3. Copy the credentials: You will need the Access Key ID and Secret Access Key.

4. Configure bitvid

  1. In bitvid, open your Profile (click your avatar).
  2. Navigate to the Storage tab in the sidebar menu (or click "Configure Storage" in the Upload Modal).
  3. Select Cloudflare R2 or S3 Compatible from the dropdown.
  4. 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.com or https://nyc3.digitaloceanspaces.com).
      • Region: (e.g., us-east-1, nyc3, or auto).
      • 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.com or a CDN URL).
  5. 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 AllowedHeaders includes * or amz-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

  1. Direct Upload: Your browser uploads the file directly to your storage bucket. No video data passes through a bitvid server.
  2. Client-Side Hashing: Your browser calculates a cryptographic hash (info hash) of the file to enable WebTorrent support.
  3. 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.