On-Device AI Decision System for Photo Management
macOS · iOS · visionOS — 100% Private, Zero Cloud
---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.
| 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 |
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]
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
- macOS 14+ (primary target: macOS 26 Tahoe)
- Xcode 16.3+
- XcodeGen:
brew install xcodegen
# Clone
gh repo clone wolram/PhotoCleaner
cd PhotoCleaner
# Generate Xcode project from project.yml
xcodegen generate
# Open in Xcode
open SnapSieve.xcodeprojDo not run
scripts/generate_project.sh— it is deprecated and protected with an exit guard.
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
GitHub Actions runs on every push to main, develop, and all PRs:
- Checks out on
macos-15 - Installs XcodeGen via Homebrew
- Runs
xcodegen generate - Builds the
SnapSievescheme for macOS - Runs the test suite
Screenshots coming soon — the app targets macOS 26 Tahoe (currently in beta).
See CONTRIBUTING.md for setup instructions, branch naming, commit style, and PR guidelines.
MIT License — see LICENSE.
Sistema de Decisão por IA On-Device para Gerenciamento de Fotos
macOS · iOS · visionOS — 100% Privado, Sem Nuvem
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.
| 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 |
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
- macOS 14+ (alvo principal: macOS 26 Tahoe)
- Xcode 16.3+
- XcodeGen:
brew install xcodegen
# Clonar
gh repo clone wolram/PhotoCleaner
cd PhotoCleaner
# Gerar projeto Xcode a partir de project.yml
xcodegen generate
# Abrir no Xcode
open SnapSieve.xcodeprojNão execute
scripts/generate_project.sh— ele está depreciado e protegido com um guard de saída.
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
O GitHub Actions executa em cada push para main, develop e em todos os PRs:
- Checkout em
macos-15 - Instala XcodeGen via Homebrew
- Executa
xcodegen generate - Compila o scheme
SnapSievepara macOS - Executa a suíte de testes
Veja .github/workflows/ci.yml.
Screenshots em breve — o app tem como alvo o macOS 26 Tahoe (atualmente em beta).
Veja CONTRIBUTING.md para instruções de configuração, convenções de branches, estilo de commits e diretrizes de PR.
Licença MIT — veja LICENSE.