A photo sorting tool with game controller support and AI quality analysis
Project description
Photosortman
A simple photo sorting and basic quality analysis tool with game controller support.
Description
Photosortman helps you quickly sort through large photo collections by categorizing them as Best, Standard, or Bad. It features with basic quality analysis to detect blur, brightness, and composition issues, making photo management efficient and fun.
With full game controller support and a cyberpunk-themed interface, sorting photos feels like playing a game!
Features
- Quick Photo Sorting: Categorize photos into Best, Standard, or Bad with keyboard or controller
- Basic Quality Analysis: Automatic blur detection, brightness analysis, and quality scoring
- Game Controller Support: Full Xbox/PlayStation controller integration with customizable button mapping
- Dual Themes: Switch between Cyberpunk and Casual themes
- GPU Acceleration: Optional CUDA support for faster analysis
- Flexible Operations: Choose between copying or moving files
- Sound Effects: Audio feedback for actions (can be toggled)
Installation
Requirements
- Python 3.12 or higher
- PyQt6
- pygame (for controller support)
- OpenCV (for image analysis)
- Optional: CUDA-capable GPU for acceleration
Setup
- Clone the repository:
git clone https://github.com/raniaamina/photosortman.git
cd photosortman
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Linux/Mac
# or
venv\Scripts\activate # On Windows
- Install dependencies:
pip install -r requirements.txt
- Run the application:
python photoman.py
# or
bash run.sh
Usage
Basic Workflow
- Select Folder: Click "Select Folder" or press Y on controller to choose your photo directory
- Navigate: Use Left/Right triggers or arrow keys to browse photos
- Categorize: Press A (Best), X (Standard), or B (Bad) to sort photos
- Analyze: Click "Start Analysis" to run AI quality detection
- Done: Photos are automatically organized into category folders
Keyboard Shortcuts
- Arrow Left/Right: Navigate photos
- 1: Mark as Best
- 2: Mark as Standard
- 3: Mark as Bad
Controller Mapping
Note for PlayStation Controller Users:
PS controllers use different trigger axis indices than Xbox controllers. If your triggers don't work correctly for navigation:
- Open "🎮 Remap Controller" in Settings
- Remap "Previous Photo" to your L2 trigger
- Remap "Next Photo" to your R2 trigger
- Click "Save"
Default Controls
Navigation:
- LT (Left Trigger): Previous photo
- RT (Right Trigger): Next photo
Categorization:
- A Button: Best
- X Button: Standard
- B Button: Bad
Actions:
- Y Button: Select folder
- Start: Start quality analysis
- Select: Toggle sound
LB Combos (Hold LB + D-Pad):
- LB + D-Pad Up: Decrease CPU workers
- LB + D-Pad Down: Increase CPU workers
- LB + D-Pad Left: Toggle sound
- LB + D-Pad Right: Toggle GPU mode
RB Combos (Hold RB + D-Pad):
- RB + D-Pad Up: Toggle copy/move mode
- RB + D-Pad Down: Toggle theme
- RB + D-Pad Left: Open controller remapping
- RB + D-Pad Right: Show about dialog
D-Pad Navigation:
- D-Pad Up/Down: Navigate thumbnail list
- D-Pad Left/Right: Previous/Next photo
Custom Controller Mapping
You can customize all controller buttons using only your controller:
- Open "🎮 Remap Controller" in the settings panel (or press RB + D-Pad Left)
- Navigate with LT (previous) / RT (next) to select an action
- Press A to start remapping the highlighted action
- Press the desired button/combo on your controller
- If duplicate detected, press A (Yes) or B (No)
- Press RB+A to save, or RB+B to cancel
Remap Dialog Controls:
- LT: Navigate to previous action
- RT: Navigate to next action
- A: Trigger remap for highlighted action
- RB+A: Save and close
- RB+B: Cancel and close
All 21 Remappable Actions:
- Navigation (2): Previous Photo, Next Photo
- Categorization (3): Best, Standard, Bad
- Actions (3): Select Folder, Start Analysis, Toggle Sound
- LB Combos (4): CPU Workers -, CPU Workers +, Toggle Sound, Toggle GPU
- RB Combos (5): About, Reconnect, Close Dialog, Toggle Copy, Toggle Theme
- D-Pad Navigation (4): Navigate Up, Down, Left, Right
The dialog supports:
- Single buttons (A, B, X, Y, etc.)
- Triggers (LT, RT)
- D-Pad directions
- Combo buttons (LB/RB + any button/trigger/D-pad)
Reconnecting Controllers
If you connect a controller after the app has started, you don't need to restart:
- Connect your controller and power it on
- Click the 🔄 Reconnect button next to the controller status in Settings
- The app will scan and connect to your controller automatically
- A notification will confirm successful connection
This feature is especially useful when:
- Your controller disconnects during use
- You want to switch to a different controller
- You start the app before turning on your controller
Settings
- GPU Mode: Enable CUDA acceleration (requires NVIDIA GPU)
- Copy Mode: Copy files instead of moving them
- CPU Workers: Adjust parallel processing threads
- Sound: Enable/disable audio feedback
- Theme: Switch between Cyberpunk and Casual themes
Credits
Developed by Rania Amina
Built with PyQt6 & Python
License
GPL v3 - Free and open source software
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file photosortman-1.0.1.tar.gz.
File metadata
- Download URL: photosortman-1.0.1.tar.gz
- Upload date:
- Size: 836.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb4d436650a40e5ce8734b12c43d1f7a91e457059264c5ecbd8f709baf35c6e5
|
|
| MD5 |
be88f91254d60d09a5ed994c9e1234ff
|
|
| BLAKE2b-256 |
97db2e144438de8d151f42394e2f0846e0c7aa259c5a0b3642cc66e468444d8e
|
File details
Details for the file photosortman-1.0.1-py3-none-any.whl.
File metadata
- Download URL: photosortman-1.0.1-py3-none-any.whl
- Upload date:
- Size: 829.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4b1fcc84b50678be51a6190a48f314359ad0c2e2d532637be0d02107499313b
|
|
| MD5 |
7bab855816b67fa04eac9a8198600e1a
|
|
| BLAKE2b-256 |
20616628b3a98cd74199aa015a71d5fb05f9f283bf347a9aac94071a751cdfea
|