A Python/Tkinter application designed to intelligently organize camera uploads by year and folder with advanced features like duplicate detection, video preview, and batch operations.
- Automatic Year Detection: Extracts year from filename (e.g.,
IMG_20240815_143022.jpgβ 2024) - Folder Organization: Organize files into
YEAR/FOLDER_NAME/structure - Duplicate Detection: Automatically moves duplicates to
!duplicatefolder - Smart Categorization: Auto-organize screenshots and screen recordings into dedicated folders
- Video Preview: Extract and navigate through video screenshots at key timestamps (0%, 10%, 15%, 25%, 30%, 50%, 65%, 75%, 85%, 95%, 100%)
- Interactive Slider: Click points on timeline to preview different moments
- Image Viewer: Built-in image viewer with zoom support (Ctrl+Scroll)
- HEIC Support: Native support for Apple HEIC/HEIF images
- Batch Operations: Select multiple files for bulk organization
- Color Coding: Visual folder identification with auto-generated colors
- Live Preview: See final path before applying changes
- Persistent Edits: Auto-save work in progress, resume anytime
- Check Duplicates: Scan organized folders for duplicate files
- Auto-Delete: Automatically remove screenshot duplicates if file exists in organized folder
- Conflict Detection: Identify files present in multiple organized folders
- Ignore List: Maintain permanent ignore list for known duplicates
- Python 3.8 or higher
- FFmpeg (for video screenshot extraction)
pip install pillow pillow-heif send2trash- Download from gyan.dev/ffmpeg
- Extract and add to PATH
- Verify:
ffmpeg -version
Camera Folder/
βββ YEAR (e.g., 2024)/
β βββ 2024-08-15 Vacation/
β β βββ IMG_20240815_143022.jpg
β β βββ VID_20240815_160255.mp4
β βββ 2024-Cooking/
β βββ !Screenshots_2024/ (auto-organized)
β βββ !ScreenRecorder_2024/ (auto-organized)
βββ 2025/
β βββ ...
βββ !duplicate/ (automatic duplicates)
βββ !tempvideoscreen/ (video preview cache)
-
Scan Camera Folder
- Click
Browseto select your camera uploads folder - Click
Scanto index all images and videos - Duplicates automatically moved to
!duplicate
- Click
-
Organize Files
- Select file(s) in the main list
- Choose existing folder from the Folders listbox
- OR create new folder with custom name
- Preview shows final path:
\YEAR\FOLDER_NAME\filename.jpg
-
Apply Changes
- Review all changes in the list
- Click
β APPLYto move files - Files are moved with collision detection (auto-renames if needed)
-
Video Preview
- Click on a video file
- Screenshots extracted automatically (cached for performance)
- Use slider to navigate through video timeline
- Click points at 0%, 10%, 15%, 25%, 30%, 50%, 65%, 75%, 85%, 95%, 100%
Screenshots & Screen Recordings
- Click
β‘ Auto Screenshots/Recorder - Files containing "screenshot" β
!Screenshots_YEAR/ - Files containing "screen" + "recorder" β
!ScreenRecorder_YEAR/
Check Duplicates
- Click
π Check Duplicates - Auto-Delete: Screenshot duplicates removed if file exists in organized folder
- Conflicts: Dialog shows files in multiple organized folders
- Options:
Ignore Selected: Add to permanent ignore listOpen Folder: Navigate to file location- Manually delete unwanted copies
| Shortcut | Action |
|---|---|
Delete |
Delete selected files (send to trash) |
Ctrl+Scroll |
Zoom image in/out |
ββ |
Navigate files |
Double-Click |
Edit year field (for files without date metadata) |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β [Camera Folder] [Browse] [Scan] β
ββββββββββββββββββββ¬βββββββββββββββββββ¬βββββββββββββββββββββββββ€
β β β β
β π Files List β π Folders β πΌοΈ Preview β
β β β β
β β’ Filename β β’ 2024-Vacation β [Image/Video] β
β β’ Year β β’ 2024-Cooking β β
β β’ Folder Name β β’ 2024-Work β [Video Slider] β
β β’ Final Path β β 0% β β β 50% β 100% β
β β [Create New] β β
β [Color coded β [β¨ Create] β β
β by folder] β β β
β β β β
ββββββββββββββββββββ΄βββββββββββββββββββ΄βββββββββββββββββββββββββ€
β [β‘ Auto] [π Duplicates] [β
APPLY] [ποΈ DELETE] [β Reset] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
All configuration files are stored next to the script:
triphoto_config.json- Camera folder pathtriphoto_edits.json- Current editing session (auto-saved)triphoto_ignore.json- Duplicate ignore list
Screenshot Extraction
- Uses FFmpeg/FFprobe
- Extracts 11 frames at specific percentages
- Cached in
!tempvideoscreen/folder - Hash-based naming prevents re-extraction
- Fallback to double-click playback if FFmpeg unavailable
Slider Points
- 0% - Start
- 10%, 15%, 25%, 30% - Early moments
- 50% - Middle
- 65%, 75%, 85%, 95% - Later moments
- 100% - End (t-0.5s to avoid black frame)
- Each folder gets a unique pastel color (HSL-based)
- Consistent across sessions (hash-based generation)
- Visual grouping in file list
- Colors assigned by Folders listbox, applied to TreeView
- Double-click on Year column
- Useful for files without date metadata (e.g.,
unnamed.jpg) - Updates folder list and final path automatically
- All edits auto-saved to
triphoto_edits.json - Resume work after closing application
- Deleted files removed from cache automatically
Video preview not working
- Install FFmpeg and add to PATH
- Check console for
[EXTRACT]logs - Verify with:
ffmpeg -version
HEIC images not showing
- Install:
pip install pillow-heif - Restart application
Files not moving
- Check write permissions on destination folder
- Review console for
[SCAN]and[DISPLAY]logs - Verify folder structure matches expected format
Duplicates not detected
- Check filename exactly matches (case-sensitive)
- Files must be in year folders (
2024/,2025/, etc.) - Special folders (
!Screenshots_*,!ScreenRecorder_*) are treated as screenshot folders
Enable detailed logging by running from terminal:
python TriPhoto_v5.pyLog prefixes:
[SCAN]- File scanning operations[DISPLAY]- Media display events[EXTRACT]- Video screenshot extraction[SLIDER]- Slider drawing and interactions[SLIDER-CLICK]- Click events and image loading[DUPLICATES]- Duplicate detection operations
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
MIT License - feel free to use and modify for your needs.
- Built with Python & Tkinter
- Video processing powered by FFmpeg
- HEIC support via pillow-heif
- Safe file deletion with send2trash
For issues, questions, or feature requests, please open an issue on GitHub.
Made with β€οΈ for organizing thousands of camera photos and videos