A desktop file categorization application using Electron and Python. Fully algorithmic and deterministic - no AI.
- By Extension - jpg, png, pdf, docx, etc.
- By MIME Type - Images, Videos, Audio, Documents
- By Creation Date - YYYY / YYYY-MM / YYYY-MM-DD
- By Modification Date - YYYY / YYYY-MM / YYYY-MM-DD
- By Size - 0-1MB / 1-10MB / 10-100MB / 100MB-1GB / 1GB+
- By Name Pattern - invoice, IMG_, VID_, etc.
- Similarity Analysis - Levenshtein, Jaro-Winkler, LCS algorithms
- Dynamic Size Histogram - Auto-calculated size ranges
- Same-Name Clustering - presentation.pdf + presentation.pptx = same folder
- Multi-Criteria - AND-OR combinations
- ✅ Simulation mode (preview before moving)
- ✅ Undo feature
- ✅ Operation logs (JSON format)
- ✅ Language selection (English/Turkish folder names)
- ✅ Progress indicator
- ✅ Detailed reporting
- Node.js 18+
- Python 3.8+
- npm or yarn
# Clone the project
git clone https://github.com/bugraskl/file-categorizer.git
cd file-categorizer
# Install dependencies
npm install
# Start the application
npm startnpm run build:winnpm run build:macnpm run build:linuxPackaged files will be created in the dist/ folder.
- Select Folder - Click "Browse..." button
- Select Mode - Choose one or more categorization modes
- Simulate (Optional) - Preview changes with "Simulate" button
- Categorize - Move files with "Categorize" button
- Undo (If needed) - Restore files with "Undo" button
Scenario: Organizing a photo archive
- Select the photos folder
- Choose "By creation date" mode
- Select "YYYY-MM" format in options
- Run "Simulate" to preview
- Confirm and click "Categorize"
Result:
Photos/
├── 2023-01/
│ ├── IMG_001.jpg
│ └── IMG_002.jpg
├── 2023-02/
│ └── IMG_003.jpg
└── 2024-01/
└── IMG_004.jpg
| Option | Description |
|---|---|
| Language | English or Turkish folder names |
| Date Format | YYYY, YYYY-MM, or YYYY-MM-DD |
| Conflict Resolution | Add number or timestamp |
| Similarity Threshold | 50-100% adjustable |
file-categorizer/
├── package.json
├── src/
│ ├── main/
│ │ ├── main.js
│ │ └── preload.js
│ ├── renderer/
│ │ ├── index.html
│ │ ├── css/styles.css
│ │ └── js/renderer.js
│ └── python/
│ ├── categorizer.py
│ ├── similarity.py
│ ├── undo_manager.py
│ └── utils.py
├── logs/
└── dist/
Each categorization operation automatically creates a log file:
{
"timestamp": "2024-02-04T15:48:00",
"folder": "C:/Users/Documents",
"modes": ["extension", "size"],
"total_files": 150,
"operations": [...]
}When "Undo" is clicked:
- All files are moved back to original locations
- Empty folders are deleted
- Log file is archived
# Run in development mode
npm start
# Run Python tests
python src/python/categorizer.py --test
python src/python/similarity.py
python src/python/utils.pyMIT License
