Full Code of T8RIN/ImageResizer for AI

master f34bd3109fe6 cached
3013 files
21.2 MB
5.8M tokens
1 requests
Copy disabled (too large) Download .txt
Showing preview only (24,762K chars total). Download the full file to get everything.
Repository: T8RIN/ImageResizer
Branch: master
Commit: f34bd3109fe6
Files: 3013
Total size: 21.2 MB

Directory structure:
gitextract_9qydnqng/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── android.yml
│       ├── android_foss.yml
│       ├── android_market.yml
│       └── tb_release.yml
├── .gitignore
├── ARCHITECTURE.md
├── ARCHITECTURE_2
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle.kts
│   ├── proguard-rules.pro
│   └── src/
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── t8rin/
│       │   │           └── imagetoolbox/
│       │   │               └── app/
│       │   │                   └── presentation/
│       │   │                       ├── AppActivity.kt
│       │   │                       └── components/
│       │   │                           ├── ImageToolboxApplication.kt
│       │   │                           ├── functions/
│       │   │                           │   ├── AttachLogWriter.kt
│       │   │                           │   ├── InitCollages.kt
│       │   │                           │   ├── InitColorNames.kt
│       │   │                           │   ├── InitNeuralTool.kt
│       │   │                           │   ├── InitOpenCV.kt
│       │   │                           │   ├── InitPdfBox.kt
│       │   │                           │   ├── InitQrScanner.kt
│       │   │                           │   ├── InjectBaseComponent.kt
│       │   │                           │   ├── RegisterSecurityProviders.kt
│       │   │                           │   └── SetupFlags.kt
│       │   │                           └── utils/
│       │   │                               └── GetProcessName.kt
│       │   └── res/
│       │       └── resources.properties
│       └── market/
│           ├── debug/
│           │   └── google-services.json
│           └── release/
│               └── google-services.json
├── benchmark/
│   ├── .gitignore
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           └── java/
│               └── com/
│                   └── t8rin/
│                       └── imagetoolbox/
│                           └── benchmark/
│                               └── BaselineProfileGenerator.kt
├── build-logic/
│   ├── .gitignore
│   ├── convention/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── kotlin/
│   │               ├── ImageToolboxApplicationPlugin.kt
│   │               ├── ImageToolboxHiltPlugin.kt
│   │               ├── ImageToolboxLibraryComposePlugin.kt
│   │               ├── ImageToolboxLibraryFeaturePlugin.kt
│   │               ├── ImageToolboxLibraryPlugin.kt
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           ├── ConfigureCompose.kt
│   │                           ├── ConfigureDetekt.kt
│   │                           ├── ConfigureKotlinAndroid.kt
│   │                           └── ProjectExtensions.kt
│   └── settings.gradle.kts
├── build.gradle.kts
├── compose_compiler_config.conf
├── core/
│   ├── crash/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── crash/
│   │       │                           └── data/
│   │       │                               └── AnalyticsManagerImpl.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── crash/
│   │       │                           ├── di/
│   │       │                           │   └── CrashModule.kt
│   │       │                           └── presentation/
│   │       │                               ├── CrashActivity.kt
│   │       │                               ├── components/
│   │       │                               │   ├── CrashActionButtons.kt
│   │       │                               │   ├── CrashAttentionCard.kt
│   │       │                               │   ├── CrashBottomButtons.kt
│   │       │                               │   ├── CrashHandler.kt
│   │       │                               │   ├── CrashInfoCard.kt
│   │       │                               │   ├── CrashRootContent.kt
│   │       │                               │   └── GlobalExceptionHandler.kt
│   │       │                               └── screenLogic/
│   │       │                                   └── CrashComponent.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── crash/
│   │                                   └── data/
│   │                                       └── AnalyticsManagerImpl.kt
│   ├── data/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── data/
│   │                                   ├── coil/
│   │                                   │   ├── Base64Fetcher.kt
│   │                                   │   ├── CoilLogger.kt
│   │                                   │   ├── MemoryCache.kt
│   │                                   │   ├── PdfDecoder.kt
│   │                                   │   ├── TiffDecoder.kt
│   │                                   │   ├── TimeMeasureInterceptor.kt
│   │                                   │   └── UpscaleSvgDecoder.kt
│   │                                   ├── coroutines/
│   │                                   │   ├── AndroidDispatchersHolder.kt
│   │                                   │   └── AppScopeImpl.kt
│   │                                   ├── di/
│   │                                   │   ├── CoroutinesModule.kt
│   │                                   │   ├── ImageLoaderModule.kt
│   │                                   │   ├── ImageModule.kt
│   │                                   │   ├── JsonModule.kt
│   │                                   │   ├── LocalModule.kt
│   │                                   │   ├── RemoteModule.kt
│   │                                   │   ├── ResourcesModule.kt
│   │                                   │   └── SavingModule.kt
│   │                                   ├── image/
│   │                                   │   ├── AndroidImageCompressor.kt
│   │                                   │   ├── AndroidImageGetter.kt
│   │                                   │   ├── AndroidImagePreviewCreator.kt
│   │                                   │   ├── AndroidImageScaler.kt
│   │                                   │   ├── AndroidImageTransformer.kt
│   │                                   │   ├── AndroidMetadata.kt
│   │                                   │   ├── AndroidShareProvider.kt
│   │                                   │   └── utils/
│   │                                   │       ├── BlendingModeExt.kt
│   │                                   │       ├── CanvasUtils.kt
│   │                                   │       ├── ColorUtils.kt
│   │                                   │       ├── ImageCompressorBackend.kt
│   │                                   │       ├── StaticOptions.kt
│   │                                   │       └── compressor/
│   │                                   │           ├── AvifBackend.kt
│   │                                   │           ├── BmpBackend.kt
│   │                                   │           ├── HeicBackend.kt
│   │                                   │           ├── IcoBackend.kt
│   │                                   │           ├── Jpeg2000Backend.kt
│   │                                   │           ├── JpegliBackend.kt
│   │                                   │           ├── JpgBackend.kt
│   │                                   │           ├── JxlBackend.kt
│   │                                   │           ├── MozJpegBackend.kt
│   │                                   │           ├── OxiPngBackend.kt
│   │                                   │           ├── PngLosslessBackend.kt
│   │                                   │           ├── PngLossyBackend.kt
│   │                                   │           ├── QoiBackend.kt
│   │                                   │           ├── StaticGifBackend.kt
│   │                                   │           ├── TiffBackend.kt
│   │                                   │           └── WebpBackend.kt
│   │                                   ├── json/
│   │                                   │   └── MoshiParser.kt
│   │                                   ├── remote/
│   │                                   │   ├── AndroidDownloadManager.kt
│   │                                   │   └── AndroidRemoteResourcesStore.kt
│   │                                   ├── resource/
│   │                                   │   └── AndroidResourceManager.kt
│   │                                   ├── saving/
│   │                                   │   ├── AndroidFileController.kt
│   │                                   │   ├── AndroidFilenameCreator.kt
│   │                                   │   ├── AndroidKeepAliveService.kt
│   │                                   │   ├── KeepAliveForegroundService.kt
│   │                                   │   ├── SaveException.kt
│   │                                   │   ├── SavingFolder.kt
│   │                                   │   └── io/
│   │                                   │       ├── FileWriteable.kt
│   │                                   │       ├── StreamWriteable.kt
│   │                                   │       └── UriReadable.kt
│   │                                   └── utils/
│   │                                       ├── BitmapUtils.kt
│   │                                       ├── ChecksumUtils.kt
│   │                                       ├── CoilUtils.kt
│   │                                       ├── ContextUtils.kt
│   │                                       ├── CoroutinesUtils.kt
│   │                                       ├── FileUtils.kt
│   │                                       ├── HttpClientUtils.kt
│   │                                       └── WriteableUtils.kt
│   ├── di/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── di/
│   │                                   ├── EntryPointUtils.kt
│   │                                   └── Qualifiers.kt
│   ├── domain/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── kotlin/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── domain/
│   │                                   ├── Constants.kt
│   │                                   ├── coroutines/
│   │                                   │   ├── AppScope.kt
│   │                                   │   └── DispatchersHolder.kt
│   │                                   ├── image/
│   │                                   │   ├── ImageCompressor.kt
│   │                                   │   ├── ImageGetter.kt
│   │                                   │   ├── ImagePreviewCreator.kt
│   │                                   │   ├── ImageScaler.kt
│   │                                   │   ├── ImageShareProvider.kt
│   │                                   │   ├── ImageTransformer.kt
│   │                                   │   ├── Metadata.kt
│   │                                   │   ├── ShareProvider.kt
│   │                                   │   └── model/
│   │                                   │       ├── BlendingMode.kt
│   │                                   │       ├── ImageData.kt
│   │                                   │       ├── ImageFormat.kt
│   │                                   │       ├── ImageFormatGroup.kt
│   │                                   │       ├── ImageFrames.kt
│   │                                   │       ├── ImageInfo.kt
│   │                                   │       ├── ImageScaleMode.kt
│   │                                   │       ├── ImageWithSize.kt
│   │                                   │       ├── MetadataTag.kt
│   │                                   │       ├── Preset.kt
│   │                                   │       ├── Quality.kt
│   │                                   │       ├── ResizeAnchor.kt
│   │                                   │       ├── ResizeType.kt
│   │                                   │       └── TiffCompressionScheme.kt
│   │                                   ├── json/
│   │                                   │   └── JsonParser.kt
│   │                                   ├── model/
│   │                                   │   ├── CipherType.kt
│   │                                   │   ├── ColorModel.kt
│   │                                   │   ├── DomainAspectRatio.kt
│   │                                   │   ├── ExtraDataType.kt
│   │                                   │   ├── FileModel.kt
│   │                                   │   ├── FloatSize.kt
│   │                                   │   ├── HashingType.kt
│   │                                   │   ├── ImageModel.kt
│   │                                   │   ├── IntegerSize.kt
│   │                                   │   ├── MimeType.kt
│   │                                   │   ├── OffsetModel.kt
│   │                                   │   ├── Outline.kt
│   │                                   │   ├── PerformanceClass.kt
│   │                                   │   ├── Position.kt
│   │                                   │   ├── Pt.kt
│   │                                   │   ├── QrType.kt
│   │                                   │   ├── RectModel.kt
│   │                                   │   ├── SecureAlgorithmsMapping.kt
│   │                                   │   ├── SortType.kt
│   │                                   │   ├── SystemBarsVisibility.kt
│   │                                   │   └── VisibilityOwner.kt
│   │                                   ├── remote/
│   │                                   │   ├── AnalyticsManager.kt
│   │                                   │   ├── Cache.kt
│   │                                   │   ├── DownloadManager.kt
│   │                                   │   ├── DownloadProgress.kt
│   │                                   │   ├── RemoteResources.kt
│   │                                   │   └── RemoteResourcesStore.kt
│   │                                   ├── resource/
│   │                                   │   └── ResourceManager.kt
│   │                                   ├── saving/
│   │                                   │   ├── FileController.kt
│   │                                   │   ├── FilenameCreator.kt
│   │                                   │   ├── KeepAliveService.kt
│   │                                   │   ├── ObjectSaver.kt
│   │                                   │   ├── RandomStringGenerator.kt
│   │                                   │   ├── io/
│   │                                   │   │   ├── IoCloseable.kt
│   │                                   │   │   ├── Readable.kt
│   │                                   │   │   └── Writeable.kt
│   │                                   │   └── model/
│   │                                   │       ├── FileSaveTarget.kt
│   │                                   │       ├── FilenamePattern.kt
│   │                                   │       ├── ImageSaveTarget.kt
│   │                                   │       ├── SaveResult.kt
│   │                                   │       └── SaveTarget.kt
│   │                                   ├── transformation/
│   │                                   │   ├── ChainTransformation.kt
│   │                                   │   ├── GenericTransformation.kt
│   │                                   │   └── Transformation.kt
│   │                                   └── utils/
│   │                                       ├── ByteUtils.kt
│   │                                       ├── Delegates.kt
│   │                                       ├── FileMode.kt
│   │                                       ├── Flavor.kt
│   │                                       ├── IntUtils.kt
│   │                                       ├── KotlinUtils.kt
│   │                                       ├── ListUtils.kt
│   │                                       ├── ProgressInputStream.kt
│   │                                       ├── Quad.kt
│   │                                       ├── Rounding.kt
│   │                                       ├── SmartJob.kt
│   │                                       ├── StringUtils.kt
│   │                                       └── TimeUtils.kt
│   ├── filters/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── filters/
│   │                                   ├── data/
│   │                                   │   └── SideFadePaint.kt
│   │                                   ├── domain/
│   │                                   │   ├── FilterParamsInteractor.kt
│   │                                   │   ├── FilterProvider.kt
│   │                                   │   └── model/
│   │                                   │       ├── Filter.kt
│   │                                   │       ├── FilterParam.kt
│   │                                   │       ├── FilterUtils.kt
│   │                                   │       ├── FilterValueWrapper.kt
│   │                                   │       ├── TemplateFilter.kt
│   │                                   │       ├── enums/
│   │                                   │       │   ├── BlurEdgeMode.kt
│   │                                   │       │   ├── ColorMapType.kt
│   │                                   │       │   ├── FadeSide.kt
│   │                                   │       │   ├── MirrorSide.kt
│   │                                   │       │   ├── PaletteTransferSpace.kt
│   │                                   │       │   ├── PolarCoordinatesType.kt
│   │                                   │       │   ├── PopArtBlendingMode.kt
│   │                                   │       │   ├── SpotHealMode.kt
│   │                                   │       │   └── TransferFunc.kt
│   │                                   │       └── params/
│   │                                   │           ├── ArcParams.kt
│   │                                   │           ├── AsciiParams.kt
│   │                                   │           ├── BilaterialBlurParams.kt
│   │                                   │           ├── BloomParams.kt
│   │                                   │           ├── ChannelMixParams.kt
│   │                                   │           ├── ClaheParams.kt
│   │                                   │           ├── CropOrPerspectiveParams.kt
│   │                                   │           ├── EnhancedZoomBlurParams.kt
│   │                                   │           ├── GlitchParams.kt
│   │                                   │           ├── KaleidoscopeParams.kt
│   │                                   │           ├── LinearGaussianParams.kt
│   │                                   │           ├── LinearTiltShiftParams.kt
│   │                                   │           ├── PinchParams.kt
│   │                                   │           ├── RadialTiltShiftParams.kt
│   │                                   │           ├── RubberStampParams.kt
│   │                                   │           ├── SideFadeParams.kt
│   │                                   │           ├── SmearParams.kt
│   │                                   │           ├── SparkleParams.kt
│   │                                   │           ├── ToneCurvesParams.kt
│   │                                   │           ├── VoronoiCrystallizeParams.kt
│   │                                   │           └── WaterParams.kt
│   │                                   └── presentation/
│   │                                       ├── model/
│   │                                       │   ├── UiAcesFilmicToneMappingFilter.kt
│   │                                       │   ├── UiAcesHillToneMappingFilter.kt
│   │                                       │   ├── UiAchromatomalyFilter.kt
│   │                                       │   ├── UiAchromatopsiaFilter.kt
│   │                                       │   ├── UiAldridgeFilter.kt
│   │                                       │   ├── UiAmatorkaFilter.kt
│   │                                       │   ├── UiAnaglyphFilter.kt
│   │                                       │   ├── UiAnisotropicDiffusionFilter.kt
│   │                                       │   ├── UiArcFilter.kt
│   │                                       │   ├── UiAsciiFilter.kt
│   │                                       │   ├── UiAtkinsonDitheringFilter.kt
│   │                                       │   ├── UiAutoCropFilter.kt
│   │                                       │   ├── UiAutoPerspectiveFilter.kt
│   │                                       │   ├── UiAutoRemoveRedEyesFilter.kt
│   │                                       │   ├── UiAutumnTonesFilter.kt
│   │                                       │   ├── UiAverageDistanceFilter.kt
│   │                                       │   ├── UiBayerEightDitheringFilter.kt
│   │                                       │   ├── UiBayerFourDitheringFilter.kt
│   │                                       │   ├── UiBayerThreeDitheringFilter.kt
│   │                                       │   ├── UiBayerTwoDitheringFilter.kt
│   │                                       │   ├── UiBilaterialBlurFilter.kt
│   │                                       │   ├── UiBlackAndWhiteFilter.kt
│   │                                       │   ├── UiBlackHatFilter.kt
│   │                                       │   ├── UiBleachBypassFilter.kt
│   │                                       │   ├── UiBlockGlitchFilter.kt
│   │                                       │   ├── UiBloomFilter.kt
│   │                                       │   ├── UiBokehFilter.kt
│   │                                       │   ├── UiBorderFrameFilter.kt
│   │                                       │   ├── UiBoxBlurFilter.kt
│   │                                       │   ├── UiBrightnessFilter.kt
│   │                                       │   ├── UiBrowniFilter.kt
│   │                                       │   ├── UiBulgeDistortionFilter.kt
│   │                                       │   ├── UiBurkesDitheringFilter.kt
│   │                                       │   ├── UiCGAColorSpaceFilter.kt
│   │                                       │   ├── UiCandlelightFilter.kt
│   │                                       │   ├── UiCannyFilter.kt
│   │                                       │   ├── UiCaramelDarknessFilter.kt
│   │                                       │   ├── UiCelluloidFilter.kt
│   │                                       │   ├── UiChannelMixFilter.kt
│   │                                       │   ├── UiCircleBlurFilter.kt
│   │                                       │   ├── UiCirclePixelationFilter.kt
│   │                                       │   ├── UiClaheFilter.kt
│   │                                       │   ├── UiClaheHSLFilter.kt
│   │                                       │   ├── UiClaheHSVFilter.kt
│   │                                       │   ├── UiClaheJzazbzFilter.kt
│   │                                       │   ├── UiClaheLABFilter.kt
│   │                                       │   ├── UiClaheLUVFilter.kt
│   │                                       │   ├── UiClaheOklabFilter.kt
│   │                                       │   ├── UiClaheOklchFilter.kt
│   │                                       │   ├── UiClosingFilter.kt
│   │                                       │   ├── UiClustered2x2DitheringFilter.kt
│   │                                       │   ├── UiClustered4x4DitheringFilter.kt
│   │                                       │   ├── UiClustered8x8DitheringFilter.kt
│   │                                       │   ├── UiCodaChromeFilter.kt
│   │                                       │   ├── UiCoffeeFilter.kt
│   │                                       │   ├── UiColorAnomalyFilter.kt
│   │                                       │   ├── UiColorBalanceFilter.kt
│   │                                       │   ├── UiColorExplosionFilter.kt
│   │                                       │   ├── UiColorHalftoneFilter.kt
│   │                                       │   ├── UiColorMapFilter.kt
│   │                                       │   ├── UiColorMatrix3x3Filter.kt
│   │                                       │   ├── UiColorMatrix4x4Filter.kt
│   │                                       │   ├── UiColorOverlayFilter.kt
│   │                                       │   ├── UiColorPosterFilter.kt
│   │                                       │   ├── UiColorfulSwirlFilter.kt
│   │                                       │   ├── UiContourFilter.kt
│   │                                       │   ├── UiContrastFilter.kt
│   │                                       │   ├── UiConvexFilter.kt
│   │                                       │   ├── UiConvolution3x3Filter.kt
│   │                                       │   ├── UiCoolFilter.kt
│   │                                       │   ├── UiCopyMoveDetectionFilter.kt
│   │                                       │   ├── UiCropOrPerspectiveFilter.kt
│   │                                       │   ├── UiCropToContentFilter.kt
│   │                                       │   ├── UiCrossBlurFilter.kt
│   │                                       │   ├── UiCrossPixelizationFilter.kt
│   │                                       │   ├── UiCrosshatchFilter.kt
│   │                                       │   ├── UiCrtCurvatureFilter.kt
│   │                                       │   ├── UiCrystallizeFilter.kt
│   │                                       │   ├── UiCubeLutFilter.kt
│   │                                       │   ├── UiCyberpunkFilter.kt
│   │                                       │   ├── UiDeepPurpleFilter.kt
│   │                                       │   ├── UiDehazeFilter.kt
│   │                                       │   ├── UiDeskewFilter.kt
│   │                                       │   ├── UiDespeckleFilter.kt
│   │                                       │   ├── UiDeutaromalyFilter.kt
│   │                                       │   ├── UiDeutaronotopiaFilter.kt
│   │                                       │   ├── UiDiamondPixelationFilter.kt
│   │                                       │   ├── UiDiffuseFilter.kt
│   │                                       │   ├── UiDigitalCodeFilter.kt
│   │                                       │   ├── UiDilationFilter.kt
│   │                                       │   ├── UiDoGFilter.kt
│   │                                       │   ├── UiDragoFilter.kt
│   │                                       │   ├── UiDropBluesFilter.kt
│   │                                       │   ├── UiEdgyAmberFilter.kt
│   │                                       │   ├── UiElectricGradientFilter.kt
│   │                                       │   ├── UiEmbossFilter.kt
│   │                                       │   ├── UiEnhancedCirclePixelationFilter.kt
│   │                                       │   ├── UiEnhancedDiamondPixelationFilter.kt
│   │                                       │   ├── UiEnhancedGlitchFilter.kt
│   │                                       │   ├── UiEnhancedOilFilter.kt
│   │                                       │   ├── UiEnhancedPixelationFilter.kt
│   │                                       │   ├── UiEnhancedZoomBlurFilter.kt
│   │                                       │   ├── UiEqualizeFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveHSLFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveHSVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveLABFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveLUVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramFilter.kt
│   │                                       │   ├── UiEqualizeHistogramHSVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramPixelationFilter.kt
│   │                                       │   ├── UiErodeFilter.kt
│   │                                       │   ├── UiErrorLevelAnalysisFilter.kt
│   │                                       │   ├── UiExposureFilter.kt
│   │                                       │   ├── UiFallColorsFilter.kt
│   │                                       │   ├── UiFalseColorFilter.kt
│   │                                       │   ├── UiFalseFloydSteinbergDitheringFilter.kt
│   │                                       │   ├── UiFantasyLandscapeFilter.kt
│   │                                       │   ├── UiFastBilaterialBlurFilter.kt
│   │                                       │   ├── UiFastBlurFilter.kt
│   │                                       │   ├── UiFastGaussianBlur2DFilter.kt
│   │                                       │   ├── UiFastGaussianBlur3DFilter.kt
│   │                                       │   ├── UiFastGaussianBlur4DFilter.kt
│   │                                       │   ├── UiFilmStock50Filter.kt
│   │                                       │   ├── UiFilter.kt
│   │                                       │   ├── UiFloydSteinbergDitheringFilter.kt
│   │                                       │   ├── UiFoggyNightFilter.kt
│   │                                       │   ├── UiFractalGlassFilter.kt
│   │                                       │   ├── UiFuturisticGradientFilter.kt
│   │                                       │   ├── UiGammaFilter.kt
│   │                                       │   ├── UiGaussianBlurFilter.kt
│   │                                       │   ├── UiGaussianBoxBlurFilter.kt
│   │                                       │   ├── UiGlassSphereRefractionFilter.kt
│   │                                       │   ├── UiGlitchFilter.kt
│   │                                       │   ├── UiGlitchVariantFilter.kt
│   │                                       │   ├── UiGlowFilter.kt
│   │                                       │   ├── UiGoldenForestFilter.kt
│   │                                       │   ├── UiGoldenHourFilter.kt
│   │                                       │   ├── UiGothamFilter.kt
│   │                                       │   ├── UiGrainFilter.kt
│   │                                       │   ├── UiGrayscaleFilter.kt
│   │                                       │   ├── UiGreenSunFilter.kt
│   │                                       │   ├── UiGreenishFilter.kt
│   │                                       │   ├── UiHDRFilter.kt
│   │                                       │   ├── UiHableFilmicToneMappingFilter.kt
│   │                                       │   ├── UiHalftoneFilter.kt
│   │                                       │   ├── UiHazeFilter.kt
│   │                                       │   ├── UiHejlBurgessToneMappingFilter.kt
│   │                                       │   ├── UiHighlightsAndShadowsFilter.kt
│   │                                       │   ├── UiHorizontalWindStaggerFilter.kt
│   │                                       │   ├── UiHotSummerFilter.kt
│   │                                       │   ├── UiHueFilter.kt
│   │                                       │   ├── UiJarvisJudiceNinkeDitheringFilter.kt
│   │                                       │   ├── UiKaleidoscopeFilter.kt
│   │                                       │   ├── UiKodakFilter.kt
│   │                                       │   ├── UiKuwaharaFilter.kt
│   │                                       │   ├── UiLUT512x512Filter.kt
│   │                                       │   ├── UiLaplacianFilter.kt
│   │                                       │   ├── UiLaplacianSimpleFilter.kt
│   │                                       │   ├── UiLavenderDreamFilter.kt
│   │                                       │   ├── UiLeftToRightDitheringFilter.kt
│   │                                       │   ├── UiLemonadeLightFilter.kt
│   │                                       │   ├── UiLensCorrectionFilter.kt
│   │                                       │   ├── UiLinearBoxBlurFilter.kt
│   │                                       │   ├── UiLinearFastGaussianBlurFilter.kt
│   │                                       │   ├── UiLinearFastGaussianBlurNextFilter.kt
│   │                                       │   ├── UiLinearGaussianBlurFilter.kt
│   │                                       │   ├── UiLinearGaussianBoxBlurFilter.kt
│   │                                       │   ├── UiLinearStackBlurFilter.kt
│   │                                       │   ├── UiLinearTentBlurFilter.kt
│   │                                       │   ├── UiLinearTiltShiftFilter.kt
│   │                                       │   ├── UiLogarithmicToneMappingFilter.kt
│   │                                       │   ├── UiLookupFilter.kt
│   │                                       │   ├── UiLowPolyFilter.kt
│   │                                       │   ├── UiLuminanceGradientFilter.kt
│   │                                       │   ├── UiMarbleFilter.kt
│   │                                       │   ├── UiMedianBlurFilter.kt
│   │                                       │   ├── UiMicroMacroPixelizationFilter.kt
│   │                                       │   ├── UiMirrorFilter.kt
│   │                                       │   ├── UiMissEtikateFilter.kt
│   │                                       │   ├── UiMobiusFilter.kt
│   │                                       │   ├── UiMoireFilter.kt
│   │                                       │   ├── UiMonochromeFilter.kt
│   │                                       │   ├── UiMorphologicalGradientFilter.kt
│   │                                       │   ├── UiMotionBlurFilter.kt
│   │                                       │   ├── UiNativeStackBlurFilter.kt
│   │                                       │   ├── UiNegativeFilter.kt
│   │                                       │   ├── UiNeonFilter.kt
│   │                                       │   ├── UiNightMagicFilter.kt
│   │                                       │   ├── UiNightVisionFilter.kt
│   │                                       │   ├── UiNoiseFilter.kt
│   │                                       │   ├── UiNonMaximumSuppressionFilter.kt
│   │                                       │   ├── UiNucleusPixelizationFilter.kt
│   │                                       │   ├── UiOffsetFilter.kt
│   │                                       │   ├── UiOilFilter.kt
│   │                                       │   ├── UiOldTvFilter.kt
│   │                                       │   ├── UiOpacityFilter.kt
│   │                                       │   ├── UiOpeningFilter.kt
│   │                                       │   ├── UiOrangeHazeFilter.kt
│   │                                       │   ├── UiOrbitalPixelizationFilter.kt
│   │                                       │   ├── UiPaletteTransferFilter.kt
│   │                                       │   ├── UiPaletteTransferVariantFilter.kt
│   │                                       │   ├── UiPastelFilter.kt
│   │                                       │   ├── UiPerlinDistortionFilter.kt
│   │                                       │   ├── UiPinchFilter.kt
│   │                                       │   ├── UiPinkDreamFilter.kt
│   │                                       │   ├── UiPixelMeltFilter.kt
│   │                                       │   ├── UiPixelationFilter.kt
│   │                                       │   ├── UiPointillizeFilter.kt
│   │                                       │   ├── UiPoissonBlurFilter.kt
│   │                                       │   ├── UiPolarCoordinatesFilter.kt
│   │                                       │   ├── UiPolaroidFilter.kt
│   │                                       │   ├── UiPolkaDotFilter.kt
│   │                                       │   ├── UiPopArtFilter.kt
│   │                                       │   ├── UiPosterizeFilter.kt
│   │                                       │   ├── UiProtanopiaFilter.kt
│   │                                       │   ├── UiProtonomalyFilter.kt
│   │                                       │   ├── UiPulseGridPixelizationFilter.kt
│   │                                       │   ├── UiPurpleMistFilter.kt
│   │                                       │   ├── UiQuantizierFilter.kt
│   │                                       │   ├── UiRGBFilter.kt
│   │                                       │   ├── UiRadialTiltShiftFilter.kt
│   │                                       │   ├── UiRadialWeavePixelizationFilter.kt
│   │                                       │   ├── UiRainbowWorldFilter.kt
│   │                                       │   ├── UiRandomDitheringFilter.kt
│   │                                       │   ├── UiRedSwirlFilter.kt
│   │                                       │   ├── UiReduceNoiseFilter.kt
│   │                                       │   ├── UiRemoveColorFilter.kt
│   │                                       │   ├── UiReplaceColorFilter.kt
│   │                                       │   ├── UiRetroYellowFilter.kt
│   │                                       │   ├── UiRingBlurFilter.kt
│   │                                       │   ├── UiRubberStampFilter.kt
│   │                                       │   ├── UiSandPaintingFilter.kt
│   │                                       │   ├── UiSaturationFilter.kt
│   │                                       │   ├── UiSeamCarvingFilter.kt
│   │                                       │   ├── UiSepiaFilter.kt
│   │                                       │   ├── UiSharpenFilter.kt
│   │                                       │   ├── UiShuffleBlurFilter.kt
│   │                                       │   ├── UiSideFadeFilter.kt
│   │                                       │   ├── UiSierraDitheringFilter.kt
│   │                                       │   ├── UiSierraLiteDitheringFilter.kt
│   │                                       │   ├── UiSimpleOldTvFilter.kt
│   │                                       │   ├── UiSimpleSketchFilter.kt
│   │                                       │   ├── UiSimpleSolarizeFilter.kt
│   │                                       │   ├── UiSimpleThresholdDitheringFilter.kt
│   │                                       │   ├── UiSimpleWeavePixelationFilter.kt
│   │                                       │   ├── UiSketchFilter.kt
│   │                                       │   ├── UiSmearFilter.kt
│   │                                       │   ├── UiSmoothToonFilter.kt
│   │                                       │   ├── UiSobelEdgeDetectionFilter.kt
│   │                                       │   ├── UiSobelSimpleFilter.kt
│   │                                       │   ├── UiSoftEleganceFilter.kt
│   │                                       │   ├── UiSoftEleganceVariantFilter.kt
│   │                                       │   ├── UiSoftSpringLightFilter.kt
│   │                                       │   ├── UiSolarizeFilter.kt
│   │                                       │   ├── UiSpacePortalFilter.kt
│   │                                       │   ├── UiSparkleFilter.kt
│   │                                       │   ├── UiSpectralFireFilter.kt
│   │                                       │   ├── UiSphereLensDistortionFilter.kt
│   │                                       │   ├── UiSphereRefractionFilter.kt
│   │                                       │   ├── UiStackBlurFilter.kt
│   │                                       │   ├── UiStaggeredPixelizationFilter.kt
│   │                                       │   ├── UiStarBlurFilter.kt
│   │                                       │   ├── UiStrokePixelationFilter.kt
│   │                                       │   ├── UiStuckiDitheringFilter.kt
│   │                                       │   ├── UiSunriseFilter.kt
│   │                                       │   ├── UiSwirlDistortionFilter.kt
│   │                                       │   ├── UiTentBlurFilter.kt
│   │                                       │   ├── UiThresholdFilter.kt
│   │                                       │   ├── UiToneCurvesFilter.kt
│   │                                       │   ├── UiToonFilter.kt
│   │                                       │   ├── UiTopHatFilter.kt
│   │                                       │   ├── UiTriToneFilter.kt
│   │                                       │   ├── UiTritanopiaFilter.kt
│   │                                       │   ├── UiTritonomalyFilter.kt
│   │                                       │   ├── UiTwirlFilter.kt
│   │                                       │   ├── UiTwoRowSierraDitheringFilter.kt
│   │                                       │   ├── UiUchimuraFilter.kt
│   │                                       │   ├── UiUnsharpFilter.kt
│   │                                       │   ├── UiVHSFilter.kt
│   │                                       │   ├── UiVibranceFilter.kt
│   │                                       │   ├── UiVignetteFilter.kt
│   │                                       │   ├── UiVintageFilter.kt
│   │                                       │   ├── UiVoronoiCrystallizeFilter.kt
│   │                                       │   ├── UiVortexPixelizationFilter.kt
│   │                                       │   ├── UiWarmFilter.kt
│   │                                       │   ├── UiWaterEffectFilter.kt
│   │                                       │   ├── UiWeakPixelFilter.kt
│   │                                       │   ├── UiWeaveFilter.kt
│   │                                       │   ├── UiWhiteBalanceFilter.kt
│   │                                       │   ├── UiYililomaDitheringFilter.kt
│   │                                       │   └── UiZoomBlurFilter.kt
│   │                                       ├── utils/
│   │                                       │   ├── CollectAsUiState.kt
│   │                                       │   ├── LamaLoader.kt
│   │                                       │   └── Mappings.kt
│   │                                       └── widget/
│   │                                           ├── AddFilterButton.kt
│   │                                           ├── CalculateBrightnessEstimate.kt
│   │                                           ├── CubeLutDownloadDialog.kt
│   │                                           ├── FilterItem.kt
│   │                                           ├── FilterItemContent.kt
│   │                                           ├── FilterPreviewSheet.kt
│   │                                           ├── FilterReorderSheet.kt
│   │                                           ├── FilterSelectionCubeLutBottomContent.kt
│   │                                           ├── FilterSelectionItem.kt
│   │                                           ├── FilterTemplateAddingGroup.kt
│   │                                           ├── FilterTemplateCreationSheet.kt
│   │                                           ├── FilterTemplateInfoSheet.kt
│   │                                           ├── TemplateFilterSelectionItem.kt
│   │                                           ├── addFilters/
│   │                                           │   ├── AddFiltersSheet.kt
│   │                                           │   ├── AddFiltersSheetComponent.kt
│   │                                           │   ├── FavoritesContent.kt
│   │                                           │   ├── OtherContent.kt
│   │                                           │   └── TemplatesContent.kt
│   │                                           └── filterItem/
│   │                                               ├── ArcParamsItem.kt
│   │                                               ├── AsciiParamsItem.kt
│   │                                               ├── BilaterialBlurParamsItem.kt
│   │                                               ├── BloomParamsItem.kt
│   │                                               ├── BooleanItem.kt
│   │                                               ├── ChannelMixParamsItem.kt
│   │                                               ├── ClaheParamsItem.kt
│   │                                               ├── CropOrPerspectiveParamsItem.kt
│   │                                               ├── EdgeModeSelector.kt
│   │                                               ├── EnhancedZoomBlurParamsItem.kt
│   │                                               ├── FilterValueWrapperItem.kt
│   │                                               ├── FloatArrayItem.kt
│   │                                               ├── FloatItem.kt
│   │                                               ├── GlitchParamsItem.kt
│   │                                               ├── IntegerSizeParamsItem.kt
│   │                                               ├── KaleidoscopeParamsItem.kt
│   │                                               ├── LinearGaussianParamsItem.kt
│   │                                               ├── LinearTiltShiftParamsItem.kt
│   │                                               ├── MirrorSideSelector.kt
│   │                                               ├── PairItem.kt
│   │                                               ├── PinchParamsItem.kt
│   │                                               ├── QuadItem.kt
│   │                                               ├── RadialTiltShiftParamsItem.kt
│   │                                               ├── RubberStampParamsItem.kt
│   │                                               ├── SideFadeRelativeItem.kt
│   │                                               ├── SmearParamsItem.kt
│   │                                               ├── SparkleParamsItem.kt
│   │                                               ├── ToneCurvesParamsItem.kt
│   │                                               ├── TransferFuncSelector.kt
│   │                                               ├── TripleItem.kt
│   │                                               ├── VoronoiCrystallizeParamsItem.kt
│   │                                               ├── WaterParamsItem.kt
│   │                                               ├── pair_components/
│   │                                               │   ├── ColorModelPairItem.kt
│   │                                               │   ├── FloatColorModelPairItem.kt
│   │                                               │   ├── FloatFileModelPairItem.kt
│   │                                               │   ├── FloatImageModelPairItem.kt
│   │                                               │   ├── NumberBlurEdgeModePairItem.kt
│   │                                               │   ├── NumberBooleanPairItem.kt
│   │                                               │   ├── NumberMirrorSidePairItem.kt
│   │                                               │   ├── NumberPairItem.kt
│   │                                               │   └── NumberTransferFuncPairItem.kt
│   │                                               ├── quad_components/
│   │                                               │   ├── NumberColorModelQuadItem.kt
│   │                                               │   └── NumberQuadItem.kt
│   │                                               └── triple_components/
│   │                                                   ├── ColorModelTripleItem.kt
│   │                                                   ├── FloatPaletteImageModelTripleItem.kt
│   │                                                   ├── NumberColorModelColorModelTripleItem.kt
│   │                                                   ├── NumberColorModelPopArtTripleItem.kt
│   │                                                   ├── NumberNumberBlurEdgeModeTripleItem.kt
│   │                                                   ├── NumberNumberColorModelTripleItem.kt
│   │                                                   ├── NumberTransferFuncBlurEdgeModeTripleItem.kt
│   │                                                   └── NumberTripleItem.kt
│   ├── ksp/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── core/
│   │           │                   └── ksp/
│   │           │                       ├── annotations/
│   │           │                       │   ├── FilterInject.kt
│   │           │                       │   └── UiFilterInject.kt
│   │           │                       └── processor/
│   │           │                           ├── FilterInjectProcessor.kt
│   │           │                           └── UiFilterInjectProcessor.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.google.devtools.ksp.processing.SymbolProcessorProvider
│   ├── resources/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── debug/
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   ├── ic_launcher_foreground.xml
│   │       │       │   ├── ic_logo_animated.xml
│   │       │       │   └── ic_notification_icon.xml
│   │       │       ├── drawable-v31/
│   │       │       │   └── ic_logo_animated.xml
│   │       │       ├── mipmap-anydpi-v26/
│   │       │       │   ├── ic_launcher.xml
│   │       │       │   └── ic_launcher_round.xml
│   │       │       ├── values/
│   │       │       │   ├── colors.xml
│   │       │       │   └── ic_launcher_background.xml
│   │       │       ├── values-night/
│   │       │       │   └── colors.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── colors.xml
│   │       │       └── values-v31/
│   │       │           └── colors.xml
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── core/
│   │           │                   └── resources/
│   │           │                       ├── emoji/
│   │           │                       │   ├── Emoji.kt
│   │           │                       │   └── EmojiData.kt
│   │           │                       ├── icons/
│   │           │                       │   ├── AddPhotoAlt.kt
│   │           │                       │   ├── AddSticky.kt
│   │           │                       │   ├── Analogous.kt
│   │           │                       │   ├── AnalogousComplementary.kt
│   │           │                       │   ├── Analytics.kt
│   │           │                       │   ├── Animation.kt
│   │           │                       │   ├── Apng.kt
│   │           │                       │   ├── ApngBox.kt
│   │           │                       │   ├── AppShortcut.kt
│   │           │                       │   ├── Apps.kt
│   │           │                       │   ├── Archive.kt
│   │           │                       │   ├── AreaChart.kt
│   │           │                       │   ├── ArtTrack.kt
│   │           │                       │   ├── Ascii.kt
│   │           │                       │   ├── AutoDelete.kt
│   │           │                       │   ├── BackgroundColor.kt
│   │           │                       │   ├── BarcodeScanner.kt
│   │           │                       │   ├── Base64.kt
│   │           │                       │   ├── BatchPrediction.kt
│   │           │                       │   ├── Beta.kt
│   │           │                       │   ├── Bitcoin.kt
│   │           │                       │   ├── Block.kt
│   │           │                       │   ├── BlurCircular.kt
│   │           │                       │   ├── BoldLine.kt
│   │           │                       │   ├── Bolt.kt
│   │           │                       │   ├── BookmarkOff.kt
│   │           │                       │   ├── BookmarkRemove.kt
│   │           │                       │   ├── Boosty.kt
│   │           │                       │   ├── BorderColor.kt
│   │           │                       │   ├── BrokenImageAlt.kt
│   │           │                       │   ├── BrushColor.kt
│   │           │                       │   ├── BubbleDelete.kt
│   │           │                       │   ├── Build.kt
│   │           │                       │   ├── CancelSmall.kt
│   │           │                       │   ├── ClipboardFile.kt
│   │           │                       │   ├── Collage.kt
│   │           │                       │   ├── Communication.kt
│   │           │                       │   ├── Compare.kt
│   │           │                       │   ├── CompareArrows.kt
│   │           │                       │   ├── Complementary.kt
│   │           │                       │   ├── ContractEdit.kt
│   │           │                       │   ├── ContractImage.kt
│   │           │                       │   ├── Cool.kt
│   │           │                       │   ├── Counter.kt
│   │           │                       │   ├── Crashlytics.kt
│   │           │                       │   ├── CropSmall.kt
│   │           │                       │   ├── Cube.kt
│   │           │                       │   ├── Curve.kt
│   │           │                       │   ├── DashedLine.kt
│   │           │                       │   ├── Database.kt
│   │           │                       │   ├── Delete.kt
│   │           │                       │   ├── DeleteSweep.kt
│   │           │                       │   ├── Deselect.kt
│   │           │                       │   ├── DesignServices.kt
│   │           │                       │   ├── DocumentScanner.kt
│   │           │                       │   ├── DotDashedLine.kt
│   │           │                       │   ├── Dots.kt
│   │           │                       │   ├── DownloadFile.kt
│   │           │                       │   ├── Draw.kt
│   │           │                       │   ├── EditAlt.kt
│   │           │                       │   ├── EmojiMultiple.kt
│   │           │                       │   ├── EmojiSticky.kt
│   │           │                       │   ├── Encrypted.kt
│   │           │                       │   ├── Eraser.kt
│   │           │                       │   ├── Exercise.kt
│   │           │                       │   ├── Exif.kt
│   │           │                       │   ├── ExifEdit.kt
│   │           │                       │   ├── Eyedropper.kt
│   │           │                       │   ├── FabCorner.kt
│   │           │                       │   ├── FileExport.kt
│   │           │                       │   ├── FileImage.kt
│   │           │                       │   ├── FileImport.kt
│   │           │                       │   ├── FileReplace.kt
│   │           │                       │   ├── FindInPage.kt
│   │           │                       │   ├── FingerprintOff.kt
│   │           │                       │   ├── Firebase.kt
│   │           │                       │   ├── Flip.kt
│   │           │                       │   ├── FlipVertical.kt
│   │           │                       │   ├── FloatingActionButton.kt
│   │           │                       │   ├── FloodFill.kt
│   │           │                       │   ├── FolderCompare.kt
│   │           │                       │   ├── FolderImage.kt
│   │           │                       │   ├── FolderImageAlt.kt
│   │           │                       │   ├── FolderMatch.kt
│   │           │                       │   ├── FolderOpened.kt
│   │           │                       │   ├── FontFamily.kt
│   │           │                       │   ├── FormatPaintVariant.kt
│   │           │                       │   ├── Forum.kt
│   │           │                       │   ├── FreeArrow.kt
│   │           │                       │   ├── FreeDoubleArrow.kt
│   │           │                       │   ├── FreeDraw.kt
│   │           │                       │   ├── Github.kt
│   │           │                       │   ├── Glyphs.kt
│   │           │                       │   ├── GooglePlay.kt
│   │           │                       │   ├── Gradient.kt
│   │           │                       │   ├── Group.kt
│   │           │                       │   ├── HandshakeAlt.kt
│   │           │                       │   ├── HardDrive.kt
│   │           │                       │   ├── HighRes.kt
│   │           │                       │   ├── Highlighter.kt
│   │           │                       │   ├── HistoryCreate.kt
│   │           │                       │   ├── HyperOS.kt
│   │           │                       │   ├── IOS.kt
│   │           │                       │   ├── ImageCombine.kt
│   │           │                       │   ├── ImageConvert.kt
│   │           │                       │   ├── ImageDownload.kt
│   │           │                       │   ├── ImageEdit.kt
│   │           │                       │   ├── ImageEmbedded.kt
│   │           │                       │   ├── ImageLimit.kt
│   │           │                       │   ├── ImageOverlay.kt
│   │           │                       │   ├── ImageReset.kt
│   │           │                       │   ├── ImageResize.kt
│   │           │                       │   ├── ImageSaw.kt
│   │           │                       │   ├── ImageSearch.kt
│   │           │                       │   ├── ImageSticky.kt
│   │           │                       │   ├── ImageSync.kt
│   │           │                       │   ├── ImageText.kt
│   │           │                       │   ├── ImageToText.kt
│   │           │                       │   ├── ImageToolboxBroken.kt
│   │           │                       │   ├── ImageTooltip.kt
│   │           │                       │   ├── ImageWeight.kt
│   │           │                       │   ├── ImagesMode.kt
│   │           │                       │   ├── ImagesearchRoller.kt
│   │           │                       │   ├── Interface.kt
│   │           │                       │   ├── Jpg.kt
│   │           │                       │   ├── Jxl.kt
│   │           │                       │   ├── KeyVariant.kt
│   │           │                       │   ├── KeyVertical.kt
│   │           │                       │   ├── LabelPercent.kt
│   │           │                       │   ├── Landscape.kt
│   │           │                       │   ├── Landscape2.kt
│   │           │                       │   ├── Lasso.kt
│   │           │                       │   ├── Latitude.kt
│   │           │                       │   ├── Layers.kt
│   │           │                       │   ├── LayersSearchOutline.kt
│   │           │                       │   ├── LetterO.kt
│   │           │                       │   ├── LetterS.kt
│   │           │                       │   ├── License.kt
│   │           │                       │   ├── Line.kt
│   │           │                       │   ├── LineArrow.kt
│   │           │                       │   ├── LineDoubleArrow.kt
│   │           │                       │   ├── Longitude.kt
│   │           │                       │   ├── Manga.kt
│   │           │                       │   ├── MaterialDesign.kt
│   │           │                       │   ├── MeshDownload.kt
│   │           │                       │   ├── MeshGradient.kt
│   │           │                       │   ├── MiniEdit.kt
│   │           │                       │   ├── MiniEditLarge.kt
│   │           │                       │   ├── Mobile.kt
│   │           │                       │   ├── MobileArrowDown.kt
│   │           │                       │   ├── MobileArrowUpRight.kt
│   │           │                       │   ├── MobileCast.kt
│   │           │                       │   ├── MobileLandscape.kt
│   │           │                       │   ├── MobileLayout.kt
│   │           │                       │   ├── MobileRotateLock.kt
│   │           │                       │   ├── MobileShare.kt
│   │           │                       │   ├── MobileVibrate.kt
│   │           │                       │   ├── Mop.kt
│   │           │                       │   ├── MultipleImageEdit.kt
│   │           │                       │   ├── MusicAdd.kt
│   │           │                       │   ├── NeonBrush.kt
│   │           │                       │   ├── Neurology.kt
│   │           │                       │   ├── NextPlan.kt
│   │           │                       │   ├── Noise.kt
│   │           │                       │   ├── NoiseAlt.kt
│   │           │                       │   ├── Numeric.kt
│   │           │                       │   ├── OverlayAbove.kt
│   │           │                       │   ├── PaletteBox.kt
│   │           │                       │   ├── PaletteSwatch.kt
│   │           │                       │   ├── Panorama.kt
│   │           │                       │   ├── Pdf.kt
│   │           │                       │   ├── Pen.kt
│   │           │                       │   ├── Perspective.kt
│   │           │                       │   ├── PhotoPicker.kt
│   │           │                       │   ├── PhotoPickerMobile.kt
│   │           │                       │   ├── PhotoPrints.kt
│   │           │                       │   ├── PhotoSizeSelectSmall.kt
│   │           │                       │   ├── PictureInPictureCenter.kt
│   │           │                       │   ├── Png.kt
│   │           │                       │   ├── Polygon.kt
│   │           │                       │   ├── Prefix.kt
│   │           │                       │   ├── Preview.kt
│   │           │                       │   ├── Print.kt
│   │           │                       │   ├── Psychology.kt
│   │           │                       │   ├── Puzzle.kt
│   │           │                       │   ├── QrCode.kt
│   │           │                       │   ├── QualityHigh.kt
│   │           │                       │   ├── QualityLow.kt
│   │           │                       │   ├── QualityMedium.kt
│   │           │                       │   ├── Rabbit.kt
│   │           │                       │   ├── Resize.kt
│   │           │                       │   ├── ResponsiveLayout.kt
│   │           │                       │   ├── Robot.kt
│   │           │                       │   ├── RobotExcited.kt
│   │           │                       │   ├── Rotate90Cw.kt
│   │           │                       │   ├── Routine.kt
│   │           │                       │   ├── SamsungLetter.kt
│   │           │                       │   ├── SaveConfirm.kt
│   │           │                       │   ├── ScaleUnbalanced.kt
│   │           │                       │   ├── Scanner.kt
│   │           │                       │   ├── Scissors.kt
│   │           │                       │   ├── ScissorsSmall.kt
│   │           │                       │   ├── SelectAll.kt
│   │           │                       │   ├── SelectInverse.kt
│   │           │                       │   ├── ServiceToolbox.kt
│   │           │                       │   ├── SettingsTimelapse.kt
│   │           │                       │   ├── Shadow.kt
│   │           │                       │   ├── ShareOff.kt
│   │           │                       │   ├── ShieldKey.kt
│   │           │                       │   ├── ShieldLock.kt
│   │           │                       │   ├── ShieldOpen.kt
│   │           │                       │   ├── ShineDiamond.kt
│   │           │                       │   ├── Signature.kt
│   │           │                       │   ├── SkewMore.kt
│   │           │                       │   ├── Slider.kt
│   │           │                       │   ├── Snail.kt
│   │           │                       │   ├── Snowflake.kt
│   │           │                       │   ├── Speed.kt
│   │           │                       │   ├── SplitAlt.kt
│   │           │                       │   ├── SplitComplementary.kt
│   │           │                       │   ├── Spray.kt
│   │           │                       │   ├── Square.kt
│   │           │                       │   ├── SquareEdit.kt
│   │           │                       │   ├── SquareFoot.kt
│   │           │                       │   ├── SquareHarmony.kt
│   │           │                       │   ├── Stack.kt
│   │           │                       │   ├── StackSticky.kt
│   │           │                       │   ├── StackStickyOff.kt
│   │           │                       │   ├── Stacks.kt
│   │           │                       │   ├── StampedLine.kt
│   │           │                       │   ├── StarSticky.kt
│   │           │                       │   ├── StickerEmoji.kt
│   │           │                       │   ├── Stylus.kt
│   │           │                       │   ├── Suffix.kt
│   │           │                       │   ├── Svg.kt
│   │           │                       │   ├── SwapVerticalCircle.kt
│   │           │                       │   ├── Swatch.kt
│   │           │                       │   ├── Symbol.kt
│   │           │                       │   ├── SyncArrowDown.kt
│   │           │                       │   ├── TableEye.kt
│   │           │                       │   ├── TagText.kt
│   │           │                       │   ├── Telegram.kt
│   │           │                       │   ├── TelevisionAmbientLight.kt
│   │           │                       │   ├── Tetradic.kt
│   │           │                       │   ├── TextFields.kt
│   │           │                       │   ├── TextSearch.kt
│   │           │                       │   ├── TextSticky.kt
│   │           │                       │   ├── Theme.kt
│   │           │                       │   ├── TimerEdit.kt
│   │           │                       │   ├── Titlecase.kt
│   │           │                       │   ├── Ton.kt
│   │           │                       │   ├── Tonality.kt
│   │           │                       │   ├── Toolbox.kt
│   │           │                       │   ├── TopLeft.kt
│   │           │                       │   ├── Tortoise.kt
│   │           │                       │   ├── Transparency.kt
│   │           │                       │   ├── Triadic.kt
│   │           │                       │   ├── Triangle.kt
│   │           │                       │   ├── USDT.kt
│   │           │                       │   ├── Unarchive.kt
│   │           │                       │   ├── Ungroup.kt
│   │           │                       │   ├── VectorPolyline.kt
│   │           │                       │   ├── VolunteerActivism.kt
│   │           │                       │   ├── WallpaperAlt.kt
│   │           │                       │   ├── WandShine.kt
│   │           │                       │   ├── WandStars.kt
│   │           │                       │   ├── Watermark.kt
│   │           │                       │   ├── Webp.kt
│   │           │                       │   ├── WebpBox.kt
│   │           │                       │   ├── Windows.kt
│   │           │                       │   └── ZigzagLine.kt
│   │           │                       └── shapes/
│   │           │                           ├── ArrowShape.kt
│   │           │                           ├── BookmarkShape.kt
│   │           │                           ├── BurgerShape.kt
│   │           │                           ├── CloverShape.kt
│   │           │                           ├── DropletShape.kt
│   │           │                           ├── EggShape.kt
│   │           │                           ├── ExplosionShape.kt
│   │           │                           ├── HeartShape.kt
│   │           │                           ├── KotlinShape.kt
│   │           │                           ├── MapShape.kt
│   │           │                           ├── MaterialStarShape.kt
│   │           │                           ├── MorphShape.kt
│   │           │                           ├── OctagonShape.kt
│   │           │                           ├── OvalShape.kt
│   │           │                           ├── PathShape.kt
│   │           │                           ├── PentagonShape.kt
│   │           │                           ├── PillShape.kt
│   │           │                           ├── ShieldShape.kt
│   │           │                           ├── ShurikenShape.kt
│   │           │                           ├── SimpleHeartShape.kt
│   │           │                           ├── SmallMaterialStarShape.kt
│   │           │                           └── SquircleShape.kt
│   │           └── res/
│   │               ├── drawable/
│   │               │   ├── app_registration_24px.xml
│   │               │   ├── ic_24_barcode_scanner.xml
│   │               │   ├── ic_launcher_foreground.xml
│   │               │   ├── ic_launcher_monochrome_24.xml
│   │               │   ├── ic_logo_animated.xml
│   │               │   ├── ic_notification_icon.xml
│   │               │   ├── image_to_text_outlined.xml
│   │               │   ├── mobile_screenshot.xml
│   │               │   ├── multiple_image_edit.xml
│   │               │   ├── outline_colorize_24.xml
│   │               │   ├── outline_drag_handle_24.xml
│   │               │   ├── palette_swatch_outlined.xml
│   │               │   ├── rounded_document_scanner_24.xml
│   │               │   ├── rounded_qr_code_scanner_24.xml
│   │               │   └── shape_find_in_file.xml
│   │               ├── drawable-v31/
│   │               │   └── ic_logo_animated.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── raw/
│   │               │   └── keep.xml
│   │               ├── values/
│   │               │   ├── arrays.xml
│   │               │   ├── bools.xml
│   │               │   ├── colors.xml
│   │               │   ├── ic_launcher_background.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-ar/
│   │               │   └── strings.xml
│   │               ├── values-be/
│   │               │   └── strings.xml
│   │               ├── values-bn/
│   │               │   └── strings.xml
│   │               ├── values-ca/
│   │               │   └── strings.xml
│   │               ├── values-cs/
│   │               │   └── strings.xml
│   │               ├── values-da/
│   │               │   └── strings.xml
│   │               ├── values-de/
│   │               │   └── strings.xml
│   │               ├── values-es/
│   │               │   └── strings.xml
│   │               ├── values-et/
│   │               │   └── strings.xml
│   │               ├── values-eu/
│   │               │   └── strings.xml
│   │               ├── values-fa/
│   │               │   └── strings.xml
│   │               ├── values-fi/
│   │               │   └── strings.xml
│   │               ├── values-fil/
│   │               │   └── strings.xml
│   │               ├── values-fr/
│   │               │   └── strings.xml
│   │               ├── values-hi/
│   │               │   └── strings.xml
│   │               ├── values-hu/
│   │               │   └── strings.xml
│   │               ├── values-in/
│   │               │   └── strings.xml
│   │               ├── values-it/
│   │               │   └── strings.xml
│   │               ├── values-iw/
│   │               │   └── strings.xml
│   │               ├── values-ja/
│   │               │   └── strings.xml
│   │               ├── values-kk/
│   │               │   └── strings.xml
│   │               ├── values-ko/
│   │               │   └── strings.xml
│   │               ├── values-lt/
│   │               │   └── strings.xml
│   │               ├── values-mr/
│   │               │   └── strings.xml
│   │               ├── values-night/
│   │               │   └── colors.xml
│   │               ├── values-night-v31/
│   │               │   └── colors.xml
│   │               ├── values-nl/
│   │               │   └── strings.xml
│   │               ├── values-pa/
│   │               │   └── strings.xml
│   │               ├── values-pl/
│   │               │   └── strings.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-ro/
│   │               │   └── strings.xml
│   │               ├── values-ru/
│   │               │   └── strings.xml
│   │               ├── values-si/
│   │               │   └── strings.xml
│   │               ├── values-sk/
│   │               │   └── strings.xml
│   │               ├── values-sr/
│   │               │   └── strings.xml
│   │               ├── values-sv/
│   │               │   └── strings.xml
│   │               ├── values-ta/
│   │               │   └── strings.xml
│   │               ├── values-te/
│   │               │   └── strings.xml
│   │               ├── values-th/
│   │               │   └── strings.xml
│   │               ├── values-tr/
│   │               │   └── strings.xml
│   │               ├── values-ug/
│   │               │   └── strings.xml
│   │               ├── values-uk/
│   │               │   └── strings.xml
│   │               ├── values-v26/
│   │               │   └── bools.xml
│   │               ├── values-v31/
│   │               │   └── colors.xml
│   │               ├── values-vi/
│   │               │   └── strings.xml
│   │               ├── values-zh-rCN/
│   │               │   └── strings.xml
│   │               ├── values-zh-rTW/
│   │               │   └── strings.xml
│   │               └── xml/
│   │                   ├── backup_rules.xml
│   │                   ├── data_extraction_rules.xml
│   │                   └── file_paths.xml
│   ├── settings/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── settings/
│   │                                   ├── di/
│   │                                   │   └── SettingsStateEntryPoint.kt
│   │                                   ├── domain/
│   │                                   │   ├── SettingsInteractor.kt
│   │                                   │   ├── SettingsManager.kt
│   │                                   │   ├── SettingsProvider.kt
│   │                                   │   ├── SimpleSettingsInteractor.kt
│   │                                   │   └── model/
│   │                                   │       ├── ColorHarmonizer.kt
│   │                                   │       ├── CopyToClipboardMode.kt
│   │                                   │       ├── DomainFontFamily.kt
│   │                                   │       ├── FastSettingsSide.kt
│   │                                   │       ├── FilenameBehavior.kt
│   │                                   │       ├── FlingType.kt
│   │                                   │       ├── NightMode.kt
│   │                                   │       ├── OneTimeSaveLocation.kt
│   │                                   │       ├── SettingsState.kt
│   │                                   │       ├── ShapeType.kt
│   │                                   │       ├── SliderType.kt
│   │                                   │       ├── SnowfallMode.kt
│   │                                   │       └── SwitchType.kt
│   │                                   └── presentation/
│   │                                       ├── model/
│   │                                       │   ├── EditPresetsController.kt
│   │                                       │   ├── IconShape.kt
│   │                                       │   ├── PicturePickerMode.kt
│   │                                       │   ├── Setting.kt
│   │                                       │   ├── SettingsGroup.kt
│   │                                       │   ├── UiFontFamily.kt
│   │                                       │   └── UiSettingsState.kt
│   │                                       ├── provider/
│   │                                       │   └── LocalSettingsState.kt
│   │                                       └── utils/
│   │                                           └── RoundedPolygonUtils.kt
│   ├── ui/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── ui/
│   │       │                           ├── utils/
│   │       │                           │   ├── content_pickers/
│   │       │                           │   │   └── DocumentScannerImpl.kt
│   │       │                           │   └── helper/
│   │       │                           │       └── ReviewHandlerImpl.kt
│   │       │                           └── widget/
│   │       │                               └── sheets/
│   │       │                                   └── UpdateSheetImpl.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── kotlin/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── ui/
│   │       │                           ├── theme/
│   │       │                           │   ├── Color.kt
│   │       │                           │   ├── Motion.kt
│   │       │                           │   ├── Theme.kt
│   │       │                           │   ├── ThemePreview.kt
│   │       │                           │   └── Type.kt
│   │       │                           ├── transformation/
│   │       │                           │   └── ImageInfoTransformation.kt
│   │       │                           ├── utils/
│   │       │                           │   ├── BaseComponent.kt
│   │       │                           │   ├── ComposeActivity.kt
│   │       │                           │   ├── ComposeApplication.kt
│   │       │                           │   ├── animation/
│   │       │                           │   │   ├── Animate.kt
│   │       │                           │   │   ├── Animations.kt
│   │       │                           │   │   ├── CombinedMutableInteractionSource.kt
│   │       │                           │   │   └── Easing.kt
│   │       │                           │   ├── capturable/
│   │       │                           │   │   ├── Capturable.kt
│   │       │                           │   │   ├── CaptureController.kt
│   │       │                           │   │   └── impl/
│   │       │                           │   │       ├── CapturableNew.kt
│   │       │                           │   │       └── CapturableOld.kt
│   │       │                           │   ├── confetti/
│   │       │                           │   │   ├── ConfettiHostState.kt
│   │       │                           │   │   └── Particles.kt
│   │       │                           │   ├── content_pickers/
│   │       │                           │   │   ├── BarcodeScanner.kt
│   │       │                           │   │   ├── ContactPicker.kt
│   │       │                           │   │   ├── DocumentScanner.kt
│   │       │                           │   │   ├── FileMaker.kt
│   │       │                           │   │   ├── FilePicker.kt
│   │       │                           │   │   ├── FolderPicker.kt
│   │       │                           │   │   ├── ImagePicker.kt
│   │       │                           │   │   ├── ResultLauncher.kt
│   │       │                           │   │   └── Scanner.kt
│   │       │                           │   ├── helper/
│   │       │                           │   │   ├── ActivityUtils.kt
│   │       │                           │   │   ├── AppToastHost.kt
│   │       │                           │   │   ├── BlendingModeExt.kt
│   │       │                           │   │   ├── Clipboard.kt
│   │       │                           │   │   ├── ClipboardUtils.kt
│   │       │                           │   │   ├── CoilUtils.kt
│   │       │                           │   │   ├── ColorUtils.kt
│   │       │                           │   │   ├── CompositionLocalUtils.kt
│   │       │                           │   │   ├── ContextUtils.kt
│   │       │                           │   │   ├── DensityUtils.kt
│   │       │                           │   │   ├── DeviceInfo.kt
│   │       │                           │   │   ├── DrawUtils.kt
│   │       │                           │   │   ├── HandleDeeplinks.kt
│   │       │                           │   │   ├── HandlerUtils.kt
│   │       │                           │   │   ├── ImageUtils.kt
│   │       │                           │   │   ├── IntentUtils.kt
│   │       │                           │   │   ├── LazyUtils.kt
│   │       │                           │   │   ├── LinkUtils.kt
│   │       │                           │   │   ├── LocalFilterPreviewModel.kt
│   │       │                           │   │   ├── LocaleConfigCompat.kt
│   │       │                           │   │   ├── PaddingUtils.kt
│   │       │                           │   │   ├── PredictiveBackObserver.kt
│   │       │                           │   │   ├── Preview.kt
│   │       │                           │   │   ├── Rect.kt
│   │       │                           │   │   ├── ReviewHandler.kt
│   │       │                           │   │   ├── Ripple.kt
│   │       │                           │   │   ├── SafeUriHandler.kt
│   │       │                           │   │   ├── SaveResultHandler.kt
│   │       │                           │   │   ├── ScanResult.kt
│   │       │                           │   │   └── image_vector/
│   │       │                           │   │       ├── DrawCache.kt
│   │       │                           │   │       ├── GroupComponent.kt
│   │       │                           │   │       ├── ImageVectorUtils.kt
│   │       │                           │   │       ├── PathComponent.kt
│   │       │                           │   │       ├── VNode.kt
│   │       │                           │   │       ├── VectorComponent.kt
│   │       │                           │   │       └── VectorPainter.kt
│   │       │                           │   ├── navigation/
│   │       │                           │   │   ├── Decompose.kt
│   │       │                           │   │   ├── Screen.kt
│   │       │                           │   │   └── ScreenUtils.kt
│   │       │                           │   ├── painter/
│   │       │                           │   │   ├── CenterCropPainter.kt
│   │       │                           │   │   └── RoundCornersPainter.kt
│   │       │                           │   ├── permission/
│   │       │                           │   │   ├── PermissionResult.kt
│   │       │                           │   │   ├── PermissionStatus.kt
│   │       │                           │   │   └── PermissionUtils.kt
│   │       │                           │   ├── provider/
│   │       │                           │   │   ├── ImageToolboxCompositionLocals.kt
│   │       │                           │   │   ├── LocalComponentActivity.kt
│   │       │                           │   │   ├── LocalContainerShape.kt
│   │       │                           │   │   ├── LocalKeepAliveService.kt
│   │       │                           │   │   ├── LocalMetadataProvider.kt
│   │       │                           │   │   ├── LocalResourceManager.kt
│   │       │                           │   │   ├── LocalScreenSize.kt
│   │       │                           │   │   └── LocalWindowSizeClass.kt
│   │       │                           │   └── state/
│   │       │                           │       ├── ObjectSaverDelegate.kt
│   │       │                           │       └── Update.kt
│   │       │                           └── widget/
│   │       │                               ├── AdaptiveBottomScaffoldLayoutScreen.kt
│   │       │                               ├── AdaptiveLayoutScreen.kt
│   │       │                               ├── buttons/
│   │       │                               │   ├── BottomButtonsBlock.kt
│   │       │                               │   ├── CompareButton.kt
│   │       │                               │   ├── EraseModeButton.kt
│   │       │                               │   ├── MediaCheckBox.kt
│   │       │                               │   ├── PagerScrollPanel.kt
│   │       │                               │   ├── PanModeButton.kt
│   │       │                               │   ├── ShareButton.kt
│   │       │                               │   ├── ShowOriginalButton.kt
│   │       │                               │   ├── SupportingButton.kt
│   │       │                               │   └── ZoomButton.kt
│   │       │                               ├── color_picker/
│   │       │                               │   ├── AvailableColorTuplesSheet.kt
│   │       │                               │   ├── ColorInfo.kt
│   │       │                               │   ├── ColorPicker.kt
│   │       │                               │   ├── ColorPickerSheet.kt
│   │       │                               │   ├── ColorSelection.kt
│   │       │                               │   ├── ColorSelectionRow.kt
│   │       │                               │   ├── ColorTupleDefaults.kt
│   │       │                               │   ├── ColorTuplePicker.kt
│   │       │                               │   ├── ColorTuplePreview.kt
│   │       │                               │   └── RecentAndFavoriteColorsCard.kt
│   │       │                               ├── controls/
│   │       │                               │   ├── FileReorderVerticalList.kt
│   │       │                               │   ├── FormatExifWarning.kt
│   │       │                               │   ├── IcoSizeWarning.kt
│   │       │                               │   ├── ImageReorderCarousel.kt
│   │       │                               │   ├── ImageTransformBar.kt
│   │       │                               │   ├── OOMWarning.kt
│   │       │                               │   ├── ResizeImageField.kt
│   │       │                               │   ├── SaveExifWidget.kt
│   │       │                               │   ├── ScaleSmallImagesToLargeToggle.kt
│   │       │                               │   ├── SortButton.kt
│   │       │                               │   ├── page/
│   │       │                               │   │   ├── PageInputDialog.kt
│   │       │                               │   │   ├── PageInputField.kt
│   │       │                               │   │   ├── PageSelectionItem.kt
│   │       │                               │   │   └── PagesSelectionParser.kt
│   │       │                               │   ├── resize_group/
│   │       │                               │   │   ├── ResizeTypeSelector.kt
│   │       │                               │   │   └── components/
│   │       │                               │   │       ├── BlurRadiusSelector.kt
│   │       │                               │   │       └── UseBlurredBackgroundToggle.kt
│   │       │                               │   └── selection/
│   │       │                               │       ├── AlphaSelector.kt
│   │       │                               │       ├── BlendingModeSelector.kt
│   │       │                               │       ├── ColorRowSelector.kt
│   │       │                               │       ├── DataSelector.kt
│   │       │                               │       ├── FontSelector.kt
│   │       │                               │       ├── HelperGridParamsSelector.kt
│   │       │                               │       ├── ImageFormatSelector.kt
│   │       │                               │       ├── ImageSelector.kt
│   │       │                               │       ├── MagnifierEnabledSelector.kt
│   │       │                               │       ├── PositionSelector.kt
│   │       │                               │       ├── PresetSelector.kt
│   │       │                               │       ├── QualitySelector.kt
│   │       │                               │       └── ScaleModeSelector.kt
│   │       │                               ├── dialogs/
│   │       │                               │   ├── CalculatorDialog.kt
│   │       │                               │   ├── ExitWithoutSavingDialog.kt
│   │       │                               │   ├── LoadingDialog.kt
│   │       │                               │   ├── OneTimeImagePickingDialog.kt
│   │       │                               │   ├── OneTimeSaveLocationSelectionDialog.kt
│   │       │                               │   ├── PasswordRequestDialog.kt
│   │       │                               │   ├── ResetDialog.kt
│   │       │                               │   └── WantCancelLoadingDialog.kt
│   │       │                               ├── enhanced/
│   │       │                               │   ├── EnhancedAlertDialog.kt
│   │       │                               │   ├── EnhancedBadge.kt
│   │       │                               │   ├── EnhancedButton.kt
│   │       │                               │   ├── EnhancedButtonGroup.kt
│   │       │                               │   ├── EnhancedCheckbox.kt
│   │       │                               │   ├── EnhancedChip.kt
│   │       │                               │   ├── EnhancedCircularProgressIndicator.kt
│   │       │                               │   ├── EnhancedDatePickerDialog.kt
│   │       │                               │   ├── EnhancedDropdownMenu.kt
│   │       │                               │   ├── EnhancedFlingBehavior.kt
│   │       │                               │   ├── EnhancedFloatingActionButton.kt
│   │       │                               │   ├── EnhancedHapticFeedback.kt
│   │       │                               │   ├── EnhancedIconButton.kt
│   │       │                               │   ├── EnhancedLoadingIndicator.kt
│   │       │                               │   ├── EnhancedModalBottomSheet.kt
│   │       │                               │   ├── EnhancedModalSheetDragHandle.kt
│   │       │                               │   ├── EnhancedNavigationBarItem.kt
│   │       │                               │   ├── EnhancedNavigationRailItem.kt
│   │       │                               │   ├── EnhancedRadioButton.kt
│   │       │                               │   ├── EnhancedRangeSliderItem.kt
│   │       │                               │   ├── EnhancedSlider.kt
│   │       │                               │   ├── EnhancedSliderItem.kt
│   │       │                               │   ├── EnhancedSwitch.kt
│   │       │                               │   ├── EnhancedToggleButton.kt
│   │       │                               │   ├── EnhancedTopAppBar.kt
│   │       │                               │   └── derivative/
│   │       │                               │       └── OnlyAllowedSliderItem.kt
│   │       │                               ├── icon_shape/
│   │       │                               │   └── IconShapeContainer.kt
│   │       │                               ├── image/
│   │       │                               │   ├── AspectRatioSelector.kt
│   │       │                               │   ├── AspectRatios.kt
│   │       │                               │   ├── AutoFilePicker.kt
│   │       │                               │   ├── BadImageWidget.kt
│   │       │                               │   ├── HistogramChart.kt
│   │       │                               │   ├── ImageContainer.kt
│   │       │                               │   ├── ImageCounter.kt
│   │       │                               │   ├── ImageHeaderState.kt
│   │       │                               │   ├── ImageNotPickedWidget.kt
│   │       │                               │   ├── ImagePager.kt
│   │       │                               │   ├── ImagePreviewGrid.kt
│   │       │                               │   ├── ImageStickyHeader.kt
│   │       │                               │   ├── ImagesPreviewWithSelection.kt
│   │       │                               │   ├── MetadataPreviewButton.kt
│   │       │                               │   ├── Picture.kt
│   │       │                               │   ├── SimplePicture.kt
│   │       │                               │   ├── UrisCarousel.kt
│   │       │                               │   └── UrisPreview.kt
│   │       │                               ├── modifier/
│   │       │                               │   ├── AdvancedShadow.kt
│   │       │                               │   ├── AlertDialogBorder.kt
│   │       │                               │   ├── AnimateContentSizeNoClip.kt
│   │       │                               │   ├── AutoCornersShape.kt
│   │       │                               │   ├── AutoElevatedBorder.kt
│   │       │                               │   ├── Blink.kt
│   │       │                               │   ├── Container.kt
│   │       │                               │   ├── ContiniousRoundedRectangle.kt
│   │       │                               │   ├── DetectSwipe.kt
│   │       │                               │   ├── DragHandler.kt
│   │       │                               │   ├── DrawHorizontalStroke.kt
│   │       │                               │   ├── FadingEdges.kt
│   │       │                               │   ├── HelperGrid.kt
│   │       │                               │   ├── LayoutCorners.kt
│   │       │                               │   ├── Line.kt
│   │       │                               │   ├── MaterialShadow.kt
│   │       │                               │   ├── MeshGradient.kt
│   │       │                               │   ├── NegativePadding.kt
│   │       │                               │   ├── ObservePointersCount.kt
│   │       │                               │   ├── Placholder.kt
│   │       │                               │   ├── PointerInput.kt
│   │       │                               │   ├── Pulsate.kt
│   │       │                               │   ├── RealisticSnowfall.kt
│   │       │                               │   ├── RotateAnimation.kt
│   │       │                               │   ├── ScaleOnTap.kt
│   │       │                               │   ├── ShapeDefaults.kt
│   │       │                               │   ├── Shimmer.kt
│   │       │                               │   ├── Tappable.kt
│   │       │                               │   ├── TransparencyChecker.kt
│   │       │                               │   └── WithModifier.kt
│   │       │                               ├── other/
│   │       │                               │   ├── AnimatedBorder.kt
│   │       │                               │   ├── BoxAnimatedVisibility.kt
│   │       │                               │   ├── ColorWithNameItem.kt
│   │       │                               │   ├── DrawLockScreenOrientation.kt
│   │       │                               │   ├── EmojiItem.kt
│   │       │                               │   ├── ExpandableItem.kt
│   │       │                               │   ├── FeatureNotAvailableContent.kt
│   │       │                               │   ├── FontSelectionItem.kt
│   │       │                               │   ├── GradientEdge.kt
│   │       │                               │   ├── InfoContainer.kt
│   │       │                               │   ├── LinkPreviewCard.kt
│   │       │                               │   ├── LinkPreviewList.kt
│   │       │                               │   ├── QrPainter.kt
│   │       │                               │   ├── SearchBar.kt
│   │       │                               │   ├── SwipeToReveal.kt
│   │       │                               │   ├── ToastHost.kt
│   │       │                               │   └── TopAppBarEmoji.kt
│   │       │                               ├── palette_selection/
│   │       │                               │   ├── PaletteMappings.kt
│   │       │                               │   ├── PaletteStyleSelection.kt
│   │       │                               │   └── PaletteStyleSelectionItem.kt
│   │       │                               ├── preferences/
│   │       │                               │   ├── PreferenceItem.kt
│   │       │                               │   ├── PreferenceItemOverload.kt
│   │       │                               │   ├── PreferenceRow.kt
│   │       │                               │   ├── PreferenceRowSwitch.kt
│   │       │                               │   └── ScreenPreference.kt
│   │       │                               ├── saver/
│   │       │                               │   ├── OneTimeEffect.kt
│   │       │                               │   └── Savers.kt
│   │       │                               ├── sheets/
│   │       │                               │   ├── AddExifSheet.kt
│   │       │                               │   ├── DefaultUpdateSheet.kt
│   │       │                               │   ├── EditExifSheet.kt
│   │       │                               │   ├── EmojiSelectionSheet.kt
│   │       │                               │   ├── PickImageFromUrisSheet.kt
│   │       │                               │   ├── ProcessImagesPreferenceSheet.kt
│   │       │                               │   ├── UpdateSheet.kt
│   │       │                               │   └── ZoomModalSheet.kt
│   │       │                               ├── sliders/
│   │       │                               │   ├── FancySlider.kt
│   │       │                               │   ├── HyperOSSlider.kt
│   │       │                               │   ├── M2Slider.kt
│   │       │                               │   ├── M3Slider.kt
│   │       │                               │   └── custom_slider/
│   │       │                               │       ├── CustomRangeSlider.kt
│   │       │                               │       ├── CustomRangeSliderState.kt
│   │       │                               │       ├── CustomRangeSliderUtils.kt
│   │       │                               │       ├── CustomSlider.kt
│   │       │                               │       ├── CustomSliderColors.kt
│   │       │                               │       ├── CustomSliderDefaults.kt
│   │       │                               │       ├── CustomSliderRange.kt
│   │       │                               │       ├── CustomSliderState.kt
│   │       │                               │       └── CustomSliderUtils.kt
│   │       │                               ├── switches/
│   │       │                               │   ├── CupertinoSwitch.kt
│   │       │                               │   ├── FluentSwitch.kt
│   │       │                               │   ├── HyperOSSwitch.kt
│   │       │                               │   ├── LiquidToggle.kt
│   │       │                               │   ├── M3Switch.kt
│   │       │                               │   ├── OneUISwitch.kt
│   │       │                               │   └── PixelSwitch.kt
│   │       │                               ├── text/
│   │       │                               │   ├── AutoSizeText.kt
│   │       │                               │   ├── HtmlText.kt
│   │       │                               │   ├── IsKeyboardVisibleAsState.kt
│   │       │                               │   ├── Linkify.kt
│   │       │                               │   ├── Marquee.kt
│   │       │                               │   ├── OutlinedText.kt
│   │       │                               │   ├── PatternHighlightTransformation.kt
│   │       │                               │   ├── RoundedTextField.kt
│   │       │                               │   ├── TitleItem.kt
│   │       │                               │   └── TopAppBarTitle.kt
│   │       │                               ├── utils/
│   │       │                               │   ├── AutoContentBasedColors.kt
│   │       │                               │   ├── AvailableHeight.kt
│   │       │                               │   ├── RememberRetainedLazyListState.kt
│   │       │                               │   └── ScreenList.kt
│   │       │                               └── value/
│   │       │                                   ├── ValueDialog.kt
│   │       │                                   └── ValueText.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── ui/
│   │                                   ├── utils/
│   │                                   │   ├── content_pickers/
│   │                                   │   │   └── DocumentScannerImpl.kt
│   │                                   │   └── helper/
│   │                                   │       └── ReviewHandlerImpl.kt
│   │                                   └── widget/
│   │                                       └── sheets/
│   │                                           └── UpdateSheetImpl.kt
│   └── utils/
│       ├── .gitignore
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── AndroidManifest.xml
│               └── java/
│                   └── com/
│                       └── t8rin/
│                           └── imagetoolbox/
│                               └── core/
│                                   └── utils/
│                                       ├── AppContext.kt
│                                       ├── QrType.kt
│                                       ├── Typeface.kt
│                                       ├── Update.kt
│                                       ├── UriUtils.kt
│                                       └── Zip.kt
├── fastlane/
│   └── metadata/
│       └── android/
│           ├── en-US/
│           │   ├── changelogs/
│           │   │   ├── 13.txt
│           │   │   └── 16.txt
│           │   ├── full_description.txt
│           │   └── short_description.txt
│           └── ru/
│               ├── full_description.txt
│               └── short_description.txt
├── feature/
│   ├── ai-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── ai_tools/
│   │                                   ├── data/
│   │                                   │   ├── AiProcessor.kt
│   │                                   │   ├── AndroidAiToolsRepository.kt
│   │                                   │   └── model/
│   │                                   │       ├── ChunkInfo.kt
│   │                                   │       └── ModelInfo.kt
│   │                                   ├── di/
│   │                                   │   └── AiToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AiProgressListener.kt
│   │                                   │   ├── AiToolsRepository.kt
│   │                                   │   └── model/
│   │                                   │       ├── NeuralConstants.kt
│   │                                   │       ├── NeuralModel.kt
│   │                                   │       └── NeuralParams.kt
│   │                                   └── presentation/
│   │                                       ├── AiToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AiToolsControls.kt
│   │                                       │   ├── DeleteModelDialog.kt
│   │                                       │   ├── FilteredModels.kt
│   │                                       │   ├── NeuralModelFilterSheet.kt
│   │                                       │   ├── NeuralModelSelectionSheet.kt
│   │                                       │   ├── NeuralModelSelector.kt
│   │                                       │   ├── NeuralModelTypeResources.kt
│   │                                       │   ├── NeuralModelsColumn.kt
│   │                                       │   ├── NeuralSaveProgress.kt
│   │                                       │   ├── NeuralSaveProgressDialog.kt
│   │                                       │   └── Savers.kt
│   │                                       └── screenLogic/
│   │                                           └── AiToolsComponent.kt
│   ├── apng-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── apng_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidApngConverter.kt
│   │                                   ├── di/
│   │                                   │   └── ApngToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ApngConverter.kt
│   │                                   │   └── ApngParams.kt
│   │                                   └── presentation/
│   │                                       ├── ApngToolsContent.kt
│   │                                       ├── components/
│   │                                       │   └── ApngParamsSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ApngToolsComponent.kt
│   ├── ascii-art/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── ascii_art/
│   │                                   ├── data/
│   │                                   │   └── AndroidAsciiConverter.kt
│   │                                   ├── di/
│   │                                   │   └── AsciiArtModule.kt
│   │                                   ├── domain/
│   │                                   │   └── AsciiConverter.kt
│   │                                   └── presentation/
│   │                                       ├── AsciiArtContent.kt
│   │                                       ├── components/
│   │                                       │   └── AsciiArtControls.kt
│   │                                       └── screenLogic/
│   │                                           └── AsciiArtComponent.kt
│   ├── audio-cover-extractor/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── audio_cover_extractor/
│   │                                   ├── data/
│   │                                   │   └── AndroidAudioCoverRetriever.kt
│   │                                   ├── di/
│   │                                   │   └── AudioCoverExtractorModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AudioCoverRetriever.kt
│   │                                   │   └── model/
│   │                                   │       └── AudioCoverResult.kt
│   │                                   └── ui/
│   │                                       ├── AudioCoverExtractorContent.kt
│   │                                       ├── components/
│   │                                       │   └── AudioWithCover.kt
│   │                                       └── screenLogic/
│   │                                           └── AudioCoverExtractorComponent.kt
│   ├── base64-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── base64_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidBase64Converter.kt
│   │                                   ├── di/
│   │                                   │   └── Base64ToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   └── Base64Converter.kt
│   │                                   └── presentation/
│   │                                       ├── Base64ToolsContent.kt
│   │                                       ├── components/
│   │                                       │   └── Base64ToolsTiles.kt
│   │                                       └── screenLogic/
│   │                                           └── Base64ToolsComponent.kt
│   ├── checksum-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── checksum_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidChecksumManager.kt
│   │                                   ├── di/
│   │                                   │   └── ChecksumToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ChecksumManager.kt
│   │                                   │   └── ChecksumSource.kt
│   │                                   └── presentation/
│   │                                       ├── ChecksumToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ChecksumEnterField.kt
│   │                                       │   ├── ChecksumPage.kt
│   │                                       │   ├── ChecksumPreviewField.kt
│   │                                       │   ├── ChecksumResultCard.kt
│   │                                       │   ├── ChecksumToolsTabs.kt
│   │                                       │   ├── UriWithHashItem.kt
│   │                                       │   └── pages/
│   │                                       │       ├── CalculateFromTextPage.kt
│   │                                       │       ├── CalculateFromUriPage.kt
│   │                                       │       ├── CompareWithUriPage.kt
│   │                                       │       └── CompareWithUrisPage.kt
│   │                                       └── screenLogic/
│   │                                           └── ChecksumToolsComponent.kt
│   ├── cipher/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── cipher/
│   │                                   ├── data/
│   │                                   │   ├── AndroidCryptographyManager.kt
│   │                                   │   └── AndroidRandomStringGenerator.kt
│   │                                   ├── di/
│   │                                   │   └── CipherModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── CryptographyManager.kt
│   │                                   │   └── WrongKeyException.kt
│   │                                   └── presentation/
│   │                                       ├── CipherContent.kt
│   │                                       ├── components/
│   │                                       │   ├── CipherControls.kt
│   │                                       │   └── CipherTipSheet.kt
│   │                                       └── screenLogic/
│   │                                           └── CipherComponent.kt
│   ├── collage-maker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── collage_maker/
│   │                               └── presentation/
│   │                                   ├── CollageMakerContent.kt
│   │                                   ├── components/
│   │                                   │   └── CollageParams.kt
│   │                                   └── screenLogic/
│   │                                       └── CollageMakerComponent.kt
│   ├── color-library/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── color_library/
│   │                               └── presentation/
│   │                                   ├── ColorLibraryContent.kt
│   │                                   ├── components/
│   │                                   │   └── FavoriteColors.kt
│   │                                   └── screenLogic/
│   │                                       └── ColorLibraryComponent.kt
│   ├── color-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── color_tools/
│   │                               └── presentation/
│   │                                   ├── ColorToolsContent.kt
│   │                                   ├── components/
│   │                                   │   ├── ColorHarmonies.kt
│   │                                   │   ├── ColorHarmoniesUtils.kt
│   │                                   │   ├── ColorHistogram.kt
│   │                                   │   ├── ColorInfo.kt
│   │                                   │   ├── ColorInfoDisplay.kt
│   │                                   │   ├── ColorMixing.kt
│   │                                   │   ├── ColorMixingUtils.kt
│   │                                   │   └── ColorShading.kt
│   │                                   └── screenLogic/
│   │                                       └── ColorToolsComponent.kt
│   ├── compare/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── compare/
│   │                                   └── presentation/
│   │                                       ├── CompareContent.kt
│   │                                       ├── components/
│   │                                       │   ├── CompareLabel.kt
│   │                                       │   ├── CompareScreenContent.kt
│   │                                       │   ├── CompareScreenContentImpl.kt
│   │                                       │   ├── CompareScreenTopAppBar.kt
│   │                                       │   ├── CompareSelectionButtons.kt
│   │                                       │   ├── CompareShareSheet.kt
│   │                                       │   ├── CompareSheet.kt
│   │                                       │   ├── CompareType.kt
│   │                                       │   ├── PixelByPixelCompareState.kt
│   │                                       │   ├── beforeafter/
│   │                                       │   │   ├── BeforeAfterLayout.kt
│   │                                       │   │   ├── BeforeAfterLayoutImpl.kt
│   │                                       │   │   ├── ContentOrder.kt
│   │                                       │   │   ├── DefaultOverlay.kt
│   │                                       │   │   ├── DimensionSubcomposeLayout.kt
│   │                                       │   │   ├── DimensionUtil.kt
│   │                                       │   │   ├── Label.kt
│   │                                       │   │   └── SlotsEnum.kt
│   │                                       │   └── model/
│   │                                       │       └── CompareData.kt
│   │                                       └── screenLogic/
│   │                                           └── CompareComponent.kt
│   ├── crop/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── feature/
│   │           │                   └── crop/
│   │           │                       └── presentation/
│   │           │                           ├── CropContent.kt
│   │           │                           ├── components/
│   │           │                           │   ├── CoercePointsToImageBoundsToggle.kt
│   │           │                           │   ├── CropMaskSelection.kt
│   │           │                           │   ├── CropRotationSelector.kt
│   │           │                           │   ├── CropType.kt
│   │           │                           │   ├── Cropper.kt
│   │           │                           │   ├── DefaultOutlineProperties.kt
│   │           │                           │   └── FreeCornersCropToggle.kt
│   │           │                           └── screenLogic/
│   │           │                               └── CropComponent.kt
│   │           └── res/
│   │               └── values/
│   │                   └── dimens.xml
│   ├── delete-exif/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── delete_exif/
│   │                                   └── presentation/
│   │                                       ├── DeleteExifContent.kt
│   │                                       └── screenLogic/
│   │                                           └── DeleteExifComponent.kt
│   ├── document-scanner/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── document_scanner/
│   │                                   └── presentation/
│   │                                       ├── DocumentScannerContent.kt
│   │                                       └── screenLogic/
│   │                                           └── DocumentScannerComponent.kt
│   ├── draw/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── draw/
│   │                                   ├── data/
│   │                                   │   ├── AndroidImageDrawApplier.kt
│   │                                   │   └── utils/
│   │                                   │       └── DrawRepeatedPath.kt
│   │                                   ├── di/
│   │                                   │   └── DrawModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── DrawBehavior.kt
│   │                                   │   ├── DrawLineStyle.kt
│   │                                   │   ├── DrawMode.kt
│   │                                   │   ├── DrawOnBackgroundParams.kt
│   │                                   │   ├── DrawPathMode.kt
│   │                                   │   ├── ImageDrawApplier.kt
│   │                                   │   ├── PathPaint.kt
│   │                                   │   └── Warp.kt
│   │                                   └── presentation/
│   │                                       ├── DrawContent.kt
│   │                                       ├── components/
│   │                                       │   ├── BitmapDrawer.kt
│   │                                       │   ├── BrushSoftnessSelector.kt
│   │                                       │   ├── DrawColorSelector.kt
│   │                                       │   ├── DrawLineStyleSelector.kt
│   │                                       │   ├── DrawModeSelector.kt
│   │                                       │   ├── DrawPathModeSelector.kt
│   │                                       │   ├── LineWidthSelector.kt
│   │                                       │   ├── OpenColorPickerCard.kt
│   │                                       │   ├── PixelSizeSelector.kt
│   │                                       │   ├── UiPathPaint.kt
│   │                                       │   ├── UiPathPaintCanvasAction.kt
│   │                                       │   ├── controls/
│   │                                       │   │   ├── DrawContentControls.kt
│   │                                       │   │   ├── DrawContentNoDataControls.kt
│   │                                       │   │   └── DrawContentSecondaryControls.kt
│   │                                       │   ├── element/
│   │                                       │   │   ├── ArrowParamsSelector.kt
│   │                                       │   │   ├── CustomPathEffectParamsSelector.kt
│   │                                       │   │   ├── DrawPathModeInfoSheet.kt
│   │                                       │   │   ├── FloodFillParamsSelector.kt
│   │                                       │   │   ├── ImageParamsSelector.kt
│   │                                       │   │   ├── OutlinedFillColorSelector.kt
│   │                                       │   │   ├── OvalParamsSelector.kt
│   │                                       │   │   ├── PixelationParamsSelector.kt
│   │                                       │   │   ├── PolygonParamsSelector.kt
│   │                                       │   │   ├── PrivacyBlurParamsSelector.kt
│   │                                       │   │   ├── RectParamsSelector.kt
│   │                                       │   │   ├── SpotHealParamsSelector.kt
│   │                                       │   │   ├── SprayParamsSelector.kt
│   │                                       │   │   ├── StarParamsSelector.kt
│   │                                       │   │   ├── TextParamsSelector.kt
│   │                                       │   │   ├── TriangleParamsSelector.kt
│   │                                       │   │   └── WarpParamsSelector.kt
│   │                                       │   └── utils/
│   │                                       │       ├── BitmapDrawerPreview.kt
│   │                                       │       ├── DrawPathEffectPreview.kt
│   │                                       │       ├── DrawPathModeUtils.kt
│   │                                       │       ├── DrawRepeatedPath.kt
│   │                                       │       ├── DrawUtils.kt
│   │                                       │       ├── FloodFill.kt
│   │                                       │       ├── MotionEvent.kt
│   │                                       │       ├── PathHelper.kt
│   │                                       │       └── PointerDraw.kt
│   │                                       └── screenLogic/
│   │                                           └── DrawComponent.kt
│   ├── easter-egg/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── easter_egg/
│   │                                   └── presentation/
│   │                                       ├── EasterEggContent.kt
│   │                                       └── screenLogic/
│   │                                           └── EasterEggComponent.kt
│   ├── edit-exif/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── edit_exif/
│   │                                   └── presentation/
│   │                                       ├── EditExifContent.kt
│   │                                       └── screenLogic/
│   │                                           └── EditExifComponent.kt
│   ├── erase-background/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── feature/
│   │       │                       └── erase_background/
│   │       │                           └── data/
│   │       │                               └── backend/
│   │       │                                   └── MlKitBackgroundRemoverBackend.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── feature/
│   │       │                       └── erase_background/
│   │       │                           ├── data/
│   │       │                           │   ├── AndroidAutoBackgroundRemover.kt
│   │       │                           │   ├── AndroidAutoBackgroundRemoverBackendFactory.kt
│   │       │                           │   └── backend/
│   │       │                           │       └── GenericBackgroundRemoverBackend.kt
│   │       │                           ├── di/
│   │       │                           │   └── EraseBackgroundModule.kt
│   │       │                           ├── domain/
│   │       │                           │   ├── AutoBackgroundRemover.kt
│   │       │                           │   ├── AutoBackgroundRemoverBackend.kt
│   │       │                           │   ├── AutoBackgroundRemoverBackendFactory.kt
│   │       │                           │   └── model/
│   │       │                           │       └── BgModelType.kt
│   │       │                           └── presentation/
│   │       │                               ├── EraseBackgroundContent.kt
│   │       │                               ├── components/
│   │       │                               │   ├── AutoEraseBackgroundCard.kt
│   │       │                               │   ├── BitmapEraser.kt
│   │       │                               │   ├── OriginalImagePreviewAlphaSelector.kt
│   │       │                               │   ├── RecoverModeCard.kt
│   │       │                               │   └── TrimImageToggle.kt
│   │       │                               └── screenLogic/
│   │       │                                   └── EraseBackgroundComponent.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── erase_background/
│   │                                   └── data/
│   │                                       └── backend/
│   │                                           └── MlKitBackgroundRemoverBackend.kt
│   ├── filters/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── filters/
│   │                                   ├── data/
│   │                                   │   ├── AndroidFilterMaskApplier.kt
│   │                                   │   ├── AndroidFilterParamsInteractor.kt
│   │                                   │   ├── AndroidFilterProvider.kt
│   │                                   │   ├── model/
│   │                                   │   │   ├── AcesFilmicToneMappingFilter.kt
│   │                                   │   │   ├── AcesHillToneMappingFilter.kt
│   │                                   │   │   ├── AchromatomalyFilter.kt
│   │                                   │   │   ├── AchromatopsiaFilter.kt
│   │                                   │   │   ├── AldridgeFilter.kt
│   │                                   │   │   ├── AmatorkaFilter.kt
│   │                                   │   │   ├── AnaglyphFilter.kt
│   │                                   │   │   ├── AnisotropicDiffusionFilter.kt
│   │                                   │   │   ├── ArcFilter.kt
│   │                                   │   │   ├── AsciiFilter.kt
│   │                                   │   │   ├── AtkinsonDitheringFilter.kt
│   │                                   │   │   ├── AutoCropFilter.kt
│   │                                   │   │   ├── AutoPerspectiveFilter.kt
│   │                                   │   │   ├── AutoRemoveRedEyesFilter.kt
│   │                                   │   │   ├── AutumnTonesFilter.kt
│   │                                   │   │   ├── AverageDistanceFilter.kt
│   │                                   │   │   ├── BayerEightDitheringFilter.kt
│   │                                   │   │   ├── BayerFourDitheringFilter.kt
│   │                                   │   │   ├── BayerThreeDitheringFilter.kt
│   │                                   │   │   ├── BayerTwoDitheringFilter.kt
│   │                                   │   │   ├── BilaterialBlurFilter.kt
│   │                                   │   │   ├── BlackAndWhiteFilter.kt
│   │                                   │   │   ├── BlackHatFilter.kt
│   │                                   │   │   ├── BleachBypassFilter.kt
│   │                                   │   │   ├── BlockGlitchFilter.kt
│   │                                   │   │   ├── BloomFilter.kt
│   │                                   │   │   ├── BokehFilter.kt
│   │                                   │   │   ├── BorderFrameFilter.kt
│   │                                   │   │   ├── BoxBlurFilter.kt
│   │                                   │   │   ├── BrightnessFilter.kt
│   │                                   │   │   ├── BrowniFilter.kt
│   │                                   │   │   ├── BulgeDistortionFilter.kt
│   │                                   │   │   ├── BurkesDitheringFilter.kt
│   │                                   │   │   ├── CGAColorSpaceFilter.kt
│   │                                   │   │   ├── CandlelightFilter.kt
│   │                                   │   │   ├── CannyFilter.kt
│   │                                   │   │   ├── CaramelDarknessFilter.kt
│   │                                   │   │   ├── CelluloidFilter.kt
│   │                                   │   │   ├── ChannelMixFilter.kt
│   │                                   │   │   ├── CircleBlurFilter.kt
│   │                                   │   │   ├── CirclePixelationFilter.kt
│   │                                   │   │   ├── ClaheFilter.kt
│   │                                   │   │   ├── ClaheHSLFilter.kt
│   │                                   │   │   ├── ClaheHSVFilter.kt
│   │                                   │   │   ├── ClaheJzazbzFilter.kt
│   │                                   │   │   ├── ClaheLABFilter.kt
│   │                                   │   │   ├── ClaheLUVFilter.kt
│   │                                   │   │   ├── ClaheOklabFilter.kt
│   │                                   │   │   ├── ClaheOklchFilter.kt
│   │                                   │   │   ├── ClosingFilter.kt
│   │                                   │   │   ├── Clustered2x2DitheringFilter.kt
│   │                                   │   │   ├── Clustered4x4DitheringFilter.kt
│   │                                   │   │   ├── Clustered8x8DitheringFilter.kt
│   │                                   │   │   ├── CodaChromeFilter.kt
│   │                                   │   │   ├── CoffeeFilter.kt
│   │                                   │   │   ├── ColorAnomalyFilter.kt
│   │                                   │   │   ├── ColorBalanceFilter.kt
│   │                                   │   │   ├── ColorExplosionFilter.kt
│   │                                   │   │   ├── ColorHalftoneFilter.kt
│   │                                   │   │   ├── ColorMapFilter.kt
│   │                                   │   │   ├── ColorMatrix3x3Filter.kt
│   │                                   │   │   ├── ColorMatrix4x4Filter.kt
│   │                                   │   │   ├── ColorOverlayFilter.kt
│   │                                   │   │   ├── ColorPosterFilter.kt
│   │                                   │   │   ├── ColorfulSwirlFilter.kt
│   │                                   │   │   ├── ContourFilter.kt
│   │                                   │   │   ├── ContrastFilter.kt
│   │                                   │   │   ├── ConvexFilter.kt
│   │                                   │   │   ├── Convolution3x3Filter.kt
│   │                                   │   │   ├── CoolFilter.kt
│   │                                   │   │   ├── CopyMoveDetectionFilter.kt
│   │                                   │   │   ├── CropOrPerspectiveFilter.kt
│   │                                   │   │   ├── CropToContentFilter.kt
│   │                                   │   │   ├── CrossBlurFilter.kt
│   │                                   │   │   ├── CrossPixelationFilter.kt
│   │                                   │   │   ├── CrosshatchFilter.kt
│   │                                   │   │   ├── CrtCurvatureFilter.kt
│   │                                   │   │   ├── CrystallizeFilter.kt
│   │                                   │   │   ├── CubeLutFilter.kt
│   │                                   │   │   ├── CyberpunkFilter.kt
│   │                                   │   │   ├── DeepPurpleFilter.kt
│   │                                   │   │   ├── DehazeFilter.kt
│   │                                   │   │   ├── DeskewFilter.kt
│   │                                   │   │   ├── DespeckleFilter.kt
│   │                                   │   │   ├── DeutaromalyFilter.kt
│   │                                   │   │   ├── DeutaronotopiaFilter.kt
│   │                                   │   │   ├── DiamondPixelationFilter.kt
│   │                                   │   │   ├── DiffuseFilter.kt
│   │                                   │   │   ├── DigitalCodeFilter.kt
│   │                                   │   │   ├── DilationFilter.kt
│   │                                   │   │   ├── DoGFilter.kt
│   │                                   │   │   ├── DragoFilter.kt
│   │                                   │   │   ├── DropBluesFilter.kt
│   │                                   │   │   ├── EdgyAmberFilter.kt
│   │                                   │   │   ├── ElectricGradientFilter.kt
│   │                                   │   │   ├── EmbossFilter.kt
│   │                                   │   │   ├── EnhancedCirclePixelationFilter.kt
│   │                                   │   │   ├── EnhancedDiamondPixelationFilter.kt
│   │                                   │   │   ├── EnhancedGlitchFilter.kt
│   │                                   │   │   ├── EnhancedOilFilter.kt
│   │                                   │   │   ├── EnhancedPixelationFilter.kt
│   │                                   │   │   ├── EnhancedZoomBlurFilter.kt
│   │                                   │   │   ├── EqualizeFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveHSLFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveHSVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveLABFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveLUVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramFilter.kt
│   │                                   │   │   ├── EqualizeHistogramHSVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramPixelationFilter.kt
│   │                                   │   │   ├── ErodeFilter.kt
│   │                                   │   │   ├── ErrorLevelAnalysisFilter.kt
│   │                                   │   │   ├── ExposureFilter.kt
│   │                                   │   │   ├── FallColorsFilter.kt
│   │                                   │   │   ├── FalseColorFilter.kt
│   │                                   │   │   ├── FalseFloydSteinbergDitheringFilter.kt
│   │                                   │   │   ├── FantasyLandscapeFilter.kt
│   │                                   │   │   ├── FastBilaterialBlurFilter.kt
│   │                                   │   │   ├── FastBlurFilter.kt
│   │                                   │   │   ├── FastGaussianBlur2DFilter.kt
│   │                                   │   │   ├── FastGaussianBlur3DFilter.kt
│   │                                   │   │   ├── FastGaussianBlur4DFilter.kt
│   │                                   │   │   ├── FilmStock50Filter.kt
│   │                                   │   │   ├── FloydSteinbergDitheringFilter.kt
│   │                                   │   │   ├── FoggyNightFilter.kt
│   │                                   │   │   ├── FractalGlassFilter.kt
│   │                                   │   │   ├── FuturisticGradientFilter.kt
│   │                                   │   │   ├── GammaFilter.kt
│   │                                   │   │   ├── GaussianBlurFilter.kt
│   │                                   │   │   ├── GaussianBoxBlurFilter.kt
│   │                                   │   │   ├── GlassSphereRefractionFilter.kt
│   │                                   │   │   ├── GlitchFilter.kt
│   │                                   │   │   ├── GlitchVariantFilter.kt
│   │                                   │   │   ├── GlowFilter.kt
│   │                                   │   │   ├── GoldenForestFilter.kt
│   │                                   │   │   ├── GoldenHourFilter.kt
│   │                                   │   │   ├── GothamFilter.kt
│   │                                   │   │   ├── GrainFilter.kt
│   │                                   │   │   ├── GrayscaleFilter.kt
│   │                                   │   │   ├── GreenSunFilter.kt
│   │                                   │   │   ├── GreenishFilter.kt
│   │                                   │   │   ├── HDRFilter.kt
│   │                                   │   │   ├── HableFilmicToneMappingFilter.kt
│   │                                   │   │   ├── HalftoneFilter.kt
│   │                                   │   │   ├── HazeFilter.kt
│   │                                   │   │   ├── HejlBurgessToneMappingFilter.kt
│   │                                   │   │   ├── HighlightsAndShadowsFilter.kt
│   │                                   │   │   ├── HorizontalWindStaggerFilter.kt
│   │                                   │   │   ├── HotSummerFilter.kt
│   │                                   │   │   ├── HueFilter.kt
│   │                                   │   │   ├── JarvisJudiceNinkeDitheringFilter.kt
│   │                                   │   │   ├── KaleidoscopeFilter.kt
│   │                                   │   │   ├── KodakFilter.kt
│   │                                   │   │   ├── KuwaharaFilter.kt
│   │                                   │   │   ├── LUT512x512Filter.kt
│   │                                   │   │   ├── LaplacianFilter.kt
│   │                                   │   │   ├── LaplacianSimpleFilter.kt
│   │                                   │   │   ├── LavenderDreamFilter.kt
│   │                                   │   │   ├── LeftToRightDitheringFilter.kt
│   │                                   │   │   ├── LemonadeLightFilter.kt
│   │                                   │   │   ├── LensCorrectionFilter.kt
│   │                                   │   │   ├── LinearBoxBlurFilter.kt
│   │                                   │   │   ├── LinearFastGaussianBlurFilter.kt
│   │                                   │   │   ├── LinearFastGaussianBlurNextFilter.kt
│   │                                   │   │   ├── LinearGaussianBlurFilter.kt
│   │                                   │   │   ├── LinearGaussianBoxBlurFilter.kt
│   │                                   │   │   ├── LinearStackBlurFilter.kt
│   │                                   │   │   ├── LinearTentBlurFilter.kt
│   │                                   │   │   ├── LinearTiltShiftFilter.kt
│   │                                   │   │   ├── LogarithmicToneMappingFilter.kt
│   │                                   │   │   ├── LookupFilter.kt
│   │                                   │   │   ├── LowPolyFilter.kt
│   │                                   │   │   ├── LuminanceGradientFilter.kt
│   │                                   │   │   ├── MarbleFilter.kt
│   │                                   │   │   ├── MedianBlurFilter.kt
│   │                                   │   │   ├── MicroMacroPixelationFilter.kt
│   │                                   │   │   ├── MirrorFilter.kt
│   │                                   │   │   ├── MissEtikateFilter.kt
│   │                                   │   │   ├── MobiusFilter.kt
│   │                                   │   │   ├── MoireFilter.kt
│   │                                   │   │   ├── MonochromeFilter.kt
│   │                                   │   │   ├── MorphologicalGradientFilter.kt
│   │                                   │   │   ├── MotionBlurFilter.kt
│   │                                   │   │   ├── NativeStackBlurFilter.kt
│   │                                   │   │   ├── NegativeFilter.kt
│   │                                   │   │   ├── NeonFilter.kt
│   │                                   │   │   ├── NightMagicFilter.kt
│   │                                   │   │   ├── NightVisionFilter.kt
│   │                                   │   │   ├── NoiseFilter.kt
│   │                                   │   │   ├── NonMaximumSuppressionFilter.kt
│   │                                   │   │   ├── NucleusPixelationFilter.kt
│   │                                   │   │   ├── OffsetFilter.kt
│   │                                   │   │   ├── OilFilter.kt
│   │                                   │   │   ├── OldTvFilter.kt
│   │                                   │   │   ├── OpacityFilter.kt
│   │                                   │   │   ├── OpeningFilter.kt
│   │                                   │   │   ├── OrangeHazeFilter.kt
│   │                                   │   │   ├── OrbitalPixelationFilter.kt
│   │                                   │   │   ├── PaletteTransferFilter.kt
│   │                                   │   │   ├── PaletteTransferVariantFilter.kt
│   │                                   │   │   ├── PastelFilter.kt
│   │                                   │   │   ├── PerlinDistortionFilter.kt
│   │                                   │   │   ├── PinchFilter.kt
│   │                                   │   │   ├── PinkDreamFilter.kt
│   │                                   │   │   ├── PixelMeltFilter.kt
│   │                                   │   │   ├── PixelationFilter.kt
│   │                                   │   │   ├── PointillizeFilter.kt
│   │                                   │   │   ├── PoissonBlurFilter.kt
│   │                                   │   │   ├── PolarCoordinatesFilter.kt
│   │                                   │   │   ├── PolaroidFilter.kt
│   │                                   │   │   ├── PolkaDotFilter.kt
│   │                                   │   │   ├── PopArtFilter.kt
│   │                                   │   │   ├── PosterizeFilter.kt
│   │                                   │   │   ├── ProtanopiaFilter.kt
│   │                                   │   │   ├── ProtonomalyFilter.kt
│   │                                   │   │   ├── PulseGridPixelationFilter.kt
│   │                                   │   │   ├── PurpleMistFilter.kt
│   │                                   │   │   ├── QuantizierFilter.kt
│   │                                   │   │   ├── RGBFilter.kt
│   │                                   │   │   ├── RadialTiltShiftFilter.kt
│   │                                   │   │   ├── RadialWeavePixelationFilter.kt
│   │                                   │   │   ├── RainbowWorldFilter.kt
│   │                                   │   │   ├── RandomDitheringFilter.kt
│   │                                   │   │   ├── RedSwirlFilter.kt
│   │                                   │   │   ├── ReduceNoiseFilter.kt
│   │                                   │   │   ├── RemoveColorFilter.kt
│   │                                   │   │   ├── ReplaceColorFilter.kt
│   │                                   │   │   ├── RetroYellowFilter.kt
│   │                                   │   │   ├── RingBlurFilter.kt
│   │                                   │   │   ├── RubberStampFilter.kt
│   │                                   │   │   ├── SandPaintingFilter.kt
│   │                                   │   │   ├── SaturationFilter.kt
│   │                                   │   │   ├── SeamCarvingFilter.kt
│   │                                   │   │   ├── SepiaFilter.kt
│   │                                   │   │   ├── SharpenFilter.kt
│   │                                   │   │   ├── ShuffleBlurFilter.kt
│   │                                   │   │   ├── SideFadeFilter.kt
│   │                                   │   │   ├── SierraDitheringFilter.kt
│   │                                   │   │   ├── SierraLiteDitheringFilter.kt
│   │                                   │   │   ├── SimpleOldTvFilter.kt
│   │                                   │   │   ├── SimpleSketchFilter.kt
│   │                                   │   │   ├── SimpleSolarizeFilter.kt
│   │                                   │   │   ├── SimpleThresholdDitheringFilter.kt
│   │                                   │   │   ├── SimpleWeavePixelationFilter.kt
│   │                                   │   │   ├── SketchFilter.kt
│   │                                   │   │   ├── SmearFilter.kt
│   │                                   │   │   ├── SmoothToonFilter.kt
│   │                                   │   │   ├── SobelEdgeDetectionFilter.kt
│   │                                   │   │   ├── SobelSimpleFilter.kt
│   │                                   │   │   ├── SoftEleganceFilter.kt
│   │                                   │   │   ├── SoftEleganceVariantFilter.kt
│   │                                   │   │   ├── SoftSpringLightFilter.kt
│   │                                   │   │   ├── SolarizeFilter.kt
│   │                                   │   │   ├── SpacePortalFilter.kt
│   │                                   │   │   ├── SparkleFilter.kt
│   │                                   │   │   ├── SpectralFireFilter.kt
│   │                                   │   │   ├── SphereLensDistortionFilter.kt
│   │                                   │   │   ├── SphereRefractionFilter.kt
│   │                                   │   │   ├── SpotHealFilter.kt
│   │                                   │   │   ├── StackBlurFilter.kt
│   │                                   │   │   ├── StaggeredPixelationFilter.kt
│   │                                   │   │   ├── StarBlurFilter.kt
│   │                                   │   │   ├── StrokePixelationFilter.kt
│   │                                   │   │   ├── StuckiDitheringFilter.kt
│   │                                   │   │   ├── SunriseFilter.kt
│   │                                   │   │   ├── SwirlDistortionFilter.kt
│   │                                   │   │   ├── TentBlurFilter.kt
│   │                                   │   │   ├── ThresholdFilter.kt
│   │                                   │   │   ├── ToneCurvesFilter.kt
│   │                                   │   │   ├── ToonFilter.kt
│   │                                   │   │   ├── TopHatFilter.kt
│   │                                   │   │   ├── TriToneFilter.kt
│   │                                   │   │   ├── TritanopiaFilter.kt
│   │                                   │   │   ├── TritonomalyFilter.kt
│   │                                   │   │   ├── TwirlFilter.kt
│   │                                   │   │   ├── TwoRowSierraDitheringFilter.kt
│   │                                   │   │   ├── UchimuraFilter.kt
│   │                                   │   │   ├── UnsharpFilter.kt
│   │                                   │   │   ├── VHSFilter.kt
│   │                                   │   │   ├── VibranceFilter.kt
│   │                                   │   │   ├── VignetteFilter.kt
│   │                                   │   │   ├── VintageFilter.kt
│   │                                   │   │   ├── VoronoiCrystallizeFilter.kt
│   │                                   │   │   ├── VortexPixelationFilter.kt
│   │                                   │   │   ├── WarmFilter.kt
│   │                                   │   │   ├── WaterEffectFilter.kt
│   │                                   │   │   ├── WeakPixelFilter.kt
│   │                                   │   │   ├── WeaveFilter.kt
│   │                                   │   │   ├── WhiteBalanceFilter.kt
│   │                                   │   │   ├── YililomaDitheringFilter.kt
│   │                                   │   │   └── ZoomBlurFilter.kt
│   │                                   │   ├── transformation/
│   │                                   │   │   ├── ColorMapTransformation.kt
│   │                                   │   │   ├── GPUFilterTransformation.kt
│   │                                   │   │   └── JhFilterTransformation.kt
│   │                                   │   └── utils/
│   │                                   │       ├── EnumMappings.kt
│   │                                   │       ├── TransformationUtils.kt
│   │                                   │       ├── convolution/
│   │                                   │       │   └── AireConvolution.kt
│   │                                   │       ├── glitch/
│   │                                   │       │   ├── GlitchTool.kt
│   │                                   │       │   └── tools/
│   │                                   │       │       ├── Anaglyph.kt
│   │                                   │       │       └── JpegGlitch.kt
│   │                                   │       ├── gpu/
│   │                                   │       │   └── GPUImageHighlightShadowWideRangeFilter.kt
│   │                                   │       ├── image/
│   │                                   │       │   └── ImageLoader.kt
│   │                                   │       ├── pixelation/
│   │                                   │       │   ├── PixelationTool.kt
│   │                                   │       │   └── tool/
│   │                                   │       │       ├── PixelationCommands.kt
│   │                                   │       │       └── PixelationLayer.kt
│   │                                   │       └── serialization/
│   │                                   │           ├── FilterSerializationUtils.kt
│   │                                   │           └── Mappings.kt
│   │                                   ├── di/
│   │                                   │   └── FilterModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── FilterMask.kt
│   │                                   │   └── FilterMaskApplier.kt
│   │                                   └── presentation/
│   │                                       ├── FiltersContent.kt
│   │                                       ├── components/
│   │                                       │   ├── BasicFilterPreference.kt
│   │                                       │   ├── BasicFilterState.kt
│   │                                       │   ├── FiltersContentActionButtons.kt
│   │                                       │   ├── FiltersContentControls.kt
│   │                                       │   ├── FiltersContentNoData.kt
│   │                                       │   ├── FiltersContentSheets.kt
│   │                                       │   ├── FiltersContentTopAppBarActions.kt
│   │                                       │   ├── MaskFilterPreference.kt
│   │                                       │   ├── MaskItem.kt
│   │                                       │   ├── MaskReorderSheet.kt
│   │                                       │   ├── MaskingFilterState.kt
│   │                                       │   ├── PathPaintPreview.kt
│   │                                       │   ├── UiFilterMask.kt
│   │                                       │   └── addEditMaskSheet/
│   │                                       │       ├── AddEditMaskSheet.kt
│   │                                       │       ├── AddEditMaskSheetControls.kt
│   │                                       │       ├── AddMaskSheetBitmapPreview.kt
│   │                                       │       └── AddMaskSheetComponent.kt
│   │                                       └── screenLogic/
│   │                                           └── FiltersComponent.kt
│   ├── format-conversion/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── format_conversion/
│   │                                   └── presentation/
│   │                                       ├── FormatConversionContent.kt
│   │                                       └── screenLogic/
│   │                                           └── FormatConversionComponent.kt
│   ├── gif-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── gif_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidGifConverter.kt
│   │                                   ├── di/
│   │                                   │   └── GifToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── GifConverter.kt
│   │                                   │   └── GifParams.kt
│   │                                   └── presentation/
│   │                                       ├── GifToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── GifParamsSelector.kt
│   │                                       │   ├── GifToolsControls.kt
│   │                                       │   ├── GifToolsImagePreview.kt
│   │                                       │   ├── GifToolsNoDataControls.kt
│   │                                       │   └── GifToolsTopAppBarActions.kt
│   │                                       └── screenLogic/
│   │                                           └── GifToolsComponent.kt
│   ├── gradient-maker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── gradient_maker/
│   │                                   ├── data/
│   │                                   │   └── AndroidGradientMaker.kt
│   │                                   ├── di/
│   │                                   │   └── GradientMakerModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── GradientMaker.kt
│   │                                   │   ├── GradientState.kt
│   │                                   │   ├── GradientType.kt
│   │                                   │   └── MeshGradientState.kt
│   │                                   └── presentation/
│   │                                       ├── GradientMakerContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ColorStopSelection.kt
│   │                                       │   ├── GradientMakerAppColorSchemeHandler.kt
│   │                                       │   ├── GradientMakerBottomButtons.kt
│   │                                       │   ├── GradientMakerCompareButton.kt
│   │                                       │   ├── GradientMakerControls.kt
│   │                                       │   ├── GradientMakerImagePreview.kt
│   │                                       │   ├── GradientMakerNoDataControls.kt
│   │                                       │   ├── GradientPreview.kt
│   │                                       │   ├── GradientPropertiesSelector.kt
│   │                                       │   ├── GradientSizeSelector.kt
│   │                                       │   ├── GradientTypeSelector.kt
│   │                                       │   ├── MeshGradientEditor.kt
│   │                                       │   ├── MeshGradientPreview.kt
│   │                                       │   ├── TileModeSelector.kt
│   │                                       │   ├── UiGradientState.kt
│   │                                       │   └── model/
│   │                                       │       └── GradientMakerType.kt
│   │                                       └── screenLogic/
│   │                                           └── GradientMakerComponent.kt
│   ├── image-cutting/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── image_cutting/
│   │                               ├── data/
│   │                               │   └── AndroidImageCutter.kt
│   │                               ├── di/
│   │                               │   └── ImageCutterModule.kt
│   │                               ├── domain/
│   │                               │   ├── CutParams.kt
│   │                               │   └── ImageCutter.kt
│   │                               └── presentation/
│   │                                   ├── ImageCutterContent.kt
│   │                                   ├── components/
│   │                                   │   ├── CutParamsSelector.kt
│   │                                   │   ├── CutPreview.kt
│   │                                   │   └── Utils.kt
│   │                                   └── screenLogic/
│   │                                       └── ImageCutterComponent.kt
│   ├── image-preview/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_preview/
│   │                                   └── presentation/
│   │                                       ├── ImagePreviewContent.kt
│   │                                       └── screenLogic/
│   │                                           └── ImagePreviewComponent.kt
│   ├── image-splitting/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── image_splitting/
│   │                               ├── data/
│   │                               │   └── AndroidImageSplitter.kt
│   │                               ├── di/
│   │                               │   └── ImageSplitterModule.kt
│   │                               ├── domain/
│   │                               │   ├── ImageSplitter.kt
│   │                               │   └── SplitParams.kt
│   │                               └── presentation/
│   │                                   ├── ImageSplitterContent.kt
│   │                                   ├── components/
│   │                                   │   └── SplitParamsSelector.kt
│   │                                   └── screenLogic/
│   │                                       └── ImageSplitterComponent.kt
│   ├── image-stacking/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_stacking/
│   │                                   ├── data/
│   │                                   │   └── AndroidImageStacker.kt
│   │                                   ├── di/
│   │                                   │   └── ImageStackingModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ImageStacker.kt
│   │                                   │   ├── StackImage.kt
│   │                                   │   └── StackingParams.kt
│   │                                   └── presentation/
│   │                                       ├── ImageStackingContent.kt
│   │                                       ├── components/
│   │                                       │   ├── StackImageItem.kt
│   │                                       │   └── StackingParamsSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ImageStackingComponent.kt
│   ├── image-stitch/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_stitch/
│   │                                   ├── data/
│   │                                   │   ├── AndroidImageCombiner.kt
│   │                                   │   └── CvStitchHelper.kt
│   │                                   ├── di/
│   │                                   │   └── ImageStitchModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── CombiningParams.kt
│   │                                   │   ├── ImageCombiner.kt
│   │                                   │   ├── SavableCombiningParams.kt
│   │                                   │   ├── StitchAlignment.kt
│   │                                   │   ├── StitchFadeSide.kt
│   │                                   │   └── StitchMode.kt
│   │                                   └── presentation/
│   │                                       ├── ImageStitchingContent.kt
│   │                                       ├── components/
│   │                                       │   ├── FadeStrengthSelector.kt
│   │                                       │   ├── ImageFadingEdgesSelector.kt
│   │                                       │   ├── ImageScaleSelector.kt
│   │                                       │   ├── SpacingSelector.kt
│   │                                       │   ├── StitchAlignmentSelector.kt
│   │                                       │   └── StitchModeSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ImageStitchingComponent.kt
│   ├── jxl-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── jxl_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidJxlConverter.kt
│   │                                   ├── di/
│   │                                   │   └── JxlToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AnimatedJxlParams.kt
│   │                                   │   └── JxlConverter.kt
│   │                                   └── presentation/
│   │                                       ├── JxlToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AnimatedJxlParamsSelector.kt
│   │                                       │   ├── JxlToolsBitmapPreview.kt
│   │                                       │   ├── JxlToolsButtons.kt
│   │                                       │   ├── JxlToolsControls.kt
│   │                                       │   ├── JxlToolsNoDataControls.kt
│   │                                       │   └── JxlToolsTopAppBarActions.kt
│   │                                       └── screenLogic/
│   │                                           └── JxlToolsComponent.kt
│   ├── libraries-info/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── libraries_info/
│   │                                   └── presentation/
│   │                                       ├── LibrariesInfoContent.kt
│   │                                       ├── components/
│   │                                       │   ├── LibrariesContainer.kt
│   │                                       │   └── LibraryLink.kt
│   │                                       └── screenLogic/
│   │                                           └── LibrariesInfoComponent.kt
│   ├── library-details/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── library_details/
│   │                               └── presentation/
│   │                                   ├── LibraryDetailsContent.kt
│   │                                   └── screenLogic/
│   │                                       └── LibraryDetailsComponent.kt
│   ├── limits-resize/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── limits_resize/
│   │                                   ├── data/
│   │                                   │   └── AndroidLimitsImageScaler.kt
│   │                                   ├── di/
│   │                                   │   └── LimitsResizeModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── LimitsImageScaler.kt
│   │                                   │   └── LimitsResizeType.kt
│   │                                   └── presentation/
│   │                                       ├── LimitsResizeContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AutoRotateLimitBoxToggle.kt
│   │                                       │   └── LimitResizeGroup.kt
│   │                                       └── screenLogic/
│   │                                           └── LimitsResizeComponent.kt
│   ├── load-net-image/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── load_net_image/
│   │                                   ├── data/
│   │                                   │   └── AndroidHtmlImageParser.kt
│   │                                   ├── di/
│   │                                   │   └── LoadNetImageModule.kt
│   │                                   ├── domain/
│   │                                   │   └── HtmlImageParser.kt
│   │                                   └── presentation/
│   │                                       ├── LoadNetImageContent.kt
│   │                                       ├── components/
│   │                                       │   ├── LoadNetImageActionButtons.kt
│   │                                       │   ├── LoadNetImageAdaptiveActions.kt
│   │                                       │   ├── LoadNetImageTopAppBarActions.kt
│   │                                       │   ├── LoadNetImageUrlTextField.kt
│   │                                       │   ├── ParsedImagePreview.kt
│   │                                       │   └── ParsedImagesSelection.kt
│   │                                       └── screenLogic/
│   │                                           └── LoadNetImageComponent.kt
│   ├── main/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── main/
│   │                                   └── presentation/
│   │                                       ├── MainContent.kt
│   │                                       ├── components/
│   │                                       │   ├── FilteredScreenListFor.kt
│   │                                       │   ├── LauncherScreenSelector.kt
│   │                                       │   ├── MainContentImpl.kt
│   │                                       │   ├── MainDrawerContent.kt
│   │                                       │   ├── MainNavigationBar.kt
│   │                                       │   ├── MainNavigationBarForFavorites.kt
│   │                                       │   ├── MainNavigationRail.kt
│   │                                       │   ├── MainNavigationRailForFavorites.kt
│   │                                       │   ├── MainTopAppBar.kt
│   │                                       │   ├── ScreenPreferenceSelection.kt
│   │                                       │   └── SearchableBottomBar.kt
│   │                                       └── screenLogic/
│   │                                           └── MainComponent.kt
│   ├── markup-layers/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── markup_layers/
│   │                                   ├── data/
│   │                                   │   ├── AndroidMarkupLayersApplier.kt
│   │                                   │   ├── project/
│   │                                   │   │   ├── AssetRegistry.kt
│   │                                   │   │   ├── Mapping.kt
│   │                                   │   │   ├── MarkupProjectConstants.kt
│   │                                   │   │   ├── MarkupProjectExtensions.kt
│   │                                   │   │   ├── MarkupProjectFile.kt
│   │                                   │   │   └── ProjectFileLoadResult.kt
│   │                                   │   └── utils/
│   │                                   │       ├── LayersRenderer.kt
│   │                                   │       ├── PictureLayerShadowRenderer.kt
│   │                                   │       ├── ShapeLayerRenderer.kt
│   │                                   │       ├── TextLayerMetrics.kt
│   │                                   │       └── TextLayerShadowRenderer.kt
│   │                                   ├── di/
│   │                                   │   └── MarkupLayersModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── MarkupLayer.kt
│   │                                   │   ├── MarkupLayersApplier.kt
│   │                                   │   ├── MarkupProject.kt
│   │                                   │   ├── MarkupProjectResult.kt
│   │                                   │   ├── ProjectBackground.kt
│   │                                   │   └── ShapeLayerModeExt.kt
│   │                                   └── presentation/
│   │                                       ├── MarkupLayersContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ActiveLayerGestureModifier.kt
│   │                                       │   ├── AddShapeLayerDialog.kt
│   │                                       │   ├── AddTextLayerDialog.kt
│   │                                       │   ├── ClickableTile.kt
│   │                                       │   ├── DropShadowSection.kt
│   │                                       │   ├── EditBox.kt
│   │                                       │   ├── EditBoxState.kt
│   │                                       │   ├── EditLayerSheet.kt
│   │                                       │   ├── Layer.kt
│   │                                       │   ├── LayerContent.kt
│   │                                       │   ├── MarkupLayersActions.kt
│   │                                       │   ├── MarkupLayersContextActions.kt
│   │                                       │   ├── MarkupLayersNoDataControls.kt
│   │                                       │   ├── MarkupLayersSideMenu.kt
│   │                                       │   ├── MarkupLayersSideMenuColumn.kt
│   │                                       │   ├── MarkupLayersTopAppBarActions.kt
│   │                                       │   ├── ShapeLayerParamsSelector.kt
│   │                                       │   └── model/
│   │                                       │       ├── BackgroundBehavior.kt
│   │                                       │       ├── ShapeLayerModeUiExt.kt
│   │                                       │       ├── UiMarkupLayer.kt
│   │                                       │       └── UiMarkupLayerGrouping.kt
│   │                                       └── screenLogic/
│   │                                           └── MarkupLayersComponent.kt
│   ├── media-picker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── media_picker/
│   │                                   ├── data/
│   │                                   │   ├── AndroidMediaRetriever.kt
│   │                                   │   └── utils/
│   │                                   │       ├── DateExt.kt
│   │                                   │       ├── MediaObserver.kt
│   │                                   │       ├── MediaQuery.kt
│   │                                   │       └── SupportedFiles.kt
│   │                                   ├── di/
│   │                                   │   └── MediaPickerModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── MediaRetriever.kt
│   │                                   │   └── model/
│   │                                   │       ├── Album.kt
│   │                                   │       ├── AllowedMedia.kt
│   │                                   │       ├── Media.kt
│   │                                   │       ├── MediaItem.kt
│   │                                   │       ├── MediaOrder.kt
│   │                                   │       ├── MediaState.kt
│   │                                   │       └── OrderType.kt
│   │                                   └── presentation/
│   │                                       ├── MediaPickerActivity.kt
│   │                                       ├── components/
│   │                                       │   ├── ManageExternalStorageWarning.kt
│   │                                       │   ├── MediaExtensionHeader.kt
│   │                                       │   ├── MediaImage.kt
│   │                                       │   ├── MediaImagePager.kt
│   │                                       │   ├── MediaPickerGrid.kt
│   │                                       │   ├── MediaPickerGridWithOverlays.kt
│   │                                       │   ├── MediaPickerHavePermissions.kt
│   │                                       │   ├── MediaPickerRootContent.kt
│   │                                       │   ├── MediaPickerRootContentEmbeddable.kt
│   │                                       │   ├── MediaSizeFooter.kt
│   │                                       │   ├── MediaStickyHeader.kt
│   │                                       │   ├── MediaVideoDurationHeader.kt
│   │                                       │   ├── ObserveColorSchemeExtra.kt
│   │                                       │   └── SendMediaAsResult.kt
│   │                                       └── screenLogic/
│   │                                           └── MediaPickerComponent.kt
│   ├── mesh-gradients/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── mesh_gradients/
│   │                                   └── presentation/
│   │                                       ├── MeshGradientsContent.kt
│   │                                       └── screenLogic/
│   │                                           └── MeshGradientsComponent.kt
│   ├── noise-generation/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── noise_generation/
│   │                               ├── data/
│   │                               │   └── AndroidNoiseGenerator.kt
│   │                               ├── di/
│   │                               │   └── NoiseGenerationModule.kt
│   │                               ├── domain/
│   │                               │   ├── NoiseGenerator.kt
│   │                               │   └── model/
│   │                               │       ├── CellularDistanceFunction.kt
│   │                               │       ├── CellularReturnType.kt
│   │                               │       ├── DomainWarpType.kt
│   │                               │       ├── FractalType.kt
│   │                               │       ├── NoiseParams.kt
│   │                               │       ├── NoiseType.kt
│   │                               │       └── RotationType3D.kt
│   │                               └── presentation/
│   │                                   ├── NoiseGenerationContent.kt
│   │                                   ├── components/
│   │                                   │   └── NoiseParamsSelection.kt
│   │                                   └── screenLogic/
│   │                                       └── NoiseGenerationComponent.kt
│   ├── palette-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── palette_tools/
│   │                                   └── presentation/
│   │                                       ├── PaletteToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── DefaultPaletteControls.kt
│   │                                       │   ├── EditPaletteControls.kt
│   │                                       │   ├── ImageColorPalette.kt
│   │                                       │   ├── MaterialYouPalette.kt
│   │                                       │   ├── MaterialYouPaletteControls.kt
│   │                                       │   ├── MaterialYouPaletteGroup.kt
│   │                                       │   ├── MaterialYouPaletteItem.kt
│   │                                       │   ├── PaletteColorNameField.kt
│   │                                       │   ├── PaletteColorsCountSelector.kt
│   │                                       │   ├── PaletteToolsScreenControls.kt
│   │                                       │   ├── PaletteType.kt
│   │                                       │   └── model/
│   │                                       │       ├── NamedColor.kt
│   │                                       │       └── PaletteFormatHelper.kt
│   │                                       └── screenLogic/
│   │                                           └── PaletteToolsComponent.kt
│   ├── pdf-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── pdf_tools/
│   │                                   ├── data/
│   │                                   │   ├── AndroidPdfHelper.kt
│   │                                   │   ├── AndroidPdfManager.kt
│   │                                   │   └── utils/
│   │                                   │       ├── Hocr.kt
│   │                                   │       ├── PdfContentStreamEditor.kt
│   │                                   │       ├── PdfRenderer.kt
│   │                                   │       └── PdfUtils.kt
│   │                                   ├── di/
│   │                                   │   └── PdfToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── PdfHelper.kt
│   │                                   │   ├── PdfManager.kt
│   │                                   │   └── model/
│   │                                   │       ├── ExtractPagesAction.kt
│   │                                   │       ├── PageOrientation.kt
│   │                                   │       ├── PageSize.kt
│   │                                   │       ├── PdfAnnotationType.kt
│   │                                   │       ├── PdfCheckResult.kt
│   │                                   │       ├── PdfCreationParams.kt
│   │                                   │       ├── PdfCropParams.kt
│   │                                   │       ├── PdfExtractPagesParams.kt
│   │                                   │       ├── PdfMetadata.kt
│   │                                   │       ├── PdfPageNumbersParams.kt
│   │                                   │       ├── PdfRemoveAnnotationParams.kt
│   │                                   │       ├── PdfSignatureParams.kt
│   │                                   │       ├── PdfWatermarkParams.kt
│   │                                   │       ├── PrintPdfParams.kt
│   │                                   │       └── SearchablePdfPage.kt
│   │                                   └── presentation/
│   │                                       ├── common/
│   │                                       │   ├── BasePdfToolComponent.kt
│   │                                       │   ├── BasePdfToolContent.kt
│   │                                       │   ├── PageSwitcher.kt
│   │                                       │   └── PdfPreviewItem.kt
│   │                                       ├── compress/
│   │                                       │   ├── CompressPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── CompressPdfToolComponent.kt
│   │                                       ├── crop/
│   │                                       │   ├── CropPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── CropPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── CropPdfToolComponent.kt
│   │                                       ├── extract_images/
│   │                                       │   ├── ExtractImagesPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ExtractImagesPdfToolComponent.kt
│   │                                       ├── extract_pages/
│   │                                       │   ├── ExtractPagesPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ExtractPagesPdfToolComponent.kt
│   │                                       ├── flatten/
│   │                                       │   ├── FlattenPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── FlattenPdfToolComponent.kt
│   │                                       ├── grayscale/
│   │                                       │   ├── GrayscalePdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── GrayscalePdfToolComponent.kt
│   │                                       ├── images_to_pdf/
│   │                                       │   ├── ImagesToPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ImagesToPdfToolComponent.kt
│   │                                       ├── merge/
│   │                                       │   ├── MergePdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── MergePdfToolComponent.kt
│   │                                       ├── metadata/
│   │                                       │   ├── MetadataPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── MetadataEditor.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── MetadataPdfToolComponent.kt
│   │                                       ├── ocr/
│   │                                       │   ├── OCRPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── OCRPdfToolComponent.kt
│   │                                       ├── page_numbers/
│   │                                       │   ├── PageNumbersPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PageNumbersPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PageNumbersPdfToolComponent.kt
│   │                                       ├── preview/
│   │                                       │   ├── PreviewPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PreviewPdfToolComponent.kt
│   │                                       ├── print/
│   │                                       │   ├── PrintPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PrintPdfToolComponent.kt
│   │                                       ├── protect/
│   │                                       │   ├── ProtectPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ProtectPdfToolComponent.kt
│   │                                       ├── rearrange/
│   │                                       │   ├── RearrangePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRearrangeGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RearrangePdfToolComponent.kt
│   │                                       ├── remove_annotations/
│   │                                       │   ├── RemoveAnnotationsPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── PdfAnnotationTypeSelector.kt
│   │                                       │   │   └── RemoveAnnotationsPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RemoveAnnotationsPdfToolComponent.kt
│   │                                       ├── remove_pages/
│   │                                       │   ├── RemovePagesPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRemoveGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RemovePagesPdfToolComponent.kt
│   │                                       ├── repair/
│   │                                       │   ├── RepairPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RepairPdfToolComponent.kt
│   │                                       ├── root/
│   │                                       │   ├── RootPdfToolsContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── PdfViewer.kt
│   │                                       │   │   └── viewer/
│   │                                       │   │       ├── LegacyPdfViewer.kt
│   │                                       │   │       ├── ModernPdfViewer.kt
│   │                                       │   │       └── ModernPdfViewerDelegate.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RootPdfToolsComponent.kt
│   │                                       ├── rotate/
│   │                                       │   ├── RotatePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRotationGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RotatePdfToolComponent.kt
│   │                                       ├── signature/
│   │                                       │   ├── SignaturePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── SignatureDialog.kt
│   │                                       │   │   ├── SignaturePreview.kt
│   │                                       │   │   └── SignatureSelector.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── SignaturePdfToolComponent.kt
│   │                                       ├── split/
│   │                                       │   ├── SplitPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── SplitPdfToolComponent.kt
│   │                                       ├── unlock/
│   │                                       │   ├── UnlockPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── UnlockPdfToolComponent.kt
│   │                                       ├── watermark/
│   │                                       │   ├── WatermarkPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── WatermarkPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── WatermarkPdfToolComponent.kt
│   │                                       └── zip_convert/
│   │                                           ├── ZipConvertPdfToolContent.kt
│   │                                           └── screenLogic/
│   │                                               └── ZipConvertPdfToolComponent.kt
│   ├── pick-color/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── pick_color/
│   │                                   └── presentation/
│   │                                       ├── PickColorFromImageContent.kt
│   │                                       ├── components/
│   │                                       │   ├── PickColorFromImageBottomAppBar.kt
│   │                                       │   ├── PickColorFromImageContentImpl.kt
│   │                                       │   ├── PickColorFromImageSheet.kt
│   │                                       │   └── PickColorFromImageTopAppBar.kt
│   │                                       └── screenLogic/
│   │                                           └── PickColorFromImageComponent.kt
│   ├── quick-tiles/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── quick_tiles/
│   │                                

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms

github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: ['https://boosty.to/t8rin']


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Create a report to help us improve
labels: ["bug"]

body:
  - type: textarea
    id: description
    attributes:
      label: Describe the bug
      description: A clear and concise description of what the bug is.
      placeholder: Tell us what happened...
    validations:
      required: true

  - type: textarea
    id: reproduce
    attributes:
      label: Steps to reproduce
      description: Steps to reproduce the behavior
      placeholder: |
        1. Go to '...'
        2. Click on '....'
        3. Scroll down to '....'
        4. See error
    validations:
      required: true

  - type: textarea
    id: expected
    attributes:
      label: Expected behavior
      description: A clear and concise description of what you expected to happen.
      placeholder: Tell us what should have happened...
    validations:
      required: true

  - type: textarea
    id: screenshots
    attributes:
      label: Screenshots
      description: If applicable, add screenshots to help explain your problem.
      placeholder: You can drag and drop images here...

  - type: input
    id: device
    attributes:
      label: Device
      placeholder: e.g., Samsung Galaxy S23
    validations:
      required: true

  - type: input
    id: os
    attributes:
      label: OS
      placeholder: e.g., Android 14
    validations:
      required: true

  - type: input
    id: locale
    attributes:
      label: Locale
      placeholder: e.g., en-US, ru-RU

  - type: input
    id: version
    attributes:
      label: App Version
      placeholder: e.g., 1.2.3
    validations:
      required: true

  - type: dropdown
    id: variant
    attributes:
      label: FOSS or Market
      description: Which variant of the app are you using?
      options:
        - FOSS
        - Market (Google Play)
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Suggest an idea for this project
labels: ["enhancement"]

body:
  - type: textarea
    id: problem
    attributes:
      label: Is your feature request related to a problem? Please describe.
      placeholder: A clear and concise description of what the problem is...
    validations:
      required: false

  - type: textarea
    id: solution
    attributes:
      label: Describe the solution you'd like
      placeholder: A clear and concise description of what you want to happen...
    validations:
      required: true

  - type: textarea
    id: alternatives
    attributes:
      label: Describe alternatives you've considered
      placeholder: A clear and concise description of any alternative solutions or features you've considered...
    validations:
      required: false


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
  - package-ecosystem: "gradle" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "daily"


================================================
FILE: .github/workflows/android.yml
================================================
name: Android CI

on:
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Set Swap Space
        uses: pierotofy/set-swap-space@master
        with:
          swap-size-gb: 10

      - uses: actions/checkout@v4

      - name: set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'adopt'
          java-package: 'jdk'
          cache: gradle

      - name: Set up Keystore
        run: |
          sudo apt update -y || true
          sudo apt install -y --no-install-recommends coreutils
          mkdir -p $RUNNER_TEMP/keystores
          echo "${{ secrets.SIGNING_KEY }}" | base64 --decode > $RUNNER_TEMP/keystores/keystore.jks

      - name: Build FOSS APKs
        run: bash ./gradlew assembleFossRelease

      - name: Sign FOSS APKs
        run: |
          ANDROID_SDK_PATH=$ANDROID_HOME/build-tools/35.0.0/apksigner
          for apk in app/build/outputs/apk/foss/release/*.apk; do
            $ANDROID_SDK_PATH sign \
              --ks $RUNNER_TEMP/keystores/keystore.jks \
              --ks-key-alias ${{ secrets.ALIAS }} \
              --ks-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --key-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --out "$apk" \
              "$apk"
          done

      - name: Upload FOSS APKs
        uses: actions/upload-artifact@v4
        with:
          name: Signed FOSS APKs
          path: app/build/outputs/apk/foss/release/*.apk

      - name: Delete FOSS APKs
        run: rm -rf app/build/outputs/apk/foss

      - name: Build Market APKs
        run: bash ./gradlew assembleMarketRelease

      - name: Sign Market APKs
        run: |
          ANDROID_SDK_PATH=$ANDROID_HOME/build-tools/35.0.0/apksigner
          for apk in app/build/outputs/apk/market/release/*.apk; do
            $ANDROID_SDK_PATH sign \
              --ks $RUNNER_TEMP/keystores/keystore.jks \
              --ks-key-alias ${{ secrets.ALIAS }} \
              --ks-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --key-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --out "$apk" \
              "$apk"
          done

      - name: Upload Market APKs
        uses: actions/upload-artifact@v4
        with:
          name: Signed Market APKs
          path: app/build/outputs/apk/market/release/*.apk

      - name: Delete Market APKs
        run: rm -rf app/build/outputs/apk/market

================================================
FILE: .github/workflows/android_foss.yml
================================================
name: Android CI FOSS

on:
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Set Swap Space
        uses: pierotofy/set-swap-space@master
        with:
          swap-size-gb: 10

      - uses: actions/checkout@v4

      - name: set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'adopt'
          java-package: 'jdk'
          cache: gradle

      - name: Set up Keystore
        run: |
          sudo apt update -y || true
          sudo apt install -y --no-install-recommends coreutils
          mkdir -p $RUNNER_TEMP/keystores
          echo "${{ secrets.SIGNING_KEY }}" | base64 --decode > $RUNNER_TEMP/keystores/keystore.jks

      - name: Build FOSS APKs
        run: bash ./gradlew assembleFossRelease

      - name: Sign FOSS APKs
        run: |
          ANDROID_SDK_PATH=$ANDROID_HOME/build-tools/35.0.0/apksigner
          for apk in app/build/outputs/apk/foss/release/*.apk; do
            $ANDROID_SDK_PATH sign \
              --ks $RUNNER_TEMP/keystores/keystore.jks \
              --ks-key-alias ${{ secrets.ALIAS }} \
              --ks-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --key-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --out "$apk" \
              "$apk"
          done

      - name: Upload FOSS APKs
        uses: actions/upload-artifact@v4
        with:
          name: Signed FOSS APKs
          path: app/build/outputs/apk/foss/release/*.apk

      - name: Delete FOSS APKs
        run: rm -rf app/build/outputs/apk/foss

================================================
FILE: .github/workflows/android_market.yml
================================================
name: Android CI Market

on:
  workflow_dispatch:

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: Set Swap Space
        uses: pierotofy/set-swap-space@master
        with:
          swap-size-gb: 10

      - uses: actions/checkout@v4

      - name: set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'adopt'
          java-package: 'jdk'
          cache: gradle

      - name: Set up Keystore
        run: |
          sudo apt update -y || true
          sudo apt install -y --no-install-recommends coreutils
          mkdir -p $RUNNER_TEMP/keystores
          echo "${{ secrets.SIGNING_KEY }}" | base64 --decode > $RUNNER_TEMP/keystores/keystore.jks

      - name: Build Market APKs
        run: bash ./gradlew assembleMarketRelease

      - name: Sign Market APKs
        run: |
          ANDROID_SDK_PATH=$ANDROID_HOME/build-tools/35.0.0/apksigner
          for apk in app/build/outputs/apk/market/release/*.apk; do
            $ANDROID_SDK_PATH sign \
              --ks $RUNNER_TEMP/keystores/keystore.jks \
              --ks-key-alias ${{ secrets.ALIAS }} \
              --ks-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --key-pass pass:${{ secrets.KEY_STORE_PASS }} \
              --out "$apk" \
              "$apk"
          done

      - name: Upload Market APKs
        uses: actions/upload-artifact@v4
        with:
          name: Signed Market APKs
          path: app/build/outputs/apk/market/release/*.apk

      - name: Delete Market APKs
        run: rm -rf app/build/outputs/apk/market

================================================
FILE: .github/workflows/tb_release.yml
================================================
name: Create Release

on:
  workflow_dispatch:
#on:
#  push:
#    tags:
#      - '*'

jobs:
  build_and_release:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'adopt'
          cache: gradle

      - name: Set version variable
        run: echo "GITHUB_REF_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV

      - name: Assemble release
        env:
          VERSION_NAME: ${{ env.GITHUB_REF_NAME }}
        run: bash ./gradlew assembleRelease

      - uses: iota9star/sign-android-release@v1.0.5
        name: Sign FOSS APK
        # ID used to access action output
        id: sign_app_foss
        with:
          releaseDirectory: app/build/outputs/apk/foss/release
          fileRex: .*apk
          signingKeyBase64: ${{ secrets.SIGNING_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.KEY_STORE_PASS }}
          keyPassword: ${{ secrets.KEY_STORE_PASS }}
        env:
          BUILD_TOOLS_VERSION: "34.0.0"

      - name: Rename foss file stage
        run: |
          ls -la app/build/outputs/apk/market/release
          mv "app/build/outputs/apk/foss/release/image-toolbox-$GITHUB_REF_NAME-foss-arm64-v8a-release-unsigned-signed.apk" "image-toolbox-$GITHUB_REF_NAME-foss-arm64-v8a.apk"
          mv "app/build/outputs/apk/foss/release/image-toolbox-$GITHUB_REF_NAME-foss-universal-release-unsigned-signed.apk" "image-toolbox-$GITHUB_REF_NAME-foss-universal.apk"
          mv "app/build/outputs/apk/foss/release/image-toolbox-$GITHUB_REF_NAME-foss-armeabi-v7a-release-unsigned-signed.apk" "image-toolbox-$GITHUB_REF_NAME-foss-armeabi-v7a.apk"
          mv "app/build/outputs/apk/foss/release/image-toolbox-$GITHUB_REF_NAME-foss-x86_64-release-unsigned-signed.apk" "image-toolbox-$GITHUB_REF_NAME-foss-x86_64.apk"

      - uses: iota9star/sign-android-release@v1.0.5
        name: Sign Market APK
        # ID used to access action output
        id: sign_app_market
        with:
          releaseDirectory: app/build/outputs/apk/market/release
          fileRex: .*apk
          signingKeyBase64: ${{ secrets.SIGNING_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.KEY_STORE_PASS }}
          keyPassword: ${{ secrets.KEY_STORE_PASS }}
        env:
          BUILD_TOOLS_VERSION: "34.0.0"

      - name: Rename market file stage
        env:
          VERSION_NAME: ${{ env.GITHUB_REF_NAME }}
        run: |
          ls -la app/build/outputs/apk/market/release
          mv "app/build/outputs/apk/market/release/image-toolbox-$VERSION_NAME-market-arm64-v8a-release-unsigned-signed.apk" "image-toolbox-$VERSION_NAME-arm64-v8a.apk"
          mv "app/build/outputs/apk/market/release/image-toolbox-$VERSION_NAME-market-universal-release-unsigned-signed.apk" "image-toolbox-$VERSION_NAME-universal.apk"
          mv "app/build/outputs/apk/market/release/image-toolbox-$VERSION_NAME-market-armeabi-v7a-release-unsigned-signed.apk" "image-toolbox-$VERSION_NAME-armeabi-v7a.apk"
          mv "app/build/outputs/apk/market/release/image-toolbox-$VERSION_NAME-market-x86_64-release-unsigned-signed.apk" "image-toolbox-$VERSION_NAME-x86_64.apk"

      - uses: actions/upload-artifact@v4
        id: signed-market-apk
        with:
          name: Signed apks Market
          path: "*.apk"

  create_release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    needs:
      - build_and_release
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Download All Artifacts
        uses: actions/download-artifact@v4
        with:
          merge-multiple: true
      - name: Display all downloaded files
        run: ls -la
      - name: Set version variable
        run: echo "GITHUB_REF_NAME=$GITHUB_REF_NAME" >> $GITHUB_ENV
      - name: Set Pre-release flag
        run: |
          if [[ "$GITHUB_REF_NAME" == *-* ]]; then
              # If GITHUB_REF_NAME contains a hyphen, set GITHUB_OTHER_ENV to true
              echo "PRE_RELEASE_FLAG=true" >> $GITHUB_ENV
          else
              # If GITHUB_REF_NAME does not contain a hyphen, set GITHUB_OTHER_ENV to false
              echo "PRE_RELEASE_FLAG=false" >> $GITHUB_ENV
          fi
      - uses: ncipollo/release-action@v1
        with:
          artifacts: "*.apk"
          prerelease: ${{ env.PRE_RELEASE_FLAG }}

================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
.DS_Store
/build
/app/release
/captures
.externalNativeBuild
.cxx
/.idea
/libs/nQuant/build
/.kotlin/errors/
/.kotlin


================================================
FILE: ARCHITECTURE.md
================================================
# 📐 Modules Graph

```mermaid
%%{
    init: {
      "theme": "base",
      "themeVariables": {
        "mainBkg": "#121418",
        "primaryColor": "#1b3a1b",
        "primaryTextColor": "#e0e3de",
        "primaryBorderColor": "#76c893",
        "nodeBorder": "#76c893",
        "lineColor": "#76c893",
        "secondaryColor": "#1f2721",
        "tertiaryColor": "#232c26",
        "clusterBkg": "#182018",
        "clusterBorder": "#4caf50",
        "nodeTextColor": "#e0e3de",
        "edgeLabelBackground": "#111316",
        "edgeLabelColor": "#cfe9de",
        "fontSize": "28px",
        "fontFamily": "JetBrains Mono, Inter, system-ui"
      }
    }
}%%

graph LR
    subgraph :core
        :core:data("data")
        :core:ui("ui")
        :core:domain("domain")
        :core:resources("resources")
        :core:settings("settings")
        :core:di("di")
        :core:crash("crash")
        :core:utils("utils")
        :core:filters("filters")
        :core:ksp("ksp")
    end
    subgraph :feature
        :feature:root("root")
        :feature:main("main")
        :feature:load-net-image("load-net-image")
        :feature:crop("crop")
        :feature:limits-resize("limits-resize")
        :feature:cipher("cipher")
        :feature:image-preview("image-preview")
        :feature:weight-resize("weight-resize")
        :feature:compare("compare")
        :feature:delete-exif("delete-exif")
        :feature:palette-tools("palette-tools")
        :feature:resize-convert("resize-convert")
        :feature:pdf-tools("pdf-tools")
        :feature:single-edit("single-edit")
        :feature:erase-background("erase-background")
        :feature:draw("draw")
        :feature:filters("filters")
        :feature:image-stitch("image-stitch")
        :feature:pick-color("pick-color")
        :feature:recognize-text("recognize-text")
        :feature:gradient-maker("gradient-maker")
        :feature:watermarking("watermarking")
        :feature:gif-tools("gif-tools")
        :feature:apng-tools("apng-tools")
        :feature:zip("zip")
        :feature:jxl-tools("jxl-tools")
        :feature:settings("settings")
        :feature:easter-egg("easter-egg")
        :feature:svg-maker("svg-maker")
        :feature:format-conversion("format-conversion")
        :feature:document-scanner("document-scanner")
        :feature:scan-qr-code("scan-qr-code")
        :feature:image-stacking("image-stacking")
        :feature:image-splitting("image-splitting")
        :feature:color-tools("color-tools")
        :feature:webp-tools("webp-tools")
        :feature:noise-generation("noise-generation")
        :feature:collage-maker("collage-maker")
        :feature:libraries-info("libraries-info")
        :feature:markup-layers("markup-layers")
        :feature:base64-tools("base64-tools")
        :feature:checksum-tools("checksum-tools")
        :feature:mesh-gradients("mesh-gradients")
        :feature:edit-exif("edit-exif")
        :feature:image-cutting("image-cutting")
        :feature:audio-cover-extractor("audio-cover-extractor")
        :feature:library-details("library-details")
        :feature:wallpapers-export("wallpapers-export")
        :feature:ascii-art("ascii-art")
        :feature:ai-tools("ai-tools")
        :feature:media-picker("media-picker")
        :feature:quick-tiles("quick-tiles")
    end
    :feature:root --> :core:data
    :feature:root --> :core:ui
    :feature:root --> :core:domain
    :feature:root --> :core:resources
    :feature:root --> :core:settings
    :feature:root --> :core:di
    :feature:root --> :core:crash
    :feature:root --> :feature:main
    :feature:root --> :feature:load-net-image
    :feature:root --> :feature:crop
    :feature:root --> :feature:limits-resize
    :feature:root --> :feature:cipher
    :feature:root --> :feature:image-preview
    :feature:root --> :feature:weight-resize
    :feature:root --> :feature:compare
    :feature:root --> :feature:delete-exif
    :feature:root --> :feature:palette-tools
    :feature:root --> :feature:resize-convert
    :feature:root --> :feature:pdf-tools
    :feature:root --> :feature:single-edit
    :feature:root --> :feature:erase-background
    :feature:root --> :feature:draw
    :feature:root --> :feature:filters
    :feature:root --> :feature:image-stitch
    :feature:root --> :feature:pick-color
    :feature:root --> :feature:recognize-text
    :feature:root --> :feature:gradient-maker
    :feature:root --> :feature:watermarking
    :feature:root --> :feature:gif-tools
    :feature:root --> :feature:apng-tools
    :feature:root --> :feature:zip
    :feature:root --> :feature:jxl-tools
    :feature:root --> :feature:settings
    :feature:root --> :feature:easter-egg
    :feature:root --> :feature:svg-maker
    :feature:root --> :feature:format-conversion
    :feature:root --> :feature:document-scanner
    :feature:root --> :feature:scan-qr-code
    :feature:root --> :feature:image-stacking
    :feature:root --> :feature:image-splitting
    :feature:root --> :feature:color-tools
    :feature:root --> :feature:webp-tools
    :feature:root --> :feature:noise-generation
    :feature:root --> :feature:collage-maker
    :feature:root --> :feature:libraries-info
    :feature:root --> :feature:markup-layers
    :feature:root --> :feature:base64-tools
    :feature:root --> :feature:checksum-tools
    :feature:root --> :feature:mesh-gradients
    :feature:root --> :feature:edit-exif
    :feature:root --> :feature:image-cutting
    :feature:root --> :feature:audio-cover-extractor
    :feature:root --> :feature:library-details
    :feature:root --> :feature:wallpapers-export
    :feature:root --> :feature:ascii-art
    :feature:root --> :feature:ai-tools
    :feature:erase-background --> :core:data
    :feature:erase-background --> :core:ui
    :feature:erase-background --> :core:domain
    :feature:erase-background --> :core:resources
    :feature:erase-background --> :core:settings
    :feature:erase-background --> :core:di
    :feature:erase-background --> :core:crash
    :feature:erase-background --> :feature:draw
    :feature:edit-exif --> :core:data
    :feature:edit-exif --> :core:ui
    :feature:edit-exif --> :core:domain
    :feature:edit-exif --> :core:resources
    :feature:edit-exif --> :core:settings
    :feature:edit-exif --> :core:di
    :feature:edit-exif --> :core:crash
    :feature:limits-resize --> :core:data
    :feature:limits-resize --> :core:ui
    :feature:limits-resize --> :core:domain
    :feature:limits-resize --> :core:resources
    :feature:limits-resize --> :core:settings
    :feature:limits-resize --> :core:di
    :feature:limits-resize --> :core:crash
    :feature:jxl-tools --> :core:data
    :feature:jxl-tools --> :core:ui
    :feature:jxl-tools --> :core:domain
    :feature:jxl-tools --> :core:resources
    :feature:jxl-tools --> :core:settings
    :feature:jxl-tools --> :core:di
    :feature:jxl-tools --> :core:crash
    :feature:libraries-info --> :core:data
    :feature:libraries-info --> :core:ui
    :feature:libraries-info --> :core:domain
    :feature:libraries-info --> :core:resources
    :feature:libraries-info --> :core:settings
    :feature:libraries-info --> :core:di
    :feature:libraries-info --> :core:crash
    :feature:gif-tools --> :core:data
    :feature:gif-tools --> :core:ui
    :feature:gif-tools --> :core:domain
    :feature:gif-tools --> :core:resources
    :feature:gif-tools --> :core:settings
    :feature:gif-tools --> :core:di
    :feature:gif-tools --> :core:crash
    :feature:library-details --> :core:data
    :feature:library-details --> :core:ui
    :feature:library-details --> :core:domain
    :feature:library-details --> :core:resources
    :feature:library-details --> :core:settings
    :feature:library-details --> :core:di
    :feature:library-details --> :core:crash
    :feature:pdf-tools --> :core:data
    :feature:pdf-tools --> :core:ui
    :feature:pdf-tools --> :core:domain
    :feature:pdf-tools --> :core:resources
    :feature:pdf-tools --> :core:settings
    :feature:pdf-tools --> :core:di
    :feature:pdf-tools --> :core:crash
    :feature:watermarking --> :core:data
    :feature:watermarking --> :core:ui
    :feature:watermarking --> :core:domain
    :feature:watermarking --> :core:resources
    :feature:watermarking --> :core:settings
    :feature:watermarking --> :core:di
    :feature:watermarking --> :core:crash
    :feature:watermarking --> :feature:compare
    :app --> :core:data
    :app --> :core:ui
    :app --> :core:domain
    :app --> :core:resources
    :app --> :core:settings
    :app --> :core:di
    :app --> :core:crash
    :app --> :core:utils
    :app --> :feature:root
    :app --> :feature:media-picker
    :app --> :feature:quick-tiles
    :feature:resize-convert --> :core:data
    :feature:resize-convert --> :core:ui
    :feature:resize-convert --> :core:domain
    :feature:resize-convert --> :core:resources
    :feature:resize-convert --> :core:settings
    :feature:resize-convert --> :core:di
    :feature:resize-convert --> :core:crash
    :feature:resize-convert --> :feature:compare
    :feature:easter-egg --> :core:data
    :feature:easter-egg --> :core:ui
    :feature:easter-egg --> :core:domain
    :feature:easter-egg --> :core:resources
    :feature:easter-egg --> :core:settings
    :feature:easter-egg --> :core:di
    :feature:easter-egg --> :core:crash
    :feature:webp-tools --> :core:data
    :feature:webp-tools --> :core:ui
    :feature:webp-tools --> :core:domain
    :feature:webp-tools --> :core:resources
    :feature:webp-tools --> :core:settings
    :feature:webp-tools --> :core:di
    :feature:webp-tools --> :core:crash
    :feature:markup-layers --> :core:data
    :feature:markup-layers --> :core:ui
    :feature:markup-layers --> :core:domain
    :feature:markup-layers --> :core:resources
    :feature:markup-layers --> :core:settings
    :feature:markup-layers --> :core:di
    :feature:markup-layers --> :core:crash
    :feature:media-picker --> :core:data
    :feature:media-picker --> :core:ui
    :feature:media-picker --> :core:domain
    :feature:media-picker --> :core:resources
    :feature:media-picker --> :core:settings
    :feature:media-picker --> :core:di
    :feature:media-picker --> :core:crash
    :feature:image-stitch --> :core:data
    :feature:image-stitch --> :core:ui
    :feature:image-stitch --> :core:domain
    :feature:image-stitch --> :core:resources
    :feature:image-stitch --> :core:settings
    :feature:image-stitch --> :core:di
    :feature:image-stitch --> :core:crash
    :feature:image-stitch --> :core:filters
    :core:ui --> :core:resources
    :core:ui --> :core:domain
    :core:ui --> :core:utils
    :core:ui --> :core:di
    :core:ui --> :core:settings
    :feature:noise-generation --> :core:data
    :feature:noise-generation --> :core:ui
    :feature:noise-generation --> :core:domain
    :feature:noise-generation --> :core:resources
    :feature:noise-generation --> :core:settings
    :feature:noise-generation --> :core:di
    :feature:noise-generation --> :core:crash
    :feature:wallpapers-export --> :core:data
    :feature:wallpapers-export --> :core:ui
    :feature:wallpapers-export --> :core:domain
    :feature:wallpapers-export --> :core:resources
    :feature:wallpapers-export --> :core:settings
    :feature:wallpapers-export --> :core:di
    :feature:wallpapers-export --> :core:crash
    :feature:document-scanner --> :core:data
    :feature:document-scanner --> :core:ui
    :feature:document-scanner --> :core:domain
    :feature:document-scanner --> :core:resources
    :feature:document-scanner --> :core:settings
    :feature:document-scanner --> :core:di
    :feature:document-scanner --> :core:crash
    :feature:document-scanner --> :feature:pdf-tools
    :feature:gradient-maker --> :core:data
    :feature:gradient-maker --> :core:ui
    :feature:gradient-maker --> :core:domain
    :feature:gradient-maker --> :core:resources
    :feature:gradient-maker --> :core:settings
    :feature:gradient-maker --> :core:di
    :feature:gradient-maker --> :core:crash
    :feature:gradient-maker --> :feature:compare
    :feature:zip --> :core:data
    :feature:zip --> :core:ui
    :feature:zip --> :core:domain
    :feature:zip --> :core:resources
    :feature:zip --> :core:settings
    :feature:zip --> :core:di
    :feature:zip --> :core:crash
    :core:utils --> :core:domain
    :core:utils --> :core:resources
    :core:utils --> :core:settings
    :feature:cipher --> :core:data
    :feature:cipher --> :core:ui
    :feature:cipher --> :core:domain
    :feature:cipher --> :core:resources
    :feature:cipher --> :core:settings
    :feature:cipher --> :core:di
    :feature:cipher --> :core:crash
    :feature:draw --> :core:data
    :feature:draw --> :core:ui
    :feature:draw --> :core:domain
    :feature:draw --> :core:resources
    :feature:draw --> :core:settings
    :feature:draw --> :core:di
    :feature:draw --> :core:crash
    :feature:draw --> :core:filters
    :feature:draw --> :feature:pick-color
    :feature:ai-tools --> :core:data
    :feature:ai-tools --> :core:ui
    :feature:ai-tools --> :core:domain
    :feature:ai-tools --> :core:resources
    :feature:ai-tools --> :core:settings
    :feature:ai-tools --> :core:di
    :feature:ai-tools --> :core:crash
    :feature:audio-cover-extractor --> :core:data
    :feature:audio-cover-extractor --> :core:ui
    :feature:audio-cover-extractor --> :core:domain
    :feature:audio-cover-extractor --> :core:resources
    :feature:audio-cover-extractor --> :core:settings
    :feature:audio-cover-extractor --> :core:di
    :feature:audio-cover-extractor --> :core:crash
    :core:crash --> :core:ui
    :core:crash --> :core:settings
    :feature:delete-exif --> :core:data
    :feature:delete-exif --> :core:ui
    :feature:delete-exif --> :core:domain
    :feature:delete-exif --> :core:resources
    :feature:delete-exif --> :core:settings
    :feature:delete-exif --> :core:di
    :feature:delete-exif --> :core:crash
    :feature:collage-maker --> :core:data
    :feature:collage-maker --> :core:ui
    :feature:collage-maker --> :core:domain
    :feature:collage-maker --> :core:resources
    :feature:collage-maker --> :core:settings
    :feature:collage-maker --> :core:di
    :feature:collage-maker --> :core:crash
    :feature:compare --> :core:data
    :feature:compare --> :core:ui
    :feature:compare --> :core:domain
    :feature:compare --> :core:resources
    :feature:compare --> :core:settings
    :feature:compare --> :core:di
    :feature:compare --> :core:crash
    :feature:mesh-gradients --> :core:data
    :feature:mesh-gradients --> :core:ui
    :feature:mesh-gradients --> :core:domain
    :feature:mesh-gradients --> :core:resources
    :feature:mesh-gradients --> :core:settings
    :feature:mesh-gradients --> :core:di
    :feature:mesh-gradients --> :core:crash
    :core:settings --> :core:domain
    :core:settings --> :core:resources
    :core:settings --> :core:di
    :feature:scan-qr-code --> :core:data
    :feature:scan-qr-code --> :core:ui
    :feature:scan-qr-code --> :core:domain
    :feature:scan-qr-code --> :core:resources
    :feature:scan-qr-code --> :core:settings
    :feature:scan-qr-code --> :core:di
    :feature:scan-qr-code --> :core:crash
    :feature:scan-qr-code --> :core:filters
    :feature:svg-maker --> :core:data
    :feature:svg-maker --> :core:ui
    :feature:svg-maker --> :core:domain
    :feature:svg-maker --> :core:resources
    :feature:svg-maker --> :core:settings
    :feature:svg-maker --> :core:di
    :feature:svg-maker --> :core:crash
    :feature:weight-resize --> :core:data
    :feature:weight-resize --> :core:ui
    :feature:weight-resize --> :core:domain
    :feature:weight-resize --> :core:resources
    :feature:weight-resize --> :core:settings
    :feature:weight-resize --> :core:di
    :feature:weight-resize --> :core:crash
    :feature:image-splitting --> :core:data
    :feature:image-splitting --> :core:ui
    :feature:image-splitting --> :core:domain
    :feature:image-splitting --> :core:resources
    :feature:image-splitting --> :core:settings
    :feature:image-splitting --> :core:di
    :feature:image-splitting --> :core:crash
    :benchmark --> :app
    :feature:checksum-tools --> :core:data
    :feature:checksum-tools --> :core:ui
    :feature:checksum-tools --> :core:domain
    :feature:checksum-tools --> :core:resources
    :feature:checksum-tools --> :core:settings
    :feature:checksum-tools --> :core:di
    :feature:checksum-tools --> :core:crash
    :feature:base64-tools --> :core:data
    :feature:base64-tools --> :core:ui
    :feature:base64-tools --> :core:domain
    :feature:base64-tools --> :core:resources
    :feature:base64-tools --> :core:settings
    :feature:base64-tools --> :core:di
    :feature:base64-tools --> :core:crash
    :feature:palette-tools --> :core:data
    :feature:palette-tools --> :core:ui
    :feature:palette-tools --> :core:domain
    :feature:palette-tools --> :core:resources
    :feature:palette-tools --> :core:settings
    :feature:palette-tools --> :core:di
    :feature:palette-tools --> :core:crash
    :feature:palette-tools --> :feature:pick-color
    :feature:settings --> :core:data
    :feature:settings --> :core:ui
    :feature:settings --> :core:domain
    :feature:settings --> :core:resources
    :feature:settings --> :core:settings
    :feature:settings --> :core:di
    :feature:settings --> :core:crash
    :core:data --> :core:utils
    :core:data --> :core:domain
    :core:data --> :core:resources
    :core:data --> :core:filters
    :core:data --> :core:settings
    :core:data --> :core:di
    :feature:pick-color --> :core:data
    :feature:pick-color --> :core:ui
    :feature:pick-color --> :core:domain
    :feature:pick-color --> :core:resources
    :feature:pick-color --> :core:settings
    :feature:pick-color --> :core:di
    :feature:pick-color --> :core:crash
    :feature:load-net-image --> :core:data
    :feature:load-net-image --> :core:ui
    :feature:load-net-image --> :core:domain
    :feature:load-net-image --> :core:resources
    :feature:load-net-image --> :core:settings
    :feature:load-net-image --> :core:di
    :feature:load-net-image --> :core:crash
    :feature:quick-tiles --> :core:data
    :feature:quick-tiles --> :core:ui
    :feature:quick-tiles --> :core:domain
    :feature:quick-tiles --> :core:resources
    :feature:quick-tiles --> :core:settings
    :feature:quick-tiles --> :core:di
    :feature:quick-tiles --> :core:crash
    :feature:quick-tiles --> :feature:erase-background
    :feature:recognize-text --> :core:data
    :feature:recognize-text --> :core:ui
    :feature:recognize-text --> :core:domain
    :feature:recognize-text --> :core:resources
    :feature:recognize-text --> :core:settings
    :feature:recognize-text --> :core:di
    :feature:recognize-text --> :core:crash
    :feature:recognize-text --> :core:filters
    :feature:recognize-text --> :feature:single-edit
    :core:domain --> :core:resources
    :feature:single-edit --> :core:data
    :feature:single-edit --> :core:ui
    :feature:single-edit --> :core:domain
    :feature:single-edit --> :core:resources
    :feature:single-edit --> :core:settings
    :feature:single-edit --> :core:di
    :feature:single-edit --> :core:crash
    :feature:single-edit --> :feature:crop
    :feature:single-edit --> :feature:erase-background
    :feature:single-edit --> :feature:draw
    :feature:single-edit --> :feature:filters
    :feature:single-edit --> :feature:pick-color
    :feature:single-edit --> :feature:compare
    :feature:image-cutting --> :core:data
    :feature:image-cutting --> :core:ui
    :feature:image-cutting --> :core:domain
    :feature:image-cutting --> :core:resources
    :feature:image-cutting --> :core:settings
    :feature:image-cutting --> :core:di
    :feature:image-cutting --> :core:crash
    :feature:image-cutting --> :feature:compare
    :feature:crop --> :core:data
    :feature:crop --> :core:ui
    :feature:crop --> :core:domain
    :feature:crop --> :core:resources
    :feature:crop --> :core:settings
    :feature:crop --> :core:di
    :feature:crop --> :core:crash
    :feature:color-tools --> :core:data
    :feature:color-tools --> :core:ui
    :feature:color-tools --> :core:domain
    :feature:color-tools --> :core:resources
    :feature:color-tools --> :core:settings
    :feature:color-tools --> :core:di
    :feature:color-tools --> :core:crash
    :feature:format-conversion --> :core:data
    :feature:format-conversion --> :core:ui
    :feature:format-conversion --> :core:domain
    :feature:format-conversion --> :core:resources
    :feature:format-conversion --> :core:settings
    :feature:format-conversion --> :core:di
    :feature:format-conversion --> :core:crash
    :feature:format-conversion --> :feature:compare
    :feature:ascii-art --> :core:data
    :feature:ascii-art --> :core:ui
    :feature:ascii-art --> :core:domain
    :feature:ascii-art --> :core:resources
    :feature:ascii-art --> :core:settings
    :feature:ascii-art --> :core:di
    :feature:ascii-art --> :core:crash
    :feature:ascii-art --> :feature:filters
    :core:filters --> :core:domain
    :core:filters --> :core:ui
    :core:filters --> :core:resources
    :core:filters --> :core:settings
    :core:filters --> :core:utils
    :feature:apng-tools --> :core:data
    :feature:apng-tools --> :core:ui
    :feature:apng-tools --> :core:domain
    :feature:apng-tools --> :core:resources
    :feature:apng-tools --> :core:settings
    :feature:apng-tools --> :core:di
    :feature:apng-tools --> :core:crash
    :feature:image-preview --> :core:data
    :feature:image-preview --> :core:ui
    :feature:image-preview --> :core:domain
    :feature:image-preview --> :core:resources
    :feature:image-preview --> :core:settings
    :feature:image-preview --> :core:di
    :feature:image-preview --> :core:crash
    :feature:filters --> :core:filters
    :feature:filters --> :core:data
    :feature:filters --> :core:ui
    :feature:filters --> :core:domain
    :feature:filters --> :core:resources
    :feature:filters --> :core:settings
    :feature:filters --> :core:di
    :feature:filters --> :core:crash
    :feature:filters --> :core:ksp
    :feature:filters --> :feature:draw
    :feature:filters --> :feature:pick-color
    :feature:filters --> :feature:compare
    :feature:image-stacking --> :core:data
    :feature:image-stacking --> :core:ui
    :feature:image-stacking --> :core:domain
    :feature:image-stacking --> :core:resources
    :feature:image-stacking --> :core:settings
    :feature:image-stacking --> :core:di
    :feature:image-stacking --> :core:crash
    :feature:main --> :core:data
    :feature:main --> :core:ui
    :feature:main --> :core:domain
    :feature:main --> :core:resources
    :feature:main --> :core:settings
    :feature:main --> :core:di
    :feature:main --> :core:crash
    :feature:main --> :feature:settings
```

================================================
FILE: ARCHITECTURE_2
================================================
%%{
    init: {
      "theme": "base",
      "maxEdges": 1000,
      "themeVariables": {
        "mainBkg": "#121418",
        "primaryColor": "#1b3a1b",
        "primaryTextColor": "#e0e3de",
        "primaryBorderColor": "#76c893",
        "nodeBorder": "#76c893",
        "lineColor": "#76c893",
        "secondaryColor": "#1f2721",
        "tertiaryColor": "#232c26",
        "clusterBkg": "#182018",
        "clusterBorder": "#4caf50",
        "nodeTextColor": "#e0e3de",
        "edgeLabelBackground": "#111316",
        "edgeLabelColor": "#cfe9de",
        "fontSize": "28px",
        "fontFamily": "JetBrains Mono, Inter, system-ui"
      }
    }
}%%

graph LR
    subgraph :core
        :core:data("data")
        :core:ui("ui")
        :core:domain("domain")
        :core:resources("resources")
        :core:settings("settings")
        :core:di("di")
        :core:crash("crash")
        :core:utils("utils")
        :core:filters("filters")
        :core:ksp("ksp")
    end
    subgraph :feature
        :feature:root("root")
        :feature:main("main")
        :feature:load-net-image("load-net-image")
        :feature:crop("crop")
        :feature:limits-resize("limits-resize")
        :feature:cipher("cipher")
        :feature:image-preview("image-preview")
        :feature:weight-resize("weight-resize")
        :feature:compare("compare")
        :feature:delete-exif("delete-exif")
        :feature:palette-tools("palette-tools")
        :feature:resize-convert("resize-convert")
        :feature:pdf-tools("pdf-tools")
        :feature:single-edit("single-edit")
        :feature:erase-background("erase-background")
        :feature:draw("draw")
        :feature:filters("filters")
        :feature:image-stitch("image-stitch")
        :feature:pick-color("pick-color")
        :feature:recognize-text("recognize-text")
        :feature:gradient-maker("gradient-maker")
        :feature:watermarking("watermarking")
        :feature:gif-tools("gif-tools")
        :feature:apng-tools("apng-tools")
        :feature:zip("zip")
        :feature:jxl-tools("jxl-tools")
        :feature:settings("settings")
        :feature:easter-egg("easter-egg")
        :feature:svg-maker("svg-maker")
        :feature:format-conversion("format-conversion")
        :feature:document-scanner("document-scanner")
        :feature:scan-qr-code("scan-qr-code")
        :feature:image-stacking("image-stacking")
        :feature:image-splitting("image-splitting")
        :feature:color-tools("color-tools")
        :feature:webp-tools("webp-tools")
        :feature:noise-generation("noise-generation")
        :feature:collage-maker("collage-maker")
        :feature:libraries-info("libraries-info")
        :feature:markup-layers("markup-layers")
        :feature:base64-tools("base64-tools")
        :feature:checksum-tools("checksum-tools")
        :feature:mesh-gradients("mesh-gradients")
        :feature:edit-exif("edit-exif")
        :feature:image-cutting("image-cutting")
        :feature:audio-cover-extractor("audio-cover-extractor")
        :feature:library-details("library-details")
        :feature:wallpapers-export("wallpapers-export")
        :feature:ascii-art("ascii-art")
        :feature:ai-tools("ai-tools")
        :feature:color-library("color-library")
        :feature:media-picker("media-picker")
        :feature:quick-tiles("quick-tiles")
    end
    subgraph :lib
        :lib:neural-tools("neural-tools")
        :lib:opencv-tools("opencv-tools")
        :lib:dynamic-theme("dynamic-theme")
        :lib:snowfall("snowfall")
        :lib:documentscanner("documentscanner")
        :lib:collages("collages")
        :lib:palette("palette")
        :lib:curves("curves")
        :lib:ascii("ascii")
    end
    :feature:root --> :core:data
    :feature:root --> :core:ui
    :feature:root --> :core:domain
    :feature:root --> :core:resources
    :feature:root --> :core:settings
    :feature:root --> :core:di
    :feature:root --> :core:crash
    :feature:root --> :feature:main
    :feature:root --> :feature:load-net-image
    :feature:root --> :feature:crop
    :feature:root --> :feature:limits-resize
    :feature:root --> :feature:cipher
    :feature:root --> :feature:image-preview
    :feature:root --> :feature:weight-resize
    :feature:root --> :feature:compare
    :feature:root --> :feature:delete-exif
    :feature:root --> :feature:palette-tools
    :feature:root --> :feature:resize-convert
    :feature:root --> :feature:pdf-tools
    :feature:root --> :feature:single-edit
    :feature:root --> :feature:erase-background
    :feature:root --> :feature:draw
    :feature:root --> :feature:filters
    :feature:root --> :feature:image-stitch
    :feature:root --> :feature:pick-color
    :feature:root --> :feature:recognize-text
    :feature:root --> :feature:gradient-maker
    :feature:root --> :feature:watermarking
    :feature:root --> :feature:gif-tools
    :feature:root --> :feature:apng-tools
    :feature:root --> :feature:zip
    :feature:root --> :feature:jxl-tools
    :feature:root --> :feature:settings
    :feature:root --> :feature:easter-egg
    :feature:root --> :feature:svg-maker
    :feature:root --> :feature:format-conversion
    :feature:root --> :feature:document-scanner
    :feature:root --> :feature:scan-qr-code
    :feature:root --> :feature:image-stacking
    :feature:root --> :feature:image-splitting
    :feature:root --> :feature:color-tools
    :feature:root --> :feature:webp-tools
    :feature:root --> :feature:noise-generation
    :feature:root --> :feature:collage-maker
    :feature:root --> :feature:libraries-info
    :feature:root --> :feature:markup-layers
    :feature:root --> :feature:base64-tools
    :feature:root --> :feature:checksum-tools
    :feature:root --> :feature:mesh-gradients
    :feature:root --> :feature:edit-exif
    :feature:root --> :feature:image-cutting
    :feature:root --> :feature:audio-cover-extractor
    :feature:root --> :feature:library-details
    :feature:root --> :feature:wallpapers-export
    :feature:root --> :feature:ascii-art
    :feature:root --> :feature:ai-tools
    :feature:root --> :feature:color-library
    :feature:erase-background --> :core:data
    :feature:erase-background --> :core:ui
    :feature:erase-background --> :core:domain
    :feature:erase-background --> :core:resources
    :feature:erase-background --> :core:settings
    :feature:erase-background --> :core:di
    :feature:erase-background --> :core:crash
    :feature:erase-background --> :lib:neural-tools
    :feature:erase-background --> :feature:draw
    :feature:edit-exif --> :core:data
    :feature:edit-exif --> :core:ui
    :feature:edit-exif --> :core:domain
    :feature:edit-exif --> :core:resources
    :feature:edit-exif --> :core:settings
    :feature:edit-exif --> :core:di
    :feature:edit-exif --> :core:crash
    :feature:limits-resize --> :core:data
    :feature:limits-resize --> :core:ui
    :feature:limits-resize --> :core:domain
    :feature:limits-resize --> :core:resources
    :feature:limits-resize --> :core:settings
    :feature:limits-resize --> :core:di
    :feature:limits-resize --> :core:crash
    :feature:jxl-tools --> :core:data
    :feature:jxl-tools --> :core:ui
    :feature:jxl-tools --> :core:domain
    :feature:jxl-tools --> :core:resources
    :feature:jxl-tools --> :core:settings
    :feature:jxl-tools --> :core:di
    :feature:jxl-tools --> :core:crash
    :feature:libraries-info --> :core:data
    :feature:libraries-info --> :core:ui
    :feature:libraries-info --> :core:domain
    :feature:libraries-info --> :core:resources
    :feature:libraries-info --> :core:settings
    :feature:libraries-info --> :core:di
    :feature:libraries-info --> :core:crash
    :feature:gif-tools --> :core:data
    :feature:gif-tools --> :core:ui
    :feature:gif-tools --> :core:domain
    :feature:gif-tools --> :core:resources
    :feature:gif-tools --> :core:settings
    :feature:gif-tools --> :core:di
    :feature:gif-tools --> :core:crash
    :feature:library-details --> :core:data
    :feature:library-details --> :core:ui
    :feature:library-details --> :core:domain
    :feature:library-details --> :core:resources
    :feature:library-details --> :core:settings
    :feature:library-details --> :core:di
    :feature:library-details --> :core:crash
    :feature:pdf-tools --> :core:data
    :feature:pdf-tools --> :core:ui
    :feature:pdf-tools --> :core:domain
    :feature:pdf-tools --> :core:resources
    :feature:pdf-tools --> :core:settings
    :feature:pdf-tools --> :core:di
    :feature:pdf-tools --> :core:crash
    :feature:watermarking --> :core:data
    :feature:watermarking --> :core:ui
    :feature:watermarking --> :core:domain
    :feature:watermarking --> :core:resources
    :feature:watermarking --> :core:settings
    :feature:watermarking --> :core:di
    :feature:watermarking --> :core:crash
    :feature:watermarking --> :feature:compare
    :app --> :core:data
    :app --> :core:ui
    :app --> :core:domain
    :app --> :core:resources
    :app --> :core:settings
    :app --> :core:di
    :app --> :core:crash
    :app --> :core:utils
    :app --> :feature:root
    :app --> :feature:media-picker
    :app --> :feature:quick-tiles
    :app --> :lib:opencv-tools
    :app --> :lib:neural-tools
    :feature:resize-convert --> :core:data
    :feature:resize-convert --> :core:ui
    :feature:resize-convert --> :core:domain
    :feature:resize-convert --> :core:resources
    :feature:resize-convert --> :core:settings
    :feature:resize-convert --> :core:di
    :feature:resize-convert --> :core:crash
    :feature:resize-convert --> :feature:compare
    :feature:easter-egg --> :core:data
    :feature:easter-egg --> :core:ui
    :feature:easter-egg --> :core:domain
    :feature:easter-egg --> :core:resources
    :feature:easter-egg --> :core:settings
    :feature:easter-egg --> :core:di
    :feature:easter-egg --> :core:crash
    :feature:webp-tools --> :core:data
    :feature:webp-tools --> :core:ui
    :feature:webp-tools --> :core:domain
    :feature:webp-tools --> :core:resources
    :feature:webp-tools --> :core:settings
    :feature:webp-tools --> :core:di
    :feature:webp-tools --> :core:crash
    :feature:markup-layers --> :core:data
    :feature:markup-layers --> :core:ui
    :feature:markup-layers --> :core:domain
    :feature:markup-layers --> :core:resources
    :feature:markup-layers --> :core:settings
    :feature:markup-layers --> :core:di
    :feature:markup-layers --> :core:crash
    :feature:media-picker --> :core:data
    :feature:media-picker --> :core:ui
    :feature:media-picker --> :core:domain
    :feature:media-picker --> :core:resources
    :feature:media-picker --> :core:settings
    :feature:media-picker --> :core:di
    :feature:media-picker --> :core:crash
    :feature:image-stitch --> :core:data
    :feature:image-stitch --> :core:ui
    :feature:image-stitch --> :core:domain
    :feature:image-stitch --> :core:resources
    :feature:image-stitch --> :core:settings
    :feature:image-stitch --> :core:di
    :feature:image-stitch --> :core:crash
    :feature:image-stitch --> :core:filters
    :feature:image-stitch --> :lib:opencv-tools
    :core:ui --> :core:resources
    :core:ui --> :core:domain
    :core:ui --> :core:utils
    :core:ui --> :lib:dynamic-theme
    :core:ui --> :lib:snowfall
    :core:ui --> :core:di
    :core:ui --> :core:settings
    :core:ui --> :lib:documentscanner
    :feature:color-library --> :core:data
    :feature:color-library --> :core:ui
    :feature:color-library --> :core:domain
    :feature:color-library --> :core:resources
    :feature:color-library --> :core:settings
    :feature:color-library --> :core:di
    :feature:color-library --> :core:crash
    :feature:noise-generation --> :core:data
    :feature:noise-generation --> :core:ui
    :feature:noise-generation --> :core:domain
    :feature:noise-generation --> :core:resources
    :feature:noise-generation --> :core:settings
    :feature:noise-generation --> :core:di
    :feature:noise-generation --> :core:crash
    :feature:wallpapers-export --> :core:data
    :feature:wallpapers-export --> :core:ui
    :feature:wallpapers-export --> :core:domain
    :feature:wallpapers-export --> :core:resources
    :feature:wallpapers-export --> :core:settings
    :feature:wallpapers-export --> :core:di
    :feature:wallpapers-export --> :core:crash
    :feature:document-scanner --> :core:data
    :feature:document-scanner --> :core:ui
    :feature:document-scanner --> :core:domain
    :feature:document-scanner --> :core:resources
    :feature:document-scanner --> :core:settings
    :feature:document-scanner --> :core:di
    :feature:document-scanner --> :core:crash
    :feature:document-scanner --> :feature:pdf-tools
    :feature:gradient-maker --> :core:data
    :feature:gradient-maker --> :core:ui
    :feature:gradient-maker --> :core:domain
    :feature:gradient-maker --> :core:resources
    :feature:gradient-maker --> :core:settings
    :feature:gradient-maker --> :core:di
    :feature:gradient-maker --> :core:crash
    :feature:gradient-maker --> :feature:compare
    :feature:zip --> :core:data
    :feature:zip --> :core:ui
    :feature:zip --> :core:domain
    :feature:zip --> :core:resources
    :feature:zip --> :core:settings
    :feature:zip --> :core:di
    :feature:zip --> :core:crash
    :core:utils --> :core:domain
    :core:utils --> :core:resources
    :core:utils --> :core:settings
    :feature:cipher --> :core:data
    :feature:cipher --> :core:ui
    :feature:cipher --> :core:domain
    :feature:cipher --> :core:resources
    :feature:cipher --> :core:settings
    :feature:cipher --> :core:di
    :feature:cipher --> :core:crash
    :feature:draw --> :core:data
    :feature:draw --> :core:ui
    :feature:draw --> :core:domain
    :feature:draw --> :core:resources
    :feature:draw --> :core:settings
    :feature:draw --> :core:di
    :feature:draw --> :core:crash
    :feature:draw --> :core:filters
    :feature:draw --> :feature:pick-color
    :feature:ai-tools --> :core:data
    :feature:ai-tools --> :core:ui
    :feature:ai-tools --> :core:domain
    :feature:ai-tools --> :core:resources
    :feature:ai-tools --> :core:settings
    :feature:ai-tools --> :core:di
    :feature:ai-tools --> :core:crash
    :feature:ai-tools --> :lib:neural-tools
    :feature:audio-cover-extractor --> :core:data
    :feature:audio-cover-extractor --> :core:ui
    :feature:audio-cover-extractor --> :core:domain
    :feature:audio-cover-extractor --> :core:resources
    :feature:audio-cover-extractor --> :core:settings
    :feature:audio-cover-extractor --> :core:di
    :feature:audio-cover-extractor --> :core:crash
    :core:crash --> :core:ui
    :core:crash --> :core:settings
    :lib:documentscanner --> :lib:opencv-tools
    :feature:delete-exif --> :core:data
    :feature:delete-exif --> :core:ui
    :feature:delete-exif --> :core:domain
    :feature:delete-exif --> :core:resources
    :feature:delete-exif --> :core:settings
    :feature:delete-exif --> :core:di
    :feature:delete-exif --> :core:crash
    :feature:collage-maker --> :core:data
    :feature:collage-maker --> :core:ui
    :feature:collage-maker --> :core:domain
    :feature:collage-maker --> :core:resources
    :feature:collage-maker --> :core:settings
    :feature:collage-maker --> :core:di
    :feature:collage-maker --> :core:crash
    :feature:collage-maker --> :lib:collages
    :feature:compare --> :core:data
    :feature:compare --> :core:ui
    :feature:compare --> :core:domain
    :feature:compare --> :core:resources
    :feature:compare --> :core:settings
    :feature:compare --> :core:di
    :feature:compare --> :core:crash
    :feature:compare --> :lib:opencv-tools
    :feature:mesh-gradients --> :core:data
    :feature:mesh-gradients --> :core:ui
    :feature:mesh-gradients --> :core:domain
    :feature:mesh-gradients --> :core:resources
    :feature:mesh-gradients --> :core:settings
    :feature:mesh-gradients --> :core:di
    :feature:mesh-gradients --> :core:crash
    :core:settings --> :lib:dynamic-theme
    :core:settings --> :core:domain
    :core:settings --> :core:resources
    :core:settings --> :core:di
    :feature:scan-qr-code --> :core:data
    :feature:scan-qr-code --> :core:ui
    :feature:scan-qr-code --> :core:domain
    :feature:scan-qr-code --> :core:resources
    :feature:scan-qr-code --> :core:settings
    :feature:scan-qr-code --> :core:di
    :feature:scan-qr-code --> :core:crash
    :feature:scan-qr-code --> :core:filters
    :feature:svg-maker --> :core:data
    :feature:svg-maker --> :core:ui
    :feature:svg-maker --> :core:domain
    :feature:svg-maker --> :core:resources
    :feature:svg-maker --> :core:settings
    :feature:svg-maker --> :core:di
    :feature:svg-maker --> :core:crash
    :feature:weight-resize --> :core:data
    :feature:weight-resize --> :core:ui
    :feature:weight-resize --> :core:domain
    :feature:weight-resize --> :core:resources
    :feature:weight-resize --> :core:settings
    :feature:weight-resize --> :core:di
    :feature:weight-resize --> :core:crash
    :feature:image-splitting --> :core:data
    :feature:image-splitting --> :core:ui
    :feature:image-splitting --> :core:domain
    :feature:image-splitting --> :core:resources
    :feature:image-splitting --> :core:settings
    :feature:image-splitting --> :core:di
    :feature:image-splitting --> :core:crash
    :benchmark --> :app
    :feature:checksum-tools --> :core:data
    :feature:checksum-tools --> :core:ui
    :feature:checksum-tools --> :core:domain
    :feature:checksum-tools --> :core:resources
    :feature:checksum-tools --> :core:settings
    :feature:checksum-tools --> :core:di
    :feature:checksum-tools --> :core:crash
    :feature:base64-tools --> :core:data
    :feature:base64-tools --> :core:ui
    :feature:base64-tools --> :core:domain
    :feature:base64-tools --> :core:resources
    :feature:base64-tools --> :core:settings
    :feature:base64-tools --> :core:di
    :feature:base64-tools --> :core:crash
    :feature:palette-tools --> :core:data
    :feature:palette-tools --> :core:ui
    :feature:palette-tools --> :core:domain
    :feature:palette-tools --> :core:resources
    :feature:palette-tools --> :core:settings
    :feature:palette-tools --> :core:di
    :feature:palette-tools --> :core:crash
    :feature:palette-tools --> :feature:pick-color
    :feature:palette-tools --> :lib:palette
    :feature:settings --> :core:data
    :feature:settings --> :core:ui
    :feature:settings --> :core:domain
    :feature:settings --> :core:resources
    :feature:settings --> :core:settings
    :feature:settings --> :core:di
    :feature:settings --> :core:crash
    :core:data --> :core:utils
    :core:data --> :core:domain
    :core:data --> :core:resources
    :core:data --> :core:filters
    :core:data --> :core:settings
    :core:data --> :core:di
    :feature:pick-color --> :core:data
    :feature:pick-color --> :core:ui
    :feature:pick-color --> :core:domain
    :feature:pick-color --> :core:resources
    :feature:pick-color --> :core:settings
    :feature:pick-color --> :core:di
    :feature:pick-color --> :core:crash
    :feature:load-net-image --> :core:data
    :feature:load-net-image --> :core:ui
    :feature:load-net-image --> :core:domain
    :feature:load-net-image --> :core:resources
    :feature:load-net-image --> :core:settings
    :feature:load-net-image --> :core:di
    :feature:load-net-image --> :core:crash
    :feature:quick-tiles --> :core:data
    :feature:quick-tiles --> :core:ui
    :feature:quick-tiles --> :core:domain
    :feature:quick-tiles --> :core:resources
    :feature:quick-tiles --> :core:settings
    :feature:quick-tiles --> :core:di
    :feature:quick-tiles --> :core:crash
    :feature:quick-tiles --> :feature:erase-background
    :feature:recognize-text --> :core:data
    :feature:recognize-text --> :core:ui
    :feature:recognize-text --> :core:domain
    :feature:recognize-text --> :core:resources
    :feature:recognize-text --> :core:settings
    :feature:recognize-text --> :core:di
    :feature:recognize-text --> :core:crash
    :feature:recognize-text --> :core:filters
    :feature:recognize-text --> :feature:single-edit
    :core:domain --> :core:resources
    :feature:single-edit --> :core:data
    :feature:single-edit --> :core:ui
    :feature:single-edit --> :core:domain
    :feature:single-edit --> :core:resources
    :feature:single-edit --> :core:settings
    :feature:single-edit --> :core:di
    :feature:single-edit --> :core:crash
    :feature:single-edit --> :feature:crop
    :feature:single-edit --> :feature:erase-background
    :feature:single-edit --> :feature:draw
    :feature:single-edit --> :feature:filters
    :feature:single-edit --> :feature:pick-color
    :feature:single-edit --> :feature:compare
    :feature:single-edit --> :lib:curves
    :feature:image-cutting --> :core:data
    :feature:image-cutting --> :core:ui
    :feature:image-cutting --> :core:domain
    :feature:image-cutting --> :core:resources
    :feature:image-cutting --> :core:settings
    :feature:image-cutting --> :core:di
    :feature:image-cutting --> :core:crash
    :feature:image-cutting --> :feature:compare
    :feature:crop --> :core:data
    :feature:crop --> :core:ui
    :feature:crop --> :core:domain
    :feature:crop --> :core:resources
    :feature:crop --> :core:settings
    :feature:crop --> :core:di
    :feature:crop --> :core:crash
    :feature:crop --> :lib:opencv-tools
    :feature:color-tools --> :core:data
    :feature:color-tools --> :core:ui
    :feature:color-tools --> :core:domain
    :feature:color-tools --> :core:resources
    :feature:color-tools --> :core:settings
    :feature:color-tools --> :core:di
    :feature:color-tools --> :core:crash
    :feature:format-conversion --> :core:data
    :feature:format-conversion --> :core:ui
    :feature:format-conversion --> :core:domain
    :feature:format-conversion --> :core:resources
    :feature:format-conversion --> :core:settings
    :feature:format-conversion --> :core:di
    :feature:format-conversion --> :core:crash
    :feature:format-conversion --> :feature:compare
    :feature:ascii-art --> :core:data
    :feature:ascii-art --> :core:ui
    :feature:ascii-art --> :core:domain
    :feature:ascii-art --> :core:resources
    :feature:ascii-art --> :core:settings
    :feature:ascii-art --> :core:di
    :feature:ascii-art --> :core:crash
    :feature:ascii-art --> :feature:filters
    :feature:ascii-art --> :lib:ascii
    :core:filters --> :core:domain
    :core:filters --> :core:ui
    :core:filters --> :core:resources
    :core:filters --> :core:settings
    :core:filters --> :core:utils
    :core:filters --> :lib:curves
    :core:filters --> :lib:ascii
    :core:filters --> :lib:neural-tools
    :feature:apng-tools --> :core:data
    :feature:apng-tools --> :core:ui
    :feature:apng-tools --> :core:domain
    :feature:apng-tools --> :core:resources
    :feature:apng-tools --> :core:settings
    :feature:apng-tools --> :core:di
    :feature:apng-tools --> :core:crash
    :feature:image-preview --> :core:data
    :feature:image-preview --> :core:ui
    :feature:image-preview --> :core:domain
    :feature:image-preview --> :core:resources
    :feature:image-preview --> :core:settings
    :feature:image-preview --> :core:di
    :feature:image-preview --> :core:crash
    :feature:filters --> :core:filters
    :feature:filters --> :core:data
    :feature:filters --> :core:ui
    :feature:filters --> :core:domain
    :feature:filters --> :core:resources
    :feature:filters --> :core:settings
    :feature:filters --> :core:di
    :feature:filters --> :core:crash
    :feature:filters --> :core:ksp
    :feature:filters --> :feature:draw
    :feature:filters --> :feature:pick-color
    :feature:filters --> :feature:compare
    :feature:filters --> :lib:opencv-tools
    :feature:filters --> :lib:neural-tools
    :feature:filters --> :lib:curves
    :feature:filters --> :lib:ascii
    :feature:image-stacking --> :core:data
    :feature:image-stacking --> :core:ui
    :feature:image-stacking --> :core:domain
    :feature:image-stacking --> :core:resources
    :feature:image-stacking --> :core:settings
    :feature:image-stacking --> :core:di
    :feature:image-stacking --> :core:crash
    :feature:main --> :core:data
    :feature:main --> :core:ui
    :feature:main --> :core:domain
    :feature:main --> :core:resources
    :feature:main --> :core:settings
    :feature:main --> :core:di
    :feature:main --> :core:crash
    :feature:main --> :feature:settings

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing Guidelines

This documentation contains set of guidelines to help you during the contribution process.

# Submitting Contributions👨🏻‍💻
Below you will find the process and workflow used to review and merge your changes.
## 🌟 : Choose an issue/ Create an issue

- Look for the existing issue or create your own issue.
- Comment on the respective issue you would like to work before creating a Pull Request.
- Wait for the issue to be assigned to you after which you can start working on it.

## 🌟 : Fork the repository

- Fork this repository "ImageToolbox" by clicking on the "Fork" button. This will create a local copy of this respository on your GitHub profile.

## 🌟 : Clone the forked repository

- Once the repository is forked you need to clone it to your local machine.
- Click on the "Code" button in the repository page and copy the link provided in the dropdown menu.


```bash
git clone https://github.com/<your-username>/<ImageToolbox>  
```

- Keep a reference to the original project in `upstream` remote.

```bash  
cd <repo-name>  
git remote add upstream https://github.com/<upstream-owner>/<ImageToolbox>
git remote -v # To the check the remotes for this repository 
```  

- If the project is forked already, update the copy before working.

```bash
git remote update
git checkout <branch-name>
git rebase upstream/<branch-name>
``` 

## 🌟 : Create a new branch

- Always create a new branch and name it accordingly so as to identify the issue you are addressing.

```bash
# It will create a new branch with name branch_name and switch to that branch 
git checkout -b branch_name
```
## 🌟 : Work on the issue assigned

- Work on the issue(s) assigned to you, make the necessary changes in the files/folders needed.
- After making the changes add them to the branch you've created.

```bash  
# To add all new files to branch Branch_Name  
git add .  

# To add only a few files to Branch_Name
git add <file name>
```
## 🌟 : Commit the changes

- Add your commits.
- Along with the commit give a descriptive message that reflects your changes.

```bash
git commit -m "message"  
```
- Note : A Pull Request should always have only one commit. 

## 🌟 : Push the changes

- Push the committed changes in your branch to your remote repository.

```bash  
git push origin branch_name
```
## 🌟 : Create a Pull Request

- Go to your repository in the browser and click on compare and pull request.
- Add a title and description to your pull request that best describes your contribution.
- After which the pull request will be reviewed and the maintainer will provide the reviews required for the changes.

If no changes are needed, this means that your Pull Request has been reviewed and will be merged to the original code base by the maintainer.


Happy Hacking!

================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: README.md
================================================
<div align="center">
</br>
<img src="./fastlane/metadata/android/en-US/images/logo/logo.png" width="200" />

</div>

<div align="center">

# Image Toolbox

</div>

</br>

<p align="center">
  <img alt="API" src="https://img.shields.io/badge/Api%2023+-50f270?logo=android&logoColor=black&style=for-the-badge"/></a>
  <img alt="Kotlin" src="https://img.shields.io/badge/Kotlin-a503fc?logo=kotlin&logoColor=white&style=for-the-badge"/></a>
  <img alt="Jetpack Compose" src="https://img.shields.io/static/v1?style=for-the-badge&message=Jetpack+Compose&color=4285F4&logo=Jetpack+Compose&logoColor=FFFFFF&label="/></a> 
    <img alt="material" src="https://custom-icon-badges.demolab.com/badge/material%20you-lightblue?style=for-the-badge&logoColor=333&logo=material-you"/></a>
  </br>
  </br>
  
 <img src="https://img.shields.io/badge/327.8K-aeff4d?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI%2BCiAgICA8cGF0aCBkPSJNMTIuODksM0wxNC44NSwzLjRMMTEuMTEsMjFMOS4xNSwyMC42TDEyLjg5LDNNMTkuNTksMTJMMTYsOC40MVY1LjU4TDIyLjQyLDEyTDE2LDE4LjQxVjE1LjU4TDE5LjU5LDEyTTEuNTgsMTJMOCw1LjU4VjguNDFMNC40MSwxMkw4LDE1LjU4VjE4LjQxTDEuNTgsMTJaIgogICAgICAgIGZpbGw9IndoaXRlIiAvPgo8L3N2Zz4%3D&label=Lines%20of%20code&labelColor=4b731a"/>

<img src="https://img.shields.io/github/commits-since/t8rin/ImageResizer/v1.0?color=palegreen&label=Commits&style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPnNvdXJjZS1jb21taXQ8L3RpdGxlPjxwYXRoIGQ9Ik0xNywxMkMxNywxNC40MiAxNS4yOCwxNi40NCAxMywxNi45VjIxSDExVjE2LjlDOC43MiwxNi40NCA3LDE0LjQyIDcsMTJDNyw5LjU4IDguNzIsNy41NiAxMSw3LjFWM0gxM1Y3LjFDMTUuMjgsNy41NiAxNyw5LjU4IDE3LDEyTTEyLDlBMywzIDAgMCwwIDksMTJBMywzIDAgMCwwIDEyLDE1QTMsMyAwIDAsMCAxNSwxMkEzLDMgMCAwLDAgMTIsOVoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPg==&labelColor=07ab4e">
 
<img src="https://img.shields.io/github/languages/code-size/t8rin/imageresizer?style=for-the-badge&color=8ce2ff&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPndlaWdodDwvdGl0bGU+PHBhdGggZD0iTTEyLDNBNCw0IDAgMCwxIDE2LDdDMTYsNy43MyAxNS44MSw4LjQxIDE1LjQ2LDlIMThDMTguOTUsOSAxOS43NSw5LjY3IDE5Ljk1LDEwLjU2QzIxLjk2LDE4LjU3IDIyLDE4Ljc4IDIyLDE5QTIsMiAwIDAsMSAyMCwyMUg0QTIsMiAwIDAsMSAyLDE5QzIsMTguNzggMi4wNCwxOC41NyA0LjA1LDEwLjU2QzQuMjUsOS42NyA1LjA1LDkgNiw5SDguNTRDOC4xOSw4LjQxIDgsNy43MyA4LDdBNCw0IDAgMCwxIDEyLDNNMTIsNUEyLDIgMCAwLDAgMTAsN0EyLDIgMCAwLDAgMTIsOUEyLDIgMCAwLDAgMTQsN0EyLDIgMCAwLDAgMTIsNVoiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPg==&labelColor=0782ab">
 
</br>
</br>

<a href="https://hits.sh/github.com/t8rin/ImageResizer/">

  <img src="https://hits.sh/github.com/t8rin/ImageResizer.svg?style=for-the-badge&label=Page%20Views&extraCount=7500&color=ff3f6f&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJzdmctaWNvbiIgc3R5bGU9IndpZHRoOiAxZW07IGhlaWdodDogMWVtO3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7ZmlsbDojZmZmZmZmO292ZXJmbG93OiBoaWRkZW47IiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiPjxwYXRoIGQ9Ik01MTIgMzg0YTEyOCAxMjggMCAwIDAtMTI4IDEyOCAxMjggMTI4IDAgMCAwIDEyOCAxMjggMTI4IDEyOCAwIDAgMCAxMjgtMTI4IDEyOCAxMjggMCAwIDAtMTI4LTEyOG0wIDM0MS4zMzMzMzNhMjEzLjMzMzMzMyAyMTMuMzMzMzMzIDAgMCAxLTIxMy4zMzMzMzMtMjEzLjMzMzMzMyAyMTMuMzMzMzMzIDIxMy4zMzMzMzMgMCAwIDEgMjEzLjMzMzMzMy0yMTMuMzMzMzMzIDIxMy4zMzMzMzMgMjEzLjMzMzMzMyAwIDAgMSAyMTMuMzMzMzMzIDIxMy4zMzMzMzMgMjEzLjMzMzMzMyAyMTMuMzMzMzMzIDAgMCAxLTIxMy4zMzMzMzMgMjEzLjMzMzMzM20wLTUzMy4zMzMzMzNDMjk4LjY2NjY2NyAxOTIgMTE2LjQ4IDMyNC42OTMzMzMgNDIuNjY2NjY3IDUxMmM3My44MTMzMzMgMTg3LjMwNjY2NyAyNTYgMzIwIDQ2OS4zMzMzMzMgMzIwczM5NS41Mi0xMzIuNjkzMzMzIDQ2OS4zMzMzMzMtMzIwYy03My44MTMzMzMtMTg3LjMwNjY2Ny0yNTYtMzIwLTQ2OS4zMzMzMzMtMzIweiIgZmlsbD0iIi8%2BPC9zdmc%2B&labelColor=870b2a"/>
  
</a>
  
<a href="https://github.com/t8rin/ImageResizer/releases">
  
  <img src="https://img.shields.io/github/downloads/t8rin/ImageResizer/total?color=ff9500&style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPmRvd25sb2FkPC90aXRsZT48cGF0aCBkPSJNNSwyMEgxOVYxOEg1TTE5LDlIMTVWM0g5VjlINUwxMiwxNkwxOSw5WiIgZmlsbD0id2hpdGUiIC8+PC9zdmc+&labelColor=a6660d"/>
  
</a>
  
<a href="https://github.com/t8rin/ImageResizer/stargazers">
  
  <img src="https://img.shields.io/github/stars/t8rin/imageresizer?color=ffff00&style=for-the-badge&labelColor=a1a116&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHRpdGxlPnN0YXI8L3RpdGxlPjxwYXRoIGQ9Ik0xMiwxNy4yN0wxOC4xOCwyMUwxNi41NCwxMy45N0wyMiw5LjI0TDE0LjgxLDguNjJMMTIsMkw5LjE5LDguNjJMMiw5LjI0TDcuNDUsMTMuOTdMNS44MiwyMUwxMiwxNy4yN1oiIGZpbGw9IndoaXRlIiAvPjwvc3ZnPg=="/>
  
</a>
  
</br>

<a href="https://github.com/t8rin/imageresizer/releases/latest">

  <img src="https://img.shields.io/github/v/release/t8rin/imageresizer?color=a1168e&include_prereleases&logo=github&style=for-the-badge&labelColor=700f63"/>
  
</a>

<a href="https://play.google.com/store/apps/details?id=ru.tech.imageresizershrinker">

  <img src="https://img.shields.io/endpoint?color=a1168e&logo=google-play&style=for-the-badge&label=Play%20store&url=https%3A%2F%2Fplay.cuzi.workers.dev%2Fplay%3Fi%3Dru.tech.imageresizershrinker%26l%3DAndroid%26m%3D%24version&labelColor=700f63"/>
  
</a>

<a href="https://f-droid.org/packages/ru.tech.imageresizershrinker">

  <img src="https://img.shields.io/f-droid/v/ru.tech.imageresizershrinker?color=a1168e&include_prereleases&logo=FDROID&style=for-the-badge&labelColor=700f63"/>
  
</a>

</br>
</br>

<img src="https://wakatime.com/badge/user/7fa5ec35-3afd-4c14-984e-6ea7daf545c7.svg?style=social" style="height: 28px;"/>

</br>
</br>

  <a href="https://hellogithub.com/repository/4c5f2fae4eb545ab87cad9ffd19870ca" target="_blank">
    <img src="https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=4c5f2fae4eb545ab87cad9ffd19870ca&claim_uid=ubtZe5aXVz0n2QA&theme=dark" alt="Featured|HelloGitHub" style="width: 250px; height: 54px;" width="250" height="54" />
  </a>
  

</p>

<div align="center">


# 🗺️ Project Overview

ImageToolbox is a versatile image editing tool designed for efficient photo manipulation. It allows
users to crop, apply filters, edit EXIF data, erase backgrounds, and even enhance images with AI.
Ideal for both photographers and developers, the tool offers a simple interface with powerful
capabilities.

</div>

<p align="middle">
    <img src="./fastlane/metadata/android/en-US/images/banner/banner1.png" width="99%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/01.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/02.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/03.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/04.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/05.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/06.png" width="13%" />
    <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/07.png" width="13%" />
</p>

<div align="center">

# 📔 Wiki
Check out Image Toolbox [Wiki](https://github.com/T8RIN/ImageToolbox/wiki) for FAQ and useful info
</br>
</br>

# ✈️ Telegram Links

</br>

  [![ImageToolbox Chat](https://img.shields.io/endpoint?&style=for-the-badge&colorA=246732&colorB=A2FFB0&logo=telegram&logoColor=A2FFB0&label=ImageToolbox%20Chat&url=https://tg.sumanjay.workers.dev/t8rin_imagetoolbox)](https://t.me/t8rin_imagetoolbox)
[![CI Telegram](https://img.shields.io/endpoint?&style=for-the-badge&colorA=29626B&colorB=B5DFE8&logo=telegram&logoColor=B5DFE8&url=https://tg.sumanjay.workers.dev/t8rin_imagetoolbox_ci)](https://t.me/t8rin_imagetoolbox_ci)


  </br>
  </br>
  Join our chat where you can discuss anything you want and also look into the CI channel where I post betas and announcements
  </br>

# ☕ Buy me a coffee

This application is completely free, but if you want to support the project development, you can
send a donation to the crypto wallets below

| </br> ![Boosty](https://img.shields.io/badge/Boosty-F15F2C?style=for-the-badge&logo=Boosty&logoColor=white) <br/> <br/> [https://boosty.to/t8rin](https://boosty.to/t8rin) <br/> <br/> | </br> ![Bitcoin](https://img.shields.io/badge/Bitcoin-EAB300?style=for-the-badge&logo=Bitcoin%20SV&logoColor=white) <br/> <br/> `18QFWMREkjzQa4yetfYsN5Ua51UubKmJut` <br/> <br/> | </br> ![Tether](https://img.shields.io/badge/USDT%20(TRC20)-168363?style=for-the-badge&logo=tether&logoColor=white) <br/> <br/> `TVdw6fP8dYsYA6HgQiSYNijBqPJ3k5BbYo` <br/> <br/> |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|

# 📲 Download

Go to the [Releases](https://github.com/t8rin/imageresizer/releases/latest) and the download latest
apk
or click one of the badges below.

</br>

<p align="middle">
    <a href="https://play.google.com/store/apps/details?id=ru.tech.imageresizershrinker"><img alt="Google Play" src="./fastlane/metadata/android/en-US/images/buttons/gplay.svg" height="60"></a>
    <a href="https://f-droid.org/packages/ru.tech.imageresizershrinker"><img alt="F-Droid" src="./fastlane/metadata/android/en-US/images/buttons/fdroid.svg" height="60"/></a>
    <a href="https://github.com/t8rin/imageresizer/releases/latest"><img alt="GitHub" src="./fastlane/metadata/android/en-US/images/buttons/github.svg" height="60"/></a>
    <a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22ru.tech.imageresizershrinker%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FT8RIN%2FImageToolbox%22%2C%22author%22%3A%22T8RIN%22%2C%22name%22%3A%22Image%20Toolbox%22%2C%22preferredApkIndex%22%3A1%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Image%20Toolbox%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22Image%20Toolbox%20is%20an%20powerful%20picture%20editor%2C%20which%20can%20crop%2C%20apply%20filters%2C%20add%20some%20drawing%2C%20erase%20background%2C%20edit%20EXIF%20or%20even%20create%20PDF%20file.%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22T8RIN%5C%22%7D%22%7D"><img alt="Obtainium" src="./fastlane/metadata/android/en-US/images/buttons/obtainium.svg" height="60"/></a>
    <a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22ru.tech.imageresizershrinker%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2FT8RIN%2FImageToolbox%22%2C%22author%22%3A%22T8RIN%22%2C%22name%22%3A%22Image%20Toolbox%22%2C%22preferredApkIndex%22%3A1%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Atrue%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Afalse%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22Image%20Toolbox%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22Image%20Toolbox%20is%20an%20powerful%20picture%20editor%2C%20which%20can%20crop%2C%20apply%20filters%2C%20add%20some%20drawing%2C%20erase%20background%2C%20edit%20EXIF%20or%20even%20create%20PDF%20file.%5C%22%2C%5C%22appAuthor%5C%22%3A%5C%22T8RIN%5C%22%7D%22%7D"><img alt="Obtainium (Pre-release)" src="./fastlane/metadata/android/en-US/images/buttons/obtainium-pre-release.svg" height="60"/></a>

</p>
</div>

# 💻 Installation Instructions

1. Clone the repository:
   ```bash
   git clone https://github.com/yourusername/ImageToolbox.git
   ```
2. Install dependencies using your preferred package manager (e.g., Gradle).
3. Build the project:
   bash ./gradlew build
4. Run the application:
   bash ./gradlew run

# ⚔️ FOSS vs MARKET

|       **Feature**       |      **FOSS**      |     **Market**     |
|:-----------------------:|:------------------:|:------------------:|
|       QR Scanner        |       Zxing        |       MlKit        |
| Auto Background Remover |        ONNX        |       MlKit        |
|    Document Scanner     |       OpenCV       |       MlKit        |
|        Analytics        |        :x:         | :white_check_mark: |
|       Crashlytics       |        :x:         | :white_check_mark: |
|    Other Google deps    |        :x:         | :white_check_mark: |
|   All Other Features    | :white_check_mark: | :white_check_mark: |

# ✨ Features

- Batch processing
- Applying filter chains (More than 310 various filters)

  <details>
  <summary>Available filters</summary>
  <br>

    - [x] Saturation
    - [x] Contrast
    - [x] Brightness
    - [x] Exposure
    - [x] RGB
    - [x] Hue
    - [x] White Balance
    - [x] Monochrome
    - [x] Black and White
    - [x] False Color
    - [x] Sharpen
    - [x] Gamma
    - [x] Highlights and Shadows
    - [x] Haze
    - [x] Sepia Tone
    - [x] Color Inversion
    - [x] Solarize
    - [x] Vibrance
    - [x] Luminance Threshold
    - [x] Pixellate
    - [x] Halftone
    - [x] Crosshatch
    - [x] Sobel Edge Detection
    - [x] Sketch Filter
    - [x] Toon Filter
    - [x] SmoothToon Filter
    - [x] CGA Colorspace Filter
    - [x] Posterize
    - [x] Convolution 3x3
    - [x] Emboss Filter
    - [x] Laplacian
    - [x] Kuwahara Filter
    - [x] Vignette
    - [x] Gaussian Blur
    - [x] Box Blur
    - [x] Stack Blur
    - [x] Fast Blur
    - [x] Bilaterial Blur
    - [x] Zoom Blur
    - [x] Median Blur
    - [x] Pixelation
    - [x] Enhanced Pixelation
    - [x] Stroke Pixelation
    - [x] Circle Pixelation
    - [x] Enhanced Circle Pixelation
    - [x] Diamond Pixelation
    - [x] Enhanced Diamond Pixelation
    - [x] Swirl Distortion
    - [x] Bulge Distortion
    - [x] Sphere Refraction
    - [x] Glass Sphere Refraction
    - [x] Dilation
    - [x] Non Maximum Suppression
    - [x] Opacity
    - [x] Weak Pixel Inclusion Filter
    - [x] Color Matrix 4x4
    - [x] Lookup
    - [x] Color Replacement
    - [x] Color Removance
    - [x] Bayer Two Dithering
    - [x] Bayer Three Dithering
    - [x] Bayer Four Dithering
    - [x] Bayer Eight Dithering
    - [x] Floyd Steinberg Dithering
    - [x] Jarvis Judice Ninke Dithering
    - [x] Sierra Dithering
    - [x] Two Row Sierra Dithering
    - [x] Sierra Lite Dithering
    - [x] Atkinson Dithering
    - [x] Stucki Dithering
    - [x] Burkes Dithering
    - [x] False Floyd Steinberg Dithering
    - [x] Left To Right Dithering
    - [x] Random Dithering
    - [x] Simple Threshold Dithering
    - [x] Quantizier
    - [x] Glitch Effect
    - [x] Enhanced Glitch Effect
    - [x] Anaglyph
    - [x] Noise
    - [x] Tent Blur
    - [x] Side Fade
    - [x] Erode
    - [x] Anisotropic Diffusion
    - [x] Horizontal Wind Stagger
    - [x] Fast Bilaterial Blur
    - [x] Poisson Blur
    - [x] Logarithmic Tone Mapping
    - [x] Aces Filmic Tone Mapping
    - [x] Crystallize
    - [x] Fractal Glass
    - [x] Marble
    - [x] Oil
    - [x] Water Effect
    - [x] Hable Filmic Tone Mapping
    - [x] Aces Hill Tone Mapping
    - [x] Hejl Burgess Tone Mapping
    - [x] Perlin Distortion
    - [x] Grayscale
    - [x] Dehaze
    - [x] Color Matrix 3x3
    - [x] Achromatomaly
    - [x] Achromatopsia
    - [x] Browni
    - [x] CodaChrome
    - [x] Cool
    - [x] Deutaromaly
    - [x] Deutaronotopia
    - [x] Night Vision
    - [x] Polaroid
    - [x] Protanopia
    - [x] Protonomaly
    - [x] Tritanopia
    - [x] Tritonomaly
    - [x] Vintage
    - [x] Warm
    - [x] Grain
    - [x] Unsharp
    - [x] Pastel
    - [x] Orange Haze
    - [x] Pink Dream
    - [x] Golden Hour
    - [x] Hot Summer
    - [x] Purple Mist
    - [x] Sunrise
    - [x] Colorful Swirl
    - [x] Soft Spring Light
    - [x] Autumn Tones
    - [x] Lavender Dream
    - [x] Cyberpunk
    - [x] Lemonade Light
    - [x] Spectral Fire
    - [x] Night Magic
    - [x] Fantasy Landscape
    - [x] Color Explosion
    - [x] Electric Gradient
    - [x] Caramel Darkness
    - [x] Futuristic Gradient
    - [x] Green Sun
    - [x] Rainbow World
    - [x] Deep Purple
    - [x] Space Portal
    - [x] Red Swirl
    - [x] Digital Code
    - [x] Bokeh
    - [x] Neon
    - [x] Old Tv
    - [x] Shuffle Blur
    - [x] Mobius
    - [x] Uchimura
    - [x] Aldridge
    - [x] Drago
    - [x] Color Anomaly
    - [x] Quantizier
    - [x] Ring Blur
    - [x] Cross Blur
    - [x] Circle Blur
    - [x] Star Blur
    - [x] Motion Blur
    - [x] Fast Gaussian Blur 2D
    - [x] Fast Gaussian Blur 3D
    - [x] Fast Gaussian Blur 4D
    - [x] Equalize Histogram
    - [x] Equalize Histogram HSV
    - [x] Equalize Histogram Pixelation
    - [x] Equalize Histogram Adaptive
    - [x] Equalize Histogram Adaptive LUV
    - [x] Equalize Histogram Adaptive LAB
    - [x] Equalize Histogram Adaptive HSV
    - [x] Equalize Histogram Adaptive HSL
    - [x] Clahe
    - [x] Clahe LUV
    - [x] Clahe LAB
    - [x] Clahe HSL
    - [x] Clahe HSV
    - [x] Crop To Content
    - [x] Linear Box Blur
    - [x] Linear Tent Blur
    - [x] Linear Gaussian Box Blur
    - [x] Linear Stack Blur
    - [x] Gaussian Box Blur
    - [x] Linear Fast Gaussian Next
    - [x] LinearFast Gaussian
    - [x] Linear Gaussian
    - [x] Low Poly
    - [x] Sand Painting
    - [x] Palette Transfer
    - [x] Enhanced Oil
    - [x] Simple Old TV
    - [x] HDR
    - [x] Simple Sketch
    - [x] Gotham
    - [x] Color Poster
    - [x] Tri Tone
    - [x] Clahe Oklch
    - [x] Clahe Jzazbz
    - [x] Clahe Oklab
    - [x] Yililoma Dithering
    - [x] Clustered 2x2 Dithering
    - [x] Clustered 4x4 Dithering
    - [x] Clustered8x8 Dithering
    - [x] Polka Dot
    - [x] LUT 512\*512
    - [x] Amatorka
    - [x] Miss Etikate
    - [x] Soft Elegance
    - [x] Soft Elegance Variant
    - [x] Bleach Bypass
    - [x] Candlelight
    - [x] Drop Blues
    - [x] Edgy Amber
    - [x] Fall Colors
    - [x] Film Stock 50
    - [x] Foggy Night
    - [x] Kodak
    - [x] Palette Transfer Variant
    - [x] 3D LUT (.cube / .CUBE)
    - [x] Pop Art
    - [x] Celluloid
    - [x] Coffee
    - [x] Golden Forest
    - [x] Greenish
    - [x] Retro Yellow
    - [x] Auto Crop
    - [x] Opening
    - [x] Closing
    - [x] Morphological Gradient
    - [x] Top Hat
    - [x] Black Hat
    - [x] Enhanced Zoom Blur
    - [x] Simple Sobel
    - [x] Simple Laplacian
    - [x] Auto Red Eyes remover
    - [x] Tone Curves 
    - [x] Mirror
    - [x] Kaleidoscope  
    - [x] Channel Mix  
    - [x] Color Halftone  
    - [x] Contour  
    - [x] Voronoi Crystallize  
    - [x] Despeckle  
    - [x] Diffuse  
    - [x] DoG  
    - [x] Equalize  
    - [x] Glow  
    - [x] Offset  
    - [x] Pinch  
    - [x] Pointillize  
    - [x] Polar Coordinates  
    - [x] Reduce Noise  
    - [x] Simple Solarize  
    - [x] Weave  
    - [x] Twirl  
    - [x] Rubber Stamp  
    - [x] Smear  
    - [x] Sphere Lens Distortion  
    - [x] Arc  
    - [x] Sparkle
    - [x] ASCII
    - [x] Moire
    - [x] Autumn
    - [x] Bone
    - [x] Jet
    - [x] Winter
    - [x] Rainbow
    - [x] Ocean
    - [x] Summer
    - [x] Spring
    - [x] Cool Variant 
    - [x] Hsv
    - [x] Pink
    - [x] Hot
    - [x] Parula
    - [x] Magma
    - [x] Inferno
    - [x] Plasma
    - [x] Viridis
    - [x] Cividis
    - [x] Twilight
    - [x] Twilight Shifted
    - [x] Deskew
    - [x] Auto Perspective
    - [x] Crop Or Perspective
    - [x] Turbo
    - [x] Deep Green 
    - [x] Lens Correction
    - [x] Seam Carving
    - [x] Error Level Analysis
    - [x] Luminance Gradient
    - [x] Average Distance
    - [x] Copy Move Detection
    - [x] Simple Weave Pixelization
    - [x] Staggered Pixelization
    - [x] Cross Pixelization
    - [x] Micro Macro Pixelization
    - [x] Orbital Pixelization
    - [x] Vortex Pixelization
    - [x] Pulse Grid Pixelization
    - [x] Nucleus Pixelization
    - [x] Radial Weave Pixelization
    - [x] Border Frame
    - [x] Glitch Variant
    - [x] VHS
    - [x] Block Glitch
    - [x] Crt Curvature
    - [x] Pixel Melt
    - [x] Bloom


  </details>

- Custom Filters Creation by Template filters
    - You can create filter from any filter chain
    - Share created filters by QR code
    - Scan filters from the app to get them on your device
- Files encryption and decryption with 100+ different algorithms available
- Adding Stickers and Text (Markup Layers Mode)
- Extract Text From Images (OCR)
    - 120+ languages
    - 3 Type of data: Fast, Standard, Best
    - Segmentation Mode Selection
    - Engine Mode Selection
    - Custom Tesseract options entering
    - Multiple languages at the same time
    - Reading from batch of images to file
    - Placing in EXIF metadata of batch images
    - Creating searchable PDF with recognized text behind images
- EXIF metadata editing/deleting
- Loading images from internet
- Image Stitching
- Image Stacking
- Image Splitting
- Background Removal
    - By drawing
  - Automatically (MlKit, U2NetP, U2Net, RMBG, InSPyReNet, BiRefNet, ISNet)
- Watermarking
    - Repeating Text
    - Image
    - Stamp
    - Timestamp
    - Digital (Steganography)
- Drawing on Image/Background
    - Pen
    - Flood Fil
    - Spray
    - Neon
    - Highlighter
    - Warp (Move, Grow, Shrink, Swirl, Mix)
    - Privacy Blur
    - Pixelation Paint
    - Text
    - Image Brush
    - Filter Brush
    - Spot Healing (with ability to download AI model for generative inpainting)
    - Pointing Arrow
    - Line
    - Double Pointing Arrow
    - Line Pointing Arrow
    - Double Line Pointing Arrow
    - Outlined Rect
    - Outlined Oval
    - Outlined Triangle
    - Outlined Polygon
    - Outlined Star
    - Rect
    - Oval
    - Triangle
    - Polygon
    - Star
    - Lasso
    - Line Style
        - Dashed
        - Dot Dashed
        - Zigzag
        - Stamped
- Image Resizing
    - Width changing
    - Height changing
    - Adaptive resize
    - Resize retaining aspect ratio
    - Resize by given limits
    - Center Crop with
        - Background color changing
        - Background blur drawing
    - Different Scaling Algorithms

      <details>
      <summary>Available methods</summary>
      <br>

      - Bilinear
      - Nearest Neighbour
      - Cubic
      - Mitchell-Netravalli
      - Catmull-Rom
      - Hermite
      - B-Spline
      - Hann
      - Bicubic
      - Hamming
      - Hanning
      - Blackman
      - Welch
      - Quadric
      - Gaussian
      - Sphinx
      - Bartlett
      - Robidoux
      - Robidoux Sharp
      - Spline 16
      - Spline 36
      - Spline 64
      - Kaiser
      - Bartlett-Hann
      - Box
      - Bohman
      - Lanczos 2
      - Lanczos 3
      - Lanczos 4
      - Lanczos 2 Jinc
      - Lanczos 3 Jinc
      - Lanczos 4 Jinc
      - Ewa Hanning
      - Ewa Robidoux
      - Ewa Blackman
      - Ewa Quadric
      - Ewa Robidoux Sharp
      - Ewa Lanczos 3 Jinc
      - Ginseng
      - Ginseng EWA
      - Lanczos Sharp EWA
      - Lanczos 4 Sharpest EWA
      - Lanczos Soft EWA
      - Haasn Soft
      - Lagrange 2
      - Lagrange 3
      - Lanczos 6
      - Lanczos 6 Jinc

      </details>

    - Different Scale Color Spaces
        - Linear
        - sRGB
        - LAB
        - LUV
        - Sigmoidal
        - XYZ
        - F32 Gamma 2.2
        - F32 Gamma 2.8
        - F32 Rec.709
        - F32 sRGB
        - LCH
        - Oklab sRGB
        - Oklab Rec.709
        - Oklab Gamma 2.2
        - Oklab Gamma 2.8
        - Jzazbz sRGB
        - Jzazbz Rec.709
        - Jzazbz Gamma 2.2
        - Jzazbz Gamma 2.8
- GIF conversion
    - GIF to images
    - Images to GIF
    - GIF to WEBP
- WEBP conversion
    - WEBP to images
    - Images to WEBP
- APNG conversion
    - APNG to images
    - Images to APNG
- JXL transcoding
    - JXL to JPEG
    - JPEG to JXL
- Animated JXL conversion
    - Images to JXL
    - JXL to Images
    - APNG to JXL
    - GIF to JXL
- PDF tools
    - PDF to images
    - Images to PDF
    - PDF previewing
    - Merge
    - Split
    - Rotate
    - Rearrange
    - Page Numbering
    - Watermark
    - Signature
    - Compress
    - Grayscale
    - Repair
    - Protect
    - Unlock
    - Metadata
    - Remove Pages
    - Crop
    - Flatten
    - Extract Images
    - Zip PDF
    - Print PDF
    - PDF to Text (OCR)
- Document Scanning
- AI tools (95+ ready to use models available)
    - Upscale
    - Remove BG
    - DeJPEG
    - DeNoise
    - Colorize
    - Artifacts
    - Enhance
    - Anime
    - Scans
- Barcodes
    - Scanning
    - Creating & Parsing common types
      - Plain
      - Url
      - WiFi
      - Email
      - Geolocation
      - Phone
      - SMS
      - Contact (vCard)
      - Calendar event
    - Sharing as images
    - 13 formats available
      - QR CODE
      - AZTEC
      - CODABAR
      - CODE 39
      - CODE 93
      - CODE 128
      - DATA MATRIX
      - EAN 8
      - EAN 13
      - ITF
      - PDF 417
      - UPC A
      - UPC E
- Collage Creation
    - From 1 to 20 images
    - More than 310 various collage layouts
- Image Shrinking
    - Quality compressing
    - Preset shrinking
    - Reducing size by given weight (in KB)
- Cropping
    - Regular crop
    - Free rotation crop
    - Free corners crop (can be used as Perspective Correction)
    - Crop by aspect ratio
    - Crop with shape mask
        
        <details>
          <summary>List of shapes</summary>
          <br/>
          
        - Rounded Corners
        - Cut Corners
        - Oval
        - Squircle
        - Octagon
        - Rounded Pentagon
        - Clover
        - Material Star
        - Kotlin Logo
        - Small Material Star
        - Heart
        - Shuriken
        - Explosion
        - Bookmark
        - Pill
        - Burger
        - Shield
        - Droplet
        - Arrow
        - Egg
        - Map
        - Enhanced Heart
        - Star
        - Image Mask
        - <details>
          <summary>Additional Shapes</summary>
          </br>
        
          ![image](./fastlane/metadata/android/en-US/images/banner/banner_shapes.png)

          </details>
        
        </details>


- Image Cutting (can be used as batch crop)         
- Tracing raster images to SVG
- Format Conversion
    - HEIF
    - HEIC
    - AVIF
    - WEBP
    - JPEG
    - JPG
    - PNG Lossless
    - PNG Lossy
    - OxiPNG
    - MozJpeg
    - Jpegli
    - JXL
    - JP2
    - J2K
    - TIFF
    - TIF
    - QOI
    - ICO
    - SVG, DNG, PSD, GIF to static raster images
    - Telegram sticker PNG format
- Files to Zip
- Comparing images
    - Slide
    - Toggle Tap
    - Transparency
    - Side By Side
    - Pixel By Pixel (7 Methods)
        - SSIM
        - AE
        - MAE
        - NCC
        - PSNR
        - RMSE
- Color Utils
    - Palette generation
        - Material You Scheme
        - Simple Colors
    - Import/Export palette across 41 format
      - ACB
      - ACO
      - ACT  
      - Android Xml  
      - ASE
      - Basic Xml  
      - Corel Painter  
      - Corel Draw  
      - Scribus Xml  
      - Corel Palette  
      - CSV
      - DCP
      - Gimp
      - Hex Rgba  
      - Image  
      - Json  
      - Open Office  
      - Paint Net  
      - Paint Shop Pro  
      - Rgba  
      - Rgb  
      - Riff  
      - Sketch  
      - SKP
      - SVG  
      - Swift  
      - Kotlin  
      - Corel Draw V3  
      - CLF
      - Swatches  
      - Autodesk Color Book  
      - Simple Palette  
      - Swatchbooker  
      - Afpalette  
      - Xara  
      - Koffice
      - KPL
      - HPL
      - Skencil  
      - Vga 24Bit  
      - Vga 18Bit  
    - Picking color from image
    - Gradient creation (Mesh gradients too)
    - Overlaying image with gradient
    - Mixing
    - Conversion
    - Harmonies
    - Shading
    - Tone Curves applying
- Color Library with more than 33k different colors
- Histograms
    - RGB
    - Brightness
    - Camera Like RGB
- Image source selection
- Additional Features
    - Base64 Decode/Encode
    - Rotating
    - Flipping
    - Perlin Noise Generation
    - Previewing SVG, DNG, PSD, DJVU and almost all types of images
    - Saving to any specific folder
    - Long press on save to choose one time output folder
    - Randomizing output filename
    - Using image cheksum as filename
    - Checksum Tools with ability to calculate and compare hashes
    - 64 different hashing algorithms
    - Audio files Album Cover export
    - Embedded media picker
    - Wallpapers Export
    - Ascii Art

**And More!**

#

<img src="./fastlane/metadata/android/en-US/images/banner/banner2.png" width="99%" />

# 🌟 UI tweaks

- Selecting Emoji for top app bar
- Ability to use Pixel like switch instead of Material You
- Secure Mode for app
- Maximum brightness for selected screens
- In app language changing
- Enabling or Disabling confetti
- Custom app color scheme
    - Different palette styles
    - Predefined schemes
    - Color inversion
    - Contrast adjusting
- Controlling borders thickness
- Enabling and disabling each existing shadow
- Haptics controls
- Light/Dark mode
- AMOLED mode
- Monet implementation (Dynamic colors) even for Android versions less than 12
  by [Dynamic Theme](https://github.com/T8RIN/DynamicTheme)
- Image based color scheme
- Icons Background shape selection
    - Rounded Corners
    - Cut Corners
    - Oval
    - Squircle
    - Octagon
    - Rounded Pentagon
    - Clover
    - Material Star
    - Small Material Star
    - Heart
    - Enhanced Heart
- Custom fonts

  <details>
  <summary>Preinstalled fonts</summary>
  <br>

    - Montserrat
    - Comfortaa
    - Caveat
    - Handjet
    - Jura
    - Podkova
    - Tektur
    - YsabeauSC
    - DejaVu
    - BadScript
    - RuslanDisplay
    - Catterdale
    - FRM32
    - Tokeely Brookings
    - Nunito
    - Nothing
    - WOPR Tweaked
    - Alegreya Sans
    - Minecraft Gnu
    - Granite Fixed
    - Nokia Pixel
    - Ztivalia
    - Axotrel
    - Lcd Octagon
    - Lcd Moving
    - Unisource

  </details>

- Ability to import any font (OTF/TTF) to further use
- In app font scale changing
- Changing between options list and grouped view
- Confetti Type selection
    - Default
    - Festive
    - Explode
    - Rain
    - Side
    - Corners
    - ImageToolbox
- Switch Type selection:
    - Material You
    - Compose
    - Pixel
    - Fluent
    - Cupertino
  - Liquid Glass
    - HyperOS
- Slider Type Selection:
    - Fancy
    - Material You
    - Material
    - HyperOS
- Shapes Type Selection with size adjustment:
    - Rounded
    - Cut
    - Squircle
    - Smooth
- Main screen layout customization

(Yes, the app supports dynamic coloring based on wallpapers for every android version)

# 📚 Tech stack & Open-source libraries

- Minimum SDK level 23

- [Kotlin](https://kotlinlang.org/) based

- [Image Toolbox Libs](https://github.com/T8RIN/ImageToolboxLibs) - set of essential libraries for
  Image Toolbox.

- [Dynamic Theme](https://github.com/T8RIN/DynamicTheme) - library, which allows you to easily
  implement custom color theming.

- [Modal Sheet](https://github.com/T8RIN/ModalSheet) - modal bottom sheet that follows M3
  guidelines.

- [Coroutines](https://github.com/Kotlin/kotlinx.coroutines) for asynchronous work.

- [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/)
  to emit values from data layer reactively.

- [Accompanist](https://github.com/google/accompanist) to expand jetpack compose opportunities.

- [Decompose](https://github.com/arkivanov/Decompose) - KMP lifecycle-aware business logic
  components (aka BLoCs) with routing (navigation) and pluggable UI

- [Hilt](https://dagger.dev/hilt/) for dependency injection.

- [Coil](https://github.com/coil-kt/coil) for loading images.

- [Konfetti](https://github.com/DanielMartinus/Konfetti) to establish beautiful particle system.

- Jetpack

    - [Compose](https://developer.android.com/jetpack/compose) - Modern Declarative UI style
      framework based on composable functions.

    - [Material You Kit](https://developer.android.com/jetpack/androidx/releases/compose-material3) -
      Material 3 powerful UI components.

    - [Data Store](https://developer.android.com/jetpack/androidx/releases/datastore) - Store data
      asynchronously, consistently, and transactionally.

    - [Lifecycle](https://developer.android.com/jetpack/androidx/releases/lifecycle) - Observe
      Android lifecycles and handle UI states upon the lifecycle changes.

    - [Exif Interface](https://developer.android.com/jetpack/androidx/releases/exifinterface) - Read
      and write image file EXIF tags.

- [GPU Image](https://github.com/cats-oss/android-gpuimage) for creating and applying filters to the
  images.

- [SmartToolFactory](https://github.com/SmartToolFactory) provides a bunch of helpful libraries.

- [AVIF Coder](https://github.com/awxkee/avif-coder)
  and [JXL Coder](https://github.com/awxkee/jxl-coder) libraries which provide avif, heic, heif and
  jxl support.

- [Aire](https://github.com/awxkee/aire) and [Trickle](https://github.com/T8RIN/Trickle) for
  creating and applying filters to the images on CPU
  using native cpp code.


# 📐 App Architecture

See Modules Graph at [ARCHITECTURE.md](https://github.com/T8RIN/ImageToolbox/blob/master/ARCHITECTURE.md)

<div align="center">

#

<img src="./fastlane/metadata/android/en-US/images/banner/banner3.png" width="99%" />

# 🌐 Translation

You can help translate Image Toolbox into your language
on [Hosted Weblate](https://hosted.weblate.org/engage/image-resizer/)

[![Состояние перевода](https://hosted.weblate.org/widgets/image-resizer/-/horizontal-auto.svg)](https://hosted.weblate.org/engage/image-resizer/)
</br>
[![Translation status](https://hosted.weblate.org/widgets/image-resizer/-/image-resizer/287x66-black.png)](https://hosted.weblate.org/engage/image-resizer/)

# ❤️ Find this repository useful?

Support it by joining **[stargazers](https://github.com/t8rin/ImageToolbox/stargazers)** for this
repository. :star: <br>
And **[follow](https://github.com/t8rin)** me for my next creations! 🤩

# ⭐ Star History

<a href="https://star-history.com/#T8RIN/ImageToolbox&Date">
 <picture>
   <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=T8RIN/ImageToolbox&type=Date&theme=dark" />
   <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=T8RIN/ImageToolbox&type=Date" />
   <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=T8RIN/ImageToolbox&type=Date" />
 </picture>
</a>

![](https://repobeats.axiom.co/api/embed/c62092c6ec0d00e67496223d50e39f48a582c532.svg)

# 📢 Contributors

<a href="https://github.com/t8rin/imageresizer/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=t8rin/Imageresizer"/>
</a>

# 🔒 Signing Certificate Hashes

SHA-256: `20d7689de0874f00015ea3e31fa067c15c03457d362d41d5e793db3a864fa534`

SHA-1: `d69eacb30eeae804e8b72d2384c3c616b1906785`

MD5: `db6f6b76c503d31099e4754e676353cf`

For more info, see [wiki](https://github.com/T8RIN/ImageToolbox/wiki/FAQ#how-can-i-verify-my-download-of-imagetoolbox-is-legitimate)

# ⚖️ License

```xml
Designed and developed by 2023 T8RIN

    Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
```


================================================
FILE: app/.gitignore
================================================
/build/
/release/
/foss/
/market/
/jxl/
/build
/release
/foss
/market
/jxl

================================================
FILE: app/build.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

@file:Suppress("UnstableApiUsage")

plugins {
    alias(libs.plugins.image.toolbox.application)
    alias(libs.plugins.image.toolbox.hilt)
}

android {
    val supportedAbi = arrayOf("armeabi-v7a", "arm64-v8a", "x86_64")

    namespace = "com.t8rin.imagetoolbox"

    defaultConfig {
        vectorDrawables.useSupportLibrary = true

        //Maintained for compatibility with old version
        applicationId = "ru.tech.imageresizershrinker"

        versionCode = libs.versions.versionCode.get().toIntOrNull()
        versionName = System.getenv("VERSION_NAME") ?: libs.versions.versionName.get()

        ndk {
            abiFilters.clear()
            //noinspection ChromeOsAbiSupport
            abiFilters += supportedAbi.toSet()
        }
    }

    androidResources {
        generateLocaleConfig = true
    }

    flavorDimensions += "app"

    productFlavors {
        create("foss") {
            dimension = "app"
            versionNameSuffix = "-foss"
            extra.set("gmsEnabled", false)
        }
        create("market") {
            dimension = "app"
            extra.set("gmsEnabled", true)
        }
    }

    buildTypes {
        debug {
            applicationIdSuffix = ".debug"
            resValue("string", "app_launcher_name", "Image Toolbox DEBUG")
            resValue("string", "file_provider", "com.t8rin.imagetoolbox.fileprovider.debug")
        }
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            resValue("string", "app_launcher_name", "Image Toolbox")
            resValue("string", "file_provider", "com.t8rin.imagetoolbox.fileprovider")
        }
        create("benchmark") {
            initWith(buildTypes.getByName("release"))
            signingConfig = signingConfigs.getByName("debug")
            matchingFallbacks += listOf("release")
            isMinifyEnabled = false
            isShrinkResources = false
        }
    }

    splits {
        abi {
            // Detect app bundle and conditionally disable split abis
            // This is needed due to a "Sequence contains more than one matching element" error
            // present since AGP 8.9.0, for more info see:
            // https://issuetracker.google.com/issues/402800800

            // AppBundle tasks usually contain "bundle" in their name
            //noinspection WrongGradleMethod
            val isBuildingBundle =
                gradle.startParameter.taskNames.any { it.lowercase().contains("bundle") }

            // Disable split abis when building appBundle
            isEnable = !isBuildingBundle
            reset()
            //noinspection ChromeOsAbiSupport
            include(*supportedAbi)
            isUniversalApk = true
        }
    }

    lint {
        disable += "Instantiatable"
    }

    packaging {
        jniLibs {
            keepDebugSymbols.add("**/*.so")
            pickFirsts.add("lib/*/libcoder.so")
            pickFirsts.add("**/libc++_shared.so")
            pickFirsts.add("**/libdatstore_shared_counter.so")
            useLegacyPackaging = true
        }
        resources {
            excludes += "META-INF/"
            excludes += "kotlin/"
            excludes += "org/"
            excludes += ".properties"
            excludes += ".bin"
            excludes += "META-INF/versions/9/OSGI-INF/MANIFEST.MF"
        }
    }

    buildFeatures {
        resValues = true
    }
}

base {
    archivesName = "image-toolbox-${android.defaultConfig.versionName}"
}

aboutLibraries {
    export.excludeFields.addAll("generated")
}

dependencies {
    implementation(projects.feature.root)
    implementation(projects.feature.mediaPicker)
    implementation(projects.feature.quickTiles)

    implementation(projects.lib.opencvTools)
    implementation(projects.lib.neuralTools)
    implementation(projects.lib.collages)

    implementation(libs.bouncycastle.pkix)
    implementation(libs.bouncycastle.provider)
    implementation(libs.pdfbox)

    "marketImplementation"(libs.quickie.bundled)
    "fossImplementation"(libs.quickie.foss)
}

dependencySubstitution {
    substitute(
        dependency = "com.caverock:androidsvg-aar:1.4",
        using = "com.github.deckerst:androidsvg:cc9d59a88f"
    )
}

afterEvaluate {
    android.productFlavors.forEach { flavor ->
        tasks.matching { task ->
            listOf("GoogleServices", "Crashlytics").any {
                task.name.contains(it)
            }.and(
                task.name.contains(
                    flavor.name.replaceFirstChar(Char::uppercase)
                )
            )
        }.forEach { task ->
            task.enabled = flavor.extra.get("gmsEnabled") == true
        }
    }
}

fun Project.dependencySubstitution(action: DependencySubstitutions.() -> Unit) {
    allprojects {
        configurations.all {
            resolutionStrategy.dependencySubstitution(action)
        }
    }
}

fun DependencySubstitutions.substitute(
    dependency: String,
    using: String
) {
    substitute(module(dependency)).using(module(using))
}

================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

-keep class * implements com.t8rin.imagetoolbox.core.filters.presentation.model.UiFilter
-keepclassmembers class * implements com.t8rin.imagetoolbox.core.filters.presentation.model.UiFilter {
    <init>(...);
}
-keep class * implements com.t8rin.imagetoolbox.core.filters.domain.model.Filter
-keepclassmembers class * implements com.t8rin.imagetoolbox.core.filters.domain.model.Filter {
    <init>(...);
}
-keepclassmembers class com.t8rin.imagetoolbox.core.filters.** {
    <init>(...);
}
-keep class com.t8rin.imagetoolbox.core.filters.**
-keep class com.t8rin.imagetoolbox.core.filters.*

# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE

-keep class org.beyka.tiffbitmapfactory.**{ *; }

-keep class org.bouncycastle.jcajce.provider.** { *; }
-keep class org.bouncycastle.jce.provider.** { *; }

-dontwarn com.google.re2j.Matcher
-dontwarn com.google.re2j.Pattern

-keepclassmembers class * {
    public java.lang.String name();
}

-keep enum * { *; }

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * extends java.lang.Enum {
    public java.lang.String name();
}

-keep class ai.onnxruntime.** { *; }

-keep class com.google.firebase.crashlytics.** { *; }
-keep class com.google.firebase.analytics.** { *; }
-keep class androidx.pdf.** { *; }
-keepnames class androidx.pdf.** { *; }

# Moshi reflective adapters need generic signatures in release.
-keepattributes Signature
-keepattributes *Annotation*
-keep class kotlin.Metadata { *; }

-keep class com.t8rin.imagetoolbox.feature.markup_layers.data.project.** { *; }
-keep class  com.t8rin.imagetoolbox.feature.markup_layers.data.project.**
-keep class  com.t8rin.imagetoolbox.feature.markup_layers.data.project.*

================================================
FILE: app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?><!--
  ~ ImageToolbox is an image editor for android
  ~ Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  ~ You should have received a copy of the Apache License
  ~ along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-sdk tools:overrideLibrary="com.github.awxkee.avifcodercoil, com.github.awxkee.avifcoder, com.google.mlkit.vision.segmentation.subject, androidx.pdf,androidx.pdf.viewer.fragment, androidx.pdf.document.service" />

    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />

    <uses-permission
        android:name="com.google.android.gms.permission.AD_ID"
        tools:node="remove" />
    <uses-permission
        android:name="android.permission.ACCESS_ADSERVICES_AD_ID"
        tools:node="remove" />
    <uses-permission
        android:name="android.permission.READ_PHONE_STATE"
        tools:node="remove" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
    <uses-permission android:name="android.permission.PROJECT_MEDIA" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <uses-permission
        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="ScopedStorage" />

    <application
        android:name=".app.presentation.components.ImageToolboxApplication"
        android:allowBackup="true"
        android:colorMode="wideColorGamut"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:enableOnBackInvokedCallback="true"
        android:fullBackupContent="@xml/backup_rules"
        android:hardwareAccelerated="true"
        android:hasFragileUserData="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_launcher_name"
        android:largeHeap="true"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ImageToolbox.Launcher"
        android:usesCleartextTraffic="true"
        tools:replace="android:allowBackup, android:label"
        tools:targetApi="tiramisu">

        <profileable
            android:shell="true"
            tools:targetApi="29" />

        <meta-data
            android:name="firebase_crashlytics_collection_enabled"
            android:value="false" />
        <meta-data
            android:name="firebase_analytics_collection_enabled"
            android:value="false" />

        <activity
            android:name=".app.presentation.AppActivity"
            android:exported="true"
            android:launchMode="singleTop">

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter android:label="@string/app_launcher_name">
                <action android:name="android.intent.action.VIEW" />
                <action android:name="com.android.camera.action.REVIEW" />
                <action android:name="android.provider.action.REVIEW" />
                <action android:name="android.provider.action.REVIEW_SECURE" />

                <data
                    android:scheme="content"
                    tools:ignore="AppLinkUrlError" />
                <data android:scheme="file" />
                <data android:mimeType="image/*" />
                <data android:pathSuffix=".jxl" />
                <data android:pathSuffix=".qoi" />
                <data android:pathSuffix=".itp" />
                <data android:mimeType="application/vnd.shana.informed.formtemplate" />
                <data android:mimeType="application/x-imagetoolbox-project" />
                <data android:mimeType="application/octet-stream" />
                <data android:mimeType="application/zip" />
                <data android:mimeType="application/pdf" />
                <data android:mimeType="*/pdf" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="*/*" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.ACTION_BUG_REPORT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.SEND_MULTIPLE" />
                <category android:name="android.intent.category.DEFAULT" />

                <data android:mimeType="*/*" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.EDIT" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="image/*"
                    tools:ignore="AppLinkUrlError" />
                <data android:mimeType="application/vnd.shana.informed.formtemplate" />
                <data android:mimeType="application/x-imagetoolbox-project" />
                <data android:mimeType="application/octet-stream" />
                <data android:mimeType="application/zip" />
                <data android:pathSuffix=".jxl" />
                <data android:pathSuffix=".qoi" />
                <data android:pathSuffix=".itp" />
                <data android:mimeType="application/pdf" />
                <data android:mimeType="*/pdf" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.INSERT_OR_EDIT" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="image/*"
                    tools:ignore="AppLinkUrlError" />
                <data android:mimeType="application/vnd.shana.informed.formtemplate" />
                <data android:mimeType="application/x-imagetoolbox-project" />
                <data android:mimeType="application/octet-stream" />
                <data android:mimeType="application/zip" />
                <data android:pathSuffix=".jxl" />
                <data android:pathSuffix=".qoi" />
                <data android:pathSuffix=".itp" />
                <data android:mimeType="application/pdf" />
                <data android:mimeType="*/pdf" />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.INSERT" />
                <category android:name="android.intent.category.DEFAULT" />

                <data
                    android:mimeType="image/*"
                    tools:ignore="AppLinkUrlError" />
                <data android:mimeType="application/vnd.shana.informed.formtemplate" />
                <data android:mimeType="application/x-imagetoolbox-project" />
                <data android:mimeType="application/octet-stream" />
                <data android:mimeType="application/zip" />
                <data android:pathSuffix=".jxl" />
                <data android:pathSuffix=".qoi" />
                <data android:pathSuffix=".itp" />
                <data android:mimeType="application/pdf" />
                <data android:mimeType="*/pdf" />
            </intent-filter>
        </activity>

        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="@string/file_provider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>

        <service
            android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
            android:enabled="false"
            android:exported="false">
            <meta-data
                android:name="autoStoreLocales"
                android:value="true" />
        </service>

        <!-- Prompt Google Play services to install the backported photo picker module -->
        <!--suppress AndroidDomInspection -->
        <service
            android:name="com.google.android.gms.metadata.ModuleDependencies"
            android:enabled="false"
            android:exported="false"
            tools:ignore="MissingClass">
            <intent-filter>
                <action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
            </intent-filter>

            <meta-data
                android:name="photopicker_activity:0:required"
                android:value="" />
        </service>

    </application>

</manifest>


================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/AppActivity.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation

import android.content.Intent
import androidx.compose.runtime.Composable
import com.arkivanov.decompose.retainedComponent
import com.t8rin.imagetoolbox.core.ui.utils.ComposeActivity
import com.t8rin.imagetoolbox.feature.root.presentation.RootContent
import com.t8rin.imagetoolbox.feature.root.presentation.screenLogic.RootComponent
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

@AndroidEntryPoint
class AppActivity : ComposeActivity() {

    @Inject
    lateinit var rootComponentFactory: RootComponent.Factory

    private val component: RootComponent by lazy {
        retainedComponent(factory = rootComponentFactory::invoke)
    }

    override fun handleIntent(intent: Intent) = component.handleDeeplinks(intent)

    @Composable
    override fun Content() = RootContent(component = component)

}

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/ImageToolboxApplication.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components

import com.t8rin.imagetoolbox.app.presentation.components.functions.attachLogWriter
import com.t8rin.imagetoolbox.app.presentation.components.functions.initCollages
import com.t8rin.imagetoolbox.app.presentation.components.functions.initColorNames
import com.t8rin.imagetoolbox.app.presentation.components.functions.initNeuralTool
import com.t8rin.imagetoolbox.app.presentation.components.functions.initOpenCV
import com.t8rin.imagetoolbox.app.presentation.components.functions.initPdfBox
import com.t8rin.imagetoolbox.app.presentation.components.functions.initQrScanner
import com.t8rin.imagetoolbox.app.presentation.components.functions.injectBaseComponent
import com.t8rin.imagetoolbox.app.presentation.components.functions.registerSecurityProviders
import com.t8rin.imagetoolbox.app.presentation.components.functions.setupFlags
import com.t8rin.imagetoolbox.app.presentation.components.utils.isMain
import com.t8rin.imagetoolbox.core.crash.presentation.components.applyGlobalExceptionHandler
import com.t8rin.imagetoolbox.core.domain.coroutines.AppScope
import com.t8rin.imagetoolbox.core.domain.saving.KeepAliveService
import com.t8rin.imagetoolbox.core.ui.utils.ComposeApplication
import com.t8rin.imagetoolbox.core.utils.initAppContext
import dagger.hilt.android.HiltAndroidApp
import io.ktor.client.HttpClient
import javax.inject.Inject


@HiltAndroidApp
class ImageToolboxApplication : ComposeApplication() {

    @Inject
    lateinit var keepAliveService: KeepAliveService

    @Inject
    lateinit var appScope: AppScope

    @Inject
    lateinit var httpClient: HttpClient

    private var isSetupCompleted: Boolean = false

    override fun onCreate() {
        super.onCreate()
        runSetup()
    }

    override fun runSetup() {
        if (isSetupCompleted) return

        if (isMain()) {
            setupFlags()
            initAppContext()
            initOpenCV()
            initNeuralTool()
            initColorNames()
            initQrScanner()
            attachLogWriter()
            applyGlobalExceptionHandler()
            registerSecurityProviders()
            initPdfBox()
            injectBaseComponent()
            initCollages()

            isSetupCompleted = true
        }
    }

}

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/AttachLogWriter.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import android.app.Application
import com.t8rin.imagetoolbox.core.resources.R
import com.t8rin.imagetoolbox.core.ui.utils.helper.DeviceInfo
import com.t8rin.logger.Logger
import com.t8rin.logger.attachLogWriter


internal fun Application.attachLogWriter() {
    Logger.attachLogWriter(
        context = this@attachLogWriter,
        fileProvider = getString(R.string.file_provider),
        logsFilename = "image_toolbox_logs.txt",
        startupLog = Logger.Log(
            tag = "Device Info",
            message = "--${DeviceInfo.get()}--",
            level = Logger.Level.Info
        ),
        isSyncCreate = false
    )
}

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitCollages.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import com.t8rin.collages.public.CollageConstants
import com.t8rin.imagetoolbox.core.data.image.utils.static

fun initCollages() =
    CollageConstants.requestMapper { static() }

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitColorNames.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import com.t8rin.colors.parser.ColorNameParser
import com.t8rin.imagetoolbox.app.presentation.components.ImageToolboxApplication
import kotlinx.coroutines.launch

internal fun ImageToolboxApplication.initColorNames() =
    appScope.launch { ColorNameParser.init(this@initColorNames) }

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitNeuralTool.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import com.t8rin.imagetoolbox.app.presentation.components.ImageToolboxApplication
import com.t8rin.imagetoolbox.core.domain.HF_BASE_URL
import com.t8rin.neural_tools.NeuralTool

internal fun ImageToolboxApplication.initNeuralTool() = NeuralTool.init(
    context = this,
    httpClient = httpClient,
    baseUrl = HF_BASE_URL
)

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitOpenCV.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import android.app.Application
import com.t8rin.opencv_tools.utils.OpenCV

internal fun Application.initOpenCV() = OpenCV.init(this)

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitPdfBox.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import android.app.Application
import com.tom_roush.pdfbox.android.PDFBoxResourceLoader

internal fun Application.initPdfBox() = PDFBoxResourceLoader.init(this)

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitQrScanner.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import android.graphics.Bitmap
import com.t8rin.imagetoolbox.core.ui.utils.helper.ImageUtils.applyPadding
import com.t8rin.opencv_tools.qr_prepare.QrPrepareHelper
import io.github.g00fy2.quickie.extensions.QrProcessor

internal fun initQrScanner() = QrProcessor.setProcessor(::prepareBitmap)

private fun prepareBitmap(bitmap: Bitmap): Bitmap =
    QrPrepareHelper.prepareQrForDecode(bitmap.applyPadding(100))

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InjectBaseComponent.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import com.t8rin.imagetoolbox.app.presentation.components.ImageToolboxApplication
import com.t8rin.imagetoolbox.core.ui.utils.BaseComponent

internal fun ImageToolboxApplication.injectBaseComponent() = BaseComponent.inject(keepAliveService)

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/RegisterSecurityProviders.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import com.t8rin.imagetoolbox.core.domain.model.CipherType
import com.t8rin.imagetoolbox.core.domain.model.HashingType
import com.t8rin.logger.makeLog
import org.bouncycastle.asn1.ASN1ObjectIdentifier
import org.bouncycastle.jce.provider.BouncyCastleProvider
import org.bouncycastle.operator.DefaultAlgorithmNameFinder
import java.security.Provider
import java.security.Security

internal fun registerSecurityProviders() {
    initBouncyCastle()

    HashingType.registerSecurityMessageDigests(
        Security.getAlgorithms("MessageDigest").filterNotNull()
    )

    val finder = DefaultAlgorithmNameFinder()

    CipherType.registerSecurityCiphers(
        Security.getAlgorithms("Cipher").filterNotNull().mapNotNull { cipher ->
            if (CipherType.BROKEN.any { cipher.contains(it, true) }) return@mapNotNull null

            val oid = cipher.removePrefix("OID.")
            if (oid.all { it.isDigit() || it.isWhitespace() || it == '.' }) {
                CipherType.getInstance(
                    cipher = cipher,
                    name = finder.getAlgorithmName(
                        ASN1ObjectIdentifier(oid)
                    )
                )
            } else {
                CipherType.getInstance(
                    cipher = cipher
                )
            }.also {
                val extraExclude = it.cipher == "DES"
                        || it.name == "DES/CBC"
                        || it.name == "THREEFISH-512"
                        || it.name == "THREEFISH-1024"
                        || it.name == "CCM"

                if (extraExclude) return@mapNotNull null
            }
        }
    )
}

private fun initBouncyCastle() {
    if (Security.getProvider(WORKAROUND_NAME) != null) return

    try {
        logProviders("OLD")

        Security.addProvider(BouncyCastleWorkaroundProvider())

        logProviders("NEW")
    } catch (e: Exception) {
        e.makeLog()
        "Failed to register BouncyCastleWorkaroundProvider".makeLog()
    }
}

private fun logProviders(tag: String): Int {
    val providers = Security.getProviders()
    providers.forEachIndexed { index, provider ->
        "$tag [$index]: ${provider.name} - ${provider.info}".makeLog("Providers")
    }
    return providers.size
}

private class BouncyCastleWorkaroundProvider(
    bouncyCastleProvider: Provider = BouncyCastleProvider()
) : Provider(
    WORKAROUND_NAME,
    bouncyCastleProvider.version,
    bouncyCastleProvider.info
) {
    init {
        for ((key, value) in bouncyCastleProvider.entries) {
            put(key.toString(), value.toString())
        }
    }
}

private const val WORKAROUND_NAME = "BC_WORKAROUND"

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/SetupFlags.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.functions

import androidx.compose.foundation.ComposeFoundationFlags.isPausableCompositionInPrefetchEnabled
import androidx.compose.material3.ComposeMaterial3Flags.isCheckboxStylingFixEnabled
import com.arkivanov.decompose.DecomposeSettings

internal fun setupFlags() {
    isCheckboxStylingFixEnabled = true
    DecomposeSettings.update { it.copy(duplicateConfigurationsEnabled = true) }
    isPausableCompositionInPrefetchEnabled = true
}

================================================
FILE: app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/utils/GetProcessName.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.app.presentation.components.utils

import android.annotation.SuppressLint
import android.app.ActivityManager
import android.app.Application
import android.content.Context.ACTIVITY_SERVICE
import android.os.Build.VERSION.SDK_INT
import com.t8rin.logger.makeLog

internal fun Application.isMain(): Boolean =
    getProcessName().makeLog("Current Process") == packageName.makeLog("Current packageName")


@SuppressLint("PrivateApi")
internal fun Application.getProcessName(): String? {
    if (SDK_INT >= 28) {
        return Application.getProcessName()
    }

    // Try using ActivityThread to determine the current process name.
    try {
        val activityThread = Class.forName(
            "android.app.ActivityThread",
            false,
            this::class.java.getClassLoader()
        )
        val packageName: Any?
        val currentProcessName = activityThread.getDeclaredMethod("currentProcessName")
        currentProcessName.isAccessible = true
        packageName = currentProcessName.invoke(null)
        if (packageName is String) {
            return packageName
        }
    } catch (exception: Throwable) {
        exception.makeLog()
    }

    // Fallback to the most expensive way
    val pid: Int = android.os.Process.myPid()
    val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager

    val processes = am.runningAppProcesses
    if (processes != null && processes.isNotEmpty()) {
        for (process in processes) {
            if (process.pid == pid) {
                return process.processName
            }
        }
    }

    return null
}

================================================
FILE: app/src/main/res/resources.properties
================================================
#
# ImageToolbox is an image editor for android
# Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# You should have received a copy of the Apache License
# along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
#
unqualifiedResLocale=en

================================================
FILE: app/src/market/debug/google-services.json
================================================
{
  "project_info": {
    "project_number": "698299287298",
    "project_id": "imagetoolbox-13e3c",
    "storage_bucket": "imagetoolbox-13e3c.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:698299287298:android:11af7edf43198644b6e41b",
        "android_client_info": {
          "package_name": "ru.tech.imageresizershrinker.debug"
        }
      },
      "oauth_client": [
        {
          "client_id": "698299287298-5ukroo831v2bn1vj8ff0oa7ch5h94mfg.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyBH5QgaBw6XAfuxhPVJzq-r9s8ZMFalXzU"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "698299287298-5ukroo831v2bn1vj8ff0oa7ch5h94mfg.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

================================================
FILE: app/src/market/release/google-services.json
================================================
{
  "project_info": {
    "project_number": "698299287298",
    "project_id": "imagetoolbox-13e3c",
    "storage_bucket": "imagetoolbox-13e3c.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:698299287298:android:11af7edf43198644b6e41b",
        "android_client_info": {
          "package_name": "ru.tech.imageresizershrinker"
        }
      },
      "oauth_client": [
        {
          "client_id": "698299287298-5ukroo831v2bn1vj8ff0oa7ch5h94mfg.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyBH5QgaBw6XAfuxhPVJzq-r9s8ZMFalXzU"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "698299287298-5ukroo831v2bn1vj8ff0oa7ch5h94mfg.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

================================================
FILE: benchmark/.gitignore
================================================
/build

================================================
FILE: benchmark/build.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

@file:Suppress("UnstableApiUsage")

import org.jetbrains.kotlin.gradle.dsl.JvmTarget


plugins {
    id("com.android.test")
    id("androidx.baselineprofile")
}

android {
    namespace = "com.t8rin.imagetoolbox.benchmark"
    compileSdk = libs.versions.androidCompileSdk.get().toIntOrNull()

    defaultConfig {
        minSdk = 23
        targetSdk = libs.versions.androidTargetSdk.get().toIntOrNull()

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
        targetCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
    }

    kotlin {
        compilerOptions {
            jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get()))
        }
    }

    buildTypes {
        // This benchmark buildType is used for benchmarking, and should function like your
        // release build (for example, with minification on). It"s signed with a debug key
        // for easy local/CI testing.
        create("benchmark") {
            isDebuggable = true
            signingConfig = getByName("debug").signingConfig
            matchingFallbacks += listOf("release")
        }
    }

    flavorDimensions += listOf("app")
    productFlavors {
        create("foss") { dimension = "app" }
        create("market") { dimension = "app" }
    }

    targetProjectPath = ":app"
    experimentalProperties["android.experimental.self-instrumenting"] = true
}

dependencies {
    implementation(libs.androidx.test.ext.junit)
    implementation(libs.espresso)
    implementation(libs.uiautomator)
    implementation(libs.benchmark.macro.junit4)
}

androidComponents {
    beforeVariants(selector().all()) {
        it.enable = it.buildType == "benchmark"
    }
}

================================================
FILE: benchmark/src/main/AndroidManifest.xml
================================================
<!--
  ~ ImageToolbox is an image editor for android
  ~ Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  ~ You should have received a copy of the Apache License
  ~ along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
  -->

<manifest />

================================================
FILE: benchmark/src/main/java/com/t8rin/imagetoolbox/benchmark/BaselineProfileGenerator.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.benchmark

import androidx.annotation.RequiresApi
import androidx.benchmark.macro.junit4.BaselineProfileRule
import org.junit.Rule
import org.junit.Test

@RequiresApi(28)
class BaselineProfileGenerator {
    @get:Rule
    val baselineProfileRule = BaselineProfileRule()

    @Test
    fun startup() = baselineProfileRule.collect(
        packageName = "com.t8rin.imagetoolbox",
        includeInStartupProfile = true,
        profileBlock = {
            startActivityAndWait()
            device.pressBack()
        }
    )
}

================================================
FILE: build-logic/.gitignore
================================================
*.iml
.gradle
/local.properties
.DS_Store
/build
/app/release
/captures
.externalNativeBuild
.cxx
/.idea

================================================
FILE: build-logic/convention/.gitignore
================================================
/build

================================================
FILE: build-logic/convention/build.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    `kotlin-dsl`
}

group = "com.t8rin.imagetoolbox.buildlogic"

// Configure the build-logic plugins to target JDK 17
// This matches the JDK used to build the project, and is not related to what is running on device.
java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType<KotlinCompile>().configureEach {
    compilerOptions {
        jvmTarget.set(JvmTarget.JVM_17)
    }
}

dependencies {
    compileOnly(libs.agp.gradle)
    compileOnly(libs.kotlin.gradle)
    compileOnly(libs.detekt.gradle)
    compileOnly(libs.compose.compiler.gradle)
    compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
}

gradlePlugin {
    // register the convention plugin
    plugins {
        register("imageToolboxLibrary") {
            id = "image.toolbox.library"
            implementationClass = "ImageToolboxLibraryPlugin"
        }
        register("imageToolboxHiltPlugin") {
            id = "image.toolbox.hilt"
            implementationClass = "ImageToolboxHiltPlugin"
        }
        register("imageToolboxLibraryFeature") {
            id = "image.toolbox.feature"
            implementationClass = "ImageToolboxLibraryFeaturePlugin"
        }
        register("imageToolboxLibraryComposePlugin") {
            id = "image.toolbox.compose"
            implementationClass = "ImageToolboxLibraryComposePlugin"
        }
        register("imageToolboxApplicationPlugin") {
            id = "image.toolbox.application"
            implementationClass = "ImageToolboxApplicationPlugin"
        }
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/ImageToolboxApplicationPlugin.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import com.android.build.api.dsl.ApplicationExtension
import com.t8rin.imagetoolbox.configureCompose
import com.t8rin.imagetoolbox.configureDetekt
import com.t8rin.imagetoolbox.configureKotlinAndroid
import com.t8rin.imagetoolbox.core
import com.t8rin.imagetoolbox.crash
import com.t8rin.imagetoolbox.data
import com.t8rin.imagetoolbox.di
import com.t8rin.imagetoolbox.domain
import com.t8rin.imagetoolbox.implementation
import com.t8rin.imagetoolbox.libs
import com.t8rin.imagetoolbox.projects
import com.t8rin.imagetoolbox.resources
import com.t8rin.imagetoolbox.settings
import com.t8rin.imagetoolbox.ui
import com.t8rin.imagetoolbox.utils
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

@Suppress("UNUSED")
class ImageToolboxApplicationPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            apply(plugin = "com.android.application")
            apply(plugin = "kotlin-parcelize")
            apply(plugin = "com.google.gms.google-services")
            apply(plugin = "com.google.firebase.crashlytics")
            apply(plugin = "com.mikepenz.aboutlibraries.plugin.android")
            apply(plugin = "org.jetbrains.kotlin.plugin.compose")
            apply(plugin = "io.gitlab.arturbosch.detekt")

            configureDetekt(extensions.getByType<DetektExtension>())

            extensions.configure<ApplicationExtension> {
                configureKotlinAndroid(
                    commonExtension = this,
                    createFlavors = false
                )
                defaultConfig.targetSdk = libs.versions.androidTargetSdk.get().toIntOrNull()
            }

            dependencies {
                implementation(libs.androidxCore)
                implementation(projects.core.data)
                implementation(projects.core.ui)
                implementation(projects.core.domain)
                implementation(projects.core.resources)
                implementation(projects.core.settings)
                implementation(projects.core.di)
                implementation(projects.core.crash)
                implementation(projects.core.utils)
            }

            configureCompose(extensions.getByType<ApplicationExtension>())
        }
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/ImageToolboxHiltPlugin.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import com.t8rin.imagetoolbox.implementation
import com.t8rin.imagetoolbox.ksp
import com.t8rin.imagetoolbox.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.dependencies

@Suppress("UNUSED")
class ImageToolboxHiltPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            apply(plugin = "dagger.hilt.android.plugin")
            apply(plugin = "com.google.devtools.ksp")

            dependencies {
                implementation(libs.dagger.hilt.android)
                ksp(libs.dagger.hilt.compiler)
            }
        }
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/ImageToolboxLibraryComposePlugin.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import com.android.build.api.dsl.LibraryExtension
import com.t8rin.imagetoolbox.configureCompose
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.getByType

@Suppress("UNUSED")
class ImageToolboxLibraryComposePlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            apply(plugin = "com.android.library")
            apply(plugin = "org.jetbrains.kotlin.plugin.compose")

            configureCompose(extensions.getByType<LibraryExtension>())
        }
    }
}


================================================
FILE: build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import com.t8rin.imagetoolbox.configureDetekt
import com.t8rin.imagetoolbox.core
import com.t8rin.imagetoolbox.crash
import com.t8rin.imagetoolbox.data
import com.t8rin.imagetoolbox.di
import com.t8rin.imagetoolbox.domain
import com.t8rin.imagetoolbox.implementation
import com.t8rin.imagetoolbox.projects
import com.t8rin.imagetoolbox.resources
import com.t8rin.imagetoolbox.settings
import com.t8rin.imagetoolbox.ui
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

@Suppress("UNUSED")
class ImageToolboxLibraryFeaturePlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            configureDetekt(extensions.getByType<DetektExtension>())
            dependencies {
                implementation(projects.core.data)
                implementation(projects.core.ui)
                implementation(projects.core.domain)
                implementation(projects.core.resources)
                implementation(projects.core.settings)
                implementation(projects.core.di)
                implementation(projects.core.crash)
            }
        }
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/ImageToolboxLibraryPlugin.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

import com.android.build.api.dsl.LibraryExtension
import com.t8rin.imagetoolbox.configureDetekt
import com.t8rin.imagetoolbox.configureKotlinAndroid
import com.t8rin.imagetoolbox.implementation
import com.t8rin.imagetoolbox.libs
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.getByType

@Suppress("UNUSED")
class ImageToolboxLibraryPlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            with(pluginManager) {
                apply("com.android.library")
                apply("kotlin-parcelize")
                apply("kotlinx-serialization")
                apply(libs.detekt.gradle.get().group)
            }

            configureDetekt(extensions.getByType<DetektExtension>())

            extensions.configure<LibraryExtension> {
                configureKotlinAndroid(this)
                defaultConfig.minSdk = libs.versions.androidMinSdk.get().toIntOrNull()
            }

            dependencies {
                implementation(libs.androidxCore)
            }
        }
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureCompose.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension

internal fun Project.configureCompose(
    commonExtension: CommonExtension
) {
    commonExtension.apply {
        buildFeatures.apply {
            compose = true
        }

        dependencies {
            implementation(libs.androidx.material3)
            implementation(libs.window.sizeclass)
            implementation(libs.androidx.material)
            implementation(libs.icons.extended)
            implementation(libs.compose.preview)
        }
    }

    extensions.configure<ComposeCompilerGradlePluginExtension> {
        stabilityConfigurationFiles.addAll(
            rootProject.layout.projectDirectory.file("compose_compiler_config.conf")
        )
    }
}


================================================
FILE: build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureDetekt.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox


import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.extensions.DetektExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.named

internal fun Project.configureDetekt(extension: DetektExtension) = extension.apply {
    tasks.named<Detekt>("detekt") {
        reports {
            xml.required.set(true)
            html.required.set(true)
            txt.required.set(true)
            sarif.required.set(true)
            md.required.set(true)
        }
    }
    dependencies {
        detektPlugins(libs.detekt.formatting)
        detektPlugins(libs.detekt.compose)
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureKotlinAndroid.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox

import com.android.build.api.dsl.CommonExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.assign
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.provideDelegate
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinBaseExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

internal fun Project.configureKotlinAndroid(
    commonExtension: CommonExtension,
    createFlavors: Boolean = true
) {
    commonExtension.apply {
        compileSdk = libs.versions.androidCompileSdk.get().toIntOrNull()
        compileSdkExtension = libs.versions.androidCompileSdkExtension.get().toIntOrNull()

        defaultConfig.apply {
            minSdk = libs.versions.androidMinSdk.get().toIntOrNull()
        }

        if (createFlavors) {
            flavorDimensions += "app"

            productFlavors.apply {
                create("foss") {
                    dimension = "app"
                }
                create("market") {
                    dimension = "app"
                }
            }
        }

        compileOptions.apply {
            sourceCompatibility = javaVersion
            targetCompatibility = javaVersion
            isCoreLibraryDesugaringEnabled = true
        }

        buildFeatures.apply {
            compose = false
            aidl = false
            shaders = false
            buildConfig = false
            resValues = false
        }

        packaging.apply {
            resources {
                excludes.add("/META-INF/{AL2.0,LGPL2.1}")
            }
        }

        lint.apply {
            disable += "UsingMaterialAndMaterial3Libraries"
            disable += "ModifierParameter"
        }
    }

    configureKotlin<KotlinAndroidProjectExtension>()

    dependencies {
        coreLibraryDesugaring(libs.desugaring)
    }
}

val Project.javaVersion: JavaVersion
    get() = JavaVersion.toVersion(
        libs.versions.jvmTarget.get()
    )

/**
 * Configure base Kotlin options
 */
private inline fun <reified T : KotlinBaseExtension> Project.configureKotlin() = configure<T> {
    val args = listOf(
        "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
        "-opt-in=androidx.compose.material3.ExperimentalMaterial3ExpressiveApi",
        "-opt-in=androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi",
        "-opt-in=androidx.compose.animation.ExperimentalAnimationApi",
        "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
        "-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
        "-opt-in=androidx.compose.ui.unit.ExperimentalUnitApi",
        "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
        "-opt-in=kotlinx.coroutines.FlowPreview",
        "-opt-in=androidx.compose.material.ExperimentalMaterialApi",
        "-opt-in=com.arkivanov.decompose.ExperimentalDecomposeApi",
        "-opt-in=coil3.annotation.ExperimentalCoilApi",
        "-opt-in=coil3.annotation.DelicateCoilApi",
        "-opt-in=kotlin.contracts.ExperimentalContracts",
        "-opt-in=androidx.compose.ui.ExperimentalComposeUiApi",
        "-opt-in=androidx.compose.ui.text.ExperimentalTextApi",
        "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi",
        "-Xannotation-default-target=param-property",
        "-XXLanguage:+PropertyParamAnnotationDefaultTargetMode"
    )
    // Treat all Kotlin warnings as errors (disabled by default)
    // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties
    val warningsAsErrors: String? by project
    when (this) {
        is KotlinAndroidProjectExtension -> compilerOptions
        is KotlinJvmProjectExtension -> compilerOptions
        else -> error("Unsupported project extension $this ${T::class}")
    }.apply {
        jvmTarget = JvmTarget.fromTarget(libs.versions.jvmTarget.get())
        allWarningsAsErrors = warningsAsErrors.toBoolean()
        freeCompilerArgs.addAll(args)
    }
    tasks.withType<KotlinCompile>().configureEach {
        compilerOptions.freeCompilerArgs.addAll(args)
    }
}

================================================
FILE: build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ProjectExtensions.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox

import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.gradle.kotlin.dsl.the

val Project.libs
    get(): LibrariesForLibs = the<LibrariesForLibs>()

val Project.projects
    get(): Projects = object : Projects, ProjectHolder {
        override fun project(path: String): Project = this@projects.project(path)
    }

val Projects.core
    get(): CoreProjects = object : CoreProjects, ProjectHolder by this {}

val CoreProjects.data
    get(): ProjectLibrary = project(":core:data")

val CoreProjects.ui
    get(): ProjectLibrary = project(":core:ui")

val CoreProjects.domain
    get(): ProjectLibrary = project(":core:domain")

val CoreProjects.resources
    get(): ProjectLibrary = project(":core:resources")

val CoreProjects.settings
    get(): ProjectLibrary = project(":core:settings")

val CoreProjects.di
    get(): ProjectLibrary = project(":core:di")

val CoreProjects.crash
    get(): ProjectLibrary = project(":core:crash")

val CoreProjects.utils
    get(): ProjectLibrary = project(":core:utils")

fun DependencyHandlerScope.implementation(
    dependency: Library
) = add("implementation", dependency)

fun DependencyHandlerScope.coreLibraryDesugaring(
    dependency: Library
) = add("coreLibraryDesugaring", dependency)

fun DependencyHandlerScope.implementation(
    dependency: ProjectLibrary
) = add("implementation", dependency)

fun DependencyHandlerScope.ksp(
    dependency: Library
) = add("ksp", dependency)

fun DependencyHandlerScope.detektPlugins(
    dependency: Library
) = add("detektPlugins", dependency)

typealias Library = Provider<MinimalExternalModuleDependency>

typealias ProjectLibrary = Project

interface Projects : ProjectHolder

interface CoreProjects : ProjectHolder

interface ProjectHolder {
    fun project(path: String): Project
}

================================================
FILE: build-logic/settings.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

@file:Suppress("UnstableApiUsage")

dependencyResolutionManagement {
    repositories {
        google()
        mavenCentral()
    }
    versionCatalogs {
        create("libs") {
            // make sure the file rootProject/gradle/verison.toml exists!
            from(files("../gradle/libs.versions.toml"))
        }
    }
}

rootProject.name = "build-logic"
include(":convention")

================================================
FILE: build.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

buildscript {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven { setUrl("https://jitpack.io") }
    }

    dependencies {
        classpath(libs.kotlinx.serialization.gradle)
        classpath(libs.ksp.gradle)
        classpath(libs.agp.gradle)
        classpath(libs.kotlin.gradle)
        classpath(libs.hilt.gradle)
        classpath(libs.gms.gradle)
        classpath(libs.firebase.crashlytics.gradle)
        classpath(libs.baselineprofile.gradle)
        classpath(libs.detekt.gradle)
        classpath(libs.aboutlibraries.gradle)
        classpath(libs.compose.compiler.gradle)
    }
}

tasks.register("clean", Delete::class) {
    delete(rootProject.layout.buildDirectory)
}

================================================
FILE: compose_compiler_config.conf
================================================
java.time.ZoneId
java.time.ZoneOffset
java.text.DecimalFormat
java.text.NumberFormat
java.time.Instant
java.time.Duration
java.time.LocalDate
java.time.LocalDateTime
java.time.LocalTime
java.time.ZonedDateTime
java.util.Date
java.util.Locale
java.io.File

kotlin.collections.*
kotlin.time.Duration

android.net.Uri
android.graphics.Bitmap

androidx.compose.ui.graphics.painter.Painter
androidx.compose.ui.graphics.vector.ImageVector
androidx.compose.ui.graphics.ImageBitmap

com.t8rin.imagetoolbox.core.crash.*
com.t8rin.imagetoolbox.core.filters.*
com.t8rin.imagetoolbox.core.resources.*
com.t8rin.imagetoolbox.core.data.*
com.t8rin.imagetoolbox.core.domain.*
com.t8rin.imagetoolbox.core.ui.*
com.t8rin.imagetoolbox.core.settings.*

com.t8rin.imagetoolbox.core.*
com.t8rin.imagetoolbox.feature.*

nl.dionsegijn.konfetti.core.*

================================================
FILE: core/crash/.gitignore
================================================
/build

================================================
FILE: core/crash/build.gradle.kts
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

plugins {
    alias(libs.plugins.image.toolbox.library)
    alias(libs.plugins.image.toolbox.hilt)
    alias(libs.plugins.image.toolbox.compose)
}

android.namespace = "com.t8rin.imagetoolbox.core.crash"

dependencies {
    implementation(projects.core.ui)
    implementation(projects.core.settings)

    "marketImplementation"(platform(libs.firebase.bom))
    "marketImplementation"(libs.firebase.crashlytics)
    "marketImplementation"(libs.firebase.analytics)
}

================================================
FILE: core/crash/src/foss/java/com/t8rin/imagetoolbox/core/crash/data/AnalyticsManagerImpl.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * You should have received a copy of the Apache License
 * along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
 */

package com.t8rin.imagetoolbox.core.crash.data

import com.t8rin.imagetoolbox.core.domain.remote.AnalyticsManager

internal object AnalyticsManagerImpl : AnalyticsManager {

    override var allowCollectCrashlytics: Boolean = false

    override var allowCollectAnalytics: Boolean = false

    override fun updateAnalyticsCollectionEnabled(value: Boolean) = Unit

    override fun updateAllowCollectCrashlytics(value: Boolean) = Unit

    override fun sendReport(throwable: Throwable) = Unit

    override fun registerScreenOpen(screenName: String) = Unit
}

================================================
FILE: core/crash/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?><!--
  ~ ImageToolbox is an image editor for android
  ~ Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  ~
  ~ You should have received a copy of the Apache License
  ~ along with this program.  If not, see <http://www.apache.org/licenses/LICENSE-2.0>.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <application>
        <activity android:name=".presentation.CrashActivity" />
    </application>

</manifest>

================================================
FILE: core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/di/CrashModule.kt
================================================
/*
 * ImageToolbox is an image editor for android
 * Copyright (c) 2025 T8RIN (M
Download .txt
Showing preview only (306K chars total). Download the full file or copy to clipboard to get everything.
gitextract_9qydnqng/

├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── android.yml
│       ├── android_foss.yml
│       ├── android_market.yml
│       └── tb_release.yml
├── .gitignore
├── ARCHITECTURE.md
├── ARCHITECTURE_2
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── app/
│   ├── .gitignore
│   ├── build.gradle.kts
│   ├── proguard-rules.pro
│   └── src/
│       ├── main/
│       │   ├── AndroidManifest.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── t8rin/
│       │   │           └── imagetoolbox/
│       │   │               └── app/
│       │   │                   └── presentation/
│       │   │                       ├── AppActivity.kt
│       │   │                       └── components/
│       │   │                           ├── ImageToolboxApplication.kt
│       │   │                           ├── functions/
│       │   │                           │   ├── AttachLogWriter.kt
│       │   │                           │   ├── InitCollages.kt
│       │   │                           │   ├── InitColorNames.kt
│       │   │                           │   ├── InitNeuralTool.kt
│       │   │                           │   ├── InitOpenCV.kt
│       │   │                           │   ├── InitPdfBox.kt
│       │   │                           │   ├── InitQrScanner.kt
│       │   │                           │   ├── InjectBaseComponent.kt
│       │   │                           │   ├── RegisterSecurityProviders.kt
│       │   │                           │   └── SetupFlags.kt
│       │   │                           └── utils/
│       │   │                               └── GetProcessName.kt
│       │   └── res/
│       │       └── resources.properties
│       └── market/
│           ├── debug/
│           │   └── google-services.json
│           └── release/
│               └── google-services.json
├── benchmark/
│   ├── .gitignore
│   ├── build.gradle.kts
│   └── src/
│       └── main/
│           ├── AndroidManifest.xml
│           └── java/
│               └── com/
│                   └── t8rin/
│                       └── imagetoolbox/
│                           └── benchmark/
│                               └── BaselineProfileGenerator.kt
├── build-logic/
│   ├── .gitignore
│   ├── convention/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           └── kotlin/
│   │               ├── ImageToolboxApplicationPlugin.kt
│   │               ├── ImageToolboxHiltPlugin.kt
│   │               ├── ImageToolboxLibraryComposePlugin.kt
│   │               ├── ImageToolboxLibraryFeaturePlugin.kt
│   │               ├── ImageToolboxLibraryPlugin.kt
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           ├── ConfigureCompose.kt
│   │                           ├── ConfigureDetekt.kt
│   │                           ├── ConfigureKotlinAndroid.kt
│   │                           └── ProjectExtensions.kt
│   └── settings.gradle.kts
├── build.gradle.kts
├── compose_compiler_config.conf
├── core/
│   ├── crash/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── crash/
│   │       │                           └── data/
│   │       │                               └── AnalyticsManagerImpl.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── crash/
│   │       │                           ├── di/
│   │       │                           │   └── CrashModule.kt
│   │       │                           └── presentation/
│   │       │                               ├── CrashActivity.kt
│   │       │                               ├── components/
│   │       │                               │   ├── CrashActionButtons.kt
│   │       │                               │   ├── CrashAttentionCard.kt
│   │       │                               │   ├── CrashBottomButtons.kt
│   │       │                               │   ├── CrashHandler.kt
│   │       │                               │   ├── CrashInfoCard.kt
│   │       │                               │   ├── CrashRootContent.kt
│   │       │                               │   └── GlobalExceptionHandler.kt
│   │       │                               └── screenLogic/
│   │       │                                   └── CrashComponent.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── crash/
│   │                                   └── data/
│   │                                       └── AnalyticsManagerImpl.kt
│   ├── data/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── data/
│   │                                   ├── coil/
│   │                                   │   ├── Base64Fetcher.kt
│   │                                   │   ├── CoilLogger.kt
│   │                                   │   ├── MemoryCache.kt
│   │                                   │   ├── PdfDecoder.kt
│   │                                   │   ├── TiffDecoder.kt
│   │                                   │   ├── TimeMeasureInterceptor.kt
│   │                                   │   └── UpscaleSvgDecoder.kt
│   │                                   ├── coroutines/
│   │                                   │   ├── AndroidDispatchersHolder.kt
│   │                                   │   └── AppScopeImpl.kt
│   │                                   ├── di/
│   │                                   │   ├── CoroutinesModule.kt
│   │                                   │   ├── ImageLoaderModule.kt
│   │                                   │   ├── ImageModule.kt
│   │                                   │   ├── JsonModule.kt
│   │                                   │   ├── LocalModule.kt
│   │                                   │   ├── RemoteModule.kt
│   │                                   │   ├── ResourcesModule.kt
│   │                                   │   └── SavingModule.kt
│   │                                   ├── image/
│   │                                   │   ├── AndroidImageCompressor.kt
│   │                                   │   ├── AndroidImageGetter.kt
│   │                                   │   ├── AndroidImagePreviewCreator.kt
│   │                                   │   ├── AndroidImageScaler.kt
│   │                                   │   ├── AndroidImageTransformer.kt
│   │                                   │   ├── AndroidMetadata.kt
│   │                                   │   ├── AndroidShareProvider.kt
│   │                                   │   └── utils/
│   │                                   │       ├── BlendingModeExt.kt
│   │                                   │       ├── CanvasUtils.kt
│   │                                   │       ├── ColorUtils.kt
│   │                                   │       ├── ImageCompressorBackend.kt
│   │                                   │       ├── StaticOptions.kt
│   │                                   │       └── compressor/
│   │                                   │           ├── AvifBackend.kt
│   │                                   │           ├── BmpBackend.kt
│   │                                   │           ├── HeicBackend.kt
│   │                                   │           ├── IcoBackend.kt
│   │                                   │           ├── Jpeg2000Backend.kt
│   │                                   │           ├── JpegliBackend.kt
│   │                                   │           ├── JpgBackend.kt
│   │                                   │           ├── JxlBackend.kt
│   │                                   │           ├── MozJpegBackend.kt
│   │                                   │           ├── OxiPngBackend.kt
│   │                                   │           ├── PngLosslessBackend.kt
│   │                                   │           ├── PngLossyBackend.kt
│   │                                   │           ├── QoiBackend.kt
│   │                                   │           ├── StaticGifBackend.kt
│   │                                   │           ├── TiffBackend.kt
│   │                                   │           └── WebpBackend.kt
│   │                                   ├── json/
│   │                                   │   └── MoshiParser.kt
│   │                                   ├── remote/
│   │                                   │   ├── AndroidDownloadManager.kt
│   │                                   │   └── AndroidRemoteResourcesStore.kt
│   │                                   ├── resource/
│   │                                   │   └── AndroidResourceManager.kt
│   │                                   ├── saving/
│   │                                   │   ├── AndroidFileController.kt
│   │                                   │   ├── AndroidFilenameCreator.kt
│   │                                   │   ├── AndroidKeepAliveService.kt
│   │                                   │   ├── KeepAliveForegroundService.kt
│   │                                   │   ├── SaveException.kt
│   │                                   │   ├── SavingFolder.kt
│   │                                   │   └── io/
│   │                                   │       ├── FileWriteable.kt
│   │                                   │       ├── StreamWriteable.kt
│   │                                   │       └── UriReadable.kt
│   │                                   └── utils/
│   │                                       ├── BitmapUtils.kt
│   │                                       ├── ChecksumUtils.kt
│   │                                       ├── CoilUtils.kt
│   │                                       ├── ContextUtils.kt
│   │                                       ├── CoroutinesUtils.kt
│   │                                       ├── FileUtils.kt
│   │                                       ├── HttpClientUtils.kt
│   │                                       └── WriteableUtils.kt
│   ├── di/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── di/
│   │                                   ├── EntryPointUtils.kt
│   │                                   └── Qualifiers.kt
│   ├── domain/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── kotlin/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── domain/
│   │                                   ├── Constants.kt
│   │                                   ├── coroutines/
│   │                                   │   ├── AppScope.kt
│   │                                   │   └── DispatchersHolder.kt
│   │                                   ├── image/
│   │                                   │   ├── ImageCompressor.kt
│   │                                   │   ├── ImageGetter.kt
│   │                                   │   ├── ImagePreviewCreator.kt
│   │                                   │   ├── ImageScaler.kt
│   │                                   │   ├── ImageShareProvider.kt
│   │                                   │   ├── ImageTransformer.kt
│   │                                   │   ├── Metadata.kt
│   │                                   │   ├── ShareProvider.kt
│   │                                   │   └── model/
│   │                                   │       ├── BlendingMode.kt
│   │                                   │       ├── ImageData.kt
│   │                                   │       ├── ImageFormat.kt
│   │                                   │       ├── ImageFormatGroup.kt
│   │                                   │       ├── ImageFrames.kt
│   │                                   │       ├── ImageInfo.kt
│   │                                   │       ├── ImageScaleMode.kt
│   │                                   │       ├── ImageWithSize.kt
│   │                                   │       ├── MetadataTag.kt
│   │                                   │       ├── Preset.kt
│   │                                   │       ├── Quality.kt
│   │                                   │       ├── ResizeAnchor.kt
│   │                                   │       ├── ResizeType.kt
│   │                                   │       └── TiffCompressionScheme.kt
│   │                                   ├── json/
│   │                                   │   └── JsonParser.kt
│   │                                   ├── model/
│   │                                   │   ├── CipherType.kt
│   │                                   │   ├── ColorModel.kt
│   │                                   │   ├── DomainAspectRatio.kt
│   │                                   │   ├── ExtraDataType.kt
│   │                                   │   ├── FileModel.kt
│   │                                   │   ├── FloatSize.kt
│   │                                   │   ├── HashingType.kt
│   │                                   │   ├── ImageModel.kt
│   │                                   │   ├── IntegerSize.kt
│   │                                   │   ├── MimeType.kt
│   │                                   │   ├── OffsetModel.kt
│   │                                   │   ├── Outline.kt
│   │                                   │   ├── PerformanceClass.kt
│   │                                   │   ├── Position.kt
│   │                                   │   ├── Pt.kt
│   │                                   │   ├── QrType.kt
│   │                                   │   ├── RectModel.kt
│   │                                   │   ├── SecureAlgorithmsMapping.kt
│   │                                   │   ├── SortType.kt
│   │                                   │   ├── SystemBarsVisibility.kt
│   │                                   │   └── VisibilityOwner.kt
│   │                                   ├── remote/
│   │                                   │   ├── AnalyticsManager.kt
│   │                                   │   ├── Cache.kt
│   │                                   │   ├── DownloadManager.kt
│   │                                   │   ├── DownloadProgress.kt
│   │                                   │   ├── RemoteResources.kt
│   │                                   │   └── RemoteResourcesStore.kt
│   │                                   ├── resource/
│   │                                   │   └── ResourceManager.kt
│   │                                   ├── saving/
│   │                                   │   ├── FileController.kt
│   │                                   │   ├── FilenameCreator.kt
│   │                                   │   ├── KeepAliveService.kt
│   │                                   │   ├── ObjectSaver.kt
│   │                                   │   ├── RandomStringGenerator.kt
│   │                                   │   ├── io/
│   │                                   │   │   ├── IoCloseable.kt
│   │                                   │   │   ├── Readable.kt
│   │                                   │   │   └── Writeable.kt
│   │                                   │   └── model/
│   │                                   │       ├── FileSaveTarget.kt
│   │                                   │       ├── FilenamePattern.kt
│   │                                   │       ├── ImageSaveTarget.kt
│   │                                   │       ├── SaveResult.kt
│   │                                   │       └── SaveTarget.kt
│   │                                   ├── transformation/
│   │                                   │   ├── ChainTransformation.kt
│   │                                   │   ├── GenericTransformation.kt
│   │                                   │   └── Transformation.kt
│   │                                   └── utils/
│   │                                       ├── ByteUtils.kt
│   │                                       ├── Delegates.kt
│   │                                       ├── FileMode.kt
│   │                                       ├── Flavor.kt
│   │                                       ├── IntUtils.kt
│   │                                       ├── KotlinUtils.kt
│   │                                       ├── ListUtils.kt
│   │                                       ├── ProgressInputStream.kt
│   │                                       ├── Quad.kt
│   │                                       ├── Rounding.kt
│   │                                       ├── SmartJob.kt
│   │                                       ├── StringUtils.kt
│   │                                       └── TimeUtils.kt
│   ├── filters/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── filters/
│   │                                   ├── data/
│   │                                   │   └── SideFadePaint.kt
│   │                                   ├── domain/
│   │                                   │   ├── FilterParamsInteractor.kt
│   │                                   │   ├── FilterProvider.kt
│   │                                   │   └── model/
│   │                                   │       ├── Filter.kt
│   │                                   │       ├── FilterParam.kt
│   │                                   │       ├── FilterUtils.kt
│   │                                   │       ├── FilterValueWrapper.kt
│   │                                   │       ├── TemplateFilter.kt
│   │                                   │       ├── enums/
│   │                                   │       │   ├── BlurEdgeMode.kt
│   │                                   │       │   ├── ColorMapType.kt
│   │                                   │       │   ├── FadeSide.kt
│   │                                   │       │   ├── MirrorSide.kt
│   │                                   │       │   ├── PaletteTransferSpace.kt
│   │                                   │       │   ├── PolarCoordinatesType.kt
│   │                                   │       │   ├── PopArtBlendingMode.kt
│   │                                   │       │   ├── SpotHealMode.kt
│   │                                   │       │   └── TransferFunc.kt
│   │                                   │       └── params/
│   │                                   │           ├── ArcParams.kt
│   │                                   │           ├── AsciiParams.kt
│   │                                   │           ├── BilaterialBlurParams.kt
│   │                                   │           ├── BloomParams.kt
│   │                                   │           ├── ChannelMixParams.kt
│   │                                   │           ├── ClaheParams.kt
│   │                                   │           ├── CropOrPerspectiveParams.kt
│   │                                   │           ├── EnhancedZoomBlurParams.kt
│   │                                   │           ├── GlitchParams.kt
│   │                                   │           ├── KaleidoscopeParams.kt
│   │                                   │           ├── LinearGaussianParams.kt
│   │                                   │           ├── LinearTiltShiftParams.kt
│   │                                   │           ├── PinchParams.kt
│   │                                   │           ├── RadialTiltShiftParams.kt
│   │                                   │           ├── RubberStampParams.kt
│   │                                   │           ├── SideFadeParams.kt
│   │                                   │           ├── SmearParams.kt
│   │                                   │           ├── SparkleParams.kt
│   │                                   │           ├── ToneCurvesParams.kt
│   │                                   │           ├── VoronoiCrystallizeParams.kt
│   │                                   │           └── WaterParams.kt
│   │                                   └── presentation/
│   │                                       ├── model/
│   │                                       │   ├── UiAcesFilmicToneMappingFilter.kt
│   │                                       │   ├── UiAcesHillToneMappingFilter.kt
│   │                                       │   ├── UiAchromatomalyFilter.kt
│   │                                       │   ├── UiAchromatopsiaFilter.kt
│   │                                       │   ├── UiAldridgeFilter.kt
│   │                                       │   ├── UiAmatorkaFilter.kt
│   │                                       │   ├── UiAnaglyphFilter.kt
│   │                                       │   ├── UiAnisotropicDiffusionFilter.kt
│   │                                       │   ├── UiArcFilter.kt
│   │                                       │   ├── UiAsciiFilter.kt
│   │                                       │   ├── UiAtkinsonDitheringFilter.kt
│   │                                       │   ├── UiAutoCropFilter.kt
│   │                                       │   ├── UiAutoPerspectiveFilter.kt
│   │                                       │   ├── UiAutoRemoveRedEyesFilter.kt
│   │                                       │   ├── UiAutumnTonesFilter.kt
│   │                                       │   ├── UiAverageDistanceFilter.kt
│   │                                       │   ├── UiBayerEightDitheringFilter.kt
│   │                                       │   ├── UiBayerFourDitheringFilter.kt
│   │                                       │   ├── UiBayerThreeDitheringFilter.kt
│   │                                       │   ├── UiBayerTwoDitheringFilter.kt
│   │                                       │   ├── UiBilaterialBlurFilter.kt
│   │                                       │   ├── UiBlackAndWhiteFilter.kt
│   │                                       │   ├── UiBlackHatFilter.kt
│   │                                       │   ├── UiBleachBypassFilter.kt
│   │                                       │   ├── UiBlockGlitchFilter.kt
│   │                                       │   ├── UiBloomFilter.kt
│   │                                       │   ├── UiBokehFilter.kt
│   │                                       │   ├── UiBorderFrameFilter.kt
│   │                                       │   ├── UiBoxBlurFilter.kt
│   │                                       │   ├── UiBrightnessFilter.kt
│   │                                       │   ├── UiBrowniFilter.kt
│   │                                       │   ├── UiBulgeDistortionFilter.kt
│   │                                       │   ├── UiBurkesDitheringFilter.kt
│   │                                       │   ├── UiCGAColorSpaceFilter.kt
│   │                                       │   ├── UiCandlelightFilter.kt
│   │                                       │   ├── UiCannyFilter.kt
│   │                                       │   ├── UiCaramelDarknessFilter.kt
│   │                                       │   ├── UiCelluloidFilter.kt
│   │                                       │   ├── UiChannelMixFilter.kt
│   │                                       │   ├── UiCircleBlurFilter.kt
│   │                                       │   ├── UiCirclePixelationFilter.kt
│   │                                       │   ├── UiClaheFilter.kt
│   │                                       │   ├── UiClaheHSLFilter.kt
│   │                                       │   ├── UiClaheHSVFilter.kt
│   │                                       │   ├── UiClaheJzazbzFilter.kt
│   │                                       │   ├── UiClaheLABFilter.kt
│   │                                       │   ├── UiClaheLUVFilter.kt
│   │                                       │   ├── UiClaheOklabFilter.kt
│   │                                       │   ├── UiClaheOklchFilter.kt
│   │                                       │   ├── UiClosingFilter.kt
│   │                                       │   ├── UiClustered2x2DitheringFilter.kt
│   │                                       │   ├── UiClustered4x4DitheringFilter.kt
│   │                                       │   ├── UiClustered8x8DitheringFilter.kt
│   │                                       │   ├── UiCodaChromeFilter.kt
│   │                                       │   ├── UiCoffeeFilter.kt
│   │                                       │   ├── UiColorAnomalyFilter.kt
│   │                                       │   ├── UiColorBalanceFilter.kt
│   │                                       │   ├── UiColorExplosionFilter.kt
│   │                                       │   ├── UiColorHalftoneFilter.kt
│   │                                       │   ├── UiColorMapFilter.kt
│   │                                       │   ├── UiColorMatrix3x3Filter.kt
│   │                                       │   ├── UiColorMatrix4x4Filter.kt
│   │                                       │   ├── UiColorOverlayFilter.kt
│   │                                       │   ├── UiColorPosterFilter.kt
│   │                                       │   ├── UiColorfulSwirlFilter.kt
│   │                                       │   ├── UiContourFilter.kt
│   │                                       │   ├── UiContrastFilter.kt
│   │                                       │   ├── UiConvexFilter.kt
│   │                                       │   ├── UiConvolution3x3Filter.kt
│   │                                       │   ├── UiCoolFilter.kt
│   │                                       │   ├── UiCopyMoveDetectionFilter.kt
│   │                                       │   ├── UiCropOrPerspectiveFilter.kt
│   │                                       │   ├── UiCropToContentFilter.kt
│   │                                       │   ├── UiCrossBlurFilter.kt
│   │                                       │   ├── UiCrossPixelizationFilter.kt
│   │                                       │   ├── UiCrosshatchFilter.kt
│   │                                       │   ├── UiCrtCurvatureFilter.kt
│   │                                       │   ├── UiCrystallizeFilter.kt
│   │                                       │   ├── UiCubeLutFilter.kt
│   │                                       │   ├── UiCyberpunkFilter.kt
│   │                                       │   ├── UiDeepPurpleFilter.kt
│   │                                       │   ├── UiDehazeFilter.kt
│   │                                       │   ├── UiDeskewFilter.kt
│   │                                       │   ├── UiDespeckleFilter.kt
│   │                                       │   ├── UiDeutaromalyFilter.kt
│   │                                       │   ├── UiDeutaronotopiaFilter.kt
│   │                                       │   ├── UiDiamondPixelationFilter.kt
│   │                                       │   ├── UiDiffuseFilter.kt
│   │                                       │   ├── UiDigitalCodeFilter.kt
│   │                                       │   ├── UiDilationFilter.kt
│   │                                       │   ├── UiDoGFilter.kt
│   │                                       │   ├── UiDragoFilter.kt
│   │                                       │   ├── UiDropBluesFilter.kt
│   │                                       │   ├── UiEdgyAmberFilter.kt
│   │                                       │   ├── UiElectricGradientFilter.kt
│   │                                       │   ├── UiEmbossFilter.kt
│   │                                       │   ├── UiEnhancedCirclePixelationFilter.kt
│   │                                       │   ├── UiEnhancedDiamondPixelationFilter.kt
│   │                                       │   ├── UiEnhancedGlitchFilter.kt
│   │                                       │   ├── UiEnhancedOilFilter.kt
│   │                                       │   ├── UiEnhancedPixelationFilter.kt
│   │                                       │   ├── UiEnhancedZoomBlurFilter.kt
│   │                                       │   ├── UiEqualizeFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveHSLFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveHSVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveLABFilter.kt
│   │                                       │   ├── UiEqualizeHistogramAdaptiveLUVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramFilter.kt
│   │                                       │   ├── UiEqualizeHistogramHSVFilter.kt
│   │                                       │   ├── UiEqualizeHistogramPixelationFilter.kt
│   │                                       │   ├── UiErodeFilter.kt
│   │                                       │   ├── UiErrorLevelAnalysisFilter.kt
│   │                                       │   ├── UiExposureFilter.kt
│   │                                       │   ├── UiFallColorsFilter.kt
│   │                                       │   ├── UiFalseColorFilter.kt
│   │                                       │   ├── UiFalseFloydSteinbergDitheringFilter.kt
│   │                                       │   ├── UiFantasyLandscapeFilter.kt
│   │                                       │   ├── UiFastBilaterialBlurFilter.kt
│   │                                       │   ├── UiFastBlurFilter.kt
│   │                                       │   ├── UiFastGaussianBlur2DFilter.kt
│   │                                       │   ├── UiFastGaussianBlur3DFilter.kt
│   │                                       │   ├── UiFastGaussianBlur4DFilter.kt
│   │                                       │   ├── UiFilmStock50Filter.kt
│   │                                       │   ├── UiFilter.kt
│   │                                       │   ├── UiFloydSteinbergDitheringFilter.kt
│   │                                       │   ├── UiFoggyNightFilter.kt
│   │                                       │   ├── UiFractalGlassFilter.kt
│   │                                       │   ├── UiFuturisticGradientFilter.kt
│   │                                       │   ├── UiGammaFilter.kt
│   │                                       │   ├── UiGaussianBlurFilter.kt
│   │                                       │   ├── UiGaussianBoxBlurFilter.kt
│   │                                       │   ├── UiGlassSphereRefractionFilter.kt
│   │                                       │   ├── UiGlitchFilter.kt
│   │                                       │   ├── UiGlitchVariantFilter.kt
│   │                                       │   ├── UiGlowFilter.kt
│   │                                       │   ├── UiGoldenForestFilter.kt
│   │                                       │   ├── UiGoldenHourFilter.kt
│   │                                       │   ├── UiGothamFilter.kt
│   │                                       │   ├── UiGrainFilter.kt
│   │                                       │   ├── UiGrayscaleFilter.kt
│   │                                       │   ├── UiGreenSunFilter.kt
│   │                                       │   ├── UiGreenishFilter.kt
│   │                                       │   ├── UiHDRFilter.kt
│   │                                       │   ├── UiHableFilmicToneMappingFilter.kt
│   │                                       │   ├── UiHalftoneFilter.kt
│   │                                       │   ├── UiHazeFilter.kt
│   │                                       │   ├── UiHejlBurgessToneMappingFilter.kt
│   │                                       │   ├── UiHighlightsAndShadowsFilter.kt
│   │                                       │   ├── UiHorizontalWindStaggerFilter.kt
│   │                                       │   ├── UiHotSummerFilter.kt
│   │                                       │   ├── UiHueFilter.kt
│   │                                       │   ├── UiJarvisJudiceNinkeDitheringFilter.kt
│   │                                       │   ├── UiKaleidoscopeFilter.kt
│   │                                       │   ├── UiKodakFilter.kt
│   │                                       │   ├── UiKuwaharaFilter.kt
│   │                                       │   ├── UiLUT512x512Filter.kt
│   │                                       │   ├── UiLaplacianFilter.kt
│   │                                       │   ├── UiLaplacianSimpleFilter.kt
│   │                                       │   ├── UiLavenderDreamFilter.kt
│   │                                       │   ├── UiLeftToRightDitheringFilter.kt
│   │                                       │   ├── UiLemonadeLightFilter.kt
│   │                                       │   ├── UiLensCorrectionFilter.kt
│   │                                       │   ├── UiLinearBoxBlurFilter.kt
│   │                                       │   ├── UiLinearFastGaussianBlurFilter.kt
│   │                                       │   ├── UiLinearFastGaussianBlurNextFilter.kt
│   │                                       │   ├── UiLinearGaussianBlurFilter.kt
│   │                                       │   ├── UiLinearGaussianBoxBlurFilter.kt
│   │                                       │   ├── UiLinearStackBlurFilter.kt
│   │                                       │   ├── UiLinearTentBlurFilter.kt
│   │                                       │   ├── UiLinearTiltShiftFilter.kt
│   │                                       │   ├── UiLogarithmicToneMappingFilter.kt
│   │                                       │   ├── UiLookupFilter.kt
│   │                                       │   ├── UiLowPolyFilter.kt
│   │                                       │   ├── UiLuminanceGradientFilter.kt
│   │                                       │   ├── UiMarbleFilter.kt
│   │                                       │   ├── UiMedianBlurFilter.kt
│   │                                       │   ├── UiMicroMacroPixelizationFilter.kt
│   │                                       │   ├── UiMirrorFilter.kt
│   │                                       │   ├── UiMissEtikateFilter.kt
│   │                                       │   ├── UiMobiusFilter.kt
│   │                                       │   ├── UiMoireFilter.kt
│   │                                       │   ├── UiMonochromeFilter.kt
│   │                                       │   ├── UiMorphologicalGradientFilter.kt
│   │                                       │   ├── UiMotionBlurFilter.kt
│   │                                       │   ├── UiNativeStackBlurFilter.kt
│   │                                       │   ├── UiNegativeFilter.kt
│   │                                       │   ├── UiNeonFilter.kt
│   │                                       │   ├── UiNightMagicFilter.kt
│   │                                       │   ├── UiNightVisionFilter.kt
│   │                                       │   ├── UiNoiseFilter.kt
│   │                                       │   ├── UiNonMaximumSuppressionFilter.kt
│   │                                       │   ├── UiNucleusPixelizationFilter.kt
│   │                                       │   ├── UiOffsetFilter.kt
│   │                                       │   ├── UiOilFilter.kt
│   │                                       │   ├── UiOldTvFilter.kt
│   │                                       │   ├── UiOpacityFilter.kt
│   │                                       │   ├── UiOpeningFilter.kt
│   │                                       │   ├── UiOrangeHazeFilter.kt
│   │                                       │   ├── UiOrbitalPixelizationFilter.kt
│   │                                       │   ├── UiPaletteTransferFilter.kt
│   │                                       │   ├── UiPaletteTransferVariantFilter.kt
│   │                                       │   ├── UiPastelFilter.kt
│   │                                       │   ├── UiPerlinDistortionFilter.kt
│   │                                       │   ├── UiPinchFilter.kt
│   │                                       │   ├── UiPinkDreamFilter.kt
│   │                                       │   ├── UiPixelMeltFilter.kt
│   │                                       │   ├── UiPixelationFilter.kt
│   │                                       │   ├── UiPointillizeFilter.kt
│   │                                       │   ├── UiPoissonBlurFilter.kt
│   │                                       │   ├── UiPolarCoordinatesFilter.kt
│   │                                       │   ├── UiPolaroidFilter.kt
│   │                                       │   ├── UiPolkaDotFilter.kt
│   │                                       │   ├── UiPopArtFilter.kt
│   │                                       │   ├── UiPosterizeFilter.kt
│   │                                       │   ├── UiProtanopiaFilter.kt
│   │                                       │   ├── UiProtonomalyFilter.kt
│   │                                       │   ├── UiPulseGridPixelizationFilter.kt
│   │                                       │   ├── UiPurpleMistFilter.kt
│   │                                       │   ├── UiQuantizierFilter.kt
│   │                                       │   ├── UiRGBFilter.kt
│   │                                       │   ├── UiRadialTiltShiftFilter.kt
│   │                                       │   ├── UiRadialWeavePixelizationFilter.kt
│   │                                       │   ├── UiRainbowWorldFilter.kt
│   │                                       │   ├── UiRandomDitheringFilter.kt
│   │                                       │   ├── UiRedSwirlFilter.kt
│   │                                       │   ├── UiReduceNoiseFilter.kt
│   │                                       │   ├── UiRemoveColorFilter.kt
│   │                                       │   ├── UiReplaceColorFilter.kt
│   │                                       │   ├── UiRetroYellowFilter.kt
│   │                                       │   ├── UiRingBlurFilter.kt
│   │                                       │   ├── UiRubberStampFilter.kt
│   │                                       │   ├── UiSandPaintingFilter.kt
│   │                                       │   ├── UiSaturationFilter.kt
│   │                                       │   ├── UiSeamCarvingFilter.kt
│   │                                       │   ├── UiSepiaFilter.kt
│   │                                       │   ├── UiSharpenFilter.kt
│   │                                       │   ├── UiShuffleBlurFilter.kt
│   │                                       │   ├── UiSideFadeFilter.kt
│   │                                       │   ├── UiSierraDitheringFilter.kt
│   │                                       │   ├── UiSierraLiteDitheringFilter.kt
│   │                                       │   ├── UiSimpleOldTvFilter.kt
│   │                                       │   ├── UiSimpleSketchFilter.kt
│   │                                       │   ├── UiSimpleSolarizeFilter.kt
│   │                                       │   ├── UiSimpleThresholdDitheringFilter.kt
│   │                                       │   ├── UiSimpleWeavePixelationFilter.kt
│   │                                       │   ├── UiSketchFilter.kt
│   │                                       │   ├── UiSmearFilter.kt
│   │                                       │   ├── UiSmoothToonFilter.kt
│   │                                       │   ├── UiSobelEdgeDetectionFilter.kt
│   │                                       │   ├── UiSobelSimpleFilter.kt
│   │                                       │   ├── UiSoftEleganceFilter.kt
│   │                                       │   ├── UiSoftEleganceVariantFilter.kt
│   │                                       │   ├── UiSoftSpringLightFilter.kt
│   │                                       │   ├── UiSolarizeFilter.kt
│   │                                       │   ├── UiSpacePortalFilter.kt
│   │                                       │   ├── UiSparkleFilter.kt
│   │                                       │   ├── UiSpectralFireFilter.kt
│   │                                       │   ├── UiSphereLensDistortionFilter.kt
│   │                                       │   ├── UiSphereRefractionFilter.kt
│   │                                       │   ├── UiStackBlurFilter.kt
│   │                                       │   ├── UiStaggeredPixelizationFilter.kt
│   │                                       │   ├── UiStarBlurFilter.kt
│   │                                       │   ├── UiStrokePixelationFilter.kt
│   │                                       │   ├── UiStuckiDitheringFilter.kt
│   │                                       │   ├── UiSunriseFilter.kt
│   │                                       │   ├── UiSwirlDistortionFilter.kt
│   │                                       │   ├── UiTentBlurFilter.kt
│   │                                       │   ├── UiThresholdFilter.kt
│   │                                       │   ├── UiToneCurvesFilter.kt
│   │                                       │   ├── UiToonFilter.kt
│   │                                       │   ├── UiTopHatFilter.kt
│   │                                       │   ├── UiTriToneFilter.kt
│   │                                       │   ├── UiTritanopiaFilter.kt
│   │                                       │   ├── UiTritonomalyFilter.kt
│   │                                       │   ├── UiTwirlFilter.kt
│   │                                       │   ├── UiTwoRowSierraDitheringFilter.kt
│   │                                       │   ├── UiUchimuraFilter.kt
│   │                                       │   ├── UiUnsharpFilter.kt
│   │                                       │   ├── UiVHSFilter.kt
│   │                                       │   ├── UiVibranceFilter.kt
│   │                                       │   ├── UiVignetteFilter.kt
│   │                                       │   ├── UiVintageFilter.kt
│   │                                       │   ├── UiVoronoiCrystallizeFilter.kt
│   │                                       │   ├── UiVortexPixelizationFilter.kt
│   │                                       │   ├── UiWarmFilter.kt
│   │                                       │   ├── UiWaterEffectFilter.kt
│   │                                       │   ├── UiWeakPixelFilter.kt
│   │                                       │   ├── UiWeaveFilter.kt
│   │                                       │   ├── UiWhiteBalanceFilter.kt
│   │                                       │   ├── UiYililomaDitheringFilter.kt
│   │                                       │   └── UiZoomBlurFilter.kt
│   │                                       ├── utils/
│   │                                       │   ├── CollectAsUiState.kt
│   │                                       │   ├── LamaLoader.kt
│   │                                       │   └── Mappings.kt
│   │                                       └── widget/
│   │                                           ├── AddFilterButton.kt
│   │                                           ├── CalculateBrightnessEstimate.kt
│   │                                           ├── CubeLutDownloadDialog.kt
│   │                                           ├── FilterItem.kt
│   │                                           ├── FilterItemContent.kt
│   │                                           ├── FilterPreviewSheet.kt
│   │                                           ├── FilterReorderSheet.kt
│   │                                           ├── FilterSelectionCubeLutBottomContent.kt
│   │                                           ├── FilterSelectionItem.kt
│   │                                           ├── FilterTemplateAddingGroup.kt
│   │                                           ├── FilterTemplateCreationSheet.kt
│   │                                           ├── FilterTemplateInfoSheet.kt
│   │                                           ├── TemplateFilterSelectionItem.kt
│   │                                           ├── addFilters/
│   │                                           │   ├── AddFiltersSheet.kt
│   │                                           │   ├── AddFiltersSheetComponent.kt
│   │                                           │   ├── FavoritesContent.kt
│   │                                           │   ├── OtherContent.kt
│   │                                           │   └── TemplatesContent.kt
│   │                                           └── filterItem/
│   │                                               ├── ArcParamsItem.kt
│   │                                               ├── AsciiParamsItem.kt
│   │                                               ├── BilaterialBlurParamsItem.kt
│   │                                               ├── BloomParamsItem.kt
│   │                                               ├── BooleanItem.kt
│   │                                               ├── ChannelMixParamsItem.kt
│   │                                               ├── ClaheParamsItem.kt
│   │                                               ├── CropOrPerspectiveParamsItem.kt
│   │                                               ├── EdgeModeSelector.kt
│   │                                               ├── EnhancedZoomBlurParamsItem.kt
│   │                                               ├── FilterValueWrapperItem.kt
│   │                                               ├── FloatArrayItem.kt
│   │                                               ├── FloatItem.kt
│   │                                               ├── GlitchParamsItem.kt
│   │                                               ├── IntegerSizeParamsItem.kt
│   │                                               ├── KaleidoscopeParamsItem.kt
│   │                                               ├── LinearGaussianParamsItem.kt
│   │                                               ├── LinearTiltShiftParamsItem.kt
│   │                                               ├── MirrorSideSelector.kt
│   │                                               ├── PairItem.kt
│   │                                               ├── PinchParamsItem.kt
│   │                                               ├── QuadItem.kt
│   │                                               ├── RadialTiltShiftParamsItem.kt
│   │                                               ├── RubberStampParamsItem.kt
│   │                                               ├── SideFadeRelativeItem.kt
│   │                                               ├── SmearParamsItem.kt
│   │                                               ├── SparkleParamsItem.kt
│   │                                               ├── ToneCurvesParamsItem.kt
│   │                                               ├── TransferFuncSelector.kt
│   │                                               ├── TripleItem.kt
│   │                                               ├── VoronoiCrystallizeParamsItem.kt
│   │                                               ├── WaterParamsItem.kt
│   │                                               ├── pair_components/
│   │                                               │   ├── ColorModelPairItem.kt
│   │                                               │   ├── FloatColorModelPairItem.kt
│   │                                               │   ├── FloatFileModelPairItem.kt
│   │                                               │   ├── FloatImageModelPairItem.kt
│   │                                               │   ├── NumberBlurEdgeModePairItem.kt
│   │                                               │   ├── NumberBooleanPairItem.kt
│   │                                               │   ├── NumberMirrorSidePairItem.kt
│   │                                               │   ├── NumberPairItem.kt
│   │                                               │   └── NumberTransferFuncPairItem.kt
│   │                                               ├── quad_components/
│   │                                               │   ├── NumberColorModelQuadItem.kt
│   │                                               │   └── NumberQuadItem.kt
│   │                                               └── triple_components/
│   │                                                   ├── ColorModelTripleItem.kt
│   │                                                   ├── FloatPaletteImageModelTripleItem.kt
│   │                                                   ├── NumberColorModelColorModelTripleItem.kt
│   │                                                   ├── NumberColorModelPopArtTripleItem.kt
│   │                                                   ├── NumberNumberBlurEdgeModeTripleItem.kt
│   │                                                   ├── NumberNumberColorModelTripleItem.kt
│   │                                                   ├── NumberTransferFuncBlurEdgeModeTripleItem.kt
│   │                                                   └── NumberTripleItem.kt
│   ├── ksp/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── core/
│   │           │                   └── ksp/
│   │           │                       ├── annotations/
│   │           │                       │   ├── FilterInject.kt
│   │           │                       │   └── UiFilterInject.kt
│   │           │                       └── processor/
│   │           │                           ├── FilterInjectProcessor.kt
│   │           │                           └── UiFilterInjectProcessor.kt
│   │           └── resources/
│   │               └── META-INF/
│   │                   └── services/
│   │                       └── com.google.devtools.ksp.processing.SymbolProcessorProvider
│   ├── resources/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── debug/
│   │       │   └── res/
│   │       │       ├── drawable/
│   │       │       │   ├── ic_launcher_foreground.xml
│   │       │       │   ├── ic_logo_animated.xml
│   │       │       │   └── ic_notification_icon.xml
│   │       │       ├── drawable-v31/
│   │       │       │   └── ic_logo_animated.xml
│   │       │       ├── mipmap-anydpi-v26/
│   │       │       │   ├── ic_launcher.xml
│   │       │       │   └── ic_launcher_round.xml
│   │       │       ├── values/
│   │       │       │   ├── colors.xml
│   │       │       │   └── ic_launcher_background.xml
│   │       │       ├── values-night/
│   │       │       │   └── colors.xml
│   │       │       ├── values-night-v31/
│   │       │       │   └── colors.xml
│   │       │       └── values-v31/
│   │       │           └── colors.xml
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── core/
│   │           │                   └── resources/
│   │           │                       ├── emoji/
│   │           │                       │   ├── Emoji.kt
│   │           │                       │   └── EmojiData.kt
│   │           │                       ├── icons/
│   │           │                       │   ├── AddPhotoAlt.kt
│   │           │                       │   ├── AddSticky.kt
│   │           │                       │   ├── Analogous.kt
│   │           │                       │   ├── AnalogousComplementary.kt
│   │           │                       │   ├── Analytics.kt
│   │           │                       │   ├── Animation.kt
│   │           │                       │   ├── Apng.kt
│   │           │                       │   ├── ApngBox.kt
│   │           │                       │   ├── AppShortcut.kt
│   │           │                       │   ├── Apps.kt
│   │           │                       │   ├── Archive.kt
│   │           │                       │   ├── AreaChart.kt
│   │           │                       │   ├── ArtTrack.kt
│   │           │                       │   ├── Ascii.kt
│   │           │                       │   ├── AutoDelete.kt
│   │           │                       │   ├── BackgroundColor.kt
│   │           │                       │   ├── BarcodeScanner.kt
│   │           │                       │   ├── Base64.kt
│   │           │                       │   ├── BatchPrediction.kt
│   │           │                       │   ├── Beta.kt
│   │           │                       │   ├── Bitcoin.kt
│   │           │                       │   ├── Block.kt
│   │           │                       │   ├── BlurCircular.kt
│   │           │                       │   ├── BoldLine.kt
│   │           │                       │   ├── Bolt.kt
│   │           │                       │   ├── BookmarkOff.kt
│   │           │                       │   ├── BookmarkRemove.kt
│   │           │                       │   ├── Boosty.kt
│   │           │                       │   ├── BorderColor.kt
│   │           │                       │   ├── BrokenImageAlt.kt
│   │           │                       │   ├── BrushColor.kt
│   │           │                       │   ├── BubbleDelete.kt
│   │           │                       │   ├── Build.kt
│   │           │                       │   ├── CancelSmall.kt
│   │           │                       │   ├── ClipboardFile.kt
│   │           │                       │   ├── Collage.kt
│   │           │                       │   ├── Communication.kt
│   │           │                       │   ├── Compare.kt
│   │           │                       │   ├── CompareArrows.kt
│   │           │                       │   ├── Complementary.kt
│   │           │                       │   ├── ContractEdit.kt
│   │           │                       │   ├── ContractImage.kt
│   │           │                       │   ├── Cool.kt
│   │           │                       │   ├── Counter.kt
│   │           │                       │   ├── Crashlytics.kt
│   │           │                       │   ├── CropSmall.kt
│   │           │                       │   ├── Cube.kt
│   │           │                       │   ├── Curve.kt
│   │           │                       │   ├── DashedLine.kt
│   │           │                       │   ├── Database.kt
│   │           │                       │   ├── Delete.kt
│   │           │                       │   ├── DeleteSweep.kt
│   │           │                       │   ├── Deselect.kt
│   │           │                       │   ├── DesignServices.kt
│   │           │                       │   ├── DocumentScanner.kt
│   │           │                       │   ├── DotDashedLine.kt
│   │           │                       │   ├── Dots.kt
│   │           │                       │   ├── DownloadFile.kt
│   │           │                       │   ├── Draw.kt
│   │           │                       │   ├── EditAlt.kt
│   │           │                       │   ├── EmojiMultiple.kt
│   │           │                       │   ├── EmojiSticky.kt
│   │           │                       │   ├── Encrypted.kt
│   │           │                       │   ├── Eraser.kt
│   │           │                       │   ├── Exercise.kt
│   │           │                       │   ├── Exif.kt
│   │           │                       │   ├── ExifEdit.kt
│   │           │                       │   ├── Eyedropper.kt
│   │           │                       │   ├── FabCorner.kt
│   │           │                       │   ├── FileExport.kt
│   │           │                       │   ├── FileImage.kt
│   │           │                       │   ├── FileImport.kt
│   │           │                       │   ├── FileReplace.kt
│   │           │                       │   ├── FindInPage.kt
│   │           │                       │   ├── FingerprintOff.kt
│   │           │                       │   ├── Firebase.kt
│   │           │                       │   ├── Flip.kt
│   │           │                       │   ├── FlipVertical.kt
│   │           │                       │   ├── FloatingActionButton.kt
│   │           │                       │   ├── FloodFill.kt
│   │           │                       │   ├── FolderCompare.kt
│   │           │                       │   ├── FolderImage.kt
│   │           │                       │   ├── FolderImageAlt.kt
│   │           │                       │   ├── FolderMatch.kt
│   │           │                       │   ├── FolderOpened.kt
│   │           │                       │   ├── FontFamily.kt
│   │           │                       │   ├── FormatPaintVariant.kt
│   │           │                       │   ├── Forum.kt
│   │           │                       │   ├── FreeArrow.kt
│   │           │                       │   ├── FreeDoubleArrow.kt
│   │           │                       │   ├── FreeDraw.kt
│   │           │                       │   ├── Github.kt
│   │           │                       │   ├── Glyphs.kt
│   │           │                       │   ├── GooglePlay.kt
│   │           │                       │   ├── Gradient.kt
│   │           │                       │   ├── Group.kt
│   │           │                       │   ├── HandshakeAlt.kt
│   │           │                       │   ├── HardDrive.kt
│   │           │                       │   ├── HighRes.kt
│   │           │                       │   ├── Highlighter.kt
│   │           │                       │   ├── HistoryCreate.kt
│   │           │                       │   ├── HyperOS.kt
│   │           │                       │   ├── IOS.kt
│   │           │                       │   ├── ImageCombine.kt
│   │           │                       │   ├── ImageConvert.kt
│   │           │                       │   ├── ImageDownload.kt
│   │           │                       │   ├── ImageEdit.kt
│   │           │                       │   ├── ImageEmbedded.kt
│   │           │                       │   ├── ImageLimit.kt
│   │           │                       │   ├── ImageOverlay.kt
│   │           │                       │   ├── ImageReset.kt
│   │           │                       │   ├── ImageResize.kt
│   │           │                       │   ├── ImageSaw.kt
│   │           │                       │   ├── ImageSearch.kt
│   │           │                       │   ├── ImageSticky.kt
│   │           │                       │   ├── ImageSync.kt
│   │           │                       │   ├── ImageText.kt
│   │           │                       │   ├── ImageToText.kt
│   │           │                       │   ├── ImageToolboxBroken.kt
│   │           │                       │   ├── ImageTooltip.kt
│   │           │                       │   ├── ImageWeight.kt
│   │           │                       │   ├── ImagesMode.kt
│   │           │                       │   ├── ImagesearchRoller.kt
│   │           │                       │   ├── Interface.kt
│   │           │                       │   ├── Jpg.kt
│   │           │                       │   ├── Jxl.kt
│   │           │                       │   ├── KeyVariant.kt
│   │           │                       │   ├── KeyVertical.kt
│   │           │                       │   ├── LabelPercent.kt
│   │           │                       │   ├── Landscape.kt
│   │           │                       │   ├── Landscape2.kt
│   │           │                       │   ├── Lasso.kt
│   │           │                       │   ├── Latitude.kt
│   │           │                       │   ├── Layers.kt
│   │           │                       │   ├── LayersSearchOutline.kt
│   │           │                       │   ├── LetterO.kt
│   │           │                       │   ├── LetterS.kt
│   │           │                       │   ├── License.kt
│   │           │                       │   ├── Line.kt
│   │           │                       │   ├── LineArrow.kt
│   │           │                       │   ├── LineDoubleArrow.kt
│   │           │                       │   ├── Longitude.kt
│   │           │                       │   ├── Manga.kt
│   │           │                       │   ├── MaterialDesign.kt
│   │           │                       │   ├── MeshDownload.kt
│   │           │                       │   ├── MeshGradient.kt
│   │           │                       │   ├── MiniEdit.kt
│   │           │                       │   ├── MiniEditLarge.kt
│   │           │                       │   ├── Mobile.kt
│   │           │                       │   ├── MobileArrowDown.kt
│   │           │                       │   ├── MobileArrowUpRight.kt
│   │           │                       │   ├── MobileCast.kt
│   │           │                       │   ├── MobileLandscape.kt
│   │           │                       │   ├── MobileLayout.kt
│   │           │                       │   ├── MobileRotateLock.kt
│   │           │                       │   ├── MobileShare.kt
│   │           │                       │   ├── MobileVibrate.kt
│   │           │                       │   ├── Mop.kt
│   │           │                       │   ├── MultipleImageEdit.kt
│   │           │                       │   ├── MusicAdd.kt
│   │           │                       │   ├── NeonBrush.kt
│   │           │                       │   ├── Neurology.kt
│   │           │                       │   ├── NextPlan.kt
│   │           │                       │   ├── Noise.kt
│   │           │                       │   ├── NoiseAlt.kt
│   │           │                       │   ├── Numeric.kt
│   │           │                       │   ├── OverlayAbove.kt
│   │           │                       │   ├── PaletteBox.kt
│   │           │                       │   ├── PaletteSwatch.kt
│   │           │                       │   ├── Panorama.kt
│   │           │                       │   ├── Pdf.kt
│   │           │                       │   ├── Pen.kt
│   │           │                       │   ├── Perspective.kt
│   │           │                       │   ├── PhotoPicker.kt
│   │           │                       │   ├── PhotoPickerMobile.kt
│   │           │                       │   ├── PhotoPrints.kt
│   │           │                       │   ├── PhotoSizeSelectSmall.kt
│   │           │                       │   ├── PictureInPictureCenter.kt
│   │           │                       │   ├── Png.kt
│   │           │                       │   ├── Polygon.kt
│   │           │                       │   ├── Prefix.kt
│   │           │                       │   ├── Preview.kt
│   │           │                       │   ├── Print.kt
│   │           │                       │   ├── Psychology.kt
│   │           │                       │   ├── Puzzle.kt
│   │           │                       │   ├── QrCode.kt
│   │           │                       │   ├── QualityHigh.kt
│   │           │                       │   ├── QualityLow.kt
│   │           │                       │   ├── QualityMedium.kt
│   │           │                       │   ├── Rabbit.kt
│   │           │                       │   ├── Resize.kt
│   │           │                       │   ├── ResponsiveLayout.kt
│   │           │                       │   ├── Robot.kt
│   │           │                       │   ├── RobotExcited.kt
│   │           │                       │   ├── Rotate90Cw.kt
│   │           │                       │   ├── Routine.kt
│   │           │                       │   ├── SamsungLetter.kt
│   │           │                       │   ├── SaveConfirm.kt
│   │           │                       │   ├── ScaleUnbalanced.kt
│   │           │                       │   ├── Scanner.kt
│   │           │                       │   ├── Scissors.kt
│   │           │                       │   ├── ScissorsSmall.kt
│   │           │                       │   ├── SelectAll.kt
│   │           │                       │   ├── SelectInverse.kt
│   │           │                       │   ├── ServiceToolbox.kt
│   │           │                       │   ├── SettingsTimelapse.kt
│   │           │                       │   ├── Shadow.kt
│   │           │                       │   ├── ShareOff.kt
│   │           │                       │   ├── ShieldKey.kt
│   │           │                       │   ├── ShieldLock.kt
│   │           │                       │   ├── ShieldOpen.kt
│   │           │                       │   ├── ShineDiamond.kt
│   │           │                       │   ├── Signature.kt
│   │           │                       │   ├── SkewMore.kt
│   │           │                       │   ├── Slider.kt
│   │           │                       │   ├── Snail.kt
│   │           │                       │   ├── Snowflake.kt
│   │           │                       │   ├── Speed.kt
│   │           │                       │   ├── SplitAlt.kt
│   │           │                       │   ├── SplitComplementary.kt
│   │           │                       │   ├── Spray.kt
│   │           │                       │   ├── Square.kt
│   │           │                       │   ├── SquareEdit.kt
│   │           │                       │   ├── SquareFoot.kt
│   │           │                       │   ├── SquareHarmony.kt
│   │           │                       │   ├── Stack.kt
│   │           │                       │   ├── StackSticky.kt
│   │           │                       │   ├── StackStickyOff.kt
│   │           │                       │   ├── Stacks.kt
│   │           │                       │   ├── StampedLine.kt
│   │           │                       │   ├── StarSticky.kt
│   │           │                       │   ├── StickerEmoji.kt
│   │           │                       │   ├── Stylus.kt
│   │           │                       │   ├── Suffix.kt
│   │           │                       │   ├── Svg.kt
│   │           │                       │   ├── SwapVerticalCircle.kt
│   │           │                       │   ├── Swatch.kt
│   │           │                       │   ├── Symbol.kt
│   │           │                       │   ├── SyncArrowDown.kt
│   │           │                       │   ├── TableEye.kt
│   │           │                       │   ├── TagText.kt
│   │           │                       │   ├── Telegram.kt
│   │           │                       │   ├── TelevisionAmbientLight.kt
│   │           │                       │   ├── Tetradic.kt
│   │           │                       │   ├── TextFields.kt
│   │           │                       │   ├── TextSearch.kt
│   │           │                       │   ├── TextSticky.kt
│   │           │                       │   ├── Theme.kt
│   │           │                       │   ├── TimerEdit.kt
│   │           │                       │   ├── Titlecase.kt
│   │           │                       │   ├── Ton.kt
│   │           │                       │   ├── Tonality.kt
│   │           │                       │   ├── Toolbox.kt
│   │           │                       │   ├── TopLeft.kt
│   │           │                       │   ├── Tortoise.kt
│   │           │                       │   ├── Transparency.kt
│   │           │                       │   ├── Triadic.kt
│   │           │                       │   ├── Triangle.kt
│   │           │                       │   ├── USDT.kt
│   │           │                       │   ├── Unarchive.kt
│   │           │                       │   ├── Ungroup.kt
│   │           │                       │   ├── VectorPolyline.kt
│   │           │                       │   ├── VolunteerActivism.kt
│   │           │                       │   ├── WallpaperAlt.kt
│   │           │                       │   ├── WandShine.kt
│   │           │                       │   ├── WandStars.kt
│   │           │                       │   ├── Watermark.kt
│   │           │                       │   ├── Webp.kt
│   │           │                       │   ├── WebpBox.kt
│   │           │                       │   ├── Windows.kt
│   │           │                       │   └── ZigzagLine.kt
│   │           │                       └── shapes/
│   │           │                           ├── ArrowShape.kt
│   │           │                           ├── BookmarkShape.kt
│   │           │                           ├── BurgerShape.kt
│   │           │                           ├── CloverShape.kt
│   │           │                           ├── DropletShape.kt
│   │           │                           ├── EggShape.kt
│   │           │                           ├── ExplosionShape.kt
│   │           │                           ├── HeartShape.kt
│   │           │                           ├── KotlinShape.kt
│   │           │                           ├── MapShape.kt
│   │           │                           ├── MaterialStarShape.kt
│   │           │                           ├── MorphShape.kt
│   │           │                           ├── OctagonShape.kt
│   │           │                           ├── OvalShape.kt
│   │           │                           ├── PathShape.kt
│   │           │                           ├── PentagonShape.kt
│   │           │                           ├── PillShape.kt
│   │           │                           ├── ShieldShape.kt
│   │           │                           ├── ShurikenShape.kt
│   │           │                           ├── SimpleHeartShape.kt
│   │           │                           ├── SmallMaterialStarShape.kt
│   │           │                           └── SquircleShape.kt
│   │           └── res/
│   │               ├── drawable/
│   │               │   ├── app_registration_24px.xml
│   │               │   ├── ic_24_barcode_scanner.xml
│   │               │   ├── ic_launcher_foreground.xml
│   │               │   ├── ic_launcher_monochrome_24.xml
│   │               │   ├── ic_logo_animated.xml
│   │               │   ├── ic_notification_icon.xml
│   │               │   ├── image_to_text_outlined.xml
│   │               │   ├── mobile_screenshot.xml
│   │               │   ├── multiple_image_edit.xml
│   │               │   ├── outline_colorize_24.xml
│   │               │   ├── outline_drag_handle_24.xml
│   │               │   ├── palette_swatch_outlined.xml
│   │               │   ├── rounded_document_scanner_24.xml
│   │               │   ├── rounded_qr_code_scanner_24.xml
│   │               │   └── shape_find_in_file.xml
│   │               ├── drawable-v31/
│   │               │   └── ic_logo_animated.xml
│   │               ├── mipmap-anydpi-v26/
│   │               │   ├── ic_launcher.xml
│   │               │   └── ic_launcher_round.xml
│   │               ├── raw/
│   │               │   └── keep.xml
│   │               ├── values/
│   │               │   ├── arrays.xml
│   │               │   ├── bools.xml
│   │               │   ├── colors.xml
│   │               │   ├── ic_launcher_background.xml
│   │               │   ├── strings.xml
│   │               │   └── themes.xml
│   │               ├── values-ar/
│   │               │   └── strings.xml
│   │               ├── values-be/
│   │               │   └── strings.xml
│   │               ├── values-bn/
│   │               │   └── strings.xml
│   │               ├── values-ca/
│   │               │   └── strings.xml
│   │               ├── values-cs/
│   │               │   └── strings.xml
│   │               ├── values-da/
│   │               │   └── strings.xml
│   │               ├── values-de/
│   │               │   └── strings.xml
│   │               ├── values-es/
│   │               │   └── strings.xml
│   │               ├── values-et/
│   │               │   └── strings.xml
│   │               ├── values-eu/
│   │               │   └── strings.xml
│   │               ├── values-fa/
│   │               │   └── strings.xml
│   │               ├── values-fi/
│   │               │   └── strings.xml
│   │               ├── values-fil/
│   │               │   └── strings.xml
│   │               ├── values-fr/
│   │               │   └── strings.xml
│   │               ├── values-hi/
│   │               │   └── strings.xml
│   │               ├── values-hu/
│   │               │   └── strings.xml
│   │               ├── values-in/
│   │               │   └── strings.xml
│   │               ├── values-it/
│   │               │   └── strings.xml
│   │               ├── values-iw/
│   │               │   └── strings.xml
│   │               ├── values-ja/
│   │               │   └── strings.xml
│   │               ├── values-kk/
│   │               │   └── strings.xml
│   │               ├── values-ko/
│   │               │   └── strings.xml
│   │               ├── values-lt/
│   │               │   └── strings.xml
│   │               ├── values-mr/
│   │               │   └── strings.xml
│   │               ├── values-night/
│   │               │   └── colors.xml
│   │               ├── values-night-v31/
│   │               │   └── colors.xml
│   │               ├── values-nl/
│   │               │   └── strings.xml
│   │               ├── values-pa/
│   │               │   └── strings.xml
│   │               ├── values-pl/
│   │               │   └── strings.xml
│   │               ├── values-pt-rBR/
│   │               │   └── strings.xml
│   │               ├── values-ro/
│   │               │   └── strings.xml
│   │               ├── values-ru/
│   │               │   └── strings.xml
│   │               ├── values-si/
│   │               │   └── strings.xml
│   │               ├── values-sk/
│   │               │   └── strings.xml
│   │               ├── values-sr/
│   │               │   └── strings.xml
│   │               ├── values-sv/
│   │               │   └── strings.xml
│   │               ├── values-ta/
│   │               │   └── strings.xml
│   │               ├── values-te/
│   │               │   └── strings.xml
│   │               ├── values-th/
│   │               │   └── strings.xml
│   │               ├── values-tr/
│   │               │   └── strings.xml
│   │               ├── values-ug/
│   │               │   └── strings.xml
│   │               ├── values-uk/
│   │               │   └── strings.xml
│   │               ├── values-v26/
│   │               │   └── bools.xml
│   │               ├── values-v31/
│   │               │   └── colors.xml
│   │               ├── values-vi/
│   │               │   └── strings.xml
│   │               ├── values-zh-rCN/
│   │               │   └── strings.xml
│   │               ├── values-zh-rTW/
│   │               │   └── strings.xml
│   │               └── xml/
│   │                   ├── backup_rules.xml
│   │                   ├── data_extraction_rules.xml
│   │                   └── file_paths.xml
│   ├── settings/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── settings/
│   │                                   ├── di/
│   │                                   │   └── SettingsStateEntryPoint.kt
│   │                                   ├── domain/
│   │                                   │   ├── SettingsInteractor.kt
│   │                                   │   ├── SettingsManager.kt
│   │                                   │   ├── SettingsProvider.kt
│   │                                   │   ├── SimpleSettingsInteractor.kt
│   │                                   │   └── model/
│   │                                   │       ├── ColorHarmonizer.kt
│   │                                   │       ├── CopyToClipboardMode.kt
│   │                                   │       ├── DomainFontFamily.kt
│   │                                   │       ├── FastSettingsSide.kt
│   │                                   │       ├── FilenameBehavior.kt
│   │                                   │       ├── FlingType.kt
│   │                                   │       ├── NightMode.kt
│   │                                   │       ├── OneTimeSaveLocation.kt
│   │                                   │       ├── SettingsState.kt
│   │                                   │       ├── ShapeType.kt
│   │                                   │       ├── SliderType.kt
│   │                                   │       ├── SnowfallMode.kt
│   │                                   │       └── SwitchType.kt
│   │                                   └── presentation/
│   │                                       ├── model/
│   │                                       │   ├── EditPresetsController.kt
│   │                                       │   ├── IconShape.kt
│   │                                       │   ├── PicturePickerMode.kt
│   │                                       │   ├── Setting.kt
│   │                                       │   ├── SettingsGroup.kt
│   │                                       │   ├── UiFontFamily.kt
│   │                                       │   └── UiSettingsState.kt
│   │                                       ├── provider/
│   │                                       │   └── LocalSettingsState.kt
│   │                                       └── utils/
│   │                                           └── RoundedPolygonUtils.kt
│   ├── ui/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── ui/
│   │       │                           ├── utils/
│   │       │                           │   ├── content_pickers/
│   │       │                           │   │   └── DocumentScannerImpl.kt
│   │       │                           │   └── helper/
│   │       │                           │       └── ReviewHandlerImpl.kt
│   │       │                           └── widget/
│   │       │                               └── sheets/
│   │       │                                   └── UpdateSheetImpl.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── kotlin/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── core/
│   │       │                       └── ui/
│   │       │                           ├── theme/
│   │       │                           │   ├── Color.kt
│   │       │                           │   ├── Motion.kt
│   │       │                           │   ├── Theme.kt
│   │       │                           │   ├── ThemePreview.kt
│   │       │                           │   └── Type.kt
│   │       │                           ├── transformation/
│   │       │                           │   └── ImageInfoTransformation.kt
│   │       │                           ├── utils/
│   │       │                           │   ├── BaseComponent.kt
│   │       │                           │   ├── ComposeActivity.kt
│   │       │                           │   ├── ComposeApplication.kt
│   │       │                           │   ├── animation/
│   │       │                           │   │   ├── Animate.kt
│   │       │                           │   │   ├── Animations.kt
│   │       │                           │   │   ├── CombinedMutableInteractionSource.kt
│   │       │                           │   │   └── Easing.kt
│   │       │                           │   ├── capturable/
│   │       │                           │   │   ├── Capturable.kt
│   │       │                           │   │   ├── CaptureController.kt
│   │       │                           │   │   └── impl/
│   │       │                           │   │       ├── CapturableNew.kt
│   │       │                           │   │       └── CapturableOld.kt
│   │       │                           │   ├── confetti/
│   │       │                           │   │   ├── ConfettiHostState.kt
│   │       │                           │   │   └── Particles.kt
│   │       │                           │   ├── content_pickers/
│   │       │                           │   │   ├── BarcodeScanner.kt
│   │       │                           │   │   ├── ContactPicker.kt
│   │       │                           │   │   ├── DocumentScanner.kt
│   │       │                           │   │   ├── FileMaker.kt
│   │       │                           │   │   ├── FilePicker.kt
│   │       │                           │   │   ├── FolderPicker.kt
│   │       │                           │   │   ├── ImagePicker.kt
│   │       │                           │   │   ├── ResultLauncher.kt
│   │       │                           │   │   └── Scanner.kt
│   │       │                           │   ├── helper/
│   │       │                           │   │   ├── ActivityUtils.kt
│   │       │                           │   │   ├── AppToastHost.kt
│   │       │                           │   │   ├── BlendingModeExt.kt
│   │       │                           │   │   ├── Clipboard.kt
│   │       │                           │   │   ├── ClipboardUtils.kt
│   │       │                           │   │   ├── CoilUtils.kt
│   │       │                           │   │   ├── ColorUtils.kt
│   │       │                           │   │   ├── CompositionLocalUtils.kt
│   │       │                           │   │   ├── ContextUtils.kt
│   │       │                           │   │   ├── DensityUtils.kt
│   │       │                           │   │   ├── DeviceInfo.kt
│   │       │                           │   │   ├── DrawUtils.kt
│   │       │                           │   │   ├── HandleDeeplinks.kt
│   │       │                           │   │   ├── HandlerUtils.kt
│   │       │                           │   │   ├── ImageUtils.kt
│   │       │                           │   │   ├── IntentUtils.kt
│   │       │                           │   │   ├── LazyUtils.kt
│   │       │                           │   │   ├── LinkUtils.kt
│   │       │                           │   │   ├── LocalFilterPreviewModel.kt
│   │       │                           │   │   ├── LocaleConfigCompat.kt
│   │       │                           │   │   ├── PaddingUtils.kt
│   │       │                           │   │   ├── PredictiveBackObserver.kt
│   │       │                           │   │   ├── Preview.kt
│   │       │                           │   │   ├── Rect.kt
│   │       │                           │   │   ├── ReviewHandler.kt
│   │       │                           │   │   ├── Ripple.kt
│   │       │                           │   │   ├── SafeUriHandler.kt
│   │       │                           │   │   ├── SaveResultHandler.kt
│   │       │                           │   │   ├── ScanResult.kt
│   │       │                           │   │   └── image_vector/
│   │       │                           │   │       ├── DrawCache.kt
│   │       │                           │   │       ├── GroupComponent.kt
│   │       │                           │   │       ├── ImageVectorUtils.kt
│   │       │                           │   │       ├── PathComponent.kt
│   │       │                           │   │       ├── VNode.kt
│   │       │                           │   │       ├── VectorComponent.kt
│   │       │                           │   │       └── VectorPainter.kt
│   │       │                           │   ├── navigation/
│   │       │                           │   │   ├── Decompose.kt
│   │       │                           │   │   ├── Screen.kt
│   │       │                           │   │   └── ScreenUtils.kt
│   │       │                           │   ├── painter/
│   │       │                           │   │   ├── CenterCropPainter.kt
│   │       │                           │   │   └── RoundCornersPainter.kt
│   │       │                           │   ├── permission/
│   │       │                           │   │   ├── PermissionResult.kt
│   │       │                           │   │   ├── PermissionStatus.kt
│   │       │                           │   │   └── PermissionUtils.kt
│   │       │                           │   ├── provider/
│   │       │                           │   │   ├── ImageToolboxCompositionLocals.kt
│   │       │                           │   │   ├── LocalComponentActivity.kt
│   │       │                           │   │   ├── LocalContainerShape.kt
│   │       │                           │   │   ├── LocalKeepAliveService.kt
│   │       │                           │   │   ├── LocalMetadataProvider.kt
│   │       │                           │   │   ├── LocalResourceManager.kt
│   │       │                           │   │   ├── LocalScreenSize.kt
│   │       │                           │   │   └── LocalWindowSizeClass.kt
│   │       │                           │   └── state/
│   │       │                           │       ├── ObjectSaverDelegate.kt
│   │       │                           │       └── Update.kt
│   │       │                           └── widget/
│   │       │                               ├── AdaptiveBottomScaffoldLayoutScreen.kt
│   │       │                               ├── AdaptiveLayoutScreen.kt
│   │       │                               ├── buttons/
│   │       │                               │   ├── BottomButtonsBlock.kt
│   │       │                               │   ├── CompareButton.kt
│   │       │                               │   ├── EraseModeButton.kt
│   │       │                               │   ├── MediaCheckBox.kt
│   │       │                               │   ├── PagerScrollPanel.kt
│   │       │                               │   ├── PanModeButton.kt
│   │       │                               │   ├── ShareButton.kt
│   │       │                               │   ├── ShowOriginalButton.kt
│   │       │                               │   ├── SupportingButton.kt
│   │       │                               │   └── ZoomButton.kt
│   │       │                               ├── color_picker/
│   │       │                               │   ├── AvailableColorTuplesSheet.kt
│   │       │                               │   ├── ColorInfo.kt
│   │       │                               │   ├── ColorPicker.kt
│   │       │                               │   ├── ColorPickerSheet.kt
│   │       │                               │   ├── ColorSelection.kt
│   │       │                               │   ├── ColorSelectionRow.kt
│   │       │                               │   ├── ColorTupleDefaults.kt
│   │       │                               │   ├── ColorTuplePicker.kt
│   │       │                               │   ├── ColorTuplePreview.kt
│   │       │                               │   └── RecentAndFavoriteColorsCard.kt
│   │       │                               ├── controls/
│   │       │                               │   ├── FileReorderVerticalList.kt
│   │       │                               │   ├── FormatExifWarning.kt
│   │       │                               │   ├── IcoSizeWarning.kt
│   │       │                               │   ├── ImageReorderCarousel.kt
│   │       │                               │   ├── ImageTransformBar.kt
│   │       │                               │   ├── OOMWarning.kt
│   │       │                               │   ├── ResizeImageField.kt
│   │       │                               │   ├── SaveExifWidget.kt
│   │       │                               │   ├── ScaleSmallImagesToLargeToggle.kt
│   │       │                               │   ├── SortButton.kt
│   │       │                               │   ├── page/
│   │       │                               │   │   ├── PageInputDialog.kt
│   │       │                               │   │   ├── PageInputField.kt
│   │       │                               │   │   ├── PageSelectionItem.kt
│   │       │                               │   │   └── PagesSelectionParser.kt
│   │       │                               │   ├── resize_group/
│   │       │                               │   │   ├── ResizeTypeSelector.kt
│   │       │                               │   │   └── components/
│   │       │                               │   │       ├── BlurRadiusSelector.kt
│   │       │                               │   │       └── UseBlurredBackgroundToggle.kt
│   │       │                               │   └── selection/
│   │       │                               │       ├── AlphaSelector.kt
│   │       │                               │       ├── BlendingModeSelector.kt
│   │       │                               │       ├── ColorRowSelector.kt
│   │       │                               │       ├── DataSelector.kt
│   │       │                               │       ├── FontSelector.kt
│   │       │                               │       ├── HelperGridParamsSelector.kt
│   │       │                               │       ├── ImageFormatSelector.kt
│   │       │                               │       ├── ImageSelector.kt
│   │       │                               │       ├── MagnifierEnabledSelector.kt
│   │       │                               │       ├── PositionSelector.kt
│   │       │                               │       ├── PresetSelector.kt
│   │       │                               │       ├── QualitySelector.kt
│   │       │                               │       └── ScaleModeSelector.kt
│   │       │                               ├── dialogs/
│   │       │                               │   ├── CalculatorDialog.kt
│   │       │                               │   ├── ExitWithoutSavingDialog.kt
│   │       │                               │   ├── LoadingDialog.kt
│   │       │                               │   ├── OneTimeImagePickingDialog.kt
│   │       │                               │   ├── OneTimeSaveLocationSelectionDialog.kt
│   │       │                               │   ├── PasswordRequestDialog.kt
│   │       │                               │   ├── ResetDialog.kt
│   │       │                               │   └── WantCancelLoadingDialog.kt
│   │       │                               ├── enhanced/
│   │       │                               │   ├── EnhancedAlertDialog.kt
│   │       │                               │   ├── EnhancedBadge.kt
│   │       │                               │   ├── EnhancedButton.kt
│   │       │                               │   ├── EnhancedButtonGroup.kt
│   │       │                               │   ├── EnhancedCheckbox.kt
│   │       │                               │   ├── EnhancedChip.kt
│   │       │                               │   ├── EnhancedCircularProgressIndicator.kt
│   │       │                               │   ├── EnhancedDatePickerDialog.kt
│   │       │                               │   ├── EnhancedDropdownMenu.kt
│   │       │                               │   ├── EnhancedFlingBehavior.kt
│   │       │                               │   ├── EnhancedFloatingActionButton.kt
│   │       │                               │   ├── EnhancedHapticFeedback.kt
│   │       │                               │   ├── EnhancedIconButton.kt
│   │       │                               │   ├── EnhancedLoadingIndicator.kt
│   │       │                               │   ├── EnhancedModalBottomSheet.kt
│   │       │                               │   ├── EnhancedModalSheetDragHandle.kt
│   │       │                               │   ├── EnhancedNavigationBarItem.kt
│   │       │                               │   ├── EnhancedNavigationRailItem.kt
│   │       │                               │   ├── EnhancedRadioButton.kt
│   │       │                               │   ├── EnhancedRangeSliderItem.kt
│   │       │                               │   ├── EnhancedSlider.kt
│   │       │                               │   ├── EnhancedSliderItem.kt
│   │       │                               │   ├── EnhancedSwitch.kt
│   │       │                               │   ├── EnhancedToggleButton.kt
│   │       │                               │   ├── EnhancedTopAppBar.kt
│   │       │                               │   └── derivative/
│   │       │                               │       └── OnlyAllowedSliderItem.kt
│   │       │                               ├── icon_shape/
│   │       │                               │   └── IconShapeContainer.kt
│   │       │                               ├── image/
│   │       │                               │   ├── AspectRatioSelector.kt
│   │       │                               │   ├── AspectRatios.kt
│   │       │                               │   ├── AutoFilePicker.kt
│   │       │                               │   ├── BadImageWidget.kt
│   │       │                               │   ├── HistogramChart.kt
│   │       │                               │   ├── ImageContainer.kt
│   │       │                               │   ├── ImageCounter.kt
│   │       │                               │   ├── ImageHeaderState.kt
│   │       │                               │   ├── ImageNotPickedWidget.kt
│   │       │                               │   ├── ImagePager.kt
│   │       │                               │   ├── ImagePreviewGrid.kt
│   │       │                               │   ├── ImageStickyHeader.kt
│   │       │                               │   ├── ImagesPreviewWithSelection.kt
│   │       │                               │   ├── MetadataPreviewButton.kt
│   │       │                               │   ├── Picture.kt
│   │       │                               │   ├── SimplePicture.kt
│   │       │                               │   ├── UrisCarousel.kt
│   │       │                               │   └── UrisPreview.kt
│   │       │                               ├── modifier/
│   │       │                               │   ├── AdvancedShadow.kt
│   │       │                               │   ├── AlertDialogBorder.kt
│   │       │                               │   ├── AnimateContentSizeNoClip.kt
│   │       │                               │   ├── AutoCornersShape.kt
│   │       │                               │   ├── AutoElevatedBorder.kt
│   │       │                               │   ├── Blink.kt
│   │       │                               │   ├── Container.kt
│   │       │                               │   ├── ContiniousRoundedRectangle.kt
│   │       │                               │   ├── DetectSwipe.kt
│   │       │                               │   ├── DragHandler.kt
│   │       │                               │   ├── DrawHorizontalStroke.kt
│   │       │                               │   ├── FadingEdges.kt
│   │       │                               │   ├── HelperGrid.kt
│   │       │                               │   ├── LayoutCorners.kt
│   │       │                               │   ├── Line.kt
│   │       │                               │   ├── MaterialShadow.kt
│   │       │                               │   ├── MeshGradient.kt
│   │       │                               │   ├── NegativePadding.kt
│   │       │                               │   ├── ObservePointersCount.kt
│   │       │                               │   ├── Placholder.kt
│   │       │                               │   ├── PointerInput.kt
│   │       │                               │   ├── Pulsate.kt
│   │       │                               │   ├── RealisticSnowfall.kt
│   │       │                               │   ├── RotateAnimation.kt
│   │       │                               │   ├── ScaleOnTap.kt
│   │       │                               │   ├── ShapeDefaults.kt
│   │       │                               │   ├── Shimmer.kt
│   │       │                               │   ├── Tappable.kt
│   │       │                               │   ├── TransparencyChecker.kt
│   │       │                               │   └── WithModifier.kt
│   │       │                               ├── other/
│   │       │                               │   ├── AnimatedBorder.kt
│   │       │                               │   ├── BoxAnimatedVisibility.kt
│   │       │                               │   ├── ColorWithNameItem.kt
│   │       │                               │   ├── DrawLockScreenOrientation.kt
│   │       │                               │   ├── EmojiItem.kt
│   │       │                               │   ├── ExpandableItem.kt
│   │       │                               │   ├── FeatureNotAvailableContent.kt
│   │       │                               │   ├── FontSelectionItem.kt
│   │       │                               │   ├── GradientEdge.kt
│   │       │                               │   ├── InfoContainer.kt
│   │       │                               │   ├── LinkPreviewCard.kt
│   │       │                               │   ├── LinkPreviewList.kt
│   │       │                               │   ├── QrPainter.kt
│   │       │                               │   ├── SearchBar.kt
│   │       │                               │   ├── SwipeToReveal.kt
│   │       │                               │   ├── ToastHost.kt
│   │       │                               │   └── TopAppBarEmoji.kt
│   │       │                               ├── palette_selection/
│   │       │                               │   ├── PaletteMappings.kt
│   │       │                               │   ├── PaletteStyleSelection.kt
│   │       │                               │   └── PaletteStyleSelectionItem.kt
│   │       │                               ├── preferences/
│   │       │                               │   ├── PreferenceItem.kt
│   │       │                               │   ├── PreferenceItemOverload.kt
│   │       │                               │   ├── PreferenceRow.kt
│   │       │                               │   ├── PreferenceRowSwitch.kt
│   │       │                               │   └── ScreenPreference.kt
│   │       │                               ├── saver/
│   │       │                               │   ├── OneTimeEffect.kt
│   │       │                               │   └── Savers.kt
│   │       │                               ├── sheets/
│   │       │                               │   ├── AddExifSheet.kt
│   │       │                               │   ├── DefaultUpdateSheet.kt
│   │       │                               │   ├── EditExifSheet.kt
│   │       │                               │   ├── EmojiSelectionSheet.kt
│   │       │                               │   ├── PickImageFromUrisSheet.kt
│   │       │                               │   ├── ProcessImagesPreferenceSheet.kt
│   │       │                               │   ├── UpdateSheet.kt
│   │       │                               │   └── ZoomModalSheet.kt
│   │       │                               ├── sliders/
│   │       │                               │   ├── FancySlider.kt
│   │       │                               │   ├── HyperOSSlider.kt
│   │       │                               │   ├── M2Slider.kt
│   │       │                               │   ├── M3Slider.kt
│   │       │                               │   └── custom_slider/
│   │       │                               │       ├── CustomRangeSlider.kt
│   │       │                               │       ├── CustomRangeSliderState.kt
│   │       │                               │       ├── CustomRangeSliderUtils.kt
│   │       │                               │       ├── CustomSlider.kt
│   │       │                               │       ├── CustomSliderColors.kt
│   │       │                               │       ├── CustomSliderDefaults.kt
│   │       │                               │       ├── CustomSliderRange.kt
│   │       │                               │       ├── CustomSliderState.kt
│   │       │                               │       └── CustomSliderUtils.kt
│   │       │                               ├── switches/
│   │       │                               │   ├── CupertinoSwitch.kt
│   │       │                               │   ├── FluentSwitch.kt
│   │       │                               │   ├── HyperOSSwitch.kt
│   │       │                               │   ├── LiquidToggle.kt
│   │       │                               │   ├── M3Switch.kt
│   │       │                               │   ├── OneUISwitch.kt
│   │       │                               │   └── PixelSwitch.kt
│   │       │                               ├── text/
│   │       │                               │   ├── AutoSizeText.kt
│   │       │                               │   ├── HtmlText.kt
│   │       │                               │   ├── IsKeyboardVisibleAsState.kt
│   │       │                               │   ├── Linkify.kt
│   │       │                               │   ├── Marquee.kt
│   │       │                               │   ├── OutlinedText.kt
│   │       │                               │   ├── PatternHighlightTransformation.kt
│   │       │                               │   ├── RoundedTextField.kt
│   │       │                               │   ├── TitleItem.kt
│   │       │                               │   └── TopAppBarTitle.kt
│   │       │                               ├── utils/
│   │       │                               │   ├── AutoContentBasedColors.kt
│   │       │                               │   ├── AvailableHeight.kt
│   │       │                               │   ├── RememberRetainedLazyListState.kt
│   │       │                               │   └── ScreenList.kt
│   │       │                               └── value/
│   │       │                                   ├── ValueDialog.kt
│   │       │                                   └── ValueText.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── core/
│   │                               └── ui/
│   │                                   ├── utils/
│   │                                   │   ├── content_pickers/
│   │                                   │   │   └── DocumentScannerImpl.kt
│   │                                   │   └── helper/
│   │                                   │       └── ReviewHandlerImpl.kt
│   │                                   └── widget/
│   │                                       └── sheets/
│   │                                           └── UpdateSheetImpl.kt
│   └── utils/
│       ├── .gitignore
│       ├── build.gradle.kts
│       └── src/
│           └── main/
│               ├── AndroidManifest.xml
│               └── java/
│                   └── com/
│                       └── t8rin/
│                           └── imagetoolbox/
│                               └── core/
│                                   └── utils/
│                                       ├── AppContext.kt
│                                       ├── QrType.kt
│                                       ├── Typeface.kt
│                                       ├── Update.kt
│                                       ├── UriUtils.kt
│                                       └── Zip.kt
├── fastlane/
│   └── metadata/
│       └── android/
│           ├── en-US/
│           │   ├── changelogs/
│           │   │   ├── 13.txt
│           │   │   └── 16.txt
│           │   ├── full_description.txt
│           │   └── short_description.txt
│           └── ru/
│               ├── full_description.txt
│               └── short_description.txt
├── feature/
│   ├── ai-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── ai_tools/
│   │                                   ├── data/
│   │                                   │   ├── AiProcessor.kt
│   │                                   │   ├── AndroidAiToolsRepository.kt
│   │                                   │   └── model/
│   │                                   │       ├── ChunkInfo.kt
│   │                                   │       └── ModelInfo.kt
│   │                                   ├── di/
│   │                                   │   └── AiToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AiProgressListener.kt
│   │                                   │   ├── AiToolsRepository.kt
│   │                                   │   └── model/
│   │                                   │       ├── NeuralConstants.kt
│   │                                   │       ├── NeuralModel.kt
│   │                                   │       └── NeuralParams.kt
│   │                                   └── presentation/
│   │                                       ├── AiToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AiToolsControls.kt
│   │                                       │   ├── DeleteModelDialog.kt
│   │                                       │   ├── FilteredModels.kt
│   │                                       │   ├── NeuralModelFilterSheet.kt
│   │                                       │   ├── NeuralModelSelectionSheet.kt
│   │                                       │   ├── NeuralModelSelector.kt
│   │                                       │   ├── NeuralModelTypeResources.kt
│   │                                       │   ├── NeuralModelsColumn.kt
│   │                                       │   ├── NeuralSaveProgress.kt
│   │                                       │   ├── NeuralSaveProgressDialog.kt
│   │                                       │   └── Savers.kt
│   │                                       └── screenLogic/
│   │                                           └── AiToolsComponent.kt
│   ├── apng-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── apng_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidApngConverter.kt
│   │                                   ├── di/
│   │                                   │   └── ApngToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ApngConverter.kt
│   │                                   │   └── ApngParams.kt
│   │                                   └── presentation/
│   │                                       ├── ApngToolsContent.kt
│   │                                       ├── components/
│   │                                       │   └── ApngParamsSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ApngToolsComponent.kt
│   ├── ascii-art/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── ascii_art/
│   │                                   ├── data/
│   │                                   │   └── AndroidAsciiConverter.kt
│   │                                   ├── di/
│   │                                   │   └── AsciiArtModule.kt
│   │                                   ├── domain/
│   │                                   │   └── AsciiConverter.kt
│   │                                   └── presentation/
│   │                                       ├── AsciiArtContent.kt
│   │                                       ├── components/
│   │                                       │   └── AsciiArtControls.kt
│   │                                       └── screenLogic/
│   │                                           └── AsciiArtComponent.kt
│   ├── audio-cover-extractor/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── audio_cover_extractor/
│   │                                   ├── data/
│   │                                   │   └── AndroidAudioCoverRetriever.kt
│   │                                   ├── di/
│   │                                   │   └── AudioCoverExtractorModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AudioCoverRetriever.kt
│   │                                   │   └── model/
│   │                                   │       └── AudioCoverResult.kt
│   │                                   └── ui/
│   │                                       ├── AudioCoverExtractorContent.kt
│   │                                       ├── components/
│   │                                       │   └── AudioWithCover.kt
│   │                                       └── screenLogic/
│   │                                           └── AudioCoverExtractorComponent.kt
│   ├── base64-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── base64_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidBase64Converter.kt
│   │                                   ├── di/
│   │                                   │   └── Base64ToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   └── Base64Converter.kt
│   │                                   └── presentation/
│   │                                       ├── Base64ToolsContent.kt
│   │                                       ├── components/
│   │                                       │   └── Base64ToolsTiles.kt
│   │                                       └── screenLogic/
│   │                                           └── Base64ToolsComponent.kt
│   ├── checksum-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── checksum_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidChecksumManager.kt
│   │                                   ├── di/
│   │                                   │   └── ChecksumToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ChecksumManager.kt
│   │                                   │   └── ChecksumSource.kt
│   │                                   └── presentation/
│   │                                       ├── ChecksumToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ChecksumEnterField.kt
│   │                                       │   ├── ChecksumPage.kt
│   │                                       │   ├── ChecksumPreviewField.kt
│   │                                       │   ├── ChecksumResultCard.kt
│   │                                       │   ├── ChecksumToolsTabs.kt
│   │                                       │   ├── UriWithHashItem.kt
│   │                                       │   └── pages/
│   │                                       │       ├── CalculateFromTextPage.kt
│   │                                       │       ├── CalculateFromUriPage.kt
│   │                                       │       ├── CompareWithUriPage.kt
│   │                                       │       └── CompareWithUrisPage.kt
│   │                                       └── screenLogic/
│   │                                           └── ChecksumToolsComponent.kt
│   ├── cipher/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── cipher/
│   │                                   ├── data/
│   │                                   │   ├── AndroidCryptographyManager.kt
│   │                                   │   └── AndroidRandomStringGenerator.kt
│   │                                   ├── di/
│   │                                   │   └── CipherModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── CryptographyManager.kt
│   │                                   │   └── WrongKeyException.kt
│   │                                   └── presentation/
│   │                                       ├── CipherContent.kt
│   │                                       ├── components/
│   │                                       │   ├── CipherControls.kt
│   │                                       │   └── CipherTipSheet.kt
│   │                                       └── screenLogic/
│   │                                           └── CipherComponent.kt
│   ├── collage-maker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── collage_maker/
│   │                               └── presentation/
│   │                                   ├── CollageMakerContent.kt
│   │                                   ├── components/
│   │                                   │   └── CollageParams.kt
│   │                                   └── screenLogic/
│   │                                       └── CollageMakerComponent.kt
│   ├── color-library/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── color_library/
│   │                               └── presentation/
│   │                                   ├── ColorLibraryContent.kt
│   │                                   ├── components/
│   │                                   │   └── FavoriteColors.kt
│   │                                   └── screenLogic/
│   │                                       └── ColorLibraryComponent.kt
│   ├── color-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── color_tools/
│   │                               └── presentation/
│   │                                   ├── ColorToolsContent.kt
│   │                                   ├── components/
│   │                                   │   ├── ColorHarmonies.kt
│   │                                   │   ├── ColorHarmoniesUtils.kt
│   │                                   │   ├── ColorHistogram.kt
│   │                                   │   ├── ColorInfo.kt
│   │                                   │   ├── ColorInfoDisplay.kt
│   │                                   │   ├── ColorMixing.kt
│   │                                   │   ├── ColorMixingUtils.kt
│   │                                   │   └── ColorShading.kt
│   │                                   └── screenLogic/
│   │                                       └── ColorToolsComponent.kt
│   ├── compare/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── compare/
│   │                                   └── presentation/
│   │                                       ├── CompareContent.kt
│   │                                       ├── components/
│   │                                       │   ├── CompareLabel.kt
│   │                                       │   ├── CompareScreenContent.kt
│   │                                       │   ├── CompareScreenContentImpl.kt
│   │                                       │   ├── CompareScreenTopAppBar.kt
│   │                                       │   ├── CompareSelectionButtons.kt
│   │                                       │   ├── CompareShareSheet.kt
│   │                                       │   ├── CompareSheet.kt
│   │                                       │   ├── CompareType.kt
│   │                                       │   ├── PixelByPixelCompareState.kt
│   │                                       │   ├── beforeafter/
│   │                                       │   │   ├── BeforeAfterLayout.kt
│   │                                       │   │   ├── BeforeAfterLayoutImpl.kt
│   │                                       │   │   ├── ContentOrder.kt
│   │                                       │   │   ├── DefaultOverlay.kt
│   │                                       │   │   ├── DimensionSubcomposeLayout.kt
│   │                                       │   │   ├── DimensionUtil.kt
│   │                                       │   │   ├── Label.kt
│   │                                       │   │   └── SlotsEnum.kt
│   │                                       │   └── model/
│   │                                       │       └── CompareData.kt
│   │                                       └── screenLogic/
│   │                                           └── CompareComponent.kt
│   ├── crop/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── t8rin/
│   │           │           └── imagetoolbox/
│   │           │               └── feature/
│   │           │                   └── crop/
│   │           │                       └── presentation/
│   │           │                           ├── CropContent.kt
│   │           │                           ├── components/
│   │           │                           │   ├── CoercePointsToImageBoundsToggle.kt
│   │           │                           │   ├── CropMaskSelection.kt
│   │           │                           │   ├── CropRotationSelector.kt
│   │           │                           │   ├── CropType.kt
│   │           │                           │   ├── Cropper.kt
│   │           │                           │   ├── DefaultOutlineProperties.kt
│   │           │                           │   └── FreeCornersCropToggle.kt
│   │           │                           └── screenLogic/
│   │           │                               └── CropComponent.kt
│   │           └── res/
│   │               └── values/
│   │                   └── dimens.xml
│   ├── delete-exif/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── delete_exif/
│   │                                   └── presentation/
│   │                                       ├── DeleteExifContent.kt
│   │                                       └── screenLogic/
│   │                                           └── DeleteExifComponent.kt
│   ├── document-scanner/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── document_scanner/
│   │                                   └── presentation/
│   │                                       ├── DocumentScannerContent.kt
│   │                                       └── screenLogic/
│   │                                           └── DocumentScannerComponent.kt
│   ├── draw/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── draw/
│   │                                   ├── data/
│   │                                   │   ├── AndroidImageDrawApplier.kt
│   │                                   │   └── utils/
│   │                                   │       └── DrawRepeatedPath.kt
│   │                                   ├── di/
│   │                                   │   └── DrawModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── DrawBehavior.kt
│   │                                   │   ├── DrawLineStyle.kt
│   │                                   │   ├── DrawMode.kt
│   │                                   │   ├── DrawOnBackgroundParams.kt
│   │                                   │   ├── DrawPathMode.kt
│   │                                   │   ├── ImageDrawApplier.kt
│   │                                   │   ├── PathPaint.kt
│   │                                   │   └── Warp.kt
│   │                                   └── presentation/
│   │                                       ├── DrawContent.kt
│   │                                       ├── components/
│   │                                       │   ├── BitmapDrawer.kt
│   │                                       │   ├── BrushSoftnessSelector.kt
│   │                                       │   ├── DrawColorSelector.kt
│   │                                       │   ├── DrawLineStyleSelector.kt
│   │                                       │   ├── DrawModeSelector.kt
│   │                                       │   ├── DrawPathModeSelector.kt
│   │                                       │   ├── LineWidthSelector.kt
│   │                                       │   ├── OpenColorPickerCard.kt
│   │                                       │   ├── PixelSizeSelector.kt
│   │                                       │   ├── UiPathPaint.kt
│   │                                       │   ├── UiPathPaintCanvasAction.kt
│   │                                       │   ├── controls/
│   │                                       │   │   ├── DrawContentControls.kt
│   │                                       │   │   ├── DrawContentNoDataControls.kt
│   │                                       │   │   └── DrawContentSecondaryControls.kt
│   │                                       │   ├── element/
│   │                                       │   │   ├── ArrowParamsSelector.kt
│   │                                       │   │   ├── CustomPathEffectParamsSelector.kt
│   │                                       │   │   ├── DrawPathModeInfoSheet.kt
│   │                                       │   │   ├── FloodFillParamsSelector.kt
│   │                                       │   │   ├── ImageParamsSelector.kt
│   │                                       │   │   ├── OutlinedFillColorSelector.kt
│   │                                       │   │   ├── OvalParamsSelector.kt
│   │                                       │   │   ├── PixelationParamsSelector.kt
│   │                                       │   │   ├── PolygonParamsSelector.kt
│   │                                       │   │   ├── PrivacyBlurParamsSelector.kt
│   │                                       │   │   ├── RectParamsSelector.kt
│   │                                       │   │   ├── SpotHealParamsSelector.kt
│   │                                       │   │   ├── SprayParamsSelector.kt
│   │                                       │   │   ├── StarParamsSelector.kt
│   │                                       │   │   ├── TextParamsSelector.kt
│   │                                       │   │   ├── TriangleParamsSelector.kt
│   │                                       │   │   └── WarpParamsSelector.kt
│   │                                       │   └── utils/
│   │                                       │       ├── BitmapDrawerPreview.kt
│   │                                       │       ├── DrawPathEffectPreview.kt
│   │                                       │       ├── DrawPathModeUtils.kt
│   │                                       │       ├── DrawRepeatedPath.kt
│   │                                       │       ├── DrawUtils.kt
│   │                                       │       ├── FloodFill.kt
│   │                                       │       ├── MotionEvent.kt
│   │                                       │       ├── PathHelper.kt
│   │                                       │       └── PointerDraw.kt
│   │                                       └── screenLogic/
│   │                                           └── DrawComponent.kt
│   ├── easter-egg/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── easter_egg/
│   │                                   └── presentation/
│   │                                       ├── EasterEggContent.kt
│   │                                       └── screenLogic/
│   │                                           └── EasterEggComponent.kt
│   ├── edit-exif/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── edit_exif/
│   │                                   └── presentation/
│   │                                       ├── EditExifContent.kt
│   │                                       └── screenLogic/
│   │                                           └── EditExifComponent.kt
│   ├── erase-background/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       ├── foss/
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── feature/
│   │       │                       └── erase_background/
│   │       │                           └── data/
│   │       │                               └── backend/
│   │       │                                   └── MlKitBackgroundRemoverBackend.kt
│   │       ├── main/
│   │       │   ├── AndroidManifest.xml
│   │       │   └── java/
│   │       │       └── com/
│   │       │           └── t8rin/
│   │       │               └── imagetoolbox/
│   │       │                   └── feature/
│   │       │                       └── erase_background/
│   │       │                           ├── data/
│   │       │                           │   ├── AndroidAutoBackgroundRemover.kt
│   │       │                           │   ├── AndroidAutoBackgroundRemoverBackendFactory.kt
│   │       │                           │   └── backend/
│   │       │                           │       └── GenericBackgroundRemoverBackend.kt
│   │       │                           ├── di/
│   │       │                           │   └── EraseBackgroundModule.kt
│   │       │                           ├── domain/
│   │       │                           │   ├── AutoBackgroundRemover.kt
│   │       │                           │   ├── AutoBackgroundRemoverBackend.kt
│   │       │                           │   ├── AutoBackgroundRemoverBackendFactory.kt
│   │       │                           │   └── model/
│   │       │                           │       └── BgModelType.kt
│   │       │                           └── presentation/
│   │       │                               ├── EraseBackgroundContent.kt
│   │       │                               ├── components/
│   │       │                               │   ├── AutoEraseBackgroundCard.kt
│   │       │                               │   ├── BitmapEraser.kt
│   │       │                               │   ├── OriginalImagePreviewAlphaSelector.kt
│   │       │                               │   ├── RecoverModeCard.kt
│   │       │                               │   └── TrimImageToggle.kt
│   │       │                               └── screenLogic/
│   │       │                                   └── EraseBackgroundComponent.kt
│   │       └── market/
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── erase_background/
│   │                                   └── data/
│   │                                       └── backend/
│   │                                           └── MlKitBackgroundRemoverBackend.kt
│   ├── filters/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── filters/
│   │                                   ├── data/
│   │                                   │   ├── AndroidFilterMaskApplier.kt
│   │                                   │   ├── AndroidFilterParamsInteractor.kt
│   │                                   │   ├── AndroidFilterProvider.kt
│   │                                   │   ├── model/
│   │                                   │   │   ├── AcesFilmicToneMappingFilter.kt
│   │                                   │   │   ├── AcesHillToneMappingFilter.kt
│   │                                   │   │   ├── AchromatomalyFilter.kt
│   │                                   │   │   ├── AchromatopsiaFilter.kt
│   │                                   │   │   ├── AldridgeFilter.kt
│   │                                   │   │   ├── AmatorkaFilter.kt
│   │                                   │   │   ├── AnaglyphFilter.kt
│   │                                   │   │   ├── AnisotropicDiffusionFilter.kt
│   │                                   │   │   ├── ArcFilter.kt
│   │                                   │   │   ├── AsciiFilter.kt
│   │                                   │   │   ├── AtkinsonDitheringFilter.kt
│   │                                   │   │   ├── AutoCropFilter.kt
│   │                                   │   │   ├── AutoPerspectiveFilter.kt
│   │                                   │   │   ├── AutoRemoveRedEyesFilter.kt
│   │                                   │   │   ├── AutumnTonesFilter.kt
│   │                                   │   │   ├── AverageDistanceFilter.kt
│   │                                   │   │   ├── BayerEightDitheringFilter.kt
│   │                                   │   │   ├── BayerFourDitheringFilter.kt
│   │                                   │   │   ├── BayerThreeDitheringFilter.kt
│   │                                   │   │   ├── BayerTwoDitheringFilter.kt
│   │                                   │   │   ├── BilaterialBlurFilter.kt
│   │                                   │   │   ├── BlackAndWhiteFilter.kt
│   │                                   │   │   ├── BlackHatFilter.kt
│   │                                   │   │   ├── BleachBypassFilter.kt
│   │                                   │   │   ├── BlockGlitchFilter.kt
│   │                                   │   │   ├── BloomFilter.kt
│   │                                   │   │   ├── BokehFilter.kt
│   │                                   │   │   ├── BorderFrameFilter.kt
│   │                                   │   │   ├── BoxBlurFilter.kt
│   │                                   │   │   ├── BrightnessFilter.kt
│   │                                   │   │   ├── BrowniFilter.kt
│   │                                   │   │   ├── BulgeDistortionFilter.kt
│   │                                   │   │   ├── BurkesDitheringFilter.kt
│   │                                   │   │   ├── CGAColorSpaceFilter.kt
│   │                                   │   │   ├── CandlelightFilter.kt
│   │                                   │   │   ├── CannyFilter.kt
│   │                                   │   │   ├── CaramelDarknessFilter.kt
│   │                                   │   │   ├── CelluloidFilter.kt
│   │                                   │   │   ├── ChannelMixFilter.kt
│   │                                   │   │   ├── CircleBlurFilter.kt
│   │                                   │   │   ├── CirclePixelationFilter.kt
│   │                                   │   │   ├── ClaheFilter.kt
│   │                                   │   │   ├── ClaheHSLFilter.kt
│   │                                   │   │   ├── ClaheHSVFilter.kt
│   │                                   │   │   ├── ClaheJzazbzFilter.kt
│   │                                   │   │   ├── ClaheLABFilter.kt
│   │                                   │   │   ├── ClaheLUVFilter.kt
│   │                                   │   │   ├── ClaheOklabFilter.kt
│   │                                   │   │   ├── ClaheOklchFilter.kt
│   │                                   │   │   ├── ClosingFilter.kt
│   │                                   │   │   ├── Clustered2x2DitheringFilter.kt
│   │                                   │   │   ├── Clustered4x4DitheringFilter.kt
│   │                                   │   │   ├── Clustered8x8DitheringFilter.kt
│   │                                   │   │   ├── CodaChromeFilter.kt
│   │                                   │   │   ├── CoffeeFilter.kt
│   │                                   │   │   ├── ColorAnomalyFilter.kt
│   │                                   │   │   ├── ColorBalanceFilter.kt
│   │                                   │   │   ├── ColorExplosionFilter.kt
│   │                                   │   │   ├── ColorHalftoneFilter.kt
│   │                                   │   │   ├── ColorMapFilter.kt
│   │                                   │   │   ├── ColorMatrix3x3Filter.kt
│   │                                   │   │   ├── ColorMatrix4x4Filter.kt
│   │                                   │   │   ├── ColorOverlayFilter.kt
│   │                                   │   │   ├── ColorPosterFilter.kt
│   │                                   │   │   ├── ColorfulSwirlFilter.kt
│   │                                   │   │   ├── ContourFilter.kt
│   │                                   │   │   ├── ContrastFilter.kt
│   │                                   │   │   ├── ConvexFilter.kt
│   │                                   │   │   ├── Convolution3x3Filter.kt
│   │                                   │   │   ├── CoolFilter.kt
│   │                                   │   │   ├── CopyMoveDetectionFilter.kt
│   │                                   │   │   ├── CropOrPerspectiveFilter.kt
│   │                                   │   │   ├── CropToContentFilter.kt
│   │                                   │   │   ├── CrossBlurFilter.kt
│   │                                   │   │   ├── CrossPixelationFilter.kt
│   │                                   │   │   ├── CrosshatchFilter.kt
│   │                                   │   │   ├── CrtCurvatureFilter.kt
│   │                                   │   │   ├── CrystallizeFilter.kt
│   │                                   │   │   ├── CubeLutFilter.kt
│   │                                   │   │   ├── CyberpunkFilter.kt
│   │                                   │   │   ├── DeepPurpleFilter.kt
│   │                                   │   │   ├── DehazeFilter.kt
│   │                                   │   │   ├── DeskewFilter.kt
│   │                                   │   │   ├── DespeckleFilter.kt
│   │                                   │   │   ├── DeutaromalyFilter.kt
│   │                                   │   │   ├── DeutaronotopiaFilter.kt
│   │                                   │   │   ├── DiamondPixelationFilter.kt
│   │                                   │   │   ├── DiffuseFilter.kt
│   │                                   │   │   ├── DigitalCodeFilter.kt
│   │                                   │   │   ├── DilationFilter.kt
│   │                                   │   │   ├── DoGFilter.kt
│   │                                   │   │   ├── DragoFilter.kt
│   │                                   │   │   ├── DropBluesFilter.kt
│   │                                   │   │   ├── EdgyAmberFilter.kt
│   │                                   │   │   ├── ElectricGradientFilter.kt
│   │                                   │   │   ├── EmbossFilter.kt
│   │                                   │   │   ├── EnhancedCirclePixelationFilter.kt
│   │                                   │   │   ├── EnhancedDiamondPixelationFilter.kt
│   │                                   │   │   ├── EnhancedGlitchFilter.kt
│   │                                   │   │   ├── EnhancedOilFilter.kt
│   │                                   │   │   ├── EnhancedPixelationFilter.kt
│   │                                   │   │   ├── EnhancedZoomBlurFilter.kt
│   │                                   │   │   ├── EqualizeFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveHSLFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveHSVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveLABFilter.kt
│   │                                   │   │   ├── EqualizeHistogramAdaptiveLUVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramFilter.kt
│   │                                   │   │   ├── EqualizeHistogramHSVFilter.kt
│   │                                   │   │   ├── EqualizeHistogramPixelationFilter.kt
│   │                                   │   │   ├── ErodeFilter.kt
│   │                                   │   │   ├── ErrorLevelAnalysisFilter.kt
│   │                                   │   │   ├── ExposureFilter.kt
│   │                                   │   │   ├── FallColorsFilter.kt
│   │                                   │   │   ├── FalseColorFilter.kt
│   │                                   │   │   ├── FalseFloydSteinbergDitheringFilter.kt
│   │                                   │   │   ├── FantasyLandscapeFilter.kt
│   │                                   │   │   ├── FastBilaterialBlurFilter.kt
│   │                                   │   │   ├── FastBlurFilter.kt
│   │                                   │   │   ├── FastGaussianBlur2DFilter.kt
│   │                                   │   │   ├── FastGaussianBlur3DFilter.kt
│   │                                   │   │   ├── FastGaussianBlur4DFilter.kt
│   │                                   │   │   ├── FilmStock50Filter.kt
│   │                                   │   │   ├── FloydSteinbergDitheringFilter.kt
│   │                                   │   │   ├── FoggyNightFilter.kt
│   │                                   │   │   ├── FractalGlassFilter.kt
│   │                                   │   │   ├── FuturisticGradientFilter.kt
│   │                                   │   │   ├── GammaFilter.kt
│   │                                   │   │   ├── GaussianBlurFilter.kt
│   │                                   │   │   ├── GaussianBoxBlurFilter.kt
│   │                                   │   │   ├── GlassSphereRefractionFilter.kt
│   │                                   │   │   ├── GlitchFilter.kt
│   │                                   │   │   ├── GlitchVariantFilter.kt
│   │                                   │   │   ├── GlowFilter.kt
│   │                                   │   │   ├── GoldenForestFilter.kt
│   │                                   │   │   ├── GoldenHourFilter.kt
│   │                                   │   │   ├── GothamFilter.kt
│   │                                   │   │   ├── GrainFilter.kt
│   │                                   │   │   ├── GrayscaleFilter.kt
│   │                                   │   │   ├── GreenSunFilter.kt
│   │                                   │   │   ├── GreenishFilter.kt
│   │                                   │   │   ├── HDRFilter.kt
│   │                                   │   │   ├── HableFilmicToneMappingFilter.kt
│   │                                   │   │   ├── HalftoneFilter.kt
│   │                                   │   │   ├── HazeFilter.kt
│   │                                   │   │   ├── HejlBurgessToneMappingFilter.kt
│   │                                   │   │   ├── HighlightsAndShadowsFilter.kt
│   │                                   │   │   ├── HorizontalWindStaggerFilter.kt
│   │                                   │   │   ├── HotSummerFilter.kt
│   │                                   │   │   ├── HueFilter.kt
│   │                                   │   │   ├── JarvisJudiceNinkeDitheringFilter.kt
│   │                                   │   │   ├── KaleidoscopeFilter.kt
│   │                                   │   │   ├── KodakFilter.kt
│   │                                   │   │   ├── KuwaharaFilter.kt
│   │                                   │   │   ├── LUT512x512Filter.kt
│   │                                   │   │   ├── LaplacianFilter.kt
│   │                                   │   │   ├── LaplacianSimpleFilter.kt
│   │                                   │   │   ├── LavenderDreamFilter.kt
│   │                                   │   │   ├── LeftToRightDitheringFilter.kt
│   │                                   │   │   ├── LemonadeLightFilter.kt
│   │                                   │   │   ├── LensCorrectionFilter.kt
│   │                                   │   │   ├── LinearBoxBlurFilter.kt
│   │                                   │   │   ├── LinearFastGaussianBlurFilter.kt
│   │                                   │   │   ├── LinearFastGaussianBlurNextFilter.kt
│   │                                   │   │   ├── LinearGaussianBlurFilter.kt
│   │                                   │   │   ├── LinearGaussianBoxBlurFilter.kt
│   │                                   │   │   ├── LinearStackBlurFilter.kt
│   │                                   │   │   ├── LinearTentBlurFilter.kt
│   │                                   │   │   ├── LinearTiltShiftFilter.kt
│   │                                   │   │   ├── LogarithmicToneMappingFilter.kt
│   │                                   │   │   ├── LookupFilter.kt
│   │                                   │   │   ├── LowPolyFilter.kt
│   │                                   │   │   ├── LuminanceGradientFilter.kt
│   │                                   │   │   ├── MarbleFilter.kt
│   │                                   │   │   ├── MedianBlurFilter.kt
│   │                                   │   │   ├── MicroMacroPixelationFilter.kt
│   │                                   │   │   ├── MirrorFilter.kt
│   │                                   │   │   ├── MissEtikateFilter.kt
│   │                                   │   │   ├── MobiusFilter.kt
│   │                                   │   │   ├── MoireFilter.kt
│   │                                   │   │   ├── MonochromeFilter.kt
│   │                                   │   │   ├── MorphologicalGradientFilter.kt
│   │                                   │   │   ├── MotionBlurFilter.kt
│   │                                   │   │   ├── NativeStackBlurFilter.kt
│   │                                   │   │   ├── NegativeFilter.kt
│   │                                   │   │   ├── NeonFilter.kt
│   │                                   │   │   ├── NightMagicFilter.kt
│   │                                   │   │   ├── NightVisionFilter.kt
│   │                                   │   │   ├── NoiseFilter.kt
│   │                                   │   │   ├── NonMaximumSuppressionFilter.kt
│   │                                   │   │   ├── NucleusPixelationFilter.kt
│   │                                   │   │   ├── OffsetFilter.kt
│   │                                   │   │   ├── OilFilter.kt
│   │                                   │   │   ├── OldTvFilter.kt
│   │                                   │   │   ├── OpacityFilter.kt
│   │                                   │   │   ├── OpeningFilter.kt
│   │                                   │   │   ├── OrangeHazeFilter.kt
│   │                                   │   │   ├── OrbitalPixelationFilter.kt
│   │                                   │   │   ├── PaletteTransferFilter.kt
│   │                                   │   │   ├── PaletteTransferVariantFilter.kt
│   │                                   │   │   ├── PastelFilter.kt
│   │                                   │   │   ├── PerlinDistortionFilter.kt
│   │                                   │   │   ├── PinchFilter.kt
│   │                                   │   │   ├── PinkDreamFilter.kt
│   │                                   │   │   ├── PixelMeltFilter.kt
│   │                                   │   │   ├── PixelationFilter.kt
│   │                                   │   │   ├── PointillizeFilter.kt
│   │                                   │   │   ├── PoissonBlurFilter.kt
│   │                                   │   │   ├── PolarCoordinatesFilter.kt
│   │                                   │   │   ├── PolaroidFilter.kt
│   │                                   │   │   ├── PolkaDotFilter.kt
│   │                                   │   │   ├── PopArtFilter.kt
│   │                                   │   │   ├── PosterizeFilter.kt
│   │                                   │   │   ├── ProtanopiaFilter.kt
│   │                                   │   │   ├── ProtonomalyFilter.kt
│   │                                   │   │   ├── PulseGridPixelationFilter.kt
│   │                                   │   │   ├── PurpleMistFilter.kt
│   │                                   │   │   ├── QuantizierFilter.kt
│   │                                   │   │   ├── RGBFilter.kt
│   │                                   │   │   ├── RadialTiltShiftFilter.kt
│   │                                   │   │   ├── RadialWeavePixelationFilter.kt
│   │                                   │   │   ├── RainbowWorldFilter.kt
│   │                                   │   │   ├── RandomDitheringFilter.kt
│   │                                   │   │   ├── RedSwirlFilter.kt
│   │                                   │   │   ├── ReduceNoiseFilter.kt
│   │                                   │   │   ├── RemoveColorFilter.kt
│   │                                   │   │   ├── ReplaceColorFilter.kt
│   │                                   │   │   ├── RetroYellowFilter.kt
│   │                                   │   │   ├── RingBlurFilter.kt
│   │                                   │   │   ├── RubberStampFilter.kt
│   │                                   │   │   ├── SandPaintingFilter.kt
│   │                                   │   │   ├── SaturationFilter.kt
│   │                                   │   │   ├── SeamCarvingFilter.kt
│   │                                   │   │   ├── SepiaFilter.kt
│   │                                   │   │   ├── SharpenFilter.kt
│   │                                   │   │   ├── ShuffleBlurFilter.kt
│   │                                   │   │   ├── SideFadeFilter.kt
│   │                                   │   │   ├── SierraDitheringFilter.kt
│   │                                   │   │   ├── SierraLiteDitheringFilter.kt
│   │                                   │   │   ├── SimpleOldTvFilter.kt
│   │                                   │   │   ├── SimpleSketchFilter.kt
│   │                                   │   │   ├── SimpleSolarizeFilter.kt
│   │                                   │   │   ├── SimpleThresholdDitheringFilter.kt
│   │                                   │   │   ├── SimpleWeavePixelationFilter.kt
│   │                                   │   │   ├── SketchFilter.kt
│   │                                   │   │   ├── SmearFilter.kt
│   │                                   │   │   ├── SmoothToonFilter.kt
│   │                                   │   │   ├── SobelEdgeDetectionFilter.kt
│   │                                   │   │   ├── SobelSimpleFilter.kt
│   │                                   │   │   ├── SoftEleganceFilter.kt
│   │                                   │   │   ├── SoftEleganceVariantFilter.kt
│   │                                   │   │   ├── SoftSpringLightFilter.kt
│   │                                   │   │   ├── SolarizeFilter.kt
│   │                                   │   │   ├── SpacePortalFilter.kt
│   │                                   │   │   ├── SparkleFilter.kt
│   │                                   │   │   ├── SpectralFireFilter.kt
│   │                                   │   │   ├── SphereLensDistortionFilter.kt
│   │                                   │   │   ├── SphereRefractionFilter.kt
│   │                                   │   │   ├── SpotHealFilter.kt
│   │                                   │   │   ├── StackBlurFilter.kt
│   │                                   │   │   ├── StaggeredPixelationFilter.kt
│   │                                   │   │   ├── StarBlurFilter.kt
│   │                                   │   │   ├── StrokePixelationFilter.kt
│   │                                   │   │   ├── StuckiDitheringFilter.kt
│   │                                   │   │   ├── SunriseFilter.kt
│   │                                   │   │   ├── SwirlDistortionFilter.kt
│   │                                   │   │   ├── TentBlurFilter.kt
│   │                                   │   │   ├── ThresholdFilter.kt
│   │                                   │   │   ├── ToneCurvesFilter.kt
│   │                                   │   │   ├── ToonFilter.kt
│   │                                   │   │   ├── TopHatFilter.kt
│   │                                   │   │   ├── TriToneFilter.kt
│   │                                   │   │   ├── TritanopiaFilter.kt
│   │                                   │   │   ├── TritonomalyFilter.kt
│   │                                   │   │   ├── TwirlFilter.kt
│   │                                   │   │   ├── TwoRowSierraDitheringFilter.kt
│   │                                   │   │   ├── UchimuraFilter.kt
│   │                                   │   │   ├── UnsharpFilter.kt
│   │                                   │   │   ├── VHSFilter.kt
│   │                                   │   │   ├── VibranceFilter.kt
│   │                                   │   │   ├── VignetteFilter.kt
│   │                                   │   │   ├── VintageFilter.kt
│   │                                   │   │   ├── VoronoiCrystallizeFilter.kt
│   │                                   │   │   ├── VortexPixelationFilter.kt
│   │                                   │   │   ├── WarmFilter.kt
│   │                                   │   │   ├── WaterEffectFilter.kt
│   │                                   │   │   ├── WeakPixelFilter.kt
│   │                                   │   │   ├── WeaveFilter.kt
│   │                                   │   │   ├── WhiteBalanceFilter.kt
│   │                                   │   │   ├── YililomaDitheringFilter.kt
│   │                                   │   │   └── ZoomBlurFilter.kt
│   │                                   │   ├── transformation/
│   │                                   │   │   ├── ColorMapTransformation.kt
│   │                                   │   │   ├── GPUFilterTransformation.kt
│   │                                   │   │   └── JhFilterTransformation.kt
│   │                                   │   └── utils/
│   │                                   │       ├── EnumMappings.kt
│   │                                   │       ├── TransformationUtils.kt
│   │                                   │       ├── convolution/
│   │                                   │       │   └── AireConvolution.kt
│   │                                   │       ├── glitch/
│   │                                   │       │   ├── GlitchTool.kt
│   │                                   │       │   └── tools/
│   │                                   │       │       ├── Anaglyph.kt
│   │                                   │       │       └── JpegGlitch.kt
│   │                                   │       ├── gpu/
│   │                                   │       │   └── GPUImageHighlightShadowWideRangeFilter.kt
│   │                                   │       ├── image/
│   │                                   │       │   └── ImageLoader.kt
│   │                                   │       ├── pixelation/
│   │                                   │       │   ├── PixelationTool.kt
│   │                                   │       │   └── tool/
│   │                                   │       │       ├── PixelationCommands.kt
│   │                                   │       │       └── PixelationLayer.kt
│   │                                   │       └── serialization/
│   │                                   │           ├── FilterSerializationUtils.kt
│   │                                   │           └── Mappings.kt
│   │                                   ├── di/
│   │                                   │   └── FilterModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── FilterMask.kt
│   │                                   │   └── FilterMaskApplier.kt
│   │                                   └── presentation/
│   │                                       ├── FiltersContent.kt
│   │                                       ├── components/
│   │                                       │   ├── BasicFilterPreference.kt
│   │                                       │   ├── BasicFilterState.kt
│   │                                       │   ├── FiltersContentActionButtons.kt
│   │                                       │   ├── FiltersContentControls.kt
│   │                                       │   ├── FiltersContentNoData.kt
│   │                                       │   ├── FiltersContentSheets.kt
│   │                                       │   ├── FiltersContentTopAppBarActions.kt
│   │                                       │   ├── MaskFilterPreference.kt
│   │                                       │   ├── MaskItem.kt
│   │                                       │   ├── MaskReorderSheet.kt
│   │                                       │   ├── MaskingFilterState.kt
│   │                                       │   ├── PathPaintPreview.kt
│   │                                       │   ├── UiFilterMask.kt
│   │                                       │   └── addEditMaskSheet/
│   │                                       │       ├── AddEditMaskSheet.kt
│   │                                       │       ├── AddEditMaskSheetControls.kt
│   │                                       │       ├── AddMaskSheetBitmapPreview.kt
│   │                                       │       └── AddMaskSheetComponent.kt
│   │                                       └── screenLogic/
│   │                                           └── FiltersComponent.kt
│   ├── format-conversion/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── format_conversion/
│   │                                   └── presentation/
│   │                                       ├── FormatConversionContent.kt
│   │                                       └── screenLogic/
│   │                                           └── FormatConversionComponent.kt
│   ├── gif-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── gif_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidGifConverter.kt
│   │                                   ├── di/
│   │                                   │   └── GifToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── GifConverter.kt
│   │                                   │   └── GifParams.kt
│   │                                   └── presentation/
│   │                                       ├── GifToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── GifParamsSelector.kt
│   │                                       │   ├── GifToolsControls.kt
│   │                                       │   ├── GifToolsImagePreview.kt
│   │                                       │   ├── GifToolsNoDataControls.kt
│   │                                       │   └── GifToolsTopAppBarActions.kt
│   │                                       └── screenLogic/
│   │                                           └── GifToolsComponent.kt
│   ├── gradient-maker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── gradient_maker/
│   │                                   ├── data/
│   │                                   │   └── AndroidGradientMaker.kt
│   │                                   ├── di/
│   │                                   │   └── GradientMakerModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── GradientMaker.kt
│   │                                   │   ├── GradientState.kt
│   │                                   │   ├── GradientType.kt
│   │                                   │   └── MeshGradientState.kt
│   │                                   └── presentation/
│   │                                       ├── GradientMakerContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ColorStopSelection.kt
│   │                                       │   ├── GradientMakerAppColorSchemeHandler.kt
│   │                                       │   ├── GradientMakerBottomButtons.kt
│   │                                       │   ├── GradientMakerCompareButton.kt
│   │                                       │   ├── GradientMakerControls.kt
│   │                                       │   ├── GradientMakerImagePreview.kt
│   │                                       │   ├── GradientMakerNoDataControls.kt
│   │                                       │   ├── GradientPreview.kt
│   │                                       │   ├── GradientPropertiesSelector.kt
│   │                                       │   ├── GradientSizeSelector.kt
│   │                                       │   ├── GradientTypeSelector.kt
│   │                                       │   ├── MeshGradientEditor.kt
│   │                                       │   ├── MeshGradientPreview.kt
│   │                                       │   ├── TileModeSelector.kt
│   │                                       │   ├── UiGradientState.kt
│   │                                       │   └── model/
│   │                                       │       └── GradientMakerType.kt
│   │                                       └── screenLogic/
│   │                                           └── GradientMakerComponent.kt
│   ├── image-cutting/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── image_cutting/
│   │                               ├── data/
│   │                               │   └── AndroidImageCutter.kt
│   │                               ├── di/
│   │                               │   └── ImageCutterModule.kt
│   │                               ├── domain/
│   │                               │   ├── CutParams.kt
│   │                               │   └── ImageCutter.kt
│   │                               └── presentation/
│   │                                   ├── ImageCutterContent.kt
│   │                                   ├── components/
│   │                                   │   ├── CutParamsSelector.kt
│   │                                   │   ├── CutPreview.kt
│   │                                   │   └── Utils.kt
│   │                                   └── screenLogic/
│   │                                       └── ImageCutterComponent.kt
│   ├── image-preview/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_preview/
│   │                                   └── presentation/
│   │                                       ├── ImagePreviewContent.kt
│   │                                       └── screenLogic/
│   │                                           └── ImagePreviewComponent.kt
│   ├── image-splitting/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── image_splitting/
│   │                               ├── data/
│   │                               │   └── AndroidImageSplitter.kt
│   │                               ├── di/
│   │                               │   └── ImageSplitterModule.kt
│   │                               ├── domain/
│   │                               │   ├── ImageSplitter.kt
│   │                               │   └── SplitParams.kt
│   │                               └── presentation/
│   │                                   ├── ImageSplitterContent.kt
│   │                                   ├── components/
│   │                                   │   └── SplitParamsSelector.kt
│   │                                   └── screenLogic/
│   │                                       └── ImageSplitterComponent.kt
│   ├── image-stacking/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_stacking/
│   │                                   ├── data/
│   │                                   │   └── AndroidImageStacker.kt
│   │                                   ├── di/
│   │                                   │   └── ImageStackingModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── ImageStacker.kt
│   │                                   │   ├── StackImage.kt
│   │                                   │   └── StackingParams.kt
│   │                                   └── presentation/
│   │                                       ├── ImageStackingContent.kt
│   │                                       ├── components/
│   │                                       │   ├── StackImageItem.kt
│   │                                       │   └── StackingParamsSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ImageStackingComponent.kt
│   ├── image-stitch/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── image_stitch/
│   │                                   ├── data/
│   │                                   │   ├── AndroidImageCombiner.kt
│   │                                   │   └── CvStitchHelper.kt
│   │                                   ├── di/
│   │                                   │   └── ImageStitchModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── CombiningParams.kt
│   │                                   │   ├── ImageCombiner.kt
│   │                                   │   ├── SavableCombiningParams.kt
│   │                                   │   ├── StitchAlignment.kt
│   │                                   │   ├── StitchFadeSide.kt
│   │                                   │   └── StitchMode.kt
│   │                                   └── presentation/
│   │                                       ├── ImageStitchingContent.kt
│   │                                       ├── components/
│   │                                       │   ├── FadeStrengthSelector.kt
│   │                                       │   ├── ImageFadingEdgesSelector.kt
│   │                                       │   ├── ImageScaleSelector.kt
│   │                                       │   ├── SpacingSelector.kt
│   │                                       │   ├── StitchAlignmentSelector.kt
│   │                                       │   └── StitchModeSelector.kt
│   │                                       └── screenLogic/
│   │                                           └── ImageStitchingComponent.kt
│   ├── jxl-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── jxl_tools/
│   │                                   ├── data/
│   │                                   │   └── AndroidJxlConverter.kt
│   │                                   ├── di/
│   │                                   │   └── JxlToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── AnimatedJxlParams.kt
│   │                                   │   └── JxlConverter.kt
│   │                                   └── presentation/
│   │                                       ├── JxlToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AnimatedJxlParamsSelector.kt
│   │                                       │   ├── JxlToolsBitmapPreview.kt
│   │                                       │   ├── JxlToolsButtons.kt
│   │                                       │   ├── JxlToolsControls.kt
│   │                                       │   ├── JxlToolsNoDataControls.kt
│   │                                       │   └── JxlToolsTopAppBarActions.kt
│   │                                       └── screenLogic/
│   │                                           └── JxlToolsComponent.kt
│   ├── libraries-info/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── libraries_info/
│   │                                   └── presentation/
│   │                                       ├── LibrariesInfoContent.kt
│   │                                       ├── components/
│   │                                       │   ├── LibrariesContainer.kt
│   │                                       │   └── LibraryLink.kt
│   │                                       └── screenLogic/
│   │                                           └── LibrariesInfoComponent.kt
│   ├── library-details/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── library_details/
│   │                               └── presentation/
│   │                                   ├── LibraryDetailsContent.kt
│   │                                   └── screenLogic/
│   │                                       └── LibraryDetailsComponent.kt
│   ├── limits-resize/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── limits_resize/
│   │                                   ├── data/
│   │                                   │   └── AndroidLimitsImageScaler.kt
│   │                                   ├── di/
│   │                                   │   └── LimitsResizeModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── LimitsImageScaler.kt
│   │                                   │   └── LimitsResizeType.kt
│   │                                   └── presentation/
│   │                                       ├── LimitsResizeContent.kt
│   │                                       ├── components/
│   │                                       │   ├── AutoRotateLimitBoxToggle.kt
│   │                                       │   └── LimitResizeGroup.kt
│   │                                       └── screenLogic/
│   │                                           └── LimitsResizeComponent.kt
│   ├── load-net-image/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── load_net_image/
│   │                                   ├── data/
│   │                                   │   └── AndroidHtmlImageParser.kt
│   │                                   ├── di/
│   │                                   │   └── LoadNetImageModule.kt
│   │                                   ├── domain/
│   │                                   │   └── HtmlImageParser.kt
│   │                                   └── presentation/
│   │                                       ├── LoadNetImageContent.kt
│   │                                       ├── components/
│   │                                       │   ├── LoadNetImageActionButtons.kt
│   │                                       │   ├── LoadNetImageAdaptiveActions.kt
│   │                                       │   ├── LoadNetImageTopAppBarActions.kt
│   │                                       │   ├── LoadNetImageUrlTextField.kt
│   │                                       │   ├── ParsedImagePreview.kt
│   │                                       │   └── ParsedImagesSelection.kt
│   │                                       └── screenLogic/
│   │                                           └── LoadNetImageComponent.kt
│   ├── main/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── main/
│   │                                   └── presentation/
│   │                                       ├── MainContent.kt
│   │                                       ├── components/
│   │                                       │   ├── FilteredScreenListFor.kt
│   │                                       │   ├── LauncherScreenSelector.kt
│   │                                       │   ├── MainContentImpl.kt
│   │                                       │   ├── MainDrawerContent.kt
│   │                                       │   ├── MainNavigationBar.kt
│   │                                       │   ├── MainNavigationBarForFavorites.kt
│   │                                       │   ├── MainNavigationRail.kt
│   │                                       │   ├── MainNavigationRailForFavorites.kt
│   │                                       │   ├── MainTopAppBar.kt
│   │                                       │   ├── ScreenPreferenceSelection.kt
│   │                                       │   └── SearchableBottomBar.kt
│   │                                       └── screenLogic/
│   │                                           └── MainComponent.kt
│   ├── markup-layers/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── markup_layers/
│   │                                   ├── data/
│   │                                   │   ├── AndroidMarkupLayersApplier.kt
│   │                                   │   ├── project/
│   │                                   │   │   ├── AssetRegistry.kt
│   │                                   │   │   ├── Mapping.kt
│   │                                   │   │   ├── MarkupProjectConstants.kt
│   │                                   │   │   ├── MarkupProjectExtensions.kt
│   │                                   │   │   ├── MarkupProjectFile.kt
│   │                                   │   │   └── ProjectFileLoadResult.kt
│   │                                   │   └── utils/
│   │                                   │       ├── LayersRenderer.kt
│   │                                   │       ├── PictureLayerShadowRenderer.kt
│   │                                   │       ├── ShapeLayerRenderer.kt
│   │                                   │       ├── TextLayerMetrics.kt
│   │                                   │       └── TextLayerShadowRenderer.kt
│   │                                   ├── di/
│   │                                   │   └── MarkupLayersModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── MarkupLayer.kt
│   │                                   │   ├── MarkupLayersApplier.kt
│   │                                   │   ├── MarkupProject.kt
│   │                                   │   ├── MarkupProjectResult.kt
│   │                                   │   ├── ProjectBackground.kt
│   │                                   │   └── ShapeLayerModeExt.kt
│   │                                   └── presentation/
│   │                                       ├── MarkupLayersContent.kt
│   │                                       ├── components/
│   │                                       │   ├── ActiveLayerGestureModifier.kt
│   │                                       │   ├── AddShapeLayerDialog.kt
│   │                                       │   ├── AddTextLayerDialog.kt
│   │                                       │   ├── ClickableTile.kt
│   │                                       │   ├── DropShadowSection.kt
│   │                                       │   ├── EditBox.kt
│   │                                       │   ├── EditBoxState.kt
│   │                                       │   ├── EditLayerSheet.kt
│   │                                       │   ├── Layer.kt
│   │                                       │   ├── LayerContent.kt
│   │                                       │   ├── MarkupLayersActions.kt
│   │                                       │   ├── MarkupLayersContextActions.kt
│   │                                       │   ├── MarkupLayersNoDataControls.kt
│   │                                       │   ├── MarkupLayersSideMenu.kt
│   │                                       │   ├── MarkupLayersSideMenuColumn.kt
│   │                                       │   ├── MarkupLayersTopAppBarActions.kt
│   │                                       │   ├── ShapeLayerParamsSelector.kt
│   │                                       │   └── model/
│   │                                       │       ├── BackgroundBehavior.kt
│   │                                       │       ├── ShapeLayerModeUiExt.kt
│   │                                       │       ├── UiMarkupLayer.kt
│   │                                       │       └── UiMarkupLayerGrouping.kt
│   │                                       └── screenLogic/
│   │                                           └── MarkupLayersComponent.kt
│   ├── media-picker/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── media_picker/
│   │                                   ├── data/
│   │                                   │   ├── AndroidMediaRetriever.kt
│   │                                   │   └── utils/
│   │                                   │       ├── DateExt.kt
│   │                                   │       ├── MediaObserver.kt
│   │                                   │       ├── MediaQuery.kt
│   │                                   │       └── SupportedFiles.kt
│   │                                   ├── di/
│   │                                   │   └── MediaPickerModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── MediaRetriever.kt
│   │                                   │   └── model/
│   │                                   │       ├── Album.kt
│   │                                   │       ├── AllowedMedia.kt
│   │                                   │       ├── Media.kt
│   │                                   │       ├── MediaItem.kt
│   │                                   │       ├── MediaOrder.kt
│   │                                   │       ├── MediaState.kt
│   │                                   │       └── OrderType.kt
│   │                                   └── presentation/
│   │                                       ├── MediaPickerActivity.kt
│   │                                       ├── components/
│   │                                       │   ├── ManageExternalStorageWarning.kt
│   │                                       │   ├── MediaExtensionHeader.kt
│   │                                       │   ├── MediaImage.kt
│   │                                       │   ├── MediaImagePager.kt
│   │                                       │   ├── MediaPickerGrid.kt
│   │                                       │   ├── MediaPickerGridWithOverlays.kt
│   │                                       │   ├── MediaPickerHavePermissions.kt
│   │                                       │   ├── MediaPickerRootContent.kt
│   │                                       │   ├── MediaPickerRootContentEmbeddable.kt
│   │                                       │   ├── MediaSizeFooter.kt
│   │                                       │   ├── MediaStickyHeader.kt
│   │                                       │   ├── MediaVideoDurationHeader.kt
│   │                                       │   ├── ObserveColorSchemeExtra.kt
│   │                                       │   └── SendMediaAsResult.kt
│   │                                       └── screenLogic/
│   │                                           └── MediaPickerComponent.kt
│   ├── mesh-gradients/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── mesh_gradients/
│   │                                   └── presentation/
│   │                                       ├── MeshGradientsContent.kt
│   │                                       └── screenLogic/
│   │                                           └── MeshGradientsComponent.kt
│   ├── noise-generation/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── noise_generation/
│   │                               ├── data/
│   │                               │   └── AndroidNoiseGenerator.kt
│   │                               ├── di/
│   │                               │   └── NoiseGenerationModule.kt
│   │                               ├── domain/
│   │                               │   ├── NoiseGenerator.kt
│   │                               │   └── model/
│   │                               │       ├── CellularDistanceFunction.kt
│   │                               │       ├── CellularReturnType.kt
│   │                               │       ├── DomainWarpType.kt
│   │                               │       ├── FractalType.kt
│   │                               │       ├── NoiseParams.kt
│   │                               │       ├── NoiseType.kt
│   │                               │       └── RotationType3D.kt
│   │                               └── presentation/
│   │                                   ├── NoiseGenerationContent.kt
│   │                                   ├── components/
│   │                                   │   └── NoiseParamsSelection.kt
│   │                                   └── screenLogic/
│   │                                       └── NoiseGenerationComponent.kt
│   ├── palette-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── palette_tools/
│   │                                   └── presentation/
│   │                                       ├── PaletteToolsContent.kt
│   │                                       ├── components/
│   │                                       │   ├── DefaultPaletteControls.kt
│   │                                       │   ├── EditPaletteControls.kt
│   │                                       │   ├── ImageColorPalette.kt
│   │                                       │   ├── MaterialYouPalette.kt
│   │                                       │   ├── MaterialYouPaletteControls.kt
│   │                                       │   ├── MaterialYouPaletteGroup.kt
│   │                                       │   ├── MaterialYouPaletteItem.kt
│   │                                       │   ├── PaletteColorNameField.kt
│   │                                       │   ├── PaletteColorsCountSelector.kt
│   │                                       │   ├── PaletteToolsScreenControls.kt
│   │                                       │   ├── PaletteType.kt
│   │                                       │   └── model/
│   │                                       │       ├── NamedColor.kt
│   │                                       │       └── PaletteFormatHelper.kt
│   │                                       └── screenLogic/
│   │                                           └── PaletteToolsComponent.kt
│   ├── pdf-tools/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── pdf_tools/
│   │                                   ├── data/
│   │                                   │   ├── AndroidPdfHelper.kt
│   │                                   │   ├── AndroidPdfManager.kt
│   │                                   │   └── utils/
│   │                                   │       ├── Hocr.kt
│   │                                   │       ├── PdfContentStreamEditor.kt
│   │                                   │       ├── PdfRenderer.kt
│   │                                   │       └── PdfUtils.kt
│   │                                   ├── di/
│   │                                   │   └── PdfToolsModule.kt
│   │                                   ├── domain/
│   │                                   │   ├── PdfHelper.kt
│   │                                   │   ├── PdfManager.kt
│   │                                   │   └── model/
│   │                                   │       ├── ExtractPagesAction.kt
│   │                                   │       ├── PageOrientation.kt
│   │                                   │       ├── PageSize.kt
│   │                                   │       ├── PdfAnnotationType.kt
│   │                                   │       ├── PdfCheckResult.kt
│   │                                   │       ├── PdfCreationParams.kt
│   │                                   │       ├── PdfCropParams.kt
│   │                                   │       ├── PdfExtractPagesParams.kt
│   │                                   │       ├── PdfMetadata.kt
│   │                                   │       ├── PdfPageNumbersParams.kt
│   │                                   │       ├── PdfRemoveAnnotationParams.kt
│   │                                   │       ├── PdfSignatureParams.kt
│   │                                   │       ├── PdfWatermarkParams.kt
│   │                                   │       ├── PrintPdfParams.kt
│   │                                   │       └── SearchablePdfPage.kt
│   │                                   └── presentation/
│   │                                       ├── common/
│   │                                       │   ├── BasePdfToolComponent.kt
│   │                                       │   ├── BasePdfToolContent.kt
│   │                                       │   ├── PageSwitcher.kt
│   │                                       │   └── PdfPreviewItem.kt
│   │                                       ├── compress/
│   │                                       │   ├── CompressPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── CompressPdfToolComponent.kt
│   │                                       ├── crop/
│   │                                       │   ├── CropPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── CropPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── CropPdfToolComponent.kt
│   │                                       ├── extract_images/
│   │                                       │   ├── ExtractImagesPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ExtractImagesPdfToolComponent.kt
│   │                                       ├── extract_pages/
│   │                                       │   ├── ExtractPagesPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ExtractPagesPdfToolComponent.kt
│   │                                       ├── flatten/
│   │                                       │   ├── FlattenPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── FlattenPdfToolComponent.kt
│   │                                       ├── grayscale/
│   │                                       │   ├── GrayscalePdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── GrayscalePdfToolComponent.kt
│   │                                       ├── images_to_pdf/
│   │                                       │   ├── ImagesToPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ImagesToPdfToolComponent.kt
│   │                                       ├── merge/
│   │                                       │   ├── MergePdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── MergePdfToolComponent.kt
│   │                                       ├── metadata/
│   │                                       │   ├── MetadataPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── MetadataEditor.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── MetadataPdfToolComponent.kt
│   │                                       ├── ocr/
│   │                                       │   ├── OCRPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── OCRPdfToolComponent.kt
│   │                                       ├── page_numbers/
│   │                                       │   ├── PageNumbersPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PageNumbersPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PageNumbersPdfToolComponent.kt
│   │                                       ├── preview/
│   │                                       │   ├── PreviewPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PreviewPdfToolComponent.kt
│   │                                       ├── print/
│   │                                       │   ├── PrintPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── PrintPdfToolComponent.kt
│   │                                       ├── protect/
│   │                                       │   ├── ProtectPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── ProtectPdfToolComponent.kt
│   │                                       ├── rearrange/
│   │                                       │   ├── RearrangePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRearrangeGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RearrangePdfToolComponent.kt
│   │                                       ├── remove_annotations/
│   │                                       │   ├── RemoveAnnotationsPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── PdfAnnotationTypeSelector.kt
│   │                                       │   │   └── RemoveAnnotationsPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RemoveAnnotationsPdfToolComponent.kt
│   │                                       ├── remove_pages/
│   │                                       │   ├── RemovePagesPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRemoveGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RemovePagesPdfToolComponent.kt
│   │                                       ├── repair/
│   │                                       │   ├── RepairPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RepairPdfToolComponent.kt
│   │                                       ├── root/
│   │                                       │   ├── RootPdfToolsContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── PdfViewer.kt
│   │                                       │   │   └── viewer/
│   │                                       │   │       ├── LegacyPdfViewer.kt
│   │                                       │   │       ├── ModernPdfViewer.kt
│   │                                       │   │       └── ModernPdfViewerDelegate.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RootPdfToolsComponent.kt
│   │                                       ├── rotate/
│   │                                       │   ├── RotatePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── PdfPagesRotationGrid.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── RotatePdfToolComponent.kt
│   │                                       ├── signature/
│   │                                       │   ├── SignaturePdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   ├── SignatureDialog.kt
│   │                                       │   │   ├── SignaturePreview.kt
│   │                                       │   │   └── SignatureSelector.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── SignaturePdfToolComponent.kt
│   │                                       ├── split/
│   │                                       │   ├── SplitPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── SplitPdfToolComponent.kt
│   │                                       ├── unlock/
│   │                                       │   ├── UnlockPdfToolContent.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── UnlockPdfToolComponent.kt
│   │                                       ├── watermark/
│   │                                       │   ├── WatermarkPdfToolContent.kt
│   │                                       │   ├── components/
│   │                                       │   │   └── WatermarkPreview.kt
│   │                                       │   └── screenLogic/
│   │                                       │       └── WatermarkPdfToolComponent.kt
│   │                                       └── zip_convert/
│   │                                           ├── ZipConvertPdfToolContent.kt
│   │                                           └── screenLogic/
│   │                                               └── ZipConvertPdfToolComponent.kt
│   ├── pick-color/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── pick_color/
│   │                                   └── presentation/
│   │                                       ├── PickColorFromImageContent.kt
│   │                                       ├── components/
│   │                                       │   ├── PickColorFromImageBottomAppBar.kt
│   │                                       │   ├── PickColorFromImageContentImpl.kt
│   │                                       │   ├── PickColorFromImageSheet.kt
│   │                                       │   └── PickColorFromImageTopAppBar.kt
│   │                                       └── screenLogic/
│   │                                           └── PickColorFromImageComponent.kt
│   ├── quick-tiles/
│   │   ├── .gitignore
│   │   ├── build.gradle.kts
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           └── java/
│   │               └── com/
│   │                   └── t8rin/
│   │                       └── imagetoolbox/
│   │                           └── feature/
│   │                               └── quick_tiles/
│   │                                   ├── screenshot/
│   │                                   │   ├── Contants.kt
│   │                                   │ 
Copy disabled (too large) Download .json
Condensed preview — 3013 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (25,042K chars).
[
  {
    "path": ".github/FUNDING.yml",
    "chars": 877,
    "preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 1875,
    "preview": "name: Bug Report\ndescription: Create a report to help us improve\nlabels: [\"bug\"]\n\nbody:\n  - type: textarea\n    id: descr"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 822,
    "preview": "name: Feature Request\ndescription: Suggest an idea for this project\nlabels: [\"enhancement\"]\n\nbody:\n  - type: textarea\n  "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 504,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/android.yml",
    "chars": 2450,
    "preview": "name: Android CI\n\non:\n  workflow_dispatch:\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Set Swa"
  },
  {
    "path": ".github/workflows/android_foss.yml",
    "chars": 1587,
    "preview": "name: Android CI FOSS\n\non:\n  workflow_dispatch:\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Se"
  },
  {
    "path": ".github/workflows/android_market.yml",
    "chars": 1607,
    "preview": "name: Android CI Market\n\non:\n  workflow_dispatch:\n\njobs:\n  build:\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: "
  },
  {
    "path": ".github/workflows/tb_release.yml",
    "chars": 4457,
    "preview": "name: Create Release\n\non:\n  workflow_dispatch:\n#on:\n#  push:\n#    tags:\n#      - '*'\n\njobs:\n  build_and_release:\n\n    ru"
  },
  {
    "path": ".gitignore",
    "chars": 150,
    "preview": "*.iml\n.gradle\n/local.properties\n.DS_Store\n/build\n/app/release\n/captures\n.externalNativeBuild\n.cxx\n/.idea\n/libs/nQuant/bu"
  },
  {
    "path": "ARCHITECTURE.md",
    "chars": 23008,
    "preview": "# 📐 Modules Graph\n\n```mermaid\n%%{\n    init: {\n      \"theme\": \"base\",\n      \"themeVariables\": {\n        \"mainBkg\": \"#1214"
  },
  {
    "path": "ARCHITECTURE_2",
    "chars": 24670,
    "preview": "%%{\n    init: {\n      \"theme\": \"base\",\n      \"maxEdges\": 1000,\n      \"themeVariables\": {\n        \"mainBkg\": \"#121418\",\n "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 2792,
    "preview": "# Contributing Guidelines\n\nThis documentation contains set of guidelines to help you during the contribution process.\n\n#"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "README.md",
    "chars": 37510,
    "preview": "<div align=\"center\">\n</br>\n<img src=\"./fastlane/metadata/android/en-US/images/logo/logo.png\" width=\"200\" />\n\n</div>\n\n<di"
  },
  {
    "path": "app/.gitignore",
    "chars": 74,
    "preview": "/build/\n/release/\n/foss/\n/market/\n/jxl/\n/build\n/release\n/foss\n/market\n/jxl"
  },
  {
    "path": "app/build.gradle.kts",
    "chars": 5912,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/proguard-rules.pro",
    "chars": 3160,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "chars": 10347,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2026 T8RIN "
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/AppActivity.kt",
    "chars": 1592,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/ImageToolboxApplication.kt",
    "chars": 3003,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/AttachLogWriter.kt",
    "chars": 1418,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitCollages.kt",
    "chars": 963,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitColorNames.kt",
    "chars": 1069,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitNeuralTool.kt",
    "chars": 1112,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitOpenCV.kt",
    "chars": 917,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitPdfBox.kt",
    "chars": 945,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InitQrScanner.kt",
    "chars": 1194,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/InjectBaseComponent.kt",
    "chars": 1025,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/RegisterSecurityProviders.kt",
    "chars": 3452,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/functions/SetupFlags.kt",
    "chars": 1214,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/java/com/t8rin/imagetoolbox/app/presentation/components/utils/GetProcessName.kt",
    "chars": 2336,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "app/src/main/res/resources.properties",
    "chars": 720,
    "preview": "#\n# ImageToolbox is an image editor for android\n# Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n#\n# Licensed under the"
  },
  {
    "path": "app/src/market/debug/google-services.json",
    "chars": 1018,
    "preview": "{\n  \"project_info\": {\n    \"project_number\": \"698299287298\",\n    \"project_id\": \"imagetoolbox-13e3c\",\n    \"storage_bucket\""
  },
  {
    "path": "app/src/market/release/google-services.json",
    "chars": 1012,
    "preview": "{\n  \"project_info\": {\n    \"project_number\": \"698299287298\",\n    \"project_id\": \"imagetoolbox-13e3c\",\n    \"storage_bucket\""
  },
  {
    "path": "benchmark/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "benchmark/build.gradle.kts",
    "chars": 2532,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "benchmark/src/main/AndroidManifest.xml",
    "chars": 745,
    "preview": "<!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n  ~\n  ~ License"
  },
  {
    "path": "benchmark/src/main/java/com/t8rin/imagetoolbox/benchmark/BaselineProfileGenerator.kt",
    "chars": 1272,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/.gitignore",
    "chars": 104,
    "preview": "*.iml\n.gradle\n/local.properties\n.DS_Store\n/build\n/app/release\n/captures\n.externalNativeBuild\n.cxx\n/.idea"
  },
  {
    "path": "build-logic/convention/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "build-logic/convention/build.gradle.kts",
    "chars": 2429,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/ImageToolboxApplicationPlugin.kt",
    "chars": 3178,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/ImageToolboxHiltPlugin.kt",
    "chars": 1374,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/ImageToolboxLibraryComposePlugin.kt",
    "chars": 1296,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/ImageToolboxLibraryFeaturePlugin.kt",
    "chars": 1972,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/ImageToolboxLibraryPlugin.kt",
    "chars": 1938,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureCompose.kt",
    "chars": 1675,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureDetekt.kt",
    "chars": 1407,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ConfigureKotlinAndroid.kt",
    "chars": 5109,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/convention/src/main/kotlin/com/t8rin/imagetoolbox/ProjectExtensions.kt",
    "chars": 2717,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build-logic/settings.gradle.kts",
    "chars": 1100,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "build.gradle.kts",
    "chars": 1450,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "compose_compiler_config.conf",
    "chars": 827,
    "preview": "java.time.ZoneId\njava.time.ZoneOffset\njava.text.DecimalFormat\njava.text.NumberFormat\njava.time.Instant\njava.time.Duratio"
  },
  {
    "path": "core/crash/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "core/crash/build.gradle.kts",
    "chars": 1179,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/foss/java/com/t8rin/imagetoolbox/core/crash/data/AnalyticsManagerImpl.kt",
    "chars": 1272,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/AndroidManifest.xml",
    "chars": 955,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2024 T8RIN "
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/di/CrashModule.kt",
    "chars": 1223,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/CrashActivity.kt",
    "chars": 1728,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashActionButtons.kt",
    "chars": 5608,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashAttentionCard.kt",
    "chars": 3869,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashBottomButtons.kt",
    "chars": 3151,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashHandler.kt",
    "chars": 2600,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashInfoCard.kt",
    "chars": 2763,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/CrashRootContent.kt",
    "chars": 3391,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/components/GlobalExceptionHandler.kt",
    "chars": 2918,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/main/java/com/t8rin/imagetoolbox/core/crash/presentation/screenLogic/CrashComponent.kt",
    "chars": 2664,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/crash/src/market/java/com/t8rin/imagetoolbox/core/crash/data/AnalyticsManagerImpl.kt",
    "chars": 2670,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "core/data/build.gradle.kts",
    "chars": 2368,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/AndroidManifest.xml",
    "chars": 1345,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2026 T8RIN "
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/Base64Fetcher.kt",
    "chars": 2181,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/CoilLogger.kt",
    "chars": 2031,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/MemoryCache.kt",
    "chars": 925,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/PdfDecoder.kt",
    "chars": 4633,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/TiffDecoder.kt",
    "chars": 3313,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/TimeMeasureInterceptor.kt",
    "chars": 1656,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coil/UpscaleSvgDecoder.kt",
    "chars": 2153,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coroutines/AndroidDispatchersHolder.kt",
    "chars": 1616,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/coroutines/AppScopeImpl.kt",
    "chars": 1406,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/CoroutinesModule.kt",
    "chars": 2911,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/ImageLoaderModule.kt",
    "chars": 4821,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/ImageModule.kt",
    "chars": 2771,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/JsonModule.kt",
    "chars": 3260,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/LocalModule.kt",
    "chars": 1617,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/RemoteModule.kt",
    "chars": 2468,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/ResourcesModule.kt",
    "chars": 1243,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/di/SavingModule.kt",
    "chars": 2104,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidImageCompressor.kt",
    "chars": 6968,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidImageGetter.kt",
    "chars": 8518,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidImagePreviewCreator.kt",
    "chars": 5141,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidImageScaler.kt",
    "chars": 19725,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidImageTransformer.kt",
    "chars": 6917,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidMetadata.kt",
    "chars": 1715,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/AndroidShareProvider.kt",
    "chars": 10571,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/BlendingModeExt.kt",
    "chars": 4343,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/CanvasUtils.kt",
    "chars": 3076,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/ColorUtils.kt",
    "chars": 1581,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/ImageCompressorBackend.kt",
    "chars": 4002,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/StaticOptions.kt",
    "chars": 1181,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/AvifBackend.kt",
    "chars": 1798,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/BmpBackend.kt",
    "chars": 1238,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/HeicBackend.kt",
    "chars": 1613,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/IcoBackend.kt",
    "chars": 3823,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/Jpeg2000Backend.kt",
    "chars": 1451,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/JpegliBackend.kt",
    "chars": 1667,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/JpgBackend.kt",
    "chars": 1274,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/JxlBackend.kt",
    "chars": 2383,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/MozJpegBackend.kt",
    "chars": 1228,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/OxiPngBackend.kt",
    "chars": 1301,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/PngLosslessBackend.kt",
    "chars": 1281,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/PngLossyBackend.kt",
    "chars": 1716,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/QoiBackend.kt",
    "chars": 1178,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/StaticGifBackend.kt",
    "chars": 1750,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/TiffBackend.kt",
    "chars": 1828,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/image/utils/compressor/WebpBackend.kt",
    "chars": 1716,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/json/MoshiParser.kt",
    "chars": 1698,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/remote/AndroidDownloadManager.kt",
    "chars": 7569,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/remote/AndroidRemoteResourcesStore.kt",
    "chars": 4519,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/resource/AndroidResourceManager.kt",
    "chars": 2437,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFileController.kt",
    "chars": 21432,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidFilenameCreator.kt",
    "chars": 10243,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/AndroidKeepAliveService.kt",
    "chars": 2701,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/KeepAliveForegroundService.kt",
    "chars": 7097,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/SaveException.kt",
    "chars": 835,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/SavingFolder.kt",
    "chars": 4517,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/io/FileWriteable.kt",
    "chars": 1000,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/io/StreamWriteable.kt",
    "chars": 2435,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/saving/io/UriReadable.kt",
    "chars": 1913,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/BitmapUtils.kt",
    "chars": 2586,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/ChecksumUtils.kt",
    "chars": 4735,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/CoilUtils.kt",
    "chars": 1994,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/ContextUtils.kt",
    "chars": 3731,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/CoroutinesUtils.kt",
    "chars": 1021,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/FileUtils.kt",
    "chars": 1618,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/HttpClientUtils.kt",
    "chars": 1609,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/data/src/main/java/com/t8rin/imagetoolbox/core/data/utils/WriteableUtils.kt",
    "chars": 1126,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/di/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "core/di/build.gradle.kts",
    "chars": 869,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/di/src/main/AndroidManifest.xml",
    "chars": 794,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2024 T8RIN "
  },
  {
    "path": "core/di/src/main/java/com/t8rin/imagetoolbox/core/di/EntryPointUtils.kt",
    "chars": 1026,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/di/src/main/java/com/t8rin/imagetoolbox/core/di/Qualifiers.kt",
    "chars": 1211,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "core/domain/build.gradle.kts",
    "chars": 935,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/AndroidManifest.xml",
    "chars": 794,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n  ~ ImageToolbox is an image editor for android\n  ~ Copyright (c) 2024 T8RIN "
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/Constants.kt",
    "chars": 2378,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/coroutines/AppScope.kt",
    "chars": 847,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/coroutines/DispatchersHolder.kt",
    "chars": 1056,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImageCompressor.kt",
    "chars": 1489,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImageGetter.kt",
    "chars": 2082,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImagePreviewCreator.kt",
    "chars": 1168,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImageScaler.kt",
    "chars": 1211,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImageShareProvider.kt",
    "chars": 1287,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ImageTransformer.kt",
    "chars": 1607,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/Metadata.kt",
    "chars": 2854,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/ShareProvider.kt",
    "chars": 1796,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/BlendingMode.kt",
    "chars": 21741,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageData.kt",
    "chars": 1643,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageFormat.kt",
    "chars": 10497,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageFormatGroup.kt",
    "chars": 3999,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageFrames.kt",
    "chars": 1440,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageInfo.kt",
    "chars": 1200,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageScaleMode.kt",
    "chars": 21572,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ImageWithSize.kt",
    "chars": 1028,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/MetadataTag.kt",
    "chars": 24157,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/Preset.kt",
    "chars": 1676,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/Quality.kt",
    "chars": 3961,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ResizeAnchor.kt",
    "chars": 851,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/ResizeType.kt",
    "chars": 1934,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/image/model/TiffCompressionScheme.kt",
    "chars": 1416,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/json/JsonParser.kt",
    "chars": 1217,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/CipherType.kt",
    "chars": 4603,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/ColorModel.kt",
    "chars": 866,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/DomainAspectRatio.kt",
    "chars": 4175,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/ExtraDataType.kt",
    "chars": 1056,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/FileModel.kt",
    "chars": 820,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/FloatSize.kt",
    "chars": 832,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/HashingType.kt",
    "chars": 2983,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/ImageModel.kt",
    "chars": 819,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/IntegerSize.kt",
    "chars": 2793,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/MimeType.kt",
    "chars": 3083,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/OffsetModel.kt",
    "chars": 825,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/Outline.kt",
    "chars": 827,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/PerformanceClass.kt",
    "chars": 924,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/Position.kt",
    "chars": 925,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/Pt.kt",
    "chars": 2357,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/QrType.kt",
    "chars": 6891,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/RectModel.kt",
    "chars": 8087,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *  \n * Licensed un"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/SecureAlgorithmsMapping.kt",
    "chars": 20687,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/SortType.kt",
    "chars": 975,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/SystemBarsVisibility.kt",
    "chars": 1484,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/model/VisibilityOwner.kt",
    "chars": 959,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/AnalyticsManager.kt",
    "chars": 1082,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/Cache.kt",
    "chars": 2046,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/DownloadManager.kt",
    "chars": 1248,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/DownloadProgress.kt",
    "chars": 858,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/RemoteResources.kt",
    "chars": 1323,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2024 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/remote/RemoteResourcesStore.kt",
    "chars": 2240,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/resource/ResourceManager.kt",
    "chars": 1131,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2025 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  },
  {
    "path": "core/domain/src/main/kotlin/com/t8rin/imagetoolbox/core/domain/saving/FileController.kt",
    "chars": 2225,
    "preview": "/*\n * ImageToolbox is an image editor for android\n * Copyright (c) 2026 T8RIN (Malik Mukhametzyanov)\n *\n * Licensed unde"
  }
]

// ... and 2813 more files (download for full content)

About this extraction

This page contains the full source code of the T8RIN/ImageResizer GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3013 files (21.2 MB), approximately 5.8M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!