A React application designed to help you declutter and organize your photo collections by grouping similar images and scoring their quality. Everything happens locally.
(This project was mostly AI vibe-coded)
- Upload Photos: Easily upload individual photos or entire folders.
- Similarity Grouping: Automatically groups visually similar photos together using CLIP embeddings (via Transformers.js).
- Quality Scoring: Assigns a quality score to each photo based on CLIP analysis against positive and negative prompts.
- Best Photo Suggestion: Highlights the photo with the highest quality score within each group.
- Unique Photo Display: Shows photos that don't belong to any similarity group.
- Selection & Download: Select the photos you want to keep (defaults to unique photos and the best from each group) and download them.
-
Clone the repository:
git clone git@github.com:PLhery/BestPick.git cd BestPick -
Install dependencies:
npm install # or yarn install -
Run the development server:
npm run dev # or yarn devThe application should now be running on
http://localhost:5173(or another port if 5173 is busy).
- Upload: Users upload image files.
- Feature Extraction: The application uses a CLIP vision model (
jinaai/jina-clip-v1) via Transformers.js to generate embeddings (numerical representations) for each image. - Quality Scoring: Embeddings for predefined positive ("high quality", "sharp", etc.) and negative ("blurry", "dark", etc.) text prompts are generated using a CLIP text model. The image embedding's cosine similarity to these prompt embeddings is used to calculate a 0-100 quality score.
- Grouping: Images are compared based on the cosine similarity of their embeddings. Photos with similarity above a certain threshold (e.g., 0.7) are grouped together.
- Display: The UI displays grouped photos (sorted by quality) and unique photos separately.
- Selection: Users can select/deselect photos. By default, unique photos and the highest-quality photo from each group are selected.
- Download: Selected photos can be downloaded.