A GTK-based application for creating image previews with AI-powered highlight overlays.
Preview Maker is a desktop application that helps users create engaging image previews by automatically identifying and highlighting interesting regions in images. It uses Google's Gemini AI to analyze images and identify areas of interest, then creates circular overlays to draw attention to these areas.
- Load and display images in various formats (JPEG, PNG, BMP, TIFF)
- Analyze images using Google Gemini AI to identify interesting regions
- Create circular highlight overlays on images
- Save processed images with overlays
- Modern GTK 4.0 user interface with drag-and-drop support
- Headless mode for batch processing
- Python 3.8 or higher
- GTK 4.0
- PyGObject
- Pillow (PIL)
- Google Gemini API key
-
Clone the repository:
git clone https://github.com/jdamboeck/preview-maker.git cd preview-maker -
Install dependencies:
pip install -r requirements.txt
-
Run the application:
python -m preview_maker.app
For development and testing, you can use the provided Docker environment:
docker-compose -f rebuild_plan/docker/docker-compose.yml run --rm app- Launch the application
- Click "Open" to select an image
- Enter your Google Gemini API key when prompted
- Click "Analyze" to process the image
- Save the result using the "Save" button
For batch processing or integration with other tools, use headless mode:
python -m preview_maker.app --headless --image input.jpg --output output.jpg --api-key YOUR_API_KEYpreview_maker/- Main packageapp.py- Application entry pointcore/- Core functionalityimage/- Image processing componentsai/- AI integration componentsui/- User interface components
tests/- Test suiterebuild_plan/- Project documentation and planning
# Run all tests
pytest
# Run tests in headless mode (for CI/CD)
HEADLESS=1 pytest
# Run specific test modules
pytest tests/ui/This project is licensed under the MIT License - see the LICENSE file for details.
- Google Gemini API for image analysis
- GTK team for the UI toolkit
- PyGObject team for Python bindings