Skip to content

Rana-Faraz/pic-select

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PicSelect

PicSelect is a Windows desktop app for rapidly narrowing down large photo sets through repeated review rounds.

You point it at a folder of images, review photos one by one, and mark each image as Choose or Ignore. Chosen photos can move into later iterations so you can keep refining a set without touching the original files.

What It Does

  • Non-destructive photo review. Original files are never renamed, moved, or deleted.
  • Folder-based projects with local persistence.
  • Append-only history for decisions and iteration changes.
  • Iteration 1 starts from the imported snapshot. Later iterations start from the previous round's chosen photos.
  • Recursive import with low-memory background processing.
  • Import status tracking, cancel/force stop, restart, and delete project actions.
  • Gallery revisit flow for completed iterations.
  • Double-click zoom and drag-to-pan in the review screen.
  • Local thumbnail caching after import.
  • Local-only storage with SQLite.

Supported Formats

  • .jpg
  • .jpeg
  • .png
  • .bmp
  • .gif
  • .webp
  • .tif
  • .tiff

Download

Latest first release:

Notes:

  • The installer is currently unsigned, so Windows SmartScreen may warn before launch.
  • Current release packaging is win-x64.

Review Controls

  • Enter: choose current photo
  • Esc or Space: ignore current photo
  • Left Arrow: previous photo
  • Right Arrow: next photo
  • Double-click: toggle zoom
  • Drag while zoomed: pan the image

How Import Works

  • Imports run in the background.
  • Review stays locked until the project snapshot is complete.
  • Files are streamed and written in batches to avoid loading huge folders into memory.
  • Bad files are skipped and logged instead of aborting the whole import.
  • Thumbnails are generated in a separate background phase after import.

Project Structure

PicSelect/             WinUI 3 desktop app
PicSelect.Core/        Core domain and persistence logic
PicSelect.Core.Tests/  xUnit tests for non-UI behavior
installer/             Inno Setup installer script
.github/workflows/     CI and release automation

Tech Stack

  • WinUI 3
  • .NET 10
  • Windows App SDK
  • SQLite
  • xUnit
  • GitHub Actions
  • Inno Setup

Local Development

Prerequisites:

  • Windows 10/11
  • .NET 10 SDK
  • WinUI 3 / Windows App SDK development environment

Build the app:

dotnet build .\PicSelect\PicSelect.csproj

Run core tests:

dotnet test .\PicSelect.Core.Tests\PicSelect.Core.Tests.csproj

Create a local Release publish:

dotnet publish .\PicSelect\PicSelect.csproj -c Release -p:PublishProfile=win-x64.pubxml

Packaging

The repo includes an Inno Setup script at installer/PicSelect.iss.

To build a local installer after producing the self-contained publish output:

& "$env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe" .\installer\PicSelect.iss

Generated packaging output is ignored through .gitignore under artifacts/.

CI And Releases

This repo has two GitHub Actions workflows:

  • ci.yml: builds the app and runs core tests on pushes to master and on pull requests
  • release.yml: builds a self-contained Windows release, produces the installer and portable zip, and publishes them to GitHub Releases

To publish a new release:

git tag -a v1.0.1 -m "Release v1.0.1"
git push origin v1.0.1

That tag triggers the release workflow automatically.

Current State

PicSelect is usable now, but still early. Some likely next steps:

  • code signing for installer and binaries
  • better app branding and icon assets
  • richer gallery performance tuning for extremely large projects
  • stronger installer polish and upgrade handling

Author

License

Licensed under the MIT License.

About

Windows desktop app for iterative photo selection and culling with non-destructive history.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors