Formato is a versatile, modern desktop application designed for batch image processing, optimization, and conversion. Built using the powerful PySide6 (Qt for Python) framework and the Pillow (PIL) imaging library, it provides an efficient, lightweight, and responsive workspace for creators and developers alike.
The codebase has been refactored into a clean, modular architecture. This separation of concerns improves performance, code readability, and makes it easily extensible for future feature integrations.
- Batch Processing: Concurrently convert files to widely-used formats including
JPEG,PNG,WEBP,TIFF,BMP, andGIF. - Smart Compression: Adjust output quality manually or utilize smart compression to automatically approximate a target file size (in KB) using an efficient iterative search algorithm.
- Smart Resizing: Resize images using Stretch, Fit (maintain aspect ratio), or Fill/Crop modes.
- Advanced Adjustments: Fine-tune brightness, contrast, saturation, and sharpness using smooth sliders. Double-click any label to quickly reset its value.
- Visual Filters: Apply pre-defined filters such as Grayscale, Auto-Contrast, Sharpen, Blur, Contour, Emboss, and Edge Enhance.
- Metadata Management: Preserve original EXIF data or write custom metadata (Author, Copyright, and Description) to supported formats.
- Advanced Watermarking: Load a PNG logo watermark, adjust its position (5 placement zones), scale, opacity, and custom pixel margins.
- Live Interactive Preview: Pan (drag) and zoom (scroll) on an interactive graphics scene with integrated RAM image caching to deliver fast, real-time feedback.
- PDF Builder: Merge selected queue images into a single, multi-page PDF document.
- Icon & Favicon Generator: Generate individual resolution assets for web or app platforms and compile them into a unified multi-size
.icofile.
- Core Language: Python 3.10+
- Graphical User Interface: PySide6 (Qt6) with a customized, premium dark QSS theme.
- Image Manipulation: Pillow (PIL)
- Concurrency: Built-in multi-threading utilizing
ThreadPoolExecutorto handle background image processing and thumbnail rendering, ensuring the main GUI remains responsive and lag-free.
The repository is organized following clean-coding principles to separate data, logic, and interface elements:
formato_project/
β
βββ assets/ # Static assets (logos, icons, and favicon.ico)
β βββ logo.png
β βββ icon.ico
β
βββ core/ # Image processing core using Pillow algorithms
β βββ __init__.py
β βββ image_processor.py
β
βββ models/ # Data representations and Model-View architectures
β βββ __init__.py
β βββ queue_model.py
β
βββ views/ # UI components, custom widgets, and windows
β βββ __init__.py
β βββ widgets.py # Zoomable canvas, smooth scroll area, and delegate rendering
β βββ main_window.py # Primary window controller and interface setups
β
βββ config.py # Static configurations, file paths, and CSS stylesheets
βββ utils.py # General-purpose utility and mathematical helpers
βββ requirements.txt # Project dependencies
βββ main.py # Application entry point
Ensure you have Python 3.10 or higher installed on your system.
- Clone the repository:
git clone https://github.com/MRThugh/Formato-Image-Converter.git
cd Formato-Image-Converter- Install the required dependencies:
pip install -r requirements.txt- Launch the application:
python main.py- Manage the Queue: Add files using the
β Add Filesbutton or drag-and-drop images directly into the interface. Click any item to display its real-time preview. To remove an image, click the red deletion mark (Γ) on the right side of the queue item. - Configure Settings: Choose your destination format, resize parameters, rename rules (prefix/suffix), and any desired filters.
- Save/Load Presets: Easily export your preferred settings configurations via
Save Presetas a JSON file, and reload them later usingLoad Preset. - Choose Destination: Specify your output directory, then click
π START PROCESSINGto run the concurrent batch converter.
Contributions make the open-source community a better place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project.
- Create your Feature Branch (
git checkout -b feature/AmazingFeature). - Commit your Changes (
git commit -m 'Add some AmazingFeature'). - Push to the Branch (
git push origin feature/AmazingFeature). - Open a Pull Request.
Distributed under the MIT License. See the LICENSE file in the repository for more details.