T8RIN/ImageToolbox
59.4
Adequate · 10 October 2026
466.4k
lines of production code
Kotlin
primary language
1
measurement over time
What this system is
ImageToolbox is a comprehensive Android application designed for advanced image manipulation, format conversion, and file management. It provides a wide array of tools including AI-powered background removal, text recognition, and fractal generation, alongside utilities for batch renaming, checksum verification, and archive handling. The system supports extensive image processing capabilities such as complex filtering, collage creation, and PDF manipulation, all built on a modular architecture with support for both open-source and market-specific builds.
How it got here
2022–2025 — ImageToolbox modular architecture and feature expansion
146 changes.
The project was rebranded from Image Resizer to ImageToolbox and rebuilt around a modular, multi-flavor architecture using Jetpack Compose, Hilt, and Decompose. This period saw the introduction of a comprehensive suite of image processing tools, including advanced filters, AI-powered background removal, and support for modern formats like JXL and AVIF. The work focused on establishing a robust core infrastructure while rapidly expanding the application's feature set to cover diverse image manipulation and conversion tasks.
2026 — AI tools and new feature expansion
79 changes.
This period focused on launching the AI Tools feature with ONNX runtime integration and a comprehensive suite of new standalone tools, including Shader Studio, Batch Rename, Duplicate Finder, and Photomosaic. The project also expanded its internal library ecosystem with modules for document scanning, OpenCV processing, and archive management, while significantly broadening test coverage across these new components.
Features
AI Tools presentation layer introduces detection previews, result comparisons, and model filtering
The AI Tools feature now includes a comprehensive set of presentation components for managing and reviewing AI model outputs. Users can preview AI detection results with probability indicators and verdicts, compare original and processed images side-by-side, and remove specific results from the preview queue. The model selection interface has been enhanced with a filter sheet allowing users to search and filter models by type, speed, and keywords, alongside controls for depth map parameters, style transfer images, and model management (download, delete, import).
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/presentation/components · high confidence
AI tools data layer rewritten with modular processors and ONNX runtime integration
The data layer for the AI tools feature has been completely rewritten to support a wider range of AI models and improved processing capabilities. The new architecture introduces specialized processors for distinct tasks: \AiImageDetectorProcessor\ for image detection, \DepthProcessor\ for depth map inference and custom depth map support, \StyleTransferProcessor\ for artistic style transfer, and \OptimizationStyleTransferProcessor\ for optimization-based style transfer. The core \AiProcessor\ now handles general image processing with tiled rendering for large images and parallel worker support. \AndroidAiToolsRepository\ manages model downloads, storage, and selection, integrating with \KeepAliveService\ to prevent background processing from being killed. Utility functions in \AiExtensions\ and \OnnxConversion\ provide ONNX tensor creation, FP16/FP32 conversion, and output parsing, enabling the use of various ONNX models for background removal, upscaling, and other AI effects.
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/data · high confidence
APNG parameter selection UI added
The APNG tools feature now includes a dedicated UI component for configuring animation parameters. Users can adjust the image size (with an option to use the first frame's dimensions), set the encoding quality (effort level), define the repeat count, and specify the frame delay. This component consolidates these settings into a single interface within the APNG tools presentation layer.
_feature/apng-tools/src/main/java/com/t8rin/imagetoolbox/feature/apng\tools/presentation/components · high confidence
Add Mesh Gradients collection screen
The app now includes a new Mesh Gradients feature that displays a grid of downloadable mesh gradient images. Users can view the collection, see download progress for the resources, and share individual gradient images directly from the grid.
_feature/mesh-gradients/src/main/java/com/t8rin/imagetoolbox/feature/mesh\gradients · high confidence
Add animated before/after GIF export to the Compare tool
The Compare feature now includes the ability to export an animated GIF showing a smooth transition between two images. This new capability is implemented through new domain models for animation parameters, a renderer that composites the before/after frames with optional labels, and an encoder that writes the output GIF. A new UI sheet allows users to preview the animation, adjust settings like duration and orientation, and then save or share the resulting file.
feature/compare/src/main/java/com/t8rin/imagetoolbox/feature/compare · high confidence
Add app usage statistics screen
A new Usage Statistics screen has been added to the app, allowing users to view their usage history and reset the data. The screen displays summary cards for app opens, tool opens, tools used, successful saves, activity streak, data saved, top saved format, and last tool opened. It also lists individual tool usage statistics with progress bars and allows navigation to the respective tool. Users can access an info dialog to learn more about the statistics and reset them if desired.
_feature/usage-statistics/src/main/java/com/t8rin/imagetoolbox/feature/usage\statistics · high confidence
Add noise generation feature
Users can now generate procedural noise images with customizable parameters including seed, frequency, noise type (OpenSimplex2, Cellular, Perlin, etc.), fractal settings, and domain warp options. The feature provides a dedicated screen with real-time preview, undo/redo history, and options to save, share, or copy the generated noise as an image.
feature/noise-generation · high confidence
Add one-dimensional barcode generation support
The qrose library now supports generating one-dimensional barcodes in addition to QR codes. This change introduces a new \oned\ package containing encoders for Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, and UPC-E formats, along with Compose \Painter\ implementations to render them.
lib/qrose · high confidence
Added ASCII art conversion library
The lib/ascii module now includes the core implementation for converting images to ASCII art. This adds the ASCIIConverter class, which provides functions to transform Bitmaps into ASCII text strings or rendered Bitmap images, supporting features like grayscale mode, custom fonts, and background colors. The module also includes the necessary Android manifest and build ignore rules to support this new library component.
lib/ascii · high confidence
Added Android benchmark infrastructure for performance profiling
The benchmark module now includes a BaselineProfileGenerator that captures startup and scrolling performance metrics for the main application package (ru.tech.imageresizershrinker). This enables the generation of baseline profiles to improve app launch times and UI smoothness on Android devices running API 28 or higher.
benchmark · high confidence
Added Android implementation for the Batch Rename feature
Introduced the Android-specific data layer for the new Batch Rename tool. The AndroidRenameManager now handles reading file metadata (such as size, dimensions, and dates) and executing the actual file renaming operations on Android devices, including handling MediaStore permissions and staging renames to avoid conflicts. This implementation is wired into the application via a Hilt dependency injection module.
feature/batch-rename/src/main/java/com/t8rin/imagetoolbox/feature/batchrename/data · high confidence
Added Code Preview Generator tool with undo/redo support
The Code Preview Generator tool is now available, allowing users to generate code previews from input code. This feature includes full undo and redo capabilities for editing the preview, along with options to share, copy, or save the generated image to a specific folder. Users can also zoom into the preview and access a preference sheet for further image processing.
_feature/code-preview/src/main/java/com/t8rin/imagetoolbox/feature/code\preview/presentation · high confidence
Added Color Library feature for browsing and managing colors
A new Color Library feature has been added, allowing users to browse a vast collection of colors, search by name or hex code, and manage a list of favorite colors. The implementation includes a new Android module with a Compose-based UI, a screen logic component for state management, and support for copying color information.
feature/color-library · high confidence
Added Compose snowfall and snowmelt animation modifiers
The lib/snowfall module now provides \Modifier.snowfall\ and \Modifier.snowmelt\ extension functions for Jetpack Compose, allowing developers to overlay falling or melting snowflake animations on any composable. These modifiers accept a \FlakeType\ (currently supporting custom \Painter\ lists), along with configurable \density\ and \alpha\ parameters to control the visual intensity and transparency of the effect.
lib/snowfall · high confidence
Added Compose-based fast scroller and Material 3 indicator components
The lib/fast-scroller module now includes a new vertical fast scroller implementation for LazyGrid layouts and a Material 3-styled bubble indicator. Users can now integrate a draggable thumb that scrolls the grid and displays a floating label (styled after Launcher3) to show the current section while scrolling.
lib/fast-scroller · high confidence
Added document scanning and in-app review capabilities
The app now includes a new document scanning feature powered by Google ML Kit, allowing users to scan documents and save them as JPEG or PDF files via a new \DocumentScannerImpl\. Additionally, an in-app review flow has been implemented using the Google Play Core library, enabling users to leave reviews directly from the application through \ReviewHandlerImpl\.
core/ui/src/market/java/com/t8rin/imagetoolbox/core/ui/utils · high confidence
Added page selection input controls
This change introduces a new UI component for selecting specific pages within a document. It adds a preference item that opens a dialog allowing users to input page ranges (e.g., '1-3, 5') via a text field, which is parsed and formatted by a new \PagesSelectionParser\. The dialog uses updated rounded icons and enhanced button styles consistent with the ongoing icon migration.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls/page · high confidence
Added side fade painting logic for image stitching
The image stitching tool now supports fading edges from specific sides (start, top, end, bottom) to blend images more smoothly. This is achieved by introducing \SideFadePaint.kt\, which calculates linear gradients based on the selected fade side, length, and strength, applying a \DST\_IN\ transfer mode to fade the bitmap edges.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/data · high confidence
Added state-saving utilities for gradient and UI components
The \core/ui/widget/saver\ module now includes \OneTimeEffect\ for executing side-effects once per composition lifecycle, along with a set of Compose \Saver\ implementations. These savers enable proper state restoration for \Color\, \Dp\, \PicturePickerMode\, \Pt\, \Offset\, \GradientPalette\, and \GradientGeometry\ objects, ensuring that gradient settings and UI preferences persist across configuration changes.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/saver · high confidence
Android-specific audio cover extraction implementation
The data layer for the audio cover extractor feature now includes a concrete Android implementation (AndroidAudioCoverRetriever) that retrieves embedded album art from audio files using MediaMetadataRetriever. This component handles the full pipeline: extracting the raw image data, compressing it to lossless PNG, caching the result, and returning the URI to the user, while gracefully handling cases where no cover image is present.
_feature/audio-cover-extractor/src/main/java/com/t8rin/imagetoolbox/feature/audio\_cover\extractor/data · high confidence
App usage statistics and history tracking
The app now tracks and exposes usage statistics, including the count of successful saves, total bytes saved, activity streaks, and format-specific save counts. It also maintains a history of recently used tools, which can be disabled via settings, and provides a way to clear all accumulated usage data.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/history · high confidence
Audio cover extraction screen logic implementation
The screen logic for the audio cover extractor feature has been implemented, enabling users to load audio files and retrieve embedded cover art. This component manages the state for a list of audio tracks, displaying loading indicators while fetching covers and updating the UI once the images are available. It also handles the configuration for saving extracted images, allowing users to select the output format (PNG) and quality settings.
_feature/audio-cover-extractor/src/main/java/com/t8rin/imagetoolbox/feature/audio\_cover\extractor/ui/screenLogic · high confidence
Background removal now supports multiple AI models with automatic selection
The background removal feature has been refactored to support a variety of AI models beyond the previous single option. Users can now choose from models including U2Net, U2NetP, RMBG, InSPyReNet, BiRefNet, ISNet, YOLO, and MODNet. The app automatically selects the default model based on the app flavor (U2NetP for the FOSS version, MlKit for the market version) and handles downloading the required models on demand. This change introduces a new backend architecture to manage these different AI models and provides a UI for selecting the desired model.
_feature/erase-background/src/main/java/com/t8rin/imagetoolbox/feature/erase\background · high confidence
Code Preview tool now supports 256 syntax highlighting themes
The Code Preview feature now includes a comprehensive library of 256 syntax highlighting themes from highlight.js version 11.11.1. This update adds 80 root-level themes and 176 Base16-family themes as local assets, allowing users to choose from a much wider variety of visual styles for code snippets. The themes are loaded at runtime and applied to the code preview composable, significantly expanding the customization options available to users.
feature/code-preview · high confidence
Collage Maker feature introduced
The Collage Maker feature is now available, allowing users to combine multiple images into a single collage. This new capability includes support for up to 20 images, customizable layouts, adjustable spacing and corner radius, gradient backgrounds, and undo/redo functionality. Users can also save collages with custom aspect ratios and control output quality and format.
feature/collage-maker · high confidence
Collage library adds gradient backgrounds and extensive new layouts
The collage module now supports gradient backgrounds in addition to solid colors, allowing users to apply linear gradients to their collages. The library has also been significantly expanded with dozens of new collage layouts (including 8-frame, 5-frame, 4-frame, and 9-frame variations), increasing the variety of designs available for image stitching.
lib/collages · high confidence
Crop tool UI components and undo/redo state management
The crop feature now includes a comprehensive set of presentation components and state management for undo/redo operations. Users can select from a variety of crop masks (including custom shapes like Oval, Squircle, and Shield) via the new CropMaskSelection UI, adjust rotation with CropRotationSelector, and toggle free-corners cropping. The CropperState class introduces undo/redo history tracking across Default, NoRotation, and FreeCorners crop modes, allowing users to revert or reapply transformations.
feature/crop/src/main/java/com/t8rin/imagetoolbox/feature/crop/presentation/components · high confidence
Delete EXIF tool now supports predefined removal presets
Users can now choose from predefined deletion presets (All Metadata, Privacy, Location Only, Keep Date and Copyright) when removing EXIF data, rather than manually selecting individual metadata tags. The tool also includes a Custom option for manual tag selection. This change introduces the ExifRemovalPreset domain model and updates the DeleteExifComponent and presentation layer to handle preset-based removal logic.
_feature/delete-exif/src/main/java/com/t8rin/imagetoolbox/feature/delete\exif · high confidence
Domain model for audio cover extraction introduced
The domain layer for the audio cover extractor feature now defines the core contract and data structures for retrieving album art. An \AudioCoverRetriever\ interface specifies a \loadCover\ method that accepts an audio URI, and a sealed interface \AudioCoverResult\ models the outcome as either a \Success\ containing the cover image URI or a \Failure\ with an error message.
_feature/audio-cover-extractor/src/main/java/com/t8rin/imagetoolbox/feature/audio\_cover\extractor/domain · high confidence
Draw tool refactored to support gradients, warp, flood fill, and generative inpainting
The draw feature has been significantly expanded with new capabilities: users can now apply gradient fills to solid color backgrounds, use gradient paints for drawing lines (including dashed and dot-dashed styles), and fill outlined shapes with colors or gradients. A new Warp draw mode allows for distortion effects, while Flood Fill enables filling areas based on color tolerance. Generative Inpainting (Spot Heal) is now available for AI-powered object removal. Additionally, the tool supports repeated text and bitmap paths, a new Spray brush mode, and an angle indicator for lines.
feature/draw/src/main/java/com/t8rin/imagetoolbox/feature/draw · high confidence
Enhanced resize options with background customization
The resize tool now supports CenterCrop and Fit modes that allow users to customize the background appearance, including setting a specific canvas color, applying a blurred background effect with adjustable radius, and controlling the position of the image within the canvas.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls/resize\group · high confidence
Expanded color naming and library structure
The colors library now includes a comprehensive JSON asset mapping hex codes to specific color names, significantly expanding the available named colors beyond standard web definitions. To support this, the module has been restructured with a new AndroidManifest.xml and a .gitignore file to manage build artifacts.
lib/colors · high confidence
Foss module implements core UI helper components
The foss module now includes concrete implementations for document scanning, app review handling, and update notifications. Document scanning is handled via a new DocumentScannerImpl that manages camera permissions and integrates with an external scanner library, applying Material 3 theme colors to the scanner UI. App review prompts are now managed by ReviewHandlerImpl, which tracks save counts in local storage and triggers bug-report intents every 10 saves, while also respecting a 'do not show again' preference. The UpdateSheetImpl provides a Composable wrapper for displaying changelogs and version tags in a bottom sheet.
core/ui/src/foss · high confidence
Image Stitching tool refactored with new modes and UI controls
The Image Stitching feature has been restructured to support new stitching types including Panorama, Screenshot, and Auto modes, alongside existing Horizontal, Vertical, and Grid layouts. The tool now allows users to control vertical and horizontal spacing, apply fading edges, and select background colors or gradients. The UI has been updated with new selectors for fade strength, image scale, and alignment, and the underlying implementation now uses OpenCV for advanced stitching operations.
_feature/image-stitch/src/main/java/com/t8rin/imagetoolbox/feature/image\stitch · high confidence
Initial project structure and core utilities for ImageToolbox
This change introduces the foundational codebase for the ImageToolbox Android application, establishing the package name com.t8rin.imagetoolbox. It adds core infrastructure including an Android-specific resource manager for localized string retrieval, a settings state entry point for dependency injection, and utility functions for rendering rounded polygons in Compose. Additionally, it defines the initial architecture for specific features, providing dependency injection modules for APNG conversion and audio cover extraction, along with a data model for audio components with associated cover images.
(repo-wide) · high confidence
Introduce Batch Rename domain logic with advanced filename patterns
This change adds the core domain layer for the new Batch Rename tool, introducing the RenameManager interface and a comprehensive FilenamePatternResolver. Users can now construct filenames using a wide variety of dynamic tokens, including the original name (with support for slicing, transliteration, and find/replace), sequence numbers with configurable padding, file size, UUID, parent folder, and image dimensions. The domain also includes validation logic to prevent invalid or duplicate filenames and defines data models for file metadata sources like EXIF dates and file modification times.
feature/batch-rename/src/main/java/com/t8rin/imagetoolbox/feature/batchrename/domain · high confidence
Introduce Code Preview Generator tool
A new Code Preview Generator tool has been added, allowing users to create stylized images of code snippets. This feature supports syntax highlighting via the HighlightEngine, customizable themes, background presets (including gradients), and various layout options such as window controls, line numbers, titles, padding, and card shadows.
_feature/code-preview/src/main/java/com/t8rin/imagetoolbox/feature/code\preview/presentation/screenLogic · high confidence
Introduce CompositionLocal providers for settings state and controllers
The application now exposes application settings and UI controllers via Compose CompositionLocals, allowing components to access the current UI settings state, simple settings interactor, and edit presets controller without explicit parameter passing. A new helper function \rememberAppColorTuple\ dynamically resolves color themes based on the current settings (dynamic colors, night mode), and \rememberEditPresetsController\ manages the visibility state of the edit presets UI with saveable state support.
core/settings/src/main/java/com/t8rin/imagetoolbox/core/settings/presentation/provider · high confidence
Introduce Compression Lab for image format comparison and optimization
A new Compression Lab tool is available, allowing users to select images and compare them across different formats while optimizing for quality or file size. The feature supports manual quality adjustment, target quality (SSIM), and target size modes, with results displayed alongside performance metrics like encoding time and PSNR. Users can undo/redo changes, compare before/after states, and save optimized results.
_feature/compression-lab/src/main/java/com/t8rin/imagetoolbox/feature/compression\lab · high confidence
Introduce Image Splitting tool with unequal grid support and aspect-ratio calculation
A new Image Splitting feature is added, allowing users to split an image into a grid of rows and columns. This tool supports unequal row and column sizes via custom percentage inputs and includes an auto-calculation feature that determines the optimal grid dimensions based on a target aspect ratio. The implementation includes the domain logic, a Dagger Hilt module for dependency injection, and a Compose UI with undo/redo history and progress notifications for save operations.
feature/image-splitting · high confidence
Introduce Image Stacking feature
Adds a new Image Stacking tool that allows users to combine multiple images into a single composite. Users can control the stacking order, adjust individual image opacity and blending modes, and define scaling (Fit, Fill, Crop, etc.) and precise X/Y positioning for each layer. The feature includes a live preview, undo/redo history, and options to save the result in various formats and qualities.
_feature/image-stacking/src/main/java/com/t8rin/imagetoolbox/feature/image\stacking · high confidence
Introduce Palette Tools feature for generating, editing, and exporting color palettes
A new Palette Tools screen has been added, offering three distinct modes: generating palettes from images (including Material You dynamic color extraction), editing existing palette files across multiple formats, and exporting results as standard palette files or PDFs. Users can adjust palette parameters such as color count and style, copy individual color values, and save their work.
_feature/palette-tools/src/main/java/com/t8rin/imagetoolbox/feature/palette\tools · high confidence
Introduce audio cover extraction feature UI
The app now includes a new user interface for extracting audio covers. This feature allows users to pick audio files, view extracted cover art, add or remove covers, and share the results. The UI includes options to adjust image format and quality, handles loading states, and provides feedback via toasts when no covers are found.
_feature/audio-cover-extractor/src/main/java/com/t8rin/imagetoolbox/feature/audio\_cover\extractor/ui · high confidence
Introduction of AI Tools feature with model management and preview capabilities
The AI Tools feature is now available, allowing users to select and manage neural models (including background removal, depth effects, and AI detection) directly within the application. Users can preview results before saving, customize parameters such as depth effects and auxiliary images, and monitor download and save progress. The component handles model selection, parameter persistence, and result display, integrating with the core image processing and saving infrastructure.
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/presentation/screenLogic · high confidence
Introduction of AI Tools feature with preview and detection capabilities
The AI Tools screen has been added, allowing users to process images using various AI models. The interface supports an AI detection mode that displays results in a dedicated view, as well as a standard processing mode where users can preview the generated results before saving them to a location. The UI includes controls for selecting models, adding images, and sharing or editing the processed outputs.
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/presentation · high confidence
Introduction of APNG Tools screen logic
The presentation layer for the new APNG tools feature is now implemented, introducing the \ApngToolsComponent\ to manage state and business logic for conversion and merging operations. This component handles the workflow for converting between APNG, GIF, WebP, and JXL formats, as well as merging multiple APNG animations, exposing parameters for quality settings and frame selection to the UI.
_feature/apng-tools/src/main/java/com/t8rin/imagetoolbox/feature/apng\tools/presentation/screenLogic · high confidence
Introduction of AppActivity as the main entry point
The application now uses a new AppActivity class to serve as the primary entry point. This activity initializes the root presentation component using Decompose's retained component pattern and displays the RootContent Compose UI, handling deep link intents through the root component.
app/src/main/java/com/t8rin/imagetoolbox/app/presentation · high confidence
Introduction of core dependency injection utilities and dispatcher qualifiers
The core/di module has been initialized with foundational components for dependency injection and coroutine management. This includes a new package structure (com.t8rin.imagetoolbox.core.di) containing qualifier annotations for specific coroutine dispatchers (Default, Encoding, Decoding, Io, and Ui), enabling precise control over background thread execution for image processing tasks. Additionally, an EntryPointUtils helper is provided to access Hilt entry points from Context, facilitating modular access to dependencies without direct coupling to the application graph.
core/di · high confidence
Introduction of core domain layer with image processing and export profile abstractions
The \core/domain\ module has been introduced to centralize the application's business logic, providing a set of Kotlin interfaces and data models that define how images are handled, transformed, and exported. This includes abstractions for image compression, scaling, and transformation (\ImageCompressor\, \ImageScaler\, \ImageTransformer\), as well as a new system for managing image export profiles (\ImageExportProfilesUseCase\, \BuiltInImageExportProfile\) that allows users to save and apply specific settings for platforms like Instagram, Facebook, and X. The diff also establishes the foundational data structures for these operations, such as \ImageExportProfile\, \ImageInfo\, and \BlendingMode\, alongside a repository interface for tracking app usage statistics (\AppHistoryRepository\).
core/domain · high confidence
Introduction of domain model interfaces and data classes for image filters
The core filters module now defines the foundational domain model for image processing capabilities. This includes the \Filter\ interface hierarchy, which establishes typed contracts for individual filter operations (such as blurs, distortions, color adjustments, and pixelation) along with their specific parameter models. Additionally, the \TemplateFilter\ data class has been introduced to allow users to group multiple filters into reusable presets, complete with logic for equality and hashing checks. Supporting utilities like \FilterParam\ for parameter ranges and \FilterUtils\ for creating filter instances via proxies are also included, providing the structural basis for the application's extensive filter library.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/domain/model · high confidence
Introduction of template filters, shader presets, and recent filter tracking
The image editor now supports saving and reusing filter configurations as templates, allowing users to import, export, and manage custom filter sets. A new ShaderPresetRepository enables the management of shader-based presets, while the FilterParamsInteractor introduces functionality to track and display recently used filters and manage favorite filters, enhancing the workflow for applying and organizing image effects.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/domain · high confidence
Market build adds Firebase analytics and crash reporting
The market variant of the app now includes an analytics and crash reporting implementation using Firebase. Users can control whether analytics and crash data are collected via settings, and the app will now send screen views, custom metrics, and crash reports to Firebase when enabled.
core/crash/src/market · high confidence
Markup layers project save and load support
The markup layers feature now supports saving and loading projects as .itp files. Users can export their layered compositions, including all layer properties, history, and assets, into a portable archive format and reopen them later to continue editing. This change introduces the data layer for project serialization, asset management, and rendering, enabling persistent markup layer workflows.
_feature/markup-layers/src/main/java/com/t8rin/imagetoolbox/feature/markup\layers · high confidence
New APNG Tools interface with multi-format conversion and merging capabilities
The APNG Tools screen now provides a comprehensive interface for converting between APNG, GIF, WEBP, and JXL formats, as well as merging multiple images into animated sequences. Users can select default output formats and quality settings, pick single or multiple images via the main screen, and utilize new controls for animation merging and image reordering. The UI includes enhanced selection dialogs, toast notifications for invalid file types, and support for smooth shape animations across the interface.
_feature/apng-tools/src/main/java/com/t8rin/imagetoolbox/feature/apng\tools/presentation · high confidence
New APNG conversion and merging capabilities
The APNG tools feature now supports converting between GIF, WebP, and APNG formats, as well as merging multiple animations into a single APNG. This update introduces new data-layer implementations for encoding and decoding these formats, enabling users to create APNGs from image sequences, extract frames from APNGs, and combine multiple animated images with customizable transition delays and loop counts.
_feature/apng-tools/src/main/java/com/t8rin/imagetoolbox/feature/apng\_tools/data, feature/apng-tools/src/main/java/com/t8rin/imagetoolbox/feature/apng\tools/domain · high confidence
New ASCII Art feature for converting images to text
Users can now convert images into ASCII art text. This feature allows selecting an image, adjusting parameters such as font size and gradient, and inverting colors. The resulting ASCII text can be copied to the clipboard or shared. The implementation includes a new feature module with domain logic for conversion, a DI module for dependency injection, and a Compose-based UI for controls and preview.
_feature/ascii-art/src/main/java/com/t8rin/imagetoolbox/feature/ascii\art · high confidence
New Android-native filter engine and mask support
The filters feature now includes a new Android-specific implementation layer that enables mask-based filtering and template management. Users can now apply filters to specific regions of an image using drawn masks (with support for erasing, softness, and fill modes) via the new AndroidFilterMaskApplier. Additionally, the system now supports saving, loading, and managing filter templates and shader presets through DataStore, allowing users to organize and reuse complex filter combinations.
feature/filters/src/main/java/com/t8rin/imagetoolbox/feature/filters · high confidence
New Archive Tools feature for creating and extracting archives
ImageToolbox now includes a dedicated Archive Tools feature that allows users to create and extract a wide variety of archive formats. The implementation adds a new \ArchiveManager\ interface and its \AndroidArchiveManager\ implementation to handle core operations, along with a Compose-based UI (\ArchiveToolsContent\) for selecting files, configuring archive formats (such as Zip and SevenZip), setting compression levels, and managing passwords. Users can archive multiple files into a single destination or extract existing archives with options to preserve directory structure, skip hidden files, and select specific entries. The feature supports a broad range of extensions including tar variants, zip, 7z, rar, and comic book archives (cbr, cbz), and includes UI components for handling encrypted archives, entry selection, and file previews.
_feature/archive-tools/src/main/java/com/t8rin/imagetoolbox/feature/archive\tools · high confidence
New Base64 image conversion tool
A new Base64 Tools feature has been added to the app, allowing users to convert images to and from Base64 strings. Users can paste or import Base64 text to decode it into an image, or select an image to encode it into a Base64 string. The tool includes options to copy, share, and save the generated Base64 text, as well as share, cache, or save the decoded image with configurable format and quality settings.
_feature/base64-tools/src/main/java/com/t8rin/imagetoolbox/feature/base64\tools · high confidence
New Batch Rename tool with undo/redo and pattern preview
The Batch Rename feature is now available, allowing users to select multiple images and apply customizable filename patterns (including date-based options) to rename them in bulk. The interface provides a live preview of original and new filenames, supports adding or removing files from the batch, and includes undo/redo functionality for pattern changes and file list modifications. A confirmation dialog prevents accidental renaming, and validation errors are displayed inline to guide pattern configuration.
feature/batch-rename/src/main/java/com/t8rin/imagetoolbox/feature/batchrename/presentation · high confidence
New Checksum Tools feature for calculating and comparing file hashes
This release introduces a new Checksum Tools feature, allowing users to calculate file checksums (hashes) and compare them against known values. The feature provides four modes: calculating a hash from a selected file URI, calculating a hash from entered text, comparing a file's hash against a user-provided target checksum, and batch comparing multiple files or an entire directory against a target checksum. Users can select from various hashing algorithms via a selector, view results in a tabbed interface with visual match indicators, and copy generated checksums to the clipboard.
_feature/checksum-tools/src/main/java/com/t8rin/imagetoolbox/feature/checksum\tools · high confidence
New Cipher feature for file encryption and decryption
This change introduces the Cipher feature, allowing users to encrypt and decrypt files using various cryptographic algorithms. The implementation includes a new \AndroidCryptographyManager\ that handles secure key derivation and unique nonces for encryption, supporting both legacy and versioned file formats. The UI provides controls for selecting encryption/decryption modes, choosing cipher types, entering keys, and generating random passwords. A tip sheet explains the feature's capabilities, implementation details, file size considerations, and compatibility.
feature/cipher/src/main/java/com/t8rin/imagetoolbox/feature/cipher · high confidence
New Color Tools feature for color analysis and manipulation
A new Color Tools screen has been added to the app, providing a suite of utilities for exploring and modifying colors. Users can view detailed color information (HEX, RGB, HSV, HSL, CMYK) and search for colors by name. The feature includes tools to generate color harmonies (complementary, analogous, triadic, etc.), mix colors with others using adjustable variations, and generate shades, tints, and tones. Additionally, users can analyze an image's color distribution via RGB, Brightness, and Camera histograms. The color selector can be pinned to the top of the screen for persistent access while scrolling through these tools.
feature/color-tools · high confidence
New Compose UI modifiers for shapes, containers, and interactions
The \core/ui/widget/modifier\ package now includes a suite of new Compose modifiers to enhance visual styling and interaction handling. \AutoCornersShape\ and \ContinuousRoundedRectangle\ introduce support for advanced corner styles, including wavy, scoop, notch, squircle, and continuous capsule shapes, allowing for more expressive UI elements. \Container\ and \autoElevatedBorder\ provide a unified way to render UI containers with automatic shadows, borders, and background brushes based on the current theme. Additionally, \animateContentSizeNoClip\ and \alphaNoClip\ offer size and opacity animations without clipping content, while \dragHandler\ and \DetectSwipe\ add robust gesture support for grid selection and swipe actions.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/modifier · high confidence
New Compose-based image cropper library
The \lib/cropper\ module has been replaced with a new implementation built on Jetpack Compose. This introduces a \ImageCropper\ composable that handles image display, gesture-based zooming, and overlay drawing, along with an \ImageCropperState\ class that provides undo and redo history for crop transformations. The new library supports various crop outlines (shapes, paths, and image masks), configurable aspect ratios, and one-finger zoom gestures, replacing the previous non-Compose cropper logic.
lib/cropper · high confidence
New Duplicate Finder tool for identifying and managing duplicate images
The Duplicate Finder feature is now available, allowing users to scan selected images for exact matches and perceptually similar duplicates using SHA-256 and dHash algorithms. The tool groups duplicates and recommends which file to keep based on configurable strategies: Best Quality, Smallest File, Newest, Oldest, or First Selected. Users can adjust the sensitivity for similar-image detection and choose between Exact Only or Exact and Similar scan modes. The interface displays analysis progress, highlights reclaimable storage space, and provides an error sheet for any images that failed to decode during the scan.
_feature/duplicate-finder/src/main/java/com/t8rin/imagetoolbox/feature/duplicate\finder · high confidence
New Easter Egg screen with animated emoji title and bouncing ball
A new Easter Egg feature has been added to the app, accessible via the presentation layer in the easter\_egg module. The screen displays a top app bar where the title consists of a row of randomly selected emojis that update periodically, with support for animated emoji icons. The main content area features a bouncing ball animation that moves within the screen bounds, rotates, and changes speed, providing a playful visual interaction for users.
_feature/easter-egg/src/main/java/com/t8rin/imagetoolbox/feature/easter\egg · high confidence
New Fractal Generation tool with extensive formula support
A new Fractals tool has been added to ImageToolbox, enabling users to generate a wide variety of fractal images. This feature introduces support for over 50 distinct fractal formulas, including Mandelbrot, Julia, Burning Ship, Buddhabrot, and various geometric fractals like the Sierpinski Carpet and Koch Snowflake. The implementation provides a robust rendering backend that handles complex parameters such as camera controls, quaternion constants, and multiple coloring modes (Smooth, Banded, OrbitTrap, Angle). Users can customize their renders with adjustable iteration policies, supersampling, and palette settings, leveraging a native engine for performance.
_feature/fractal-generation/src/main/java/com/t8rin/imagetoolbox/feature/fractal\generation · high confidence
New GIF tools feature with merging and multi-format conversion
This location introduces the core implementation and UI for the new GIF tools feature. Users can now merge multiple GIFs into a single animation with configurable transitions and quality, create GIFs from a sequence of images with options for resizing, frame rate, and crossfades, and convert existing GIFs into JXL, APNG, or WebP formats. The feature includes a dedicated UI for managing input files, adjusting parameters, and previewing results, backed by a new \AndroidGifConverter\ implementation and Hilt dependency injection module.
_feature/gif-tools/src/main/java/com/t8rin/imagetoolbox/feature/gif\tools · high confidence
New Help & Tips section with searchable tutorials
A new Help & Tips feature has been added to the app, providing users with a searchable library of tutorials and tips. This section is accessible via app settings and allows users to browse help content by category or search for specific topics. The implementation includes the data layer (HelpRepository), domain models (HelpCategory, HelpTip, HelpPage), and the presentation layer (HelpContent, HelpScaffold, and related UI components) within the feature/help module.
feature/help/src/main/java/com/t8rin/imagetoolbox/feature/help · high confidence
New Image Cutting tool for horizontal and vertical cropping
A new Image Cutting feature has been added, allowing users to cut out specific parts of an image horizontally or vertically. The tool provides a preview with adjustable pivot lines and inverse selection options, supports undo/redo history, and handles multiple images with swipe navigation.
feature/image-cutting · high confidence
New ImageInfoTransformation for applying presets and flexible resize
A new ImageInfoTransformation class has been added to the core UI transformation layer. This component implements the Coil and internal Transformation interfaces to orchestrate image processing, specifically handling flexible resizing via ImageScaler and applying visual presets through ImageTransformer. It also manages caching the original image for sharing and generating previews, ensuring that resize types and original dimensions are correctly tracked when presets are applied.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/transformation · high confidence
New JXL image conversion and animation tools
This update introduces a dedicated JXL tools feature, enabling users to convert images to and from the JPEG XL format (JPEG ↔ JXL), create animated JXL images from a sequence of frames, merge multiple JXL animations into a single clip, and extract frames from JXL files into other formats like GIF, APNG, and WebP. The feature includes a new UI for selecting conversion types, configuring quality and animation parameters (such as frame delay and loop count), and managing file inputs, backed by a new Android-specific JXL encoder implementation.
_feature/jxl-tools/src/main/java/com/t8rin/imagetoolbox/feature/jxl\tools · high confidence
New KSP processors for filter and texture code generation
The core/ksp module now includes three new KSP (Kotlin Symbol Processing) processors that automate the generation of mapping and factory code at compile time. The FilterInjectProcessor generates a switch-case map to convert domain Filter objects into their corresponding Transformation implementations. The UiFilterInjectProcessor creates UI-specific utilities, including functions to copy filter instances, create new UI filter instances, map domain filters to UI filters, and provide grouped lists of UI filters (such as Glitch, Geometry, Frames, Enhancement, and Artistic). Additionally, the FastNoiseTextureMappingsProcessor generates a centralized function to create FastNoise textures based on an annotated enum, handling parameter mapping and duplicate resolution. These changes streamline the wiring of filters and textures, reducing manual boilerplate in the application.
core/ksp · high confidence
New Limits Resize feature with batch processing and undo/redo
This change introduces the Limits Resize feature, allowing users to resize images while enforcing maximum width and height constraints. The feature supports batch processing of multiple images, with swipe gestures to navigate between them. Users can choose how to handle images that exceed the limits via three modes: Skip, Recode (resize to fit), or Zoom (scale down to fit). The implementation includes undo/redo history for changes, an auto-rotate limit box toggle to handle orientation correctly, and options to select the output image format and quality.
_feature/limits-resize/src/main/java/com/t8rin/imagetoolbox/feature/limits\resize · high confidence
New Multi-frame Fusion tool with multiple processing modes
A new Multi-frame Fusion feature has been added, allowing users to combine multiple source images into a single output. The tool supports six distinct fusion modes: Exposure, Focus, Median, Long Exposure, Light Trails, and Motion Trails. Users can select a mode and adjust specific parameters, such as contrast, saturation, and exposure weights for Exposure mode, or focus radius and strength for Focus mode. The engine automatically aligns images using feature detection and offers an option to crop the result to the common overlapping area. The interface includes a carousel for reordering source frames, a preview of the fused result, and options to share or save the output.
_feature/multi-frame-fusion/src/main/java/com/t8rin/imagetoolbox/feature/multi\_frame\fusion · high confidence
New OpenCV-based image processing library
A new library module, lib/opencv-tools, has been added to the project, providing a suite of image processing capabilities backed by OpenCV. This includes an AutoStraighten tool for deskewing and perspective correction, an AutoCropper for edge-based cropping, a DocumentDetector for finding document corners, and a FreeCrop tool for free-form perspective cropping. Additional features include an ImageExpander for content-aware expansion, a ColorMap filter for applying color maps, an ImageForensics module for error level analysis and copy-move detection, and a SeamCarving filter for content-aware resizing.
lib/opencv-tools · high confidence
New Palette PDF Export Tool
A new feature has been added that allows users to export color palettes as PDF documents. Users can generate these PDFs from either a source image (which is analyzed to extract colors) or an existing palette file. The tool provides a dedicated UI for configuring the output, including options to adjust the maximum color count, layout columns, margins, and spacing, as well as toggles to include the source image, filename, palette name, color names, and hex values in the final document.
_feature/palette-pdf/src/main/java/com/t8rin/imagetoolbox/feature/palette\pdf · high confidence
New Photomosaic tool for creating image mosaics
A new Photomosaic feature has been added to the app, allowing users to generate mosaics from a target image and a collection of tile images. The implementation includes the core domain logic for adaptive tile layout and color matching, an Android-specific maker for handling bitmap processing, and a Hilt dependency injection module to wire the components. The presentation layer provides a Compose-based UI with controls for selecting images, adjusting parameters like columns and color blend, and managing the tile selection process.
feature/photomosaic/src/main/java/com/t8rin/imagetoolbox/feature/photomosaic · high confidence
New Screenshot Framing tool with customizable backgrounds and layout controls
A new Screenshot Framing feature has been added, allowing users to import an image and apply a styled frame with adjustable padding, corner radius, and drop shadow. The tool supports solid or gradient backgrounds (with auto-extracted colors from the source image), various aspect ratios, and multiple output formats. The UI includes controls for shadow blur and opacity, and the implementation handles memory-efficient image loading and rendering to ensure performance on large screens.
_feature/screenshot-framing/src/main/java/com/t8rin/imagetoolbox/feature/screenshot\framing · high confidence
New Shader Studio feature for creating and managing custom GLSL image filters
The Shader Studio feature is now available, allowing users to write, preview, and save custom GLSL shaders for image processing. The interface includes a code editor with syntax highlighting for the main shader body and helper code, a parameter editor for defining typed inputs (float, int, bool, color, vec2) with optional bounds, and a live preview pane that applies the shader to a selected source image. Users can manage their work through a saved library, where presets can be edited, deleted, shared, or exported, and the studio ensures data safety by prompting to save changes before exiting.
_feature/shader-studio/src/main/java/com/t8rin/imagetoolbox/feature/shader\studio · high confidence
New Texture Generation feature with favorites support
The Texture Generation tool is now available, allowing users to create procedural textures using pattern shaders, raymarching, fast noise, and GMIC filters. This feature includes a new favorites system, implemented via the \AndroidTextureFavoritesRepository\ and \TextureFavoritesRepository\ interface, which persists user-selected favorite textures using Android DataStore. The diff also introduces instrumentation tests to verify that pattern and raymarch textures render correctly and that the UI panel state remains consistent when switching between texture types.
feature/texture-generation · high confidence
New Tone Curves tool with color wheels, scopes, and preset import
The lib/curves module introduces a standalone Tone Curves editor that adds color wheels (shadows, midtones, highlights) and image scopes (histogram, waveform, vectorscope) alongside the existing curve controls. It also adds the ability to import and export tone presets, supporting the native ImageToolbox format, Lightroom XMP/lrtemplate curves, and Adobe ACV files, with comprehensive instrumented tests verifying the rendering and codec round-trips.
lib/curves · high confidence
New UI components for zoomable modal sheets and constrained sliders
Added two new Compose UI components in the enhanced widget package: EnhancedZoomableModalBottomSheet, which provides a modal bottom sheet with integrated image zooming and a zoom level badge, and OnlyAllowedSliderItem, which restricts slider input to a specific set of allowed integer values. These components support the improved UI interactions for tools like the new Print PDF feature.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/enhanced/derivative · high confidence
New UI utility components for dynamic theming, layout calculation, and scroll state persistence
This change introduces several new utility components in the core UI widget layer. The \AutoContentBasedColors\ composable enables dynamic theme color updates based on image content, respecting user settings. \AvailableHeight\ provides a mechanism to calculate and animate the available screen height for layouts, accounting for app bars and navigation elements. \RememberRetainedLazyListState\ adds a custom state saver to persist lazy list scroll positions across configuration changes or screen transitions. Additionally, \ScreenList\ defines the logic for determining available editing screens based on file types and selection counts.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/utils · high confidence
New UI utility helpers and notification hosts introduced
The app now includes a new set of utility classes in the core UI layer to manage user feedback and system interactions. This adds a centralized toast and confetti notification system (AppToastHost, ConfettiHostState) for displaying success and error messages, a clipboard manager (Clipboard, ClipboardUtils) to handle copying text and images with automatic paste support, and helper utilities for device information, color blending, and density conversions.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/helper · high confidence
New UI widget components added to the core library
The core UI module now includes a suite of new composables in the 'other' widget package to enhance the user interface. These additions include an animated border for visual emphasis, animated visibility containers for smoother transitions, and specialized items for displaying colors with names, emojis (including animated DotLottie support), and font selections. The update also introduces expandable list items, link preview cards and lists for rich content display, and utility widgets like info containers and gradient edges, providing a more consistent and interactive experience across the app.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/other · high confidence
New UI widgets for three-parameter filter controls
Added a suite of new Compose UI components in the \triple\_components\ package to handle filter parameters that require three inputs. These include \ColorModelTripleItem\ for selecting three colors, \FloatPaletteImageModelTripleItem\ for adjusting a float value, color transfer space, and a source image, \NumberColorModelPopArtTripleItem\ for pop-art style blending with a slider, color, and blending mode, and specialized widgets for numeric pairs combined with edge modes, transfer functions, or colors. These components provide the interactive UI (sliders, color pickers, and selectors) that allows users to adjust complex filter settings directly.
_core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget/filterItem/triple\components · high confidence
New Wallpapers Export feature
Users can now export wallpapers from their device, including home screen, lock screen, and built-in options. The feature allows selecting specific wallpapers, adjusting image format and quality, and saving them to a chosen location or sharing them directly.
_feature/wallpapers-export/src/main/java/com/t8rin/imagetoolbox/feature/wallpapers\export · high confidence
New WebP Tools feature for conversion and merging
This change introduces the WebP Tools feature, providing a dedicated interface for converting WebP images to GIF, APNG, and JXL formats, as well as converting other images into WebP. It also adds the ability to merge multiple WebP animations into a single file. The feature includes UI controls for adjusting quality, size, and animation parameters, backed by a new domain layer and dependency injection module.
_feature/webp-tools/src/main/java/com/t8rin/imagetoolbox/feature/webp\tools · high confidence
New adaptive layout scaffolds for image editing screens
Added two new Compose layout components, AdaptiveBottomScaffoldLayoutScreen and AdaptiveLayoutScreen, which provide a unified, responsive structure for image editing interfaces. These scaffolds handle adaptive positioning of the top app bar, image preview, and control panels based on device orientation (portrait vs. landscape), managing nested scrolling, bottom sheet states, and focus clearing to ensure a consistent user experience across different screen sizes.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget · high confidence
New and refactored dialog components for core UI interactions
The dialogs module has been expanded with several new Compose-based UI components to handle specific user workflows. A CalculatorDialog allows users to evaluate mathematical expressions directly within the app. ColorCopyFormatSelectionDialog provides a dedicated interface for copying color values in various formats (HEX, RGB, HSL, etc.). The saving and picking experience is enhanced with OneTimeImagePickingDialog for selecting image sources and OneTimeSaveLocationSelectionDialog for choosing save destinations. Additionally, ExitWithoutSavingDialog now respects user settings to optionally bypass the confirmation prompt, and PasswordRequestDialog offers a secure way to unlock protected content.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/dialogs · high confidence
New app logs viewer in settings
A new app logs viewer has been added to the application settings, allowing users to inspect, search, and share application logs. This feature includes a dedicated UI screen with real-time log updates, keyword search highlighting, and the ability to export logs for troubleshooting.
feature/app-logs · high confidence
New archive library with broad format support and encrypted RAR handling
The lib/archive module introduces a new archive engine that supports creating and extracting a wide range of formats (ZIP, 7Z, TAR variants, CPIO, AR, ISO, and raw compressions) with configurable compression methods and levels. It enforces extraction safety limits (max entries, max entry size, max total size) and validates archive paths to prevent traversal issues. For RAR archives, the library behavior differs by build variant: the FOSS build delegates to libarchive and reports unsupported encryption, while the Market build uses jUnrar to detect, verify passphrases, and extract encrypted RAR4 and RAR5 archives.
lib/archive · high confidence
New blur control components added to resize group
The resize group UI now includes dedicated components for configuring blur effects: a BlurRadiusSelector for adjusting the blur intensity via a slider, and a UseBlurredBackgroundToggle to enable or disable blurred edges. These components utilize the updated icon set and shape defaults.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls/resize\group/components · high confidence
New bottom-sheet UI components for EXIF, updates, emojis, and skipped images
The app introduces several new modal bottom sheets to enhance user interaction: an EXIF editor and tag selector for viewing and modifying image metadata, a dedicated update sheet to display changelogs and link to releases, an emoji picker with category navigation and animated emoji support, a sheet for selecting images from a list of URIs, and a skipped-images sheet that lists and previews images that failed to save. These components provide a consistent, searchable, and animated interface for managing metadata, updates, and image selection within the app.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/sheets · high confidence
New content picker utilities for barcodes, contacts, and folders
The app introduces a new set of UI utilities in the content pickers package to handle specific content types. Users can now scan barcodes and QR codes using the device camera, pick contacts from their address book, and select images from specific folders on the device. These components also include standard file and folder pickers, a document scanner, and a file creator, providing a unified way to interact with device content.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/content\pickers · high confidence
New core UI button widgets for image editing interactions
The \core/ui/widget/buttons\ package now includes a comprehensive set of new Compose UI components to standardize and enhance user interactions within the image editor. These additions include \BottomButtonsBlock\ for the main action bar with adaptive layout support, \ShareButton\ for managing share/copy/edit actions via a dialog, and specialized mode toggles like \EraseModeButton\ and \PanModeButton\ that feature animated selection states. The update also introduces \MediaCheckBox\ for item selection with index display, \PagerScrollPanel\ for navigating image sets, and utility buttons such as \CompareButton\, \ZoomButton\, \ShowOriginalButton\ (with haptic feedback), and \SupportingButton\. These components replace or supplement previous ad-hoc implementations, providing a consistent visual language and interaction model across the application.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/buttons · high confidence
New core UI utilities and base components for image editing
This change introduces a set of foundational UI utilities in the core/ui/utils package. It adds BaseComponent, which provides a base class for UI components with lifecycle management, change tracking, and debounced image calculation. It also introduces BaseHistoryComponent, which implements undo/redo functionality with a configurable history size and transaction debouncing. Additionally, it includes ComposeActivity and ComposeApplication as base classes for Android activities and applications, handling settings, dynamic colors, and system bar behavior. Finally, it adds ImageExportProfilesHolder, an interface and implementation for managing image export profiles, including saving, deleting, exporting, sharing, and importing profiles.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils · high confidence
New core data utility library for image processing and file operations
This change introduces a new set of utility classes in the core data layer to support image handling and file management. BitmapUtils provides functions for managing bitmap configurations, calculating aspect ratios, and compressing images, ensuring compatibility across different Android versions. ChecksumUtils adds support for computing file hashes (like MD5 or SHA) from various input streams. CoilUtils bridges the gap between the app's domain transformation models and the Coil image loading library. ContextUtils offers helpers for managing app cache, checking storage permissions, and determining the app's installation source. CoroutinesUtils simplifies the creation of coroutine dispatchers from executors. FileUtils introduces a Flow-based observer for monitoring file system changes. HttpClientUtils provides a Ktor-based HTTP client with progress tracking for downloads. Finally, WriteableUtils facilitates the conversion of writeable data models into output streams.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils · high confidence
New core utility infrastructure for logging, QR parsing, and file handling
The core/utils module now includes foundational utilities that support several new capabilities. A new logging system (Logger, LogsWriter) enables in-app log viewing and sharing, while QR parsing is expanded to support Phone, SMS, Contact, Calendar, and Geolocation types via QrType. File handling is enhanced with encrypted file detection (EncryptedFileUtils), improved URI/path resolution (UriUtils), and zip creation helpers (Zip). Additionally, a new AppContext singleton provides centralized context access, and Update.kt introduces logic for version comparison and changelog parsing.
core/utils · high confidence
New crash-reporting screen with improved user actions
The app now displays a dedicated crash screen (CrashActivity) instead of silently failing. This screen presents the exception name and an expandable stack trace, and provides buttons to copy crash details, share logs, or restart the app. It also detects specific error types like OutOfMemory and foreground service timeouts to show tailored messages. The screen integrates with the app's settings for theming and uses a new DI module to provide the analytics manager for reporting.
core/crash/src/main/java · high confidence
New custom Compose slider and range slider components
The app now includes a new set of custom UI widgets for sliders, located in the \core/ui\ module. This adds \CustomSlider\ for single-value selection and \CustomRangeSlider\ for selecting two values within a range. These components support features like discrete steps, custom theming via \CustomSliderColors\, and proper handling of drag interactions and RTL layouts, providing a consistent Material Design-style experience for adjusting settings.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/sliders/custom\slider · high confidence
New custom slider widgets with container styling and shadow support
The application now includes four new slider implementations—FancySlider, HyperOSSlider, M2Slider, and M3Slider—located in the core UI widget package. These components provide distinct visual styles for single-value and range sliders, featuring customizable track containers with rounded shapes, border colors, and optional drop shadows that can be toggled via the application's settings state.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/sliders · high confidence
New data models for tiled AI processing
The AI tools feature now includes a new set of internal data models to support tiled processing of images. This includes \ImageTensor\ and \ModelInfo\ for parsing ONNX model metadata (such as input/output channels, dimensions, and precision), \TileGrid\ and related classes (\Tile\, \TileArea\, \TilePosition\, \TileFiles\) to manage image tiling logic, and \PreparedBitmap\ and \TensorSize\ to handle bitmap preparation and size calculations.
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/data/model · high confidence
New document scanner library added
The lib/documentscanner module has been introduced, providing a complete document scanning capability. This includes a DocumentScannerActivity for capturing photos, detecting document corners via OpenCV, and allowing users to adjust the crop area. The library exposes a DocumentScanner API for integration, supporting customization of UI elements (colors, stroke width), response formats (base64 or file paths), and scanning limits. It also includes necessary Android components like a FileProvider and instrumentation tests to verify image handling and error reporting.
lib/documentscanner · high confidence
New domain interfaces for settings management and cache control
The settings domain layer now exposes new interfaces to manage application preferences and cache behavior. Users can now configure automatic cache cleanup limits and intervals, with a new \AutoCacheCleanupUseCase\ handling the logic. The \SettingsInteractor\ and \SimpleSettingsInteractor\ interfaces consolidate a wide range of configurable options, including RAW development settings (white balance, exposure, demosaic quality), UI customization (shadows, theme contrast, animation scales), and file handling behaviors (overwrite policies, save locations, EXIF handling).
core/settings/src/main/java/com/t8rin/imagetoolbox/core/settings/domain · high confidence
New domain models for settings and UI customization
The settings domain layer now includes a comprehensive set of new model classes to support expanded configuration options. These include \SettingsState\ as the central container, alongside specific models for UI appearance (\SwitchType\, \SliderType\, \ShapeType\, \NightMode\, \DomainFontFamily\), file handling (\FilenameBehavior\, \OneTimeSaveLocation\), and tool defaults (\MarkupLayerTextDefaults\, \RawDevelopSettings\). This structural change enables granular control over features such as animated emojis, custom font support, RAW development presets, and various interface styling options.
core/settings/src/main/java/com/t8rin/imagetoolbox/core/settings/domain/model · high confidence
New dynamic theme library with color-blind accessibility and multiple palette styles
The app introduces a new dynamic theming engine that generates color schemes from the device wallpaper using the MaterialKolor library. This engine supports nine distinct palette styles (such as TonalSpot, Vibrant, and Monochrome) and includes a comprehensive color-blindness simulation feature that adjusts the entire color scheme for types like Protanopia and Deuteranopia. The implementation also handles system UI bar coloring and respects device orientation changes to keep the theme synchronized.
lib/dynamic-theme · high confidence
New enhanced UI widget library
The application introduces a new set of enhanced Compose UI components in the \core/ui/widget/enhanced\ package, including \EnhancedAlertDialog\, \EnhancedButton\, \EnhancedChip\, \EnhancedDropdownMenu\, and \EnhancedDatePickerDialog\. These widgets provide a consistent, modernized visual style with support for custom shapes, shadows, and border widths based on user settings. The library also adds interactive features such as long-press actions on buttons, haptic feedback on checkboxes, and customizable scroll fling behaviors (e.g., smooth, bouncy, snappy) across the app.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/enhanced · high confidence
New feature to load and save images from web URLs
The app now includes a dedicated 'Load Net Image' feature that allows users to paste a web URL to automatically parse and extract images from the page, including those found in HTML tags, Open Graph meta tags, and favicons. The UI provides a text field for the URL, a preview of the detected images, and selection controls to choose which specific images to save or share. Users can save the selected images to a file, share them directly, or copy them to the clipboard, with progress notifications displayed during the save process.
_feature/load-net-image/src/main/java/com/t8rin/imagetoolbox/feature/load\_net\image · high confidence
New file I/O abstractions for saving and reading data
The core data layer now includes a new set of interfaces and implementations in the \com.t8rin.imagetoolbox.core.data.saving.io\ package to handle file operations. This introduces \StreamWriteable\ and \StreamReadable\ interfaces backed by Java streams, along with concrete implementations for local files (\FileWriteable\, \FileReadable\), Android URIs (\UriReadable\, \UriWriteable\), and in-memory data (\ByteArrayReadable\, \StringReadable\). A \SeekableWriteable\ interface is also added to support seekable byte channels, and a \shielded()\ helper prevents accidental closure of stream wrappers. These changes provide a unified, abstraction-based approach to reading and writing data across different sources.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/io · high confidence
New filter configuration enums and procedural effects
The filter domain model now includes new enum types to support additional image processing options: BlurEdgeMode, ColorMapType (including Turbo and DeepGreen), DisplacementBoundary, DisplacementInterpolation, FadeSide, MirrorSide, PaletteTransferSpace, PolarCoordinatesType, PopArtBlendingMode, SpotHealMode (supporting LaMa), and TransferFunc. Additionally, a comprehensive ProceduralEffect enum has been added, defining parameters for effects such as RandomColorDispersion, RadialShimmer, HelixWaves, various glass and kaleidoscope patterns, and hue shift variations.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/domain/model/enums · high confidence
New filter management UI components
The filters presentation layer now includes a suite of new Compose widgets to enhance filter interaction. Users can add filters via a dedicated AddFilterButton, manage filter order with a new FilterReorderSheet, and preview effects in a FilterPreviewSheet. The FilterItem widget now supports advanced features like duplication, template creation, and shader preset import, while FilterItemContent provides specific parameter controls for a wide range of filters (e.g., Arc, Bloom, Displacement). Additionally, a CubeLutDownloadDialog and FilterSelectionCubeLutBottomContent facilitate the downloading and selection of LUT libraries.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget · high confidence
New filter presentation models and UI metadata
This change introduces the presentation-layer model classes for the image filter system, including the \FilterPreviewKey\ for generating consistent preview identifiers and the \GmicUiFilter\ base class with parameter metadata (numbers, toggles, selections, colors) to support GMIC filters. It also adds numerous \UiFilter\ implementations (e.g., \UiAcesFilmicToneMappingFilter\, \UiAdaptiveBlurFilter\, \UiAsciiFilter\, \UiAnalogDamageFilter\) that wire domain filters to UI groups via \@UiFilterInject\, define default parameter values, and expose \paramsInfo\ for UI controls, enabling the interface to render and adjust these filters.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/model · high confidence
New format conversion feature with undo/redo and EXIF controls
A new Format Conversion screen has been added, allowing users to change image formats and quality settings. This feature includes undo/redo history for edits, a toggle to preserve EXIF data during conversion, and progress notifications for save operations. The UI supports swipe gestures on the image container and provides options to share, compare, or zoom images.
_feature/format-conversion/src/main/java/com/t8rin/imagetoolbox/feature/format\conversion · high confidence
New gesture and image layout libraries for Compose
The app now includes two new internal libraries: \lib/gesture\ and \lib/image\. The gesture library provides custom Compose pointer input handling, including \detectMotionEvents\ for tracking down, move, and up states with optional delays, and \detectTransformGestures\ for rotation, panning, and zooming with touch slop and pointer requisite support. The image library introduces \ImageWithConstraints\, a composable that lays out and draws an \ImageBitmap\ with configurable alignment, content scale, and filtering, while exposing an \ImageScope\ to children with precise layout constraints and the bounding rectangle of the drawn image.
lib/gesture, lib/image · high confidence
New gradient palette management and theme style selection UI
The palette selection area now includes a dedicated Gradient Palette Editor for creating and customizing gradient color stops, along with a Gradient Palette Selector and Sheet that support built-in presets, custom gradients, and user-managed recent and favorite lists. Additionally, a new Palette Style Selection interface allows users to choose from predefined theme styles (such as TonalSpot, Vibrant, and Monochrome) via a bottom sheet, with helper mappings to display localized titles and subtitles for each style.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/palette\selection · high confidence
New image compression backends for AVIF, HEIC, JXL, and more
The image compression module now includes dedicated backend implementations for a wide range of formats, enabling users to save images in AVIF, HEIC, JXL, WebP, JPEG 2000, BMP, ICO, QOI, TIFF, and various PNG styles (Oxipng, ImageQuant, lossy, lossless). These backends expose format-specific controls such as AVIF chroma subsampling and AV1/AV2 codec selection, HEIC screen content coding and lossless YCbCr, JXL channel configuration (RGB, RGBA, Monochrome), and ICO multi-resolution generation. This expands the app's export capabilities beyond the previous default compressors.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor · high confidence
New image decoders and Coil 3 integration
The image loading layer has been updated to Coil 3 and now includes new decoders for animated JXL, HEIF/AVIF, PDF, VVC, and SVG (with a native resvg fallback). A Base64 fetcher allows loading images from Base64 strings, while an OriginalUriMapper resolves URIs via UriReplacements. Additional utilities include a MemoryCache helper, a CoilLogger that filters specific noise, and a TimeMeasureInterceptor for logging decode and transformation times.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil · high confidence
New image processing utilities and compression backend factory
This update introduces a suite of new utility classes in the core data layer to support advanced image manipulation and format handling. AnimationMergeUtils provides logic for merging animated frames with support for reversing and boomerang effects, while ApngUtils adds the ability to modify APNG loop counts. BlendingModeExt bridges domain blending modes to Android's PorterDuff and native BlendMode APIs, and CanvasUtils adds helper methods for positioning bitmaps and an alpha-healing function. GradientUtils enables linear, radial, and sweep gradient backgrounds, and ColorUtils simplifies color model conversions. Finally, ImageCompressorBackend introduces a factory pattern that routes compression tasks to specific backends (such as JXL, AVIF, HEIC, and various PNG/WebP modes), and StaticOptions configures image loading requests for static rendering.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils · high confidence
New image selection and preview UI components
The image selection and preview experience has been updated with a suite of new Compose widgets. Users can now benefit from an AspectRatioSelector that supports custom saved ratios and a visual preview, an ImagePager for smooth, animated multi-image browsing with predictive back support, and an ImagePreviewGrid that enables multi-select frame editing and inline image addition. Additional widgets like ImageCounter, ImageContainer, and AutoFilePicker streamline the workflow by providing clear selection status, animated preview transitions, and optional automatic file picking.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/image · high confidence
New library details screen for viewing open-source credits
A new screen has been added to display detailed information about open-source libraries used in the app. This feature presents the library name, description, and an optional external link via a dedicated UI component, allowing users to easily review attribution and source details.
feature/library-details · high confidence
New media picker feature with support for JXL and QOI formats
The app now includes a new media picker feature (feature/media-picker) that allows users to browse and select images and videos from their device. This implementation introduces support for JXL and QOI image formats, which are now recognized and selectable alongside standard image and video types. The feature includes a dedicated activity for media selection, domain models for media and albums, and a data layer that retrieves media content from the device's storage.
_feature/media-picker/src/main/java/com/t8rin/imagetoolbox/feature/media\picker · high confidence
New modalsheet library with nested scroll toggle
The lib/modalsheet module has been added, introducing a new ModalSheet composable for Android that displays a bottom sheet drawing over system UI. This component includes a new nestedScrollEnabled parameter, allowing users to toggle nested scrolling behavior within the sheet content. The library also provides a FullscreenPopup composable for displaying content above all other views and includes internal SwipeableV2 and ModalSheetLayout implementations to handle the sheet's state, animations, and gesture interactions.
lib/modalsheet · high confidence
New neural-tools library for AI image processing
This change introduces the \lib/neural-tools\ module, providing a suite of AI-powered image tools. It includes a background remover supporting multiple models (RMBG1.4, InSPyReNet, U2Net, BiRefNet, MODNet, ISNet, and YOLO segmentation), a watermark remover that combines a detection model with the LaMa inpainting model, and a PaddleOCR engine with support for multiple languages and a new v6 model. The library also features a LaMa inpainting processor for object removal, ONNX runtime utilities for cancellable model execution, and a robust download manager for AI models.
lib/neural-tools · high confidence
New pair-parameter UI components for filter settings
The filter editing interface now includes a new set of Compose UI components in the \pair\_components\ package to handle filters that require two parameters. These new widgets—such as \ColorModelPairItem\, \FloatColorModelPairItem\, \FloatFileModelPairItem\, \NumberPairItem\, and others—provide specialized controls like dual color pickers, slider-and-file selectors, and slider-and-toggle pairs. Notably, the \FloatFileModelPairItem\ adds a direct link to download lens profiles for the Lens Correction filter, while \NumberPairItem\ introduces a dedicated Seed Selector for randomization parameters.
_core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget/filterItem/pair\components · high confidence
New palette library with multi-format import and export support
The lib/palette module introduces a comprehensive palette management system that supports importing and exporting color palettes in a wide variety of industry-standard formats, including Adobe (ACB, ACO, ACT, ASE), GIMP, Corel, Sketch, and others. It provides a unified data model for colors and groups, handles multiple color spaces (RGB, CMYK, LAB, Gray), and includes coders for reading and writing these formats, enabling users to seamlessly exchange color data with other design tools.
lib/palette · high confidence
New parameter UI widgets for Arc, ASCII, Bilateral Blur, Bloom, Channel Mix, CLAHE, Crop/Perspective, Displacement, Distort Perspective, and Drop Shadow filters
The filter settings panel now includes dedicated Compose UI components for a batch of image filters, allowing users to adjust their specific parameters directly. These new widgets provide controls for Arc (radius, height, angle, spread, center), ASCII (gradient, font, size, color), Bilateral Blur (radius, sigma, edge mode), Bloom (threshold, intensity, radius, gamma), Channel Mix (RGB channel mixing), CLAHE (threshold, grid size, bins), Crop/Perspective and Distort Perspective (corner coordinates, clipping), Displacement (map selection, strength, interpolation, boundary), and Drop Shadow (color, offset, blur).
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget/filterItem · high confidence
New parameter models for expanded filter capabilities
The filter configuration layer now includes dedicated parameter data classes for a wide range of new and existing effects, enabling users to apply and customize these styles. This update introduces model definitions for the Arc, Ascii (with font support), Bilaterial Blur, Bloom, Channel Mix, CLAHE, Crop/Perspective, Displacement, Distort Perspective, Drop Shadow, Enhanced Zoom Blur, Flare, Glitch, GMIC, Kaleidoscope, Linear Gaussian, Linear/Radial Tilt Shift, NTSC VHS, Pinch, Procedural, Rubber Stamp, Seam Carving (with mask and backward energy options), Shader presets, Shear, Side Fade, Smear, Sparkle, Tone Curves, Torn Edge, Voronoi Crystallize, Water Drop, and Water filters.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/domain/model/params · high confidence
New permission utility with persistent request tracking
The app introduces a new permission management utility in the core UI layer that tracks how many times a permission has been requested using Android DataStore. This utility distinguishes between permissions that have not yet been given, those that are allowed, and those permanently denied (after more than two requests), ensuring the final status accurately reflects the user's interaction history rather than just the current grant state.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/permission · high confidence
New reusable UI controls for image manipulation and file management
This update introduces a suite of new Compose UI components in the core UI widget layer to support enhanced image editing and file handling workflows. Key additions include \AnimationMergeControls\ for managing multi-frame animation sequences, \ImageReorderCarousel\ and \FileReorderVerticalList\ for drag-and-drop reordering of images and files with sorting options, and \ImageTransformBar\ for quick access to rotation, flip, and EXIF editing tools. The diff also adds specific warning widgets (\FormatExifWarning\, \IcoSizeWarning\, \OOMWarning\) to alert users about format limitations or memory constraints, a \ResizeImageField\ with an integrated calculator for precise dimension adjustments, and a \ReorderItemMoveMenu\ for quick navigation within lists.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls · high confidence
New screenshot quick tile with background removal and post-processing
The quick-tiles module now includes a new Take Screenshot tile that captures the screen and automatically removes empty parts of the image before saving or sharing. This feature is implemented via a new screenshot package containing a launcher, a service, and a maker component that handles the Android MediaProjection API, virtual display capture, and bitmap processing. The service also debounces rapid screenshot requests and supports opening the captured image in specific app screens (like Palette Tools or Color Picker) via the ScreenshotAndOpenScreen action.
_feature/quick-tiles/src/main/java/com/t8rin/imagetoolbox/feature/quick\tiles · high confidence
New selection control widgets for color, gradient, and layer settings
The app introduces a suite of new UI components in the selection controls package to manage complex settings. Users can now adjust alpha transparency, select background colors with integrated gradient palettes and geometry controls, and choose layer blending modes. Additional widgets allow for font family selection, configuration of helper grid parameters (such as color and line width), and toggling the crop overlay's draggable behavior, providing a more structured and consistent interface for these tools.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls/selection · high confidence
New settings presentation models and UI customization options
This change introduces new model classes in the settings presentation layer to support expanded UI customization and configuration. It adds \IconShape\ to allow users to select from a wide variety of icon shapes (including Material 3 shapes and custom designs), \PicturePickerMode\ to let users choose between different image source methods (such as embedded picker, photo picker, gallery, or folder), and \UiFontFamily\ to enable custom font selection with support for variable fonts. Additionally, it defines \EditPresetsController\ for managing preset visibility state, and structures settings into groups (\SettingsGroup\) with specific options like \IconShape\, \DynamicColors\, \Shadows\, and \ToolsArrangement\.
core/settings/src/main/java/com/t8rin/imagetoolbox/core/settings/presentation/model · high confidence
New shader preset model and validation logic
The shader filter system now uses a structured domain model for presets, introducing classes for ShaderPreset, ShaderParam, and typed ShaderValue (Float, Int, Bool, Color, Vec2). A new ShaderParser deserializes JSON presets into this model, while ShaderValidator enforces constraints such as supported versions, unique parameter names, GLSL source safety, and numeric bounds. ShaderPresetCodec handles serialization back to JSON, and ShaderSourceSafety filters out unsafe GLSL characters to prevent injection issues.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/domain/model/shader · high confidence
New standalone Tone Curves editing tool
A dedicated Tone Curves feature has been added to the image editor, providing a new screen for adjusting image tonality via curve controls. This tool includes a live preview of the adjustments, support for undo and redo actions, and the ability to import and export tone presets for reuse. The implementation introduces a new presentation layer and screen logic component to handle the specific editing workflow.
feature/curves/src/main/java/com/t8rin/imagetoolbox/feature/curves · high confidence
New switch widget styles available in settings
The app now offers a selection of switch toggle styles to match different design preferences. Users can choose from standard Material 3, Cupertino (iOS-style), Fluent (Windows-style), One UI (Samsung), Pixel, HyperOS, Liquid Glass, and a basic Compose switch. These new UI components are implemented in the core UI widget library and provide distinct visual and animation behaviors for toggling settings.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/switches · high confidence
New text rendering and input widgets for the UI layer
This change introduces a suite of new Compose UI components in the \core/ui/widget/text\ package to enhance text handling and user input. It adds \AutoSizeText\ for dynamic font scaling, \HtmlText\ for rendering HTML with clickable links, \OutlinedText\ for styled text with strokes, and \Marquee\ for scrolling text. Additionally, it provides \RoundedTextField\ for styled input, \FilenamePatternEditSheet\ for configuring file naming rules, \PatternHighlightTransformation\ for syntax highlighting in pattern editors, and utility widgets like \TitleItem\, \TopAppBarTitle\, \IsKeyboardVisibleAsState\, and \Linkify\.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/text · high confidence
New vector shape resources added to the image editor
The application now includes a new library of vector shapes in the core resources module, providing additional visual elements for the image editor's UI. This update introduces a reusable PathShape implementation and adds specific shape definitions for Arrow, Bookmark, Burger, Clover, Droplet, Egg, Explosion, Heart, Kotlin, Map, Material Star, Octagon, Oval, Pentagon, Pill, Shield, Shuriken, Simple Heart, Small Material Star, and Squircle, allowing these icons to be used throughout the interface.
core/resources/src/main/java/com/t8rin/imagetoolbox/core/resources/shapes · high confidence
PDF tools backend refactored to use Apache PDFBox and new domain interfaces
The PDF tools feature has been restructured to replace the previous Android PDF implementation with a new backend based on Apache PDFBox. This change introduces a comprehensive \PdfManager\ interface and a suite of domain models (e.g., \PdfCropParams\, \ComicToPdfParams\) that support a wide range of operations including merging, splitting, rotating, watermarking, signature handling, and comic book conversion. The implementation includes a new \AndroidPdfHelper\ for core PDF operations, a \PdfCropPresetRepository\ for managing user presets via DataStore, and utility classes like \PdfContentStreamEditor\ and \PdfRenderer\ to handle content manipulation and rendering. This refactor provides a more robust and feature-rich foundation for PDF editing capabilities within the app.
_feature/pdf-tools/src/main/java/com/t8rin/imagetoolbox/feature/pdf\tools · high confidence
QR code feature refactored with typed creation and detailed info previews
The QR code scanning and generation module has been restructured to support specific barcode types (WiFi, Email, Geolocation, Phone, SMS, Contact, and Calendar) rather than generic text. This change introduces a new \ImageBarcodeReader\ interface and its Android implementation to handle type-specific decoding, alongside a comprehensive UI layer that includes a \QrParamsSelector\ for visual customization (colors, shapes, logos), a \QrCodePreview\ component, and \QrInfo\ displays that show structured details for each barcode type with copy-to-clipboard and intent-launching capabilities. The feature now uses a dedicated DI module (\ScanQrCodeModule\) to bind these new components.
_feature/scan-qr-code/src/main/java/com/t8rin/imagetoolbox/feature/scan\_qr\code · high confidence
SVG Maker feature added
A new SVG Maker feature is introduced, allowing users to convert images to SVG format. The feature includes a UI for selecting images and adjusting conversion parameters (such as color count, blur, and presets) via the SvgParamsSelector, and handles the conversion logic through the AndroidSvgManager and ImageTracer. It supports saving generated SVGs to files or sharing them, with progress tracking and undo/redo capabilities for parameter changes.
_feature/svg-maker/src/main/java/com/t8rin/imagetoolbox/feature/svg\maker · high confidence
Text recognition now supports PaddleOCR alongside Tesseract
The text recognition feature now offers PaddleOCR (v5 and v6) as an alternative to the existing Tesseract engine. Users can select their preferred engine and specific PaddleOCR models (such as Universal, English, or language-specific variants) to extract text from images, with the app handling the download and management of these new model files.
feature/recognize-text/src/main/java/com/t8rin/imagetoolbox/feature/recognize · high confidence
Watermarking feature restructured with hidden watermark detection and filename placeholders
The watermarking module has been refactored to support new capabilities and improved organization. Users can now detect invisible watermarks embedded in images, with results displayed as either text (copyable to clipboard) or images. The text watermark tool now supports using the filename as a placeholder, accessible via an info button in the UI. The feature's package has been renamed to com.t8rin.imagetoolbox, and the codebase has been reorganized with new domain models (HiddenWatermark, WatermarkParams), a dedicated DI module, and separated presentation components for better maintainability.
feature/watermarking/src/main/java/com/t8rin/imagetoolbox/feature/watermarking · high confidence
Weight Resize tool now supports saving images that are already below the size limit
The Resize by Weight feature has been updated to allow users to save images even if their file size is already under the specified maximum byte limit. Previously, images smaller than the target size were ignored during the save process; this change ensures that all selected images are processed and saved according to the user's format and quality settings, regardless of their initial size.
_feature/weight-resize/src/main/java/com/t8rin/imagetoolbox/feature/weight\resize · high confidence
Removals
Removal of legacy MainActivity and Compose UI theme files
The legacy MainActivity implementation, which provided a basic image resizing interface using Material 3 components, has been removed from the application. Additionally, the associated Compose UI theme definitions (Color, Theme, and Type) that configured the app's visual styling and dark mode support have been deleted. This change eliminates the previous single-activity entry point and its specific UI theming in favor of a new architecture.
app/src/main/java/ru · high confidence
Removed release APK metadata file
The \output-metadata.json\ file, which previously contained build metadata for the release APK (including version code 1 and version name 1.0), has been deleted from the repository. This indicates that the generated release artifact metadata is no longer tracked in version control.
app/release · high confidence
Architecture
Introduction of Gradle convention plugins for build configuration
The build logic has been refactored to use new convention plugins that centralize project setup. These plugins automatically configure Android build features (including SDK versions and compile options), set up the Compose compiler with stability configuration, enable Detekt static analysis with multiple report formats, and standardize Kotlin compiler flags and JVM targets across the project.
build-logic/convention/src/main/kotlin/com · high confidence
New UI provider infrastructure and composition locals
The app introduces a new \ImageToolboxCompositionLocals\ entry point and a suite of \Local\*\ composition locals (such as \LocalScreenSize\, \LocalContainerShape\, \LocalMetadataProvider\, and \LocalAppHistoryRepository\) to centralize dependency injection and state access within the UI layer. This change also integrates global UI utilities like \ToastHost\, \ConfettiHost\, and \SkippedImagesSheetHost\ into the main composition tree, establishing a new foundation for how the interface manages screen metrics, theming, and background services.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/provider · high confidence
New convention plugins for modularized build logic
The build system now uses a set of new Gradle convention plugins in the build-logic module to standardize configuration across the project. ImageToolboxApplicationPlugin configures the main app with Android, Kotlin, Compose, Detekt, and Firebase Crashlytics, while ImageToolboxLibraryPlugin sets up base library modules with Kotlin serialization and testing. Specialized plugins handle specific needs: ImageToolboxHiltPlugin adds Dagger Hilt and KSP dependencies, ImageToolboxLibraryComposePlugin enables Compose for libraries, ImageToolboxLibraryFeaturePlugin provides common dependencies for feature modules, and ImageToolboxTestsPlugin configures unit testing with JUnit and disables Android instrumentation tests by default.
build-logic/convention/src/main/kotlin · high confidence
Behavioural changes
6 commits (0 fixes) modifying core/resources/src/main/assets/lottie
A change to existing behaviour in core/resources/src/main/assets/lottie — 6 commits, 244 files.
core/resources/src/main/assets/lottie · medium confidence · unverified
AI tools domain models now support custom depth maps and parallel processing
The AI tools feature has been updated to allow users to provide a custom depth map for depth-based effects and to configure parallel workers for processing. Additionally, the model definitions now include specific contracts for AI detection models, enabling the app to identify AI-generated content with configurable input sizes and output types.
_feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai\tools/domain/model · high confidence
App renamed to ImageToolbox with updated branding resources
The application has been rebranded from "Image Resizer (Shrinker)" to "ImageToolbox". This change is reflected in the new \resources.properties\ file which sets the unqualified resource locale to English, and the removal of the previous \strings.xml\ containing the old app name. Additionally, legacy adaptive icon definitions (\ic\_launcher.xml\, \ic\_launcher\_round.xml\) and their associated background/foreground drawables have been removed, along with the previous \colors.xml\ and \themes.xml\ files, indicating a shift in the app's visual identity and resource structure.
app/src/main/res · high confidence
Application initialization and process detection logic added
The app now includes a centralized application class that handles startup setup, including initializing core components like OpenCV, neural tools, color names, and security providers, as well as attaching a global exception handler. Additionally, utility code has been added to detect whether the app is running in the main process, ensuring that setup logic only executes once in the primary process.
app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components · high confidence
Application initialization logic reorganized into dedicated setup functions
The app's startup sequence has been refactored to use specific initialization functions for each subsystem. The \ImageToolboxApplication\ now explicitly calls dedicated setup routines including \attachLogWriter\ for crash reporting, \initColorNames\ for color data, \initNeuralTool\ for AI features, \initOpenCV\ and \initPdfBox\ for external libraries, \initQrScanner\ for barcode processing, and \registerSecurityProviders\ for cryptographic support. Additionally, \setupFlags\ enables specific Compose and Decompose runtime optimizations, and \initCollages\ configures collage constants.
app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions · high confidence
Crop tool UI and interaction overhaul
The crop feature's presentation layer has been significantly refactored to improve usability and visual consistency. Key changes include swapping the positions of the crop and change image buttons, adding undo/redo functionality for crop actions, and introducing a magnifier for free-corner cropping. The interface now supports toggling EXIF data preservation, allows the crop overlay to be made undraggable, and features an improved layout optimized for large screens.
feature/crop/src/main/java/com/t8rin/imagetoolbox/feature/crop/presentation · high confidence
Disabled analytics and crash reporting in the Free/Open Source edition
The Free/Open Source (FOSS) build of ImageToolbox now includes a no-op implementation of the analytics and crash reporting manager. This change ensures that no user data, crash reports, or analytics metrics are collected or transmitted in this edition, aligning with the privacy expectations of open-source users.
core/crash/src/foss · high confidence
Document scanner UI and logic refactored into new presentation layer
The document scanner feature has been refactored to use a new Compose-based presentation layer, introducing DocumentScannerContent and DocumentScannerComponent. This change consolidates the scanner's UI and business logic, adding support for exit confirmation dialogs, progress notifications during save operations, and improved failure notifications. The implementation also integrates with the core image picker and PDF manager to handle scanning, image selection, and PDF creation more robustly.
_feature/document-scanner/src/main/java/com/t8rin/imagetoolbox/feature/document\scanner · high confidence
EXIF editing screen with save progress and batch processing
The EXIF editing feature now includes a dedicated UI screen that allows users to view, add, edit, and remove image metadata tags. A key behavioral change is the addition of a progress notification for all save operations, ensuring users are aware of ongoing background tasks. The screen also supports batch processing via a preference sheet, allowing users to apply edits to multiple images at once, and includes options to share or copy the edited image to the clipboard.
_feature/edit-exif/src/main/java/com/t8rin/imagetoolbox/feature/edit\exif · high confidence
FOSS version now uses U2NetP for background removal
The FOSS build of the background eraser feature now delegates to the U2NetP model via the MlKitBackgroundRemoverBackend, replacing the previous implementation. This change aligns the FOSS variant with the newer AI model architecture, ensuring consistent background removal quality across editions while maintaining the same user-facing interface.
_feature/erase-background/src/foss/java/com/t8rin/imagetoolbox/feature/erase\background · high confidence
Gradient Maker tool restructured with new architecture and UI enhancements
The Gradient Maker feature has been refactored to a new modular architecture, introducing a domain-driven design with a \GradientMaker\ interface and platform-specific \AndroidGradientMaker\ implementation for rendering. The UI now supports multiple modes including standard gradients, mesh gradients, and image overlays, with a new compare button to preview changes against the original image. Usability improvements include undo/redo functionality, a pipette tool for picking colors from the image, the ability to import custom gradient palettes, and enhanced controls for color stops and mesh point customization.
_feature/gradient-maker/src/main/java/com/t8rin/imagetoolbox/feature/gradient\maker · high confidence
Image Preview feature rewritten in Compose with enhanced selection and folder loading
The Image Preview tool has been completely rewritten using Jetpack Compose, introducing a new UI with animated transitions, a scrollable top app bar, and an enhanced badge showing the image count. Users now benefit from improved folder picking capabilities that display a loading count while images are being scanned, and a refined selection mechanism that supports manual frame-based selection. The underlying component logic has been refactored to use Decompose for navigation and state management, ensuring smoother performance and better handling of image loading states.
_feature/image-preview/src/main/java/com/t8rin/imagetoolbox/feature/image\preview · high confidence
Improved color handling and PDF font caching
This update introduces safer color processing and reliable PDF font management. Color operations now use a 'safe' conversion to sRGB, preventing crashes when encountering invalid colorspace IDs by falling back to transparent or default values; this safety mechanism is also applied to color animations to ensure smooth transitions without errors. Additionally, PDF generation now utilizes a cached, unpacked universal bold font file, improving multilingual text handling and consistency in exported documents.
core/resources/src/main/java/com/t8rin/imagetoolbox/core/resources/utils · high confidence
Introduction of failure notification via toast messages
A new dependency injection module has been added to wire the application's failure notification system. When errors or network connectivity issues occur, users will now receive immediate feedback through on-screen toast messages, replacing any previous silent or different notification behavior.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/di · high confidence
Introduction of new CropComponent screen logic
The crop feature now utilizes a new \CropComponent\ class located in the \screenLogic\ package to manage the cropping interface state and user interactions. This component handles core cropping behaviors including aspect ratio selection, image rotation, and saving options (such as EXIF data preservation), while integrating with the application's history system to support undo/redo operations for crop adjustments.
feature/crop/src/main/java/com/t8rin/imagetoolbox/feature/crop/presentation/screenLogic · high confidence
Market version now uses ML Kit for background removal
The market build of the background eraser feature now implements the removal logic using Google ML Kit (specifically Selfie and Subject segmentation APIs) instead of the previous implementation. This change introduces a new backend that attempts the newer Subject segmentation API first, falling back to the older Selfie segmentation API if the new one fails, ensuring background removal works reliably on devices with ML Kit support.
_feature/erase-background/src/market/java/com/t8rin/imagetoolbox/feature/erase\background · high confidence
Migration to Compose Vector Icons
The app's icon system has been migrated to use Compose \ImageVector\ definitions, replacing previous resource formats. This change introduces a structured icon registry in \Icons.kt\ with dedicated object namespaces for Filled, Outlined, Rounded, and TwoTone styles, and adds the first batch of vector icon implementations (such as AccessTime, AccountTree, and Add) to the core resources module.
core/resources/src/main/java/com/t8rin/imagetoolbox/core/resources/icons · high confidence
Navigation system refactored to support search keywords and structured screen definitions
The navigation layer has been restructured to introduce a comprehensive search capability for tools. A new \ScreenSearch.kt\ module implements keyword matching, allowing users to find tools via specific search terms defined in \ScreenUtils.kt\. The \Screen.kt\ file now serves as a centralized, serializable registry for all application screens, defining their IDs, titles, subtitles, and icons. Additionally, \Decompose.kt\ provides new lifecycle-aware coroutine scope utilities to manage background tasks automatically.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/navigation · high confidence
New Android download manager with foreground notifications for remote resources
The app now uses a new Android-specific download manager for fetching remote resources, which includes a foreground notification to prevent the system from cancelling long-running downloads. This change improves the reliability of resource downloads by ensuring they complete even in the background, and introduces a unified way to handle download progress and failures.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/remote · high confidence
New Android image processing implementation
The image data layer now uses a new set of Android-specific implementations for core image operations. This includes AndroidImageCompressor for handling compression and background color filling, AndroidImageGetter for loading images via Coil3, AndroidImageScaler for resizing using the Aire library and Magic Kernel modes, AndroidImageTransformer for applying transformations, AndroidImagePreviewCreator for generating previews, AndroidMetadata for EXIF handling, AndroidShareProvider for sharing images, and ImageExportProfilesUseCaseImpl for managing export profiles. These changes replace the previous implementation in this package.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image · high confidence
New JSON serialization infrastructure for image settings and palettes
The application now uses a new Moshi-based JSON parser to handle configuration data. This change introduces specific adapters for serializing and deserializing gradient palettes, image format settings, resize presets (including Telegram, percentage, and aspect-ratio modes), and scale modes with color space support. Users benefit from more robust persistence of their image editing preferences and export profiles.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/json · high confidence
New Material Expressive theme system with custom motion and typography
The app's UI theme has been rebuilt to use Material 3's Expressive theme capabilities. This introduces a custom motion scheme with distinct spatial and effects animations (including a 'FancyTransitionEasing'), updated typography that enables font synthesis across all text styles, and new color utilities for fixed containers and harmonization. The theme root now supports dynamic colors with a specific override for Pixel devices on Android 16 (Baklava), and applies custom rounded shapes via an 'AutoCornersShape' modifier.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/theme · high confidence
New animation utilities and easing presets introduced
The animation utility module has been expanded with new helper functions and configuration presets. Users will benefit from new extension functions for animating Float and Dp values, as well as a dedicated function for animating floating-point ranges. The module now includes a custom slide transition with fade effects and a predictive back animation tailored for the app's navigation stack. Additionally, a utility class for combining multiple interaction sources has been added, alongside a suite of new cubic-bezier easing presets (such as FancyTransitionEasing and AlphaEasing) to standardize animation timing across the interface.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/animation · high confidence
New dependency injection modules for coroutines, image loading, and saving
The app now uses a structured Hilt DI layer in the data module to manage core infrastructure. Coroutines are routed through dedicated dispatchers (UI, IO, encoding, decoding, default) to optimize background performance. Image loading is configured via Coil 3 with a custom component registry supporting a wide range of formats (RAW, TIFF, AVIF, HEIC, JXL, PDF, PSD, DjVu, WebP, SVG, etc.) and hardware caching. Saving and file operations are backed by dedicated providers for file control, filename creation, history, and keep-alive services. JSON persistence is handled by Moshi with polymorphic adapters for quality, shape, and filename behavior settings. Remote resources and local preferences are also wired through new modules.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di · high confidence
New emoji resource model and categorized loading logic
The emoji resource layer has been refactored to introduce a structured data model for emoji assets. A new \Emoji\ object now manages the initialization and categorization of emoji icons, organizing them into specific groups such as emotions, food, nature, objects, events, transportation, and symbols. This change includes the introduction of \EmojiData\ to represent individual categories, each containing a title, an icon, and a list of associated emoji URIs. The implementation also adds support for mapping static SVG icons to their corresponding animated Lottie versions, enabling the application to serve animated emojis where available.
core/resources/src/main/java/com/t8rin/imagetoolbox/core/resources/emoji · high confidence
New filter selection sheet with search, favorites, and templates
The filter selection interface has been replaced with a new bottom sheet that organizes filters into tabs for Templates, Recent, and Favorites, alongside standard filter groups. Users can now search for tools by name, manage a list of favorite filters with drag-to-reorder, and view recently used filters. The sheet also supports importing and managing custom template filters, allowing users to add, view details, and share them.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget/addFilters · high confidence
New preference UI widgets and recent tools card
The settings and preferences screens now use a new set of Compose widgets (PreferenceItem, PreferenceRow, PreferenceRowSwitch, RecentToolsCard, ScreenPreference) that feature animated icon containers, haptic feedback on clicks, and consistent styling with the app's icon shape settings. The RecentToolsCard displays a horizontal list of recently used tools with navigation chips, while ScreenPreference adapts its layout for different tool categories like GIF, Filter, and AI tools.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/preferences · high confidence
New root navigation and settings backdrop UI
The app's root screen has been refactored to use a BackdropScaffold layout, allowing the Settings panel to slide over the main content when expanded. This change introduces a new animated Settings button, predictive back gesture support for the settings sheet, and a centralized dialog system for first-launch setup, update checks, and permission requests.
feature/root/src/main/java/com/t8rin/imagetoolbox/feature/root · high confidence
New utility layer for filter presentation and model management
The presentation layer for image filters now includes dedicated utilities to support new capabilities and improve user experience. A new LamaLoader component manages the download, import, and deletion of the LaMa generative inpainting model, enabling the Spot Heal feature. Additionally, Mappings.kt provides localized display names for various filter parameters (such as Pop Art blending modes, color spaces, and Polar Coordinates types), while ShaderValidationErrorUtils centralizes user-friendly error messages for shader parsing and validation issues.
core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/utils · high confidence
New value input widgets with long-press and step controls
The value widget area now includes a ValueDialog for editing numeric values and a ValueText component for displaying them. The dialog adds plus/minus buttons that support long-press to continuously adjust values, along with step-based incrementing and range validation. The text widget provides an animated, tappable display with support for custom suffixes and long-click actions.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/value · high confidence
Overhauled image saving, filename generation, and background processing infrastructure
The saving subsystem has been significantly refactored to improve reliability and add new capabilities. The core saving logic is now handled by a new \AndroidFileController\, which manages save targets, clipboard copying, and metadata preservation. Filename generation is now driven by \AndroidFilenameCreator\, supporting customizable patterns (including original name, size, preset info, and sequence numbers) and behaviors like checksum or random naming. A new \OriginalFileDeletionHelper\ enables the option to automatically delete original files after saving, with robust handling of various URI schemes. Additionally, a \KeepAliveService\ and \KeepAliveForegroundService\ have been introduced to maintain background processing status and provide user-visible progress notifications during long-running save operations.
core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving · high confidence
Play Store updates now trigger immediate in-app updates
The UpdateSheet widget now detects when the app is installed from the Play Store and, upon opening, automatically initiates an immediate in-app update flow if an update is available. Users on the Play Store will no longer see the manual update sheet; instead, the update process starts immediately. For non-Play Store installations, the previous manual update sheet behavior remains unchanged.
core/ui/src/market/java/com/t8rin/imagetoolbox/core/ui/widget · high confidence
Redesigned Resize & Convert interface with undo/redo and EXIF controls
The Resize & Convert screen has been rebuilt using a new Compose-based UI (ResizeAndConvertContent) and a dedicated screen logic component (ResizeAndConvertComponent). This update introduces undo/redo support for the tool, allowing users to revert changes. It also adds granular control over image metadata, including a setting to always clear EXIF data and the ability to select the default image format and quality. The interface now features a preset selector, scale mode options, and improved handling of large images and swipe gestures.
_feature/resize-convert/src/main/java/com/t8rin/imagetoolbox/feature/resize\convert · high confidence
Redesigned color picker and color scheme management UI
The color picker interface has been significantly overhauled with new UI components. The \ColorPickerSheet\ now features a dedicated \BasicColorsCard\ for quick selection, alongside \RecentAndFavoriteColorsCard\ for accessing history and saved colors, and includes a toggle to favorite colors directly from the sheet. The \AvailableColorTuplesSheet\ provides a comprehensive view for managing app-wide color schemes, allowing users to adjust contrast, style, and invert colors, as well as delete or edit saved tuples. The core \ColorPicker\ component now uses a saturation/value selector rectangle with a hue slider and an optional alpha slider, while \ColorInfo\ supports copying and pasting hex color codes.
_core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/color\picker · high confidence
Redesigned color picker interface with magnifier and copy options
The Pick Color from Image feature has been updated with a new UI that includes a magnifier button to zoom in on the image for precise color selection, and the ability to copy the selected color's name and hex code directly from the interface.
_feature/pick-color/src/main/java/com/t8rin/imagetoolbox/feature/pick\color · high confidence
Redesigned main navigation with favorites, grouping, and search support
The main screen now features a comprehensive navigation overhaul that supports tool grouping, customizable favorite tool placement (first or last), and screen search. Users can now access a 'Last Used Tools' card for quick access to recent tools, and the interface adapts to different screen sizes with grid layouts on larger screens and navigation bars/rails on smaller ones. The navigation drawer has been enhanced with predictive back animation support and improved sizing logic.
feature/main/src/main/java/com/t8rin/imagetoolbox/feature/main · high confidence
Redesigned open-source libraries information screen
The Open Source Licenses screen has been rebuilt using a new Compose-based UI. The list of libraries is now presented in a custom container with enhanced styling, including specific color and padding configurations for version chips. The screen logic has been updated to handle library selection by navigating to a dedicated details screen that displays the HTML-formatted license content, and it now correctly resolves library links from SCM or website URLs.
_feature/libraries-info/src/main/java/com/t8rin/imagetoolbox/feature/libraries\info · high confidence
Settings feature refactored to use DataStore and new persistence layer
The settings feature has been restructured to use Android DataStore for preference storage, introducing a new \AndroidSettingsManager\ and \AutoCacheCleanupUseCaseImpl\ to handle settings persistence and automatic cache clearing. This change includes a comprehensive set of new setting keys (e.g., \CACHE\_AUTO\_CLEAR\_LIMIT\_BYTES\, \USE\_ANIMATED\_EMOJIS\, \RAW\_DEMOSAIC\_QUALITY\) and a Dagger Hilt module (\SettingsModule\) to wire the new dependencies, enabling granular control over app behavior such as cache limits, RAW development defaults, and UI animations.
feature/settings/src/main/java/com/t8rin/imagetoolbox/feature/settings · high confidence
Single Edit feature UI refactored into modular Compose components
The Single Edit screen's presentation layer has been restructured into a set of dedicated, reusable Compose components. The main \SingleEditContent\ now orchestrates the layout and state, while specific editing tools are encapsulated in their own screens: \CropEditOption\ (with free-corners and magnifier support), \DrawEditOption\ (supporting gradients and line angles), \EraseBackgroundEditOption\ (with auto-removal and recovery modes), \FilterEditOption\ (with template creation and reordering), and \ToneCurvesEditOption\. A shared \FullscreenEditOption\ component standardizes the full-screen editing experience, including predictive back animations, undo/redo controls, and bottom sheet interactions across all these tools.
_feature/single-edit/src/main/java/com/t8rin/imagetoolbox/feature/single\edit · high confidence
State persistence and utility extensions for UI state management
The app now supports saving and restoring UI state across restarts via a new ObjectSaverDelegate, which automatically persists Compose state objects using a background saver. Additionally, new utility functions (update, updateNotNull, updateIf, derivedValueOf) have been added to simplify state transformations and derived state calculations within the UI layer.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/state · high confidence
Updated ProGuard rules and build configuration for release stability
The app's release build configuration has been updated to ensure stability and correct functionality in production. ProGuard rules were expanded to preserve critical classes required for reflection-based operations, specifically for the filter system (UiFilter, Filter), image export presets, history/statistics models, and third-party libraries like Bouncy Castle, ONNX Runtime, and Coil-Resvg. Additionally, the .gitignore file was updated to exclude new build variants (foss, market, jxl) and generated source directories, and the ProGuard configuration file now references the Kotlin DSL build script (build.gradle.kts).
app · high confidence
Fixes
Fix markup layer capture failures on older Android devices
The image capture utility in the UI core now uses a device-specific implementation to prevent markup layer bugs on certain devices. For Android N (API 24) and above, it uses a modern GraphicsLayer-based approach, while for older devices, it falls back to a Picture-based rendering path that correctly handles canvas delegation, ensuring consistent screenshot behavior across all supported Android versions.
core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/utils/capturable · high confidence
Test coverage
Added LiveDrawTestActivity for debugging drawing components; Added instrumentation tests for AndroidCryptographyManager; Added instrumentation tests for Code Preview Bitmap Renderer; Added instrumentation tests for Screenshot Framing image loading and rendering; Added instrumentation tests for animated JXL and WebP conversion and merging; Added instrumentation tests for procedural GPU image filters; Added instrumentation tests for sweep gradient rotation; Added instrumentation tests for the draw feature; Added instrumented tests for APNG merge functionality; Added instrumented tests for PDF image scaling and page import; Added instrumented tests for the native fractal renderer backend; Added tests for CropperState undo/redo functionality; Added tests for EXIF removal presets; Added tests for PDF font coverage, graphics state handling, and emoji rendering; Added tests for animated GIF export and animation parameters; Added tests for duplicate finder domain logic; Added tests for filename pattern sequence resolution; Added tests for fractal generation domain models and native backend mapping; Added tests for gradient layer rendering and shape padding behavior; Added tests for gradient palette and procedural filter serialization; Added tests for gradient palette and resize type JSON serialization; Added tests for gradient palette serialization and deserialization; Added tests for image stitching gradient backgrounds and scaling logic; Added tests for media grouping and sorting logic; Added tests for multi-frame fusion engine and parameter normalization; Added unit tests for photomosaic domain logic; Added unit tests for seed selection and value dialog step logic; Expanded instrumented test coverage for metadata and image formats; Removed default example unit and instrumented tests.
Dependencies
Gradle wrapper updated to version 9.7.1
The Gradle wrapper configuration has been updated to use Gradle 9.7.1 (previously 7.4), ensuring builds use the newer distribution. The file also includes an Apache 2.0 license header.
gradle · high confidence
Initial project structure and dependency configuration
The project is initialized with a modular Android architecture, introducing build-logic convention plugins and a version catalog (libs.versions.toml) to manage dependencies. The app module is configured with 'foss' and 'market' product flavors, enabling conditional inclusion of Google Mobile Services (Firebase, Quickie) and setting the application ID to 'com.t8rin.imagetoolbox'.
(dependencies) · high confidence
Housekeeping
Initial project documentation and build configuration
The repository now includes essential project documentation and build scaffolding. A new ARCHITECTURE.md file provides a visual graph of the module dependencies, detailing the core and feature modules. Standard project files such as CONTRIBUTING.md, LICENSE (Apache 2.0), and a comprehensive README.md have been added to guide users and contributors. Additionally, the build environment is configured with a Compose compiler configuration file and updated Gradle wrapper scripts to ensure consistent builds.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 54 → 59 (+5.5)
- Rubric changed (rubric-2026.09.15 → rubric-2026.10.5) — scores are not directly comparable.
Lenses
- Code Health 100 → 78 (-22.0)
- Architecture 91 (new)
- Maturity 73 → 73 (-0.2)
- Readiness 49 → 49 (+0.0)
- Security 43 → 58 (+14.2)
- Domain Modelling 100 (new)
- Performance 80 (new)
Resolved (6)
- Change coupling: AlphaSelector.kt ↔ DrawContent.kt (core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/controls/selection/AlphaSelector.kt)
- Change-coupling hub: LineWidthSelector.kt → AlphaSelector.kt, DrawContent.kt, EraseBackgroundContent.kt (feature/draw/src/main/java/com/t8rin/imagetoolbox/feature/draw/presentation/components/LineWidthSelector.kt)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
New (1846)
- ACBPaletteCoder.decode (cyclomatic 17) (lib/palette/src/main/java/com/t8rin/palette/coders/ACBPaletteCoder.kt)
- ACOPaletteCoder.decode (cognitive 20) (lib/palette/src/main/java/com/t8rin/palette/coders/ACOPaletteCoder.kt)
- ACOPaletteCoder.decode (cyclomatic 16) (lib/palette/src/main/java/com/t8rin/palette/coders/ACOPaletteCoder.kt)
- AFPaletteCoder.decode (cognitive 73) (lib/palette/src/main/java/com/t8rin/palette/coders/AFPaletteCoder.kt)
- AFPaletteCoder.decode (cyclomatic 43) (lib/palette/src/main/java/com/t8rin/palette/coders/AFPaletteCoder.kt)
- ActiveLayerGestureModifierKt.activeLayerGestures (cognitive 37) (feature/markup-layers/src/main/java/com/t8rin/imagetoolbox/feature/markup_layers/presentation/components/ActiveLayerGestureModifier.kt)
- ActiveLayerGestureModifierKt.activeLayerGestures (cyclomatic 16) (feature/markup-layers/src/main/java/com/t8rin/imagetoolbox/feature/markup_layers/presentation/components/ActiveLayerGestureModifier.kt)
- AdaptiveBottomScaffoldLayoutScreenKt.AdaptiveBottomScaffoldLayoutScreen (cognitive 50) (core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/AdaptiveBottomScaffoldLayoutScreen.kt)
- AdaptiveBottomScaffoldLayoutScreenKt.AdaptiveBottomScaffoldLayoutScreen (cyclomatic 30) (core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/AdaptiveBottomScaffoldLayoutScreen.kt)
- AdaptiveLayoutScreenKt.AdaptiveLayoutScreen (cognitive 64) (core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/AdaptiveLayoutScreen.kt)
- AdaptiveLayoutScreenKt.AdaptiveLayoutScreen (cyclomatic 39) (core/ui/src/main/kotlin/com/t8rin/imagetoolbox/core/ui/widget/AdaptiveLayoutScreen.kt)
- AddFiltersSheetKt.AddFiltersSheet (cognitive 18) (core/filters/src/main/java/com/t8rin/imagetoolbox/core/filters/presentation/widget/addFilters/AddFiltersSheet.kt)
- AiProcessor.drawTile (cognitive 20) (feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai_tools/data/AiProcessor.kt)
- AiToolsContentKt.AiToolsContent (cognitive 51) (feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai_tools/presentation/AiToolsContent.kt)
- AiToolsContentKt.AiToolsContent (cyclomatic 32) (feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai_tools/presentation/AiToolsContent.kt)
- AndroidAiToolsRepository.fetchDownloadedModels (cognitive 20) (feature/ai-tools/src/main/java/com/t8rin/imagetoolbox/feature/ai_tools/data/AndroidAiToolsRepository.kt)
- AndroidFileController.moveImpl (cognitive 60) (core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFileController.kt)
- AndroidFileController.moveImpl (cyclomatic 30) (core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFileController.kt)
- AndroidFileController.saveImpl (cognitive 58) (core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFileController.kt)
- AndroidFileController.saveImpl (cyclomatic 31) (core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFileController.kt)
- …and 1826 more
Changes since last survey
- 56 commits — 53 feature/other, 3 fixes
By area
- core/resources — 23 commits
- (repo) — 12 commits
- core/ui — 6 commits
- gradle/libs.versions.toml — 3 commits
- feature/compare — 2 commits
- feature/image-stitch — 2 commits
- core/data — 1 commit
- core/utils — 1 commit
- feature/delete-exif — 1 commit
- feature/media-picker — 1 commit
- feature/scan-qr-code — 1 commit
- feature/settings — 1 commit
- lib/collages — 1 commit
- lib/documentscanner — 1 commit
Notable commits
- fix: Fixed document scanner crash by #3203
- fix: Fixed link extraction by #3189
- fix: Fixed removing of image in some tools by #3209
- change: - Added Screenshot Framing tool - Added ability to export animated before/after GIF in compare tool
- change: - Added Screenshot Framing tool - Added ability to export animated before/after GIF in compare tool
- change: - Added Screenshot Framing tool - Added ability to export animated before/after GIF in compare tool
- change: 4.2.1-rc01
- change: Added ability to add WIFI network from QR code by #3190
- change: Added ability to choose scale direction in image stitching by #3207
- change: Added ability to group and sort images in embedded picker by #3201
- change: Added ability to group and sort images in embedded picker by #3201
- change: Added ability to group and sort images in embedded picker by #3201
- change: Added ability to save color as image by #3201
- change: Added ability to save color as image by #3211
- change: Added info dialog about translation opportunity
- change: Added info dialog about translation opportunity
- change: Added setting to control dialog windows position
- change: Bump io.github.awxkee:avif-coder from 3.0.0-alpha15 to 3.0.0
- change: Bump libs
- change: Changed image stitching algorithm by #3187
- …and 36 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
T8RIN/ImageToolbox was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 10 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit e73e1461e85157e65b060e865749c9189b43e72a — the exact code this score is about.
- Scored under rubric-2026.10.5 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fe8540b5da9b.