Comps is a open source self hostable version of Slowpoke Pics. A web-based tool for comparing multiple images side by side.
Tots not vibe coded because lazy
- Upload multiple images for side-by-side comparison
- Navigate between images using keyboard shortcuts or UI controls
- Add metadata like comparison name, show name, and tags
- Fit-to-screen and original size viewing modes
- Border toggle for better image separation
- Responsive design for different screen sizes
- Docker support for easy deployment
- Clone the repository:
Comps provides a RESTful API for programmatic access:
For more details, see the API Documentation.
Comps supports both SQLite (default) and PostgreSQL.
- SQLite (default): set DB_PATH to the SQLite file path (default: comparisons.db)
- PostgreSQL: set DB_BACKEND=postgres and provide DATABASE_URL (or DB_URL) like:
- postgresql://user:pass@host:5432/dbname
Migrations run automatically at startup for the selected backend.
Comps supports local filesystem storage (default) and S3-compatible object storage.
- Local (default):
STORAGE_BACKEND=localandUPLOADS_PATH(default:uploads) - S3: set
STORAGE_BACKEND=s3and:S3_BUCKET_NAME=<bucket>S3_REGION=<region>(optional, but recommended)S3_ENDPOINT_URL=<endpoint>(optional, for S3-compatible providers like MinIO)S3_KEY_PREFIX=<prefix>(optional)S3_PRESIGNED_URL_TTL_SECONDS=<seconds>(optional, default:3600)
When S3 is enabled, /uploads/<comparison_id>/<filename> redirects to a short-lived pre-signed S3 URL.
If you are switching an existing installation from local storage to S3, run:
python scripts/migrate_local_uploads_to_s3.py --skip-existingThis script uploads files from UPLOADS_PATH to your configured S3 bucket/key prefix and updates image_metadata.image_size (inserting metadata rows when missing).
For AWS S3 you can optionally add --expected-bucket-owner <account-id> for ownership verification.
Use the provided docker-compose.postgres.yml:
docker compose -f docker-compose.postgres.yml up -d --buildThis spins up Postgres and the app with DB_BACKEND=postgres and DATABASE_URL set, waits for Postgres to be healthy, then starts the app. The app’s entrypoint blocks until migrations initialize.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
This project includes code from EasyCompare (Copyright (C) 2020 N3xusHD, Sec-ant) licensed under GPL-3.0.