A professional, feature-rich image viewer application built with Python, Tkinter, and ttkbootstrap. View images with EXIF metadata, navigate through folders seamlessly, and visualize photo locations on interactive maps.
- Multi-format support: PNG, JPG, JPEG, GIF, BMP, and WebP
- Folder navigation: Seamlessly browse through all images in a directory
- Keyboard shortcuts: Intuitive navigation with arrow keys and F11 for fullscreen
- Responsive design: Modern dark theme with ttkbootstrap
- EXIF data extraction: View capture date, GPS coordinates, and device information
- Address geocoding: Convert GPS coordinates to human-readable addresses
- Interactive maps: Visualize photo locations using Folium-powered maps
- Device details: Camera make, model, and technical specifications
- Fullscreen mode: Immersive viewing experience (F11)
- Error handling: Comprehensive logging and user-friendly error messages
- Professional UI: Clean, modern interface optimized for image viewing
- Python 3.8.1 or higher
- System dependencies (Ubuntu/Debian/Xubuntu):
sudo apt-get update sudo apt-get install python3-tk libwebp-dev
-
Clone the repository
git clone https://github.com/Onehand-Coding/image-viewer.git cd image-viewer
-
Install dependencies
# Install all dependencies uv sync # Include development dependencies (optional) uv sync --extra dev
-
Run the application
uv run src/custom_image_viewer/main.py # or uv run image-viewer
- Open an image:
File > Open Image
or use the file dialog - Navigate: Use arrow keys or Previous/Next buttons
- View metadata: Access
Info
menu for EXIF data - Map view: Click "View on map" for GPS-enabled images
- Fullscreen: Press
F11
for immersive viewing
Key | Action |
---|---|
β / β |
Navigate between images |
F11 |
Toggle fullscreen mode |
Ctrl+O |
Open image file |
Esc |
Exit fullscreen |
- File: Open images, exit application
- Info: View EXIF data (date, location, device)
- Help: About dialog and version information
custom-image-viewer/
βββ src/
β βββ custom_image_viewer/
β βββ __init__.py # Package initialization
β βββ config.py # Configuration settings
β βββ image_info.py # EXIF metadata handling
β βββ image_viewer.py # Main GUI components
β βββ main.py # Application entry point
βββ data/ # Generated files (maps, cache)
βββ logs/ # Application logs
βββ tests/
β βββ test_image_info.py # Unit tests
βββ pyproject.toml # Project configuration
βββ requirements.txt # Dependencies list
βββ README.md # This file
ttkbootstrap>=1.10.1
- Modern UI componentsPillow>=10.0.0
- Image processing and format supportpyexiv2>=2.14.0
- EXIF metadata extractionfolium>=0.17.0
- Interactive map generationgeopy>=2.4.1
- Geocoding services
pytest-mock
- Testing frameworkruff
- Code linting and formatting
# Run tests with coverage
uv run pytest --cov=src/custom_image_viewer tests/
# Run all tests
uv run pytest
# Check code style
uv run ruff check
# Format code
uv run ruff format
Modify logging settings in src/custom_image_viewer/config.py
:
LOG_LEVEL
: Set toDEBUG
,INFO
,WARNING
, orERROR
LOG_FILE
: Change log file location (default:logs/image_viewer.log
)
We welcome contributions! Here's how to get started:
- 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 tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting
- OS: Linux (Ubuntu/Debian tested), Windows, macOS
- Python: 3.8.1 or higher
- Memory: 512MB RAM minimum
- Storage: 50MB for application and dependencies
- Linux: Requires
python3-tk
andlibwebp-dev
packages - Windows: No additional system dependencies
- macOS: May require Homebrew for some dependencies
- WebP not supported: Install
libwebp-dev
system package - Tkinter import error: Install
python3-tk
package - EXIF data not showing: Ensure
pyexiv2
is properly installed - Map not opening: Check internet connection and browser settings
- π Report bugs
- π‘ Request features
- π View documentation
Copyright Β© 2025 Onehand Coding. This project is licensed under the MIT License.
- Built with ttkbootstrap for modern UI
- Maps powered by Folium
- EXIF handling via pyexiv2
- Geocoding services by geopy