Description
Problem: Videos uploaded to Cap are not viewable, and the S3 bucket (Garage) remains empty despite successful upload UI feedback and no error logs.
When attempting to upload a video through Cap's web interface:
- The upload appears to complete successfully (no errors shown to user)
- No errors appear in Docker logs during upload
- The S3 bucket remains completely empty (verified via external S3 client)
- Attempting to view the uploaded video fails silently
Expected behavior: Videos should be uploaded to the Garage S3 bucket and be viewable through the Cap interface.
Actual behavior: Upload completes without errors, but no files are written to S3 storage.
Logs
When attempting to view an uploaded video:
cap-web | [ShareVideoPage] Starting transcription for video: re0msnz8094jdqf
cap-web | [ShareVideoPage] Updated transcription status: null
cap-web | timestamp=2025-12-17T20:39:58.554Z level=INFO fiber=#188 message="Using CAP_AWS_ACCESS_KEY and CAP_AWS_SECRET_KEY"
cap-web | [next-auth][warn][DEBUG_ENABLED]
cap-web | https://next-auth.js.org/warnings#debug_enabled
Full startup logs show successful initialization:
cap-web | 💿 Migrations run successfully!
cap-web | Created S3 bucket
No upload errors are logged during the video upload process.
Environment
- Cap version:
ghcr.io/capsoftware/cap-web:latest (SHA: 74d56685cf9c3c856cceab23fef6a6bdef1370d201cbf0431d6c95504c971554)
- S3 Provider: Garage v2.1.0 (self-hosted, S3-compatible storage)
- Database: MySQL 8.4
- Deployment: Docker Compose
Configuration
Docker Compose:
name: cap-production
services:
cap-web:
container_name: cap-web
image: ghcr.io/capsoftware/cap-web:latest@sha256:74d56685cf9c3c856cceab23fef6a6bdef1370d201cbf0431d6c95504c971554
restart: unless-stopped
networks:
- default
environment:
DATABASE_URL: 'mysql://cap_user:${DB_PASSWORD}@cap-db:3306/cap?ssl={"rejectUnauthorized":false}'
WEB_URL: https://cap.example.com
NEXTAUTH_URL: https://cap.example.com
DATABASE_ENCRYPTION_KEY: ${DATABASE_ENCRYPTION_KEY}
NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
# S3 Configuration (Garage)
CAP_AWS_ACCESS_KEY: ${S3_ACCESS_KEY}
CAP_AWS_SECRET_KEY: ${S3_SECRET_KEY}
CAP_AWS_BUCKET: cap
CAP_AWS_REGION: garage
CAP_AWS_BUCKET_URL: https://garage.example.com
S3_INTERNAL_ENDPOINT: https://garage.example.com
S3_PUBLIC_ENDPOINT: https://garage.example.com
S3_PATH_STYLE: true
CAP_VIDEOS_DEFAULT_PUBLIC: true
cap-db:
container_name: cap-db
image: mysql:8.4@sha256:5cdee9be17b6b7c804980be29d1bb0ba1536c7afaaed679fe0c1578ea0e3c233
restart: unless-stopped
environment:
MYSQL_DATABASE: cap
MYSQL_USER: cap_user
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MYSQL_ROOT_HOST: "%"
command: ["--max_connections=1000"]
volumes:
- cap-mysql:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 5s
retries: 10
networks:
default:
name: cap_default
volumes:
cap-mysql:
Verification Steps Performed
- S3 credentials are valid (tested with external S3 client - CyberDuck)
- Can successfully upload/download files to/from the Garage bucket using the same credentials
- Bucket "cap" exists and is accessible
- Cap reports "Created S3 bucket" on startup
- No files appear in the bucket after Cap upload
Questions
- Are there additional environment variables required for external S3 providers (non-AWS/MinIO)?
- Should there be upload-related logs that I'm not seeing? (Currently no logs during upload process)
- Is there a way to enable debug logging for S3 operations specifically?
- Does Cap require specific S3 API compatibility that Garage might not provide?
Thanks in advance!
Additional Notes
- The official documentation and docker-compose template primarily shows MinIO configuration
- Garage is S3-compatible and works with other S3 clients
- The silent failure (no error logs) makes debugging difficult
- Video metadata appears to be saved to the database (video ID is generated), but the actual video file is never uploaded to S3
Description
Problem: Videos uploaded to Cap are not viewable, and the S3 bucket (Garage) remains empty despite successful upload UI feedback and no error logs.
When attempting to upload a video through Cap's web interface:
Expected behavior: Videos should be uploaded to the Garage S3 bucket and be viewable through the Cap interface.
Actual behavior: Upload completes without errors, but no files are written to S3 storage.
Logs
When attempting to view an uploaded video:
Full startup logs show successful initialization:
No upload errors are logged during the video upload process.
Environment
ghcr.io/capsoftware/cap-web:latest(SHA:74d56685cf9c3c856cceab23fef6a6bdef1370d201cbf0431d6c95504c971554)Configuration
Docker Compose:
Verification Steps Performed
Questions
Thanks in advance!
Additional Notes