Skip to content

wolram/PhotoCleaner

Repository files navigation

⚡ Snap Sieve

On-Device AI Decision System for Photo Management

macOS · iOS · visionOS — 100% Private, Zero Cloud

Swift 6.0 macOS 26+ iOS 18+ visionOS 2+ Vision Framework Core ML MIT License Built with Claude Code

---

Overview

Snap Sieve is a privacy-first AI photo curation system for Apple platforms. It uses Apple's Vision framework and CoreML to analyze your photo library entirely on-device — detecting duplicates, grouping similar shots, scoring quality, and surfacing the best photos — without ever sending a single pixel to the cloud.

All ML inference runs locally. Zero telemetry. Zero external SDKs. Zero network calls for photo data.


✨ Features

Feature Description Technology
🔍 Duplicate Detection Finds exact and near-exact duplicates using feature-print similarity VNFeaturePrint (threshold 0.5)
🖼️ Similar Photo Grouping Clusters visually similar shots from the same scene Perceptual Hash + DBSCAN clustering
Quality Assessment Scores each photo on aesthetic, sharpness, and exposure Aesthetic 50% · Blur 30% · Exposure 20%
⚔️ Battle Mode Visual tournament bracket — pick your best shot head-to-head SwiftUI Liquid Glass tournament UI
🗂️ Smart Categories Semantic grouping by subject (people, landscapes, food…) CLIP-based embedding (on-device mock)
🔒 100% On-Device Privacy No cloud, no external SDKs, no data leaves your device Vision · CoreML · SwiftData

🏗️ Architecture

graph TD
    A[SwiftUI Views<br/>Liquid Glass · macOS 26+] --> B[ViewModels<br/>@MainActor]
    B --> C[Service Layer<br/>Swift Actors · .shared]
    C --> D[PhotoLibraryService]
    C --> E[ImageAnalysisService]
    C --> F[QualityAssessmentService]
    C --> G[DuplicateDetectionService]
    C --> H[SimilarityGroupingService]
    C --> I[BatchProcessingService]
    C --> J[CLIPEmbeddingService<br/>on-device mock]
    B --> K[Algorithm Layer<br/>Pure Computation]
    K --> L[PerceptualHash]
    K --> M[ClusteringAlgorithm<br/>DBSCAN]
    K --> N[BestPhotoSelector]
    B --> O[Repository Layer<br/>SwiftData CRUD]
    O --> P[(Data Layer<br/>SwiftData Models)]
    P --> Q[PhotoAssetEntity]
    P --> R[PhotoGroupEntity]
    P --> S[ScanSessionEntity]
Loading

Layer summary:

UI Layer         SwiftUI Views (Liquid Glass, macOS 26+)
  └─ @MainActor ViewModels
Service Layer    Swift Actors, singleton access via .shared
  └─ PhotoLibrary · ImageAnalysis · QualityAssessment
     Duplicate · Similarity · CLIP · BatchProcessing
     UndoRedo · SelectionManager · BatchOperationHandler
Algorithm Layer  Pure computation (no I/O)
  └─ PerceptualHash · ClusteringAlgorithm · BestPhotoSelector
Repository Layer CRUD over SwiftData
  └─ PhotoRepository · GroupRepository
Data Layer       SwiftData @Model entities
  └─ PhotoAssetEntity · PhotoGroupEntity · ScanSessionEntity

🚀 Quick Start

Prerequisites

  • macOS 14+ (primary target: macOS 26 Tahoe)
  • Xcode 16.3+
  • XcodeGen: brew install xcodegen

Setup

# Clone
gh repo clone wolram/PhotoCleaner
cd PhotoCleaner

# Generate Xcode project from project.yml
xcodegen generate

# Open in Xcode
open SnapSieve.xcodeproj

Do not run scripts/generate_project.sh — it is deprecated and protected with an exit guard.


📁 Project Structure

PhotoCleaner/
├── apps/
│   └── SnapSieve/                    # macOS app source (primary target)
│       ├── App/                      # App entry point, AppConfig
│       ├── Core/
│       │   ├── Algorithms/           # PerceptualHash, DBSCAN clustering
│       │   ├── ML/                   # CoreML model wrappers
│       │   ├── Models/               # Domain models
│       │   ├── Services/             # Swift Actor service layer
│       │   └── Utilities/            # Helpers
│       ├── Data/                     # SwiftData entities + repositories
│       └── UI/
│           ├── Components/           # Reusable SwiftUI components
│           └── Views/                # Screen views + ViewModels
├── SnapSieveiOS/                     # iOS scaffolding
├── SnapSieveVision/                  # visionOS scaffolding
├── PhotoCleanerTests/                # Unit tests
├── docs/                             # Architecture docs, design system
├── fastlane/                         # Release automation
├── scripts/                          # Dev scripts (see deprecation note)
├── project.yml                       # XcodeGen configuration (source of truth)
├── .github/workflows/ci.yml          # GitHub Actions CI
└── CLAUDE.md                         # AI agent context and coding standards

🧪 CI / CD

GitHub Actions runs on every push to main, develop, and all PRs:

  1. Checks out on macos-15
  2. Installs XcodeGen via Homebrew
  3. Runs xcodegen generate
  4. Builds the SnapSieve scheme for macOS
  5. Runs the test suite

See .github/workflows/ci.yml.


📸 Screenshots

Screenshots coming soon — the app targets macOS 26 Tahoe (currently in beta).


