Transform your image collection with intelligent AI-generated descriptions and hashtags
Features β’ Installation β’ Usage β’ Configuration β’ Contributing
Graffiti App is a powerful, user-friendly desktop application that leverages cutting-edge AI technology to automatically generate comprehensive descriptions and relevant hashtags for your images. Whether you're a content creator, social media manager, or just someone looking to organize their photo collection, Graffiti App streamlines the process of image tagging with support for multiple AI providers.
- Multi-AI Support: Works seamlessly with Ollama, LMStudio, and OpenAI API
- Batch Processing: Handle hundreds of images efficiently
- Smart Analysis: Generate detailed descriptions and contextual hashtags
- User-Friendly Interface: Intuitive PyQt6-based GUI with dark theme
- Flexible Configuration: Customize AI models and processing parameters
- Metadata Integration: Automatically saves tags and descriptions to image metadata
- Batch Processing: Select and process multiple images simultaneously
- Smart Thumbnails: Preview images with zoom functionality
- Progress Tracking: Real-time processing status and progress bars
- Error Handling: Robust error management with retry mechanisms
- Multiple Providers:
- π¦ Ollama - Local AI models (llava, bakllava, etc.)
- π LMStudio - Local model hosting
- π OpenAI - GPT-4 Vision API
- Comprehensive Analysis: Detailed scene descriptions, object detection, and context understanding
- Smart Hashtag Generation: Relevant, trending hashtags based on image content
- Modern Dark Theme: Easy on the eyes with professional aesthetics
- Intuitive Layout: Clean, organized interface with logical workflow
- Image Grid View: Visual thumbnail grid with selection capabilities
- Settings Management: Persistent configuration with easy access
- Memory Management: Automatic Ollama memory clearing for optimal performance
- Concurrent Processing: Multi-threaded processing for faster results
- Health Monitoring: AI service health checks and status indicators
- Metadata Writing: Automatic saving of descriptions and hashtags to image files
- Python 3.8+ installed on your system
- pip (Python package installer)
- At least one AI provider configured (Ollama, LMStudio, or OpenAI API)
git clone https://github.com/Massivemiike/Graffiti/graffiti-app.git
cd graffiti-apppip install -r requirements.txtpip install PyQt6>=6.4.0 requests>=2.28.0- PyQt6 (>=6.4.0) - Modern GUI framework for the user interface
- requests (>=2.28.0) - HTTP library for API communications with AI providers
All other dependencies are part of Python's standard library.
β οΈ Hardware Requirements: Vision models require significant computational resources. Consider your hardware limitations when choosing models:
- QWEN2.5VL:7b: Requires ~8GB RAM, recommended for most users
- Llama3.2-Vision: Requires ~4-6GB RAM, lighter alternative
- GPU acceleration highly recommended for better performance
Choose one or more of the following options:
- Docker Desktop for Windows
- Windows 10/11 with WSL2 enabled
-
Install Docker Desktop
# Download and install Docker Desktop from the official website # Ensure WSL2 integration is enabled
-
Run Ollama Container with Network Access
# Pull and run Ollama container docker run -d --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama # Verify container is running docker ps
-
Pull Recommended Vision Models
# Option 1: QWEN2.5VL:7b (Recommended for most users) docker exec -it ollama ollama pull qwen2.5-vl:7b # Option 2: Llama3.2-Vision (Lighter alternative) docker exec -it ollama ollama pull llama3.2-vision
-
Configure Network Access
# Set environment variable for network binding docker exec -it ollama sh -c 'export OLLAMA_HOST=0.0.0.0:11434' # Restart container to apply changes docker restart ollama
- Docker installed (Installation Guide)
- NVIDIA Docker runtime (for GPU support) - Setup Guide
-
Install Docker (if not already installed)
# Ubuntu/Debian curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # Add user to docker group sudo usermod -aG docker $USER newgrp docker
-
Run Ollama Container with GPU Support
# With GPU support (recommended) docker run -d --gpus all --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama # Without GPU (CPU only) docker run -d --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama
-
Pull Recommended Vision Models
# Option 1: QWEN2.5VL:7b (Recommended for most users) docker exec -it ollama ollama pull qwen2.5-vl:7b # Option 2: Llama3.2-Vision (Lighter alternative) docker exec -it ollama ollama pull llama3.2-vision
-
Configure Network Access
# Create environment file echo "OLLAMA_HOST=0.0.0.0:11434" > ollama.env # Restart container with environment file docker stop ollama docker rm ollama docker run -d --gpus all --name ollama -p 11434:11434 --env-file ollama.env -v ollama:/root/.ollama ollama/ollama
# Test Ollama is accessible
curl http://localhost:11434/api/tags
# Test from another machine (replace YOUR_IP with your machine's IP)
curl http://YOUR_IP:11434/api/tags-
Download LMStudio
- Visit LMStudio.ai
- Download the appropriate version for your OS
- Install following the setup wizard
-
Download Recommended Models
Method 1: Through LMStudio Interface
- Open LMStudio
- Navigate to the "Discover" tab
- Search for and download:
qwen2.5-vl-7b-instruct(Recommended)llama-3.2-11b-vision-instruct(Alternative)
Method 2: Direct Model Links
-
Configure Local Server
Step-by-Step Setup:
1. Open LMStudio 2. Go to "Local Server" tab 3. Select your downloaded vision model 4. Configure server settings: - Port: 1234 (default) - Host: 0.0.0.0 (for network access) - Enable CORS: β 5. Click "Start Server" -
Network Configuration
{ "server_host": "0.0.0.0", "server_port": 1234, "cors_enabled": true, "api_base": "http://localhost:1234/v1" } -
Verify Installation
# Test local access curl http://localhost:1234/v1/models # Test network access (replace YOUR_IP) curl http://YOUR_IP:1234/v1/models
-
Get API Key
- Visit OpenAI Platform
- Create account or sign in
- Generate new API key
β οΈ Keep your API key secure and never share it publicly
-
Supported Models
gpt-4-vision-preview(Recommended)gpt-4o(Latest with vision capabilities)gpt-4o-mini(Cost-effective option)
-
Configuration
{ "provider": "openai", "api_key": "sk-your-api-key-here", "model": "gpt-4-vision-preview", "base_url": "https://api.openai.com/v1" }
| Provider | Default URL | Recommended Model | Hardware Requirements |
|---|---|---|---|
| Ollama | http://localhost:11434 |
qwen2.5-vl:7b |
8GB+ RAM, GPU recommended |
| LMStudio | http://localhost:1234 |
qwen2.5-vl-7b-instruct |
8GB+ RAM, GPU recommended |
| OpenAI | https://api.openai.com/v1 |
gpt-4-vision-preview |
Internet connection + API credits |
- GPU Acceleration: Significantly improves processing speed
- Model Size: Larger models = better quality but slower processing
- Network Setup: Ensure firewall allows connections on configured ports
- Memory Management: Close other applications when processing large batches
-
Launch the Application
python graffiti_app.py
-
Configure Settings
- Click the βοΈ Settings button
- Select your AI provider (Ollama/LMStudio/OpenAI)
- Configure model parameters and API settings
-
Load Images
- Click "π Open Folder" to select your image directory
- Images will appear as thumbnails in the grid
-
Select and Process
- Use checkboxes to select images for processing
- Click "π Process Selected Images"
- Monitor progress in the status bar
- Individual Selection: Click checkboxes on specific images
- Select All: Use the "Select All" button for batch operations
- Preview: Click on any thumbnail to view full-size image
| Setting | Description | Default |
|---|---|---|
| AI Provider | Choose between Ollama, LMStudio, or OpenAI | Ollama |
| Model | Specific model to use (e.g., llava, gpt-4-vision) | llava |
| Server URL | Local server address for Ollama/LMStudio | http://localhost:11434 |
| API Key | OpenAI API key (if using OpenAI) | - |
| Timeout | Request timeout in seconds | 120 |
| Max Retries | Number of retry attempts | 3 |
- Image Analysis: AI analyzes visual content, objects, scenes, and context
- Description Generation: Creates detailed, natural language descriptions
- Hashtag Creation: Generates relevant hashtags based on content
- Metadata Writing: Saves results to image metadata
- Progress Updates: Real-time status updates and completion notifications
{
"provider": "ollama",
"model": "llava",
"server_url": "http://localhost:11434",
"timeout": 120
}{
"provider": "lmstudio",
"model": "your-vision-model",
"server_url": "http://localhost:1234",
"timeout": 120
}{
"provider": "openai",
"model": "gpt-4-vision-preview",
"api_key": "your-api-key-here",
"timeout": 60
}- Memory Management: Automatic Ollama memory clearing between batches
- Concurrent Processing: Configurable thread pool for parallel processing
- Error Handling: Automatic retry with exponential backoff
- Health Monitoring: Service availability checks before processing
Coming soon - Screenshots will be added to showcase the beautiful interface and workflow
We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PEP 8 style guidelines
- Add docstrings to new functions and classes
- Test your changes thoroughly
- Update documentation as needed
This project is currently under private development and is not seeking contribution. Code is wholly owned by Michael Wright.
- Multi-Model Ensemble: Combine results from multiple AI models for improved accuracy
- Custom Model Training: Support for fine-tuned models specific to user domains
- Batch Optimization: Smart batching algorithms for improved processing speed
- Context Awareness: Remember previous images for better contextual understanding
- Image Enhancement: Pre-processing filters to improve AI analysis quality
- Format Support: Extended support for RAW, HEIC, and other image formats
- Duplicate Detection: Identify and handle duplicate or similar images
- Quality Assessment: Automatic image quality scoring and filtering
- Drag & Drop Interface: Direct file dropping for easier workflow
- Keyboard Shortcuts: Comprehensive hotkey support for power users
- Custom Themes: Multiple UI themes and customization options
- Workspace Management: Save and load different project configurations
- Export Formats: CSV, JSON, XML export options for metadata
- Cloud Integration: Direct upload to social media platforms
- Database Support: SQLite/PostgreSQL integration for large collections
- API Endpoints: RESTful API for integration with other tools
- GPU Acceleration: CUDA support for faster local processing
- Distributed Processing: Multi-machine processing capabilities
- Caching System: Intelligent result caching to avoid reprocessing
- Memory Optimization: Improved memory usage for large image sets
- Processing Statistics: Detailed analytics on processing performance
- Tag Analytics: Insights into most common tags and descriptions
- Quality Metrics: Accuracy scoring and improvement suggestions
- Usage Reports: Comprehensive usage statistics and trends
- User Management: Multi-user support with role-based access
- Audit Logging: Comprehensive logging for enterprise compliance
- Batch Scheduling: Automated processing schedules
- Integration APIs: Enterprise system integration capabilities
Made with β€οΈ by the Graffiti App Team
Report Bug β’ Request Feature β’ Documentation