GalleryCleaner is a local keyboard-first image review application. It solves the problem of cleaning large image collections quickly by minimizing clicks, dialogs, and navigation friction during image triage.
GalleryCleaner is scoped to rapid image-folder review and provides a focused desktop workflow for navigating, rotating, refreshing, and trashing images with minimal interaction overhead.
The application uses a fixed-size interface optimized for continuous keyboard-driven operation while preloading nearby images to improve browsing responsiveness.
Image deletion is performed through the operating system trash/recycle-bin mechanism so removed files remain recoverable outside the application.
- Install the Python dependencies with
pip install -r requirements.txt. - Ensure the
resources/images/directory remains in place so application icons can be loaded. - Optionally use the provided setup scripts to create a local virtual environment automatically.
- Leave the project structure intact so the application can find
resources/andsrc/.
- Windows: run
scripts\run.bat. - Unix-like systems: run
bash scripts/run.sh. - Manual: run
python src/main.pyfrom the project root.
Primary navigation and actions are designed around keyboard shortcuts for rapid image review.
Images are moved to the system trash using send2trash instead of being permanently deleted.
Optional recursive scanning allows images from nested subdirectories to be reviewed as a single navigation queue.
Image rotation supports two modes:
- visual-only rotation that affects preview state,
- persistent file-level rotation written directly to disk.
Nearby images are asynchronously preloaded into memory to improve navigation responsiveness while browsing large collections.
The viewer displays:
- filename,
- file type,
- file size,
- resolution,
- creation timestamp,
- modification timestamp.
GalleryCleaner works on Windows, macOS, and Linux through a CustomTkinter-based desktop interface.
GalleryCleaner currently recognizes the following image extensions:
.jpg.jpeg.png.gif.bmp.tiff.webp.svg.ico.tga.psd
- Launch the application.
- Enter an absolute directory path containing images.
- Optionally enable recursive scanning to include subdirectories.
- Submit the directory path to begin browsing.
- Navigate through images and move unwanted files to trash using keyboard shortcuts or UI controls.
If no supported images are found, the application returns to the directory-selection workflow.
| Key | Action |
|---|---|
A / Left Arrow |
Previous image |
D / Right Arrow |
Next image |
S / Down Arrow |
Move current image to trash |
Ctrl+Q |
Rotate image counter-clockwise |
Ctrl+E |
Rotate image clockwise |
Ctrl+R |
Refresh current directory |
Esc |
Return to directory selection |
Enter |
Submit directory path |
GalleryCleaner/
├── src/
│ └── main.py
├── scripts/
│ ├── setup.bat
│ ├── setup.sh
│ ├── run.bat
│ └── run.sh
├── resources/
│ └── images/
├── docs/
│ └── images/
├── requirements.txt
├── LICENSE
└── README.md
GalleryCleaner validates:
- directory existence,
- directory permissions,
- readable image availability.
Unreadable or unsupported images fail gracefully during loading without terminating the application.
- Language: Python
- UI Framework: CustomTkinter
- Image Processing: Pillow
- File Removal: Send2Trash