omnipaper

Storage

Connect S3 compatible object storage and configure CORS

omnipaper keeps document files in S3 compatible object storage. Postgres holds metadata only. Connect a bucket after first login in Settings → Storage.

Supported providers: Cloudflare R2, AWS S3, MinIO.

Connect a bucket

Pick a provider, fill in the fields, Test connection, then Save:

ProviderYou enterExample
Cloudflare R2Bucket, Endpoint, Access Key ID, Secret Access Keyhttps://<account_id>.r2.cloudflarestorage.com
AWS S3Bucket, Region, Access Key ID, Secret Access KeyRegion eu-central-1
MinIOBucket, Endpoint, Access Key ID, Secret Access Keyhttps://minio.example.com

Region (S3) and endpoint (R2, MinIO) are the only provider specific fields. Test connection does a real round trip to the bucket.

CORS

Add this rule to your bucket. Replace https://omnipaper.example.com with your APP_URL (scheme, host, port, no trailing slash).

Cloudflare R2 and AWS S3

cors.json
[
  {
    "AllowedOrigins": ["https://omnipaper.example.com"],
    "AllowedMethods": ["GET", "HEAD", "PUT"],
    "AllowedHeaders": ["Range"],
    "ExposeHeaders": ["Content-Range", "Accept-Ranges", "Content-Length"],
    "MaxAgeSeconds": 3600
  }
]

R2: bucket → Settings → CORS Policy. S3: Permissions → Cross origin resource sharing (CORS).

MinIO

CORS is server wide via MINIO_API_CORS_ALLOW_ORIGIN (comma separated origins). Default is * so preview works out of the box. To restrict:

MinIO server env
MINIO_API_CORS_ALLOW_ORIGIN=https://omnipaper.example.com

Restart MinIO for the change to take effect.

Verify

Open a PDF in the app. If preview fails, confirm AllowedOrigins matches APP_URL exactly.

On this page