🤝 Contributing

See CONTRIBUTING.md for setup instructions, branch naming, commit style, and PR guidelines.


📄 License

MIT License — see LICENSE.



⚡ Snap Sieve

Sistema de Decisão por IA On-Device para Gerenciamento de Fotos

macOS · iOS · visionOS — 100% Privado, Sem Nuvem

Swift 6.0 macOS 26+ iOS 18+ visionOS Vision Framework Core ML Licença MIT Feito com Claude Code


Visão Geral

Snap Sieve é um sistema de curadoria de fotos com IA, focado em privacidade, para as plataformas Apple. Ele usa o Vision framework e o CoreML da Apple para analisar sua biblioteca de fotos inteiramente no dispositivo — detectando duplicatas, agrupando fotos semelhantes, pontuando qualidade e destacando as melhores fotos — sem nunca enviar um único pixel para a nuvem.

Toda inferência de ML é local. Zero telemetria. Zero SDKs externos. Zero chamadas de rede para dados de fotos.


✨ Funcionalidades

Funcionalidade Descrição Tecnologia
🔍 Detecção de Duplicatas Encontra fotos duplicadas exatas e quase-exatas usando similaridade de feature-print VNFeaturePrint (limiar 0.5)
🖼️ Agrupamento de Fotos Similares Agrupa fotos visualmente semelhantes da mesma cena Hash Perceptual + clustering DBSCAN
Avaliação de Qualidade Pontua cada foto em estética, nitidez e exposição Estética 50% · Desfoque 30% · Exposição 20%
⚔️ Modo Batalha Torneio visual — escolha sua melhor foto em confrontos diretos SwiftUI Liquid Glass com chaves de torneio
🗂️ Categorias Inteligentes Agrupamento semântico por assunto (pessoas, paisagens, comida…) Embedding CLIP (mock on-device)
🔒 100% Privacidade On-Device Sem nuvem, sem SDKs externos, nenhum dado sai do dispositivo Vision · CoreML · SwiftData

🏗️ Arquitetura

Camada de UI          Views SwiftUI (Liquid Glass, macOS 26+)
  └─ ViewModels @MainActor
Camada de Serviços    Swift Actors, acesso singleton via .shared
  └─ PhotoLibrary · ImageAnalysis · QualityAssessment
     Duplicate · Similarity · CLIP · BatchProcessing
     UndoRedo · SelectionManager · BatchOperationHandler
Camada de Algoritmos  Computação pura (sem I/O)
  └─ PerceptualHash · ClusteringAlgorithm · BestPhotoSelector
Camada de Repositório CRUD via SwiftData
  └─ PhotoRepository · GroupRepository
Camada de Dados       Entidades SwiftData @Model
  └─ PhotoAssetEntity · PhotoGroupEntity · ScanSessionEntity

🚀 Início Rápido

Pré-requisitos

  • macOS 14+ (alvo principal: macOS 26 Tahoe)
  • Xcode 16.3+
  • XcodeGen: brew install xcodegen

Configuração

# Clonar
gh repo clone wolram/PhotoCleaner
cd PhotoCleaner

# Gerar projeto Xcode a partir de project.yml
xcodegen generate

# Abrir no Xcode
open SnapSieve.xcodeproj

Não execute scripts/generate_project.sh — ele está depreciado e protegido com um guard de saída.


📁 Estrutura do Projeto

PhotoCleaner/
├── apps/
│   └── SnapSieve/                    # Código-fonte do app macOS (alvo principal)
│       ├── App/                      # Ponto de entrada, AppConfig
│       ├── Core/
│       │   ├── Algorithms/           # PerceptualHash, clustering DBSCAN
│       │   ├── ML/                   # Wrappers de modelos CoreML
│       │   ├── Models/               # Modelos de domínio
│       │   ├── Services/             # Camada de serviços Swift Actor
│       │   └── Utilities/            # Utilitários
│       ├── Data/                     # Entidades SwiftData + repositórios
│       └── UI/
│           ├── Components/           # Componentes SwiftUI reutilizáveis
│           └── Views/                # Views de telas + ViewModels
├── SnapSieveiOS/                     # Scaffolding iOS
├── SnapSieveVision/                  # Scaffolding visionOS
├── PhotoCleanerTests/                # Testes unitários
├── docs/                             # Docs de arquitetura, design system
├── fastlane/                         # Automação de release
├── scripts/                          # Scripts de dev (ver nota de depreciação)
├── project.yml                       # Configuração XcodeGen (fonte de verdade)
├── .github/workflows/ci.yml          # GitHub Actions CI
└── CLAUDE.md                         # Contexto para agentes de IA e padrões de código

🧪 CI / CD

O GitHub Actions executa em cada push para main, develop e em todos os PRs:

  1. Checkout em macos-15
  2. Instala XcodeGen via Homebrew
  3. Executa xcodegen generate
  4. Compila o scheme SnapSieve para macOS
  5. Executa a suíte de testes

Veja .github/workflows/ci.yml.


📸 Screenshots

Screenshots em breve — o app tem como alvo o macOS 26 Tahoe (atualmente em beta).


🤝 Contribuindo

Veja CONTRIBUTING.md para instruções de configuração, convenções de branches, estilo de commits e diretrizes de PR.


📄 Licença

Licença MIT — veja LICENSE.

About

State-of-the-art macOS photo cleaning app using Vision framework and ML

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors