Releases: oaklensart/fixxer
Release list
v1.2.0 - Multi-Provider Vision API Support
✅ Added
OpenAI-compatible API provider adapter - Support for llama.cpp, vLLM, LocalAI, Jan, and any OpenAI-compatible vision API (#8)
Provider abstraction layer - Clean architecture with VisionProvider base class
OllamaProvider - Default provider (backward compatible, zero config changes required)
OpenAICompatProvider - Handles OpenAI /v1/chat/completions format with automatic payload translation
Environment variable configuration - FIXXER_API_PROVIDER and FIXXER_API_ENDPOINT for runtime provider selection
Config file API section - [api] section in ~/.fixxer.conf for provider settings
Configuration priority system - Environment Variables > Config File > Defaults
🔄 Changed
Vision API calls now use provider abstraction instead of direct Ollama integration
Connection checking is now provider-agnostic
Default behavior unchanged - Ollama remains the zero-config default
Fixed
Improved error handling for vision API failures across different providers
✍️ Technical Details
New vision_providers/ module with factory pattern for provider instantiation
Payload translation from Ollama format to OpenAI multi-modal content structure
Graceful fallback for connection checks (tries /v1/models then base URL)
Maintains full backward compatibility with existing Ollama workflows
FIXXER v1.1.0 - Modular Architecture Refactor
FIXXER v1.1.0 - Modular Architecture Refactor
🏗️ Major Refactor
Split monolithic engine.py into focused, maintainable modules:
config.py- Configuration management and app settingssecurity.py- SHA256 hash verification & sidecar file generationvision.py- AI/Ollama integration & RAW processing (rawpy)engine.py- Workflow orchestration (now focused & clean)
🔧 Improvements
- Cross-platform defaults - Default destination now
~/Pictures/FIXXER_Output(works on macOS/Linux/Windows) - Case-insensitive file matching - Finds both
.jpgand.JPGfiles - Removed deprecated tools - Replaced
dcrawwithrawpy(Python-native, cross-platform) - Cleaned up dead code - Removed
MockSessionTracker,check_dcraw(), etc. - Fixed Easy Button workflow - Simple Sort now works correctly
📚 Documentation
- Updated README with modular project structure
- Clarified system requirements (rawpy/exifread via pip)
- Cleaned up .gitignore duplicates
- Version metadata synced across all files
🎯 Type
Architecture refactor + documentation sync - backward compatible
Built with precision. Secured with cryptography. Powered by AI.
FIXXER ✞ v1.0.1 - SRC Layout & Homebrew Support
What's New
- Migrated to professional
src/package layout for reliable pip/Homebrew installation - Added Homebrew tap support:
brew tap bandwagonvibes/fixxer - Improved CSS asset loading via
importlib.resources - Added
python -m fixxermodule entry point
Install
brew tap bandwagonvibes/fixxer
brew install fixxerOr via pip:
pip install git+https://github.com/BandwagonVibes/fixxer.gitFIXXER ✞ v1.0 - "CHAOS PATCHED // LOGIC INJECTED
🎯 FIXXER v1.0 - Professional Photography Workflow Automation
Evolved from photosort to FIXXER ✞ PRO
A major upgrade bringing professional-grade features, cryptographic integrity verification, and dual UI modes for serious photographers who demand both speed and safety in their digital asset management.
✨ What's New in v1.0
🔐 Hash-Verified File Operations
- SHA256 integrity checking on every file move operation
- Halt-on-mismatch protection prevents silent corruption
- JSON sidecar files (
.fixxer.json) create permanent audit trails - Production-tested: 120+ files, zero corruption events
🎨 Pro Mode - "Phantom Redline"
- Toggle with F12 for tactical precision dashboard
- Milestone HUD with real-time workflow stats (BURSTS, TIER A/B/C, HEROES, ARCHIVED, TIME)
- Redline sparklines for system monitoring (RAM/CPU)
- Minimal, professional aesthetic for focused work
📷 120+ RAW Format Support
- Python-native RAW processing via
rawpy(no external dependencies) - Cross-platform: Linux, macOS, Windows
- Supports: RW2, CR2, CR3, NEF, ARW, DNG, RAF, ORF, PEF, SRW, and 100+ more
- Zero temp files - pure in-memory processing
🤖 AI Vision Integration
- Ollama-powered naming (qwen2.5vl, llava, bakllava)
- Semantic burst detection using CLIP embeddings
- AI session naming from visual analysis
- Creative critique mode for artistic feedback
📊 Quality Analysis Pipeline
- BRISQUE quality scoring for sharpness assessment
- Exposure analysis (crushed blacks, blown highlights)
- Automated culling into Tier A/B/C folders
- Smart burst grouping based on visual similarity, not timestamps
🔧 Bug Fixes & Improvements
Fixed:
- ✅ Unicode corruption in
photosort_engine.py(emojis/symbols now render correctly) - ✅ Pro Mode logo display in TUI
- ✅ Cross-platform RAW file handling (replaced macOS-only
sips) - ✅ Thread safety in logging and progress updates
Improved:
- ✅ Professional README with architecture diagrams
- ✅ Modern Python packaging (
pyproject.toml) - ✅ Comprehensive dependency documentation
- ✅ Smart
.gitignore(protects user photos and config)
📦 Installation
Requirements:
- Python 3.10+
- Ollama (for AI vision features)
Quick Start:
# Clone the repository
git clone https://github.com/BandwagonVibes/fixxer.git
cd fixxer
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Pull an AI vision model
ollama pull qwen2.5vl:3b
# Launch FIXXER
python3 photosort_tui_styled.py📚 Documentation
- README.md - Complete feature guide
- requirements.txt - Dependencies with platform notes
- Configuration - Stored in
~/.photosort.conf
🎯 Workflows Included
| Workflow | Description |
|---|---|
| Auto | Complete pipeline: burst stack → cull → AI name → archive |
| Bursts | CLIP-based semantic grouping + AI naming of best picks |
| Cull | Quality analysis → Tier A/B/C sorting |
| Stats | EXIF insights (cameras, lenses, lighting conditions) |
| Critique | AI creative feedback (composition, mood, suggestions) |
| Easy Archive | Simple AI naming + keyword folders (no culling) |
🔒 Security & Integrity
Every file operation is protected by:
- SHA256 hash calculation before move
- SHA256 hash verification after move
- Automatic sidecar file generation (
.fixxer.json) - Workflow halts on corruption detection (RuntimeError)
Example sidecar file:
{
"fixxer_version": "1.0",
"filename": "golden-hour-cityscape.jpg",
"sha256_source": "a1b2c3d4...",
"verified": true,
"timestamp": "2024-11-20T14:35:22.123456"
}🎨 UI Modes
Toggle between two aesthetics with F12:
Standard Mode (Warez):
- Red/white/black color scheme
- ASCII art branding
- Motivational progress phrases
- High-contrast buttons
Pro Mode (Phantom Redline):
- Tactical black aesthetic
- Clean typography
- Real-time HUD dashboard
- Minimal, professional design
🙏 Acknowledgments
Built with:
- Ollama - Local LLM inference
- rawpy / LibRaw - RAW processing
- Textual - Modern TUI framework
- OpenAI CLIP - Semantic burst detection
- BRISQUE - Image quality assessment
📄 License
MIT License - See LICENSE for details.
🚀 What's Next
Future roadmap considerations:
- Native Windows support (non-WSL)
- GPU acceleration for CLIP embeddings
- Lightroom Classic plugin integration
- Additional AI vision models
- Batch processing optimizations
Built with precision. Secured with cryptography. Powered by AI.
✞ FIXXER PRO - From chaos to order, one hash at a time.