Are you an LLM? You can read better optimized documentation at /docs/services/cap.md for this page in Markdown format
What is Cap? ​
Cap is the open source alternative to Loom. Lightweight, powerful, and cross-platform. Record and share in seconds.
How to self-host ​
There are two storage options: you can store the video data on a remote storage service like S3 or R2, or you can choose the less recommended option of storing it directly on the local VPS (or another VPS) via a MinIO service.
Option 1: Remote S3-compatible storage (AWS S3, Cloudflare R2, etc.) ​
Set these environment variables:
CAP_AWS_ACCESS_KEY: Your S3/R2 access keyCAP_AWS_SECRET_KEY: Your S3/R2 secret keyCAP_AWS_BUCKET: Your S3/R2 bucket nameCAP_AWS_REGION: Your S3/R2 region (e.g., us-east-1, auto for R2)CAP_AWS_ENDPOINT: Your S3/R2 endpoint URLS3_PUBLIC_ENDPOINT: Public endpoint for your bucket (same as CAP_AWS_ENDPOINT for most cases)S3_INTERNAL_ENDPOINT: Internal endpoint (same as CAP_AWS_ENDPOINT for most cases)S3_PATH_STYLE: true for R2/most S3-compatible, false for AWS S3 virtual-hosted style
Option 2: Local MinIO storage ​
Deploy MinIO as a separate service in the same network and set:
CAP_AWS_ACCESS_KEY: MinIO root userCAP_AWS_SECRET_KEY: MinIO root passwordCAP_AWS_BUCKET: Your bucket name (e.g., capso)CAP_AWS_REGION: us-east-1 (or any region)CAP_AWS_ENDPOINT: http://minio:9000 (internal MinIO endpoint)S3_PUBLIC_ENDPOINT: http://your-minio-domain:9000 (public MinIO endpoint)S3_INTERNAL_ENDPOINT: http://minio:9000 (internal MinIO endpoint)S3_PATH_STYLE: true
Email Login Links ​
If the RESEND_API_KEY and RESEND_FROM_DOMAIN environment variables are not set, login links will be written to the server logs. To send login links via email, you'll need to configure Resend:
- Create an account at Resend
- Connect a domain and set it as
RESEND_FROM_DOMAIN - Generate an API key and set it as
RESEND_API_KEY
How to unlock limits (organization seats and recordings) ​
- Open the terminal of the MySQL service
- Connect to the database:
mysql -u root -p planetscaleand use theMYSQL_ROOT_PASSWORDwhen prompted - Run the SQL command below, replacing
your-user-idwith your actual user IDsqlUPDATE users SET inviteQuota = 100, stripeSubscriptionId = '12345', subscriptionStatus = 'active' WHERE id = 'your-user-id'; - You can verify the changes by running the following command:sql
SELECT * FROM users WHERE id = 'your-user-id';
Screenshots ​

