1 days ago
ImageToolbox

4.2.0

What's Changed

New Features

  • Added support for AV2-based AVIF images
  • Added chroma subsampling selection for AVIF and HEIC formats
  • Added VVC encoding support for HEIF format
  • Added Batch Rename tool
  • Added ability to cancel loading in spot heal draw mode by #2944
  • Added ability to use slices in original name filename pattern by #2951
  • Added new filename patterns: Parent Folder, UUID
  • Added ability to move and customize markup layers menu by #2941
  • Added Auto White Balance filter by #2953
  • Added LSB and FD modes for hidden watermarks
  • Added settings to control the cache limit and automatic clearing interval
  • Added ability to make crop overlay undraggable
  • Added a GIF merging tool
  • Added ability to select a folder as an image source by #2961
  • Added the Duplicate Finder tool
  • Added long-press reset for editable slider values
  • Added more formats for color copying
  • Added natural filename sorting, reverse order, and shuffle options to sort button
  • Added quick actions to move items to the start or end of reorder lists
  • Added ability to save custom aspect ratios by #2968
  • Added ability to export barcodes to SVG format by #2978
  • Added 74 new procedural textures to the texture generator
  • Added search, categories and favorites to texture generation tool
  • Added ability to choose deletion presets in Delete EXIF tool
  • Added panorama image stitching mode by #2988
  • Added ability to preview AI Tool results before saving
  • Added customizable RAW development settings
  • Added G’MIC filter engine
  • Added 167 new filters based on new engine
  • Added Gradient Map filter
  • Added ability to toggle nested scroll for sheets by #2997
  • Added ability to save images that are already below the size limit in the Resize by Weight tool
  • Added 3 new scale modes by #2999
    • Magic Kernel
    • Magic Kernel Sharp 2013
    • Magic Kernel Sharp 2021
  • Added an option to return after saving external edits by #3003
  • Added ability to write ImageToolbox processing information into image metadata by #3004
  • Added EXIF read/write support for HEIC, AVIF, JXL, TIFF and JP2
  • Added EXIF 3.1 support
  • Added Jixel encoder for JXL format
  • Added support for REVIEW intent actions by #3014
  • Added 9 new tone curves for color adjustment
    • CMYK
    • Lab
    • Hue vs Sat
    • Hue vs Hue
    • Hue vs Luma
    • Luma vs Sat
    • Luma vs Hue
    • Sat vs Sat
    • Color Wheels
  • Added separate Tone Curves tool
  • Added ability to view waveform and vector scope in Tone Curves
  • Added undo/redo options to crop tool by #3032
  • Added 4 style transfer AI models by #3034
  • Added ability to export/import tone presets in Tone Curves tool by #3031
  • Added 61 built-in export profiles for social networks
  • Added 7 new PDF tools:
    • Contact Sheet
    • Compare
    • Resize
    • Sanitize
    • Palette Export
    • Dark Mode
    • Comic to PDF
  • Added screenshot mode to Image Stitching tool
  • Added 3 new filter groups: Frames, Enhancement, Artistic
  • Added a Photomosaic tool
  • Added a Multi-frame fusion tool
  • Added 14 depth AI models to create depth map and smart effects
  • Added Compression Lab tool to compare formats, optimize quality and file size
  • Added Recent Tools in Share Sheet by #3054
  • Added ability to specify defaults in settings for text markup layers by #3061
  • Added 11 AI image detector models by #3063
  • Added ability to import palettes to gradient maker tool by #3068
  • Added 9 conversion tools by #3071 and #3073
    • GIF to APNG
    • WEBP to GIF
    • APNG to GIF
    • APNG to WEBP
    • WEBP to APNG
    • WEBP to JXL
    • JXL to GIF
    • JXL to APNG
    • JXL to WEBP
  • Added 3 merge tools
    • Merge APNG
    • Merge WEBP
    • Merge JXL
  • Added Archive Tools with 32 archive creation options and broad extraction support
  • Added Code Preview Generator tool
  • Added precise selection of threshold to pixel by pixel comparison mode by #3091
  • Added a Gallery Viewer tool for browsing and previewing images in formats unsupported by system galleries by #3090
  • Added .CLRS palette format support by #3103
  • Added Template Filters manager by #3096
  • Added Fractals tool to generate 75 different types of fractals by #3105
  • Added 75 built-in gradient palettes
  • Added gradient palette presets to Gradient Maker and Texture Generation
  • Added ability to undo/redo to Gradient Maker tool

Improvements

  • Improved AVIF and HEIC encoding/decoding performance
  • Improved original filename and sequence filename patterns
  • Improved overall cropping experience by #2942
  • Improved and optimized hidden watermark encoding and detection
  • Improved hidden watermark detection feedback and result handling
  • Improved multilingual text handling in PDF files by #2964
  • Improved usability of long-press save menu
  • Improved resource download process by #2985
  • Improved file encryption with secure key derivation and unique nonces by #2990
  • Improved RAW decoding with LibRaw and enhanced TIFF support
  • Improved pixel-by-pixel comparison metrics and added score display
  • Improved tone curves editor with flexible control points and per-channel histograms by #3018
  • Improved row and column count in Image Stitching tool by #3027
  • Improved images folder picker speed
  • Improved ICO export with multiple embedded sizes: 16, 32, 48, 64, 128, and 256 px
  • Improved UI and interactions

Fixes

  • Fixed rotation buttons for RTL languages by #2946
  • Fixed compare slider lag by #2945
  • Fixed GIF encoder transparency
  • Fixed progress service issues by #2977
  • Fixed “All files access” prompts appearing when the permission cannot be requested by #2982
  • Fixed Resize & Convert ignoring the “Always clear EXIF” setting for single images by #2989
  • Fixed saving to the original folder and overwriting files
  • Fixed an issue where a combination of three settings could lead to file loss by #3002
  • Fixed draw tool for text brush by #3010
  • Fixed mesh gradient rendering on some devices by #3017
  • Fixed split PDF tool by #3037
  • Fixed crop with aspect ratio output by #3048
  • Fixed swipes on image container by #3051
  • Fixed GIF conversion issues
  • Fixed AI tools processing cancellation by #3076
  • Fixed crash in PDF signature tool by #3086
  • Fixed sharing to other apps by #3087
  • Fixed nearest scale mode by #3089
  • Fixed JXL tools bypass when overwrite files enabled by #3088
  • Fixed animated images preview in preview modes by #3097
  • Fixed Spanish translation by #3111
  • Fixed undo redo for template filters by #3114
  • Other minor bug fixes

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.1.0...4.2.0

7 days ago
Balloon

2.0.0

Balloon 2.0.0 is a full rewrite on Compose Multiplatform. One artifact now runs on Android, iOS, Desktop and Web, and the API is composables and state instead of Context, View and XML.

If you need the View implementation, it stays available at 1.7.6 and is documented separately. Nothing about 1.x is going away.

Supported platforms

Target Artifact
Android balloon-android
Desktop (JVM) balloon-desktop
iOS (arm64) balloon-iosarm64
iOS (simulator, arm64) balloon-iossimulatorarm64
iOS (x64) balloon-iosx64
Web (Wasm) balloon-wasm-js

Gradle picks the right one. Depend on com.github.skydoves:balloon and nothing else.

Installation

Compose Multiplatform:

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("com.github.skydoves:balloon:2.0.0")
        }
    }
}

Android only:

dependencies {
    implementation("com.github.skydoves:balloon:2.0.0")
}

balloon-compose is gone. It is folded into balloon.

Quick start

val style = rememberBalloonBuilder {
    setArrowSize(10.dp)
    setPadding(12.dp)
    setCornerRadius(8.dp)
    setBackgroundColor(Color(0xFF785EF0))
    setBalloonAnimation(BalloonAnimation.ELASTIC)
}
val balloonState = rememberBalloonState(style)

Balloon(
    state = balloonState,
    balloonContent = { Text(text = "Now you can edit your profile!", color = Color.White) },
) {
    Button(onClick = { balloonState.showAlignTop() }) {
        Text(text = "Edit profile")
    }
}

Wrap your screen in BalloonHost { ... } once, at the root, and every balloon inside it works.

What changed from 1.7.6

1.7.6 2.0.0
Artifacts balloon, balloon-compose balloon
Platforms Android Android, iOS, Desktop (JVM), Web (Wasm)
Rendering PopupWindow plus Android views Compose Popup and a Compose Shape
Package com.skydoves.balloon, com.skydoves.balloon.compose com.skydoves.balloon
Content setText, TextForm, IconForm, setLayout a @Composable slot
Anchoring you pass a View to every show call BalloonState knows its own anchor
Lifecycle setLifecycleOwner, manual disposal composition disposal

There is no Context, no View, no Drawable, no Typeface and no XML anywhere in the API.

What is new

  • Two ways to attach a balloon. Wrap an anchor with Balloon(...), or decorate one in place with Modifier.balloon(...).
  • A composable body. The balloon content is a slot, so you build it like any other UI. Interactive children work: a tap a child consumes never reaches the balloon's own handler.
  • Coroutine friendly. Every show has a suspend twin. awaitAlignBottom() returns when the balloon closes, so a sequence of tips reads as straight line code.
  • Restyle in place. rememberBalloonState re-applies the style on every recomposition, so an animated style updates a balloon that is already showing without hiding it.
  • derive. base.derive { setBackgroundColor(Color.Red) } makes a variant of an existing style using the same builder block.
  • Placement that flips. When the requested side has no room and the opposite side has some, the balloon moves and the arrow follows it.
  • A baseline profile ships in the Android artifact.

Every 1.x builder setter that has a multiplatform meaning is present, with the same name and the same defaults, so most builder blocks port across unchanged.

Deliberate differences

These behave differently from 1.7.6 on purpose. Each was found by rendering both implementations and diffing the result pixel by pixel.

  1. A hidden arrow takes no space. setIsVisibleArrow(false) puts the body flush against the anchor. 1.x left an arrowHeight - 1px gap.
  2. The arrow points at the anchor by default. In 1.x arrowOrientation defaulted to BOTTOM, so showAlignStart() on a default builder left the arrow pointing down.
  3. Balloons flip instead of clamping. 1.x only flipped vertically, and horizontally it slid the balloon along the window edge until it overlapped its own anchor.
  4. setBalloonStroke draws the thickness you asked for, around the arrow too.
  5. No drop shadow. elevation reserves its space and drives the width math, but the shadow is not drawn: Compose can only cast a shadow from a convex outline, and a balloon with an arrow notch is not convex. Use Modifier.shadow(...) inside the slot if you need one.
  6. BalloonOverlayShape.Circle and RoundRect take Dp, where 1.x took raw pixels. Convert deliberately.
  7. The arrow never enters a rounded corner. Its base is clamped cornerRadius + arrowWidth / 2 in from each end.
  8. setAutoDismissDuration(0L) means "never". 1.x used -1L as the disabled sentinel and treated 0L as "dismiss immediately".
  9. BalloonHighlightAnimation.ROTATE animates out of the box. In 1.x it did nothing without an explicit setBalloonRotationAnimation.

Everything else matches to the pixel.

Not carried over

Mostly Android only surface with no multiplatform equivalent:

  • setText, TextForm, IconForm, setLayout, and everything taking a resource id. Use the composable slot.
  • setOnBalloonTouchListener and setOnBalloonOutsideTouchListener. MotionEvent is Android only. Use Modifier.pointerInput inside the slot.
  • setPreferenceName, setShowCounts, runIfReachedShowCounts. No multiplatform key value store is assumed. Gate show() with your own storage.
  • setLifecycleOwner, setDismissWhenLifecycleOnPause, setLifecycleObserver. Composition disposal dismisses the balloon.
  • setIsStatusBarVisible, setIsAttachedInDecor, setIsClippingEnabled, setRtlSupports. PopupWindow specific, or handled by LocalLayoutDirection.

Listeners moved from the builder onto the state: balloonState.onBalloonClick, onDismiss and onOverlayClick.

Migrating

The migration guide maps every 1.x setter to its 2.0.0 counterpart, including the ones that were dropped and what to use instead.

Documentation

Staying on 1.7.6

The View implementation is unchanged and still published. Keep using it with:

implementation("com.github.skydoves:balloon:1.7.6")
implementation("com.github.skydoves:balloon-compose:1.7.6")

2.0.0 does not replace it in place. It is a different API under the same coordinates, so pin the version you want.

10 days ago
react-native

0.87.1

Added

iOS specific

  • SwiftPM: Added hard fail and clear error message when an autolinking plugin host is referenced as a dependency (90a539c92d by @chrfalch)

Changed

Fixed

  • Animated: Animated.Value.addListener() types its callback payload as {value: number} rather than any (3eab03df4c by @huntie)
  • Animated: Animated.event() is typed as an event handler rather than any (3eb330a365 by @huntie)

iOS specific

  • Cocoapods: Keep the quotes on header search paths containing spaces in add_rn_third_party_dependencies (71c6bfbfdc by @Kudo)
  • SwiftPM: Reject colliding or invalid spm.modules names instead of silently dropping a module from the build (39cd1dfc4c by @chrfalch)
  • SwiftPM: Resolve Swift manifest naming collisions (962aeec5e5 by @chrfalch)
  • SwiftPM: Fixed not reading spm.name from react-native.config.js when scaffolding the Swift manifest (482acee824 by @chrfalch)
  • SwiftPM: Removed unused field spm.modules.publicHeaderFiles from react-native.config.js's spm section (5168f5f831 by Christian Falch)
  • SwiftPM: SwiftPM pipeline now reads react-native.config.js with default exports correctly (ed76640ba6 by @chrfalch)
  • SwiftPM: Created constants for internal SwiftPM packages so that we can create guards to avoid collisions (d36aa4961d by @chrfalch)
  • SwiftPM: Set SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG when injecting SPM (4433cdbe62 by @radoslawrolka)
  • SwiftPM: Recover React-Core-prebuilt configuration swaps that were interrupted before the marker was updated (a772a7ca16 by @adityasingh2400)
  • SwiftPM: Fix Hermes runtime/compiler version mismatch causing "Wrong bytecode version" crashes in SwiftPM Release builds (ead93778a1 by @nduaarte)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

12 days ago
react-native

0.86.3

  • Hermes: Bump hermes-v1 to 250829098.0.17 (3fd71f07c3 by @cipolleschi)
  • EventEmitter: Fix use-after-free data race in EventEmitter.cpp (fdb26edfe7)
  • Modal: Fix parentNode/parentElement returning the document instead of the containing element for <Modal> and other nested root host views, which severed capture/bubble event propagation to ancestors rendered above them (6e3f0e8f9f by rubennorte)
  • Cocoapods: Make Podfile.lock SPEC CHECKSUMS deterministic across machines by sorting Dir.glob results in Yoga.podspec and using a dynamically computed Pods-relative path in hermes-engine.podspec (6e3f0e8f9f by IsaacIsrael)
  • Runtime: Fix ConcurrentModificationException when getInitialURL re-enters during onHostResume (20d04aefa1 by @nickcernera)
  • Font: Custom fonts with an explicit fontWeight no longer render at the heaviest weight on the New Architecture (918fb15bfe by @jensdev)

Hermes dSYMS:

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

19 days ago
ImageToolbox

4.2.0-rc10

What's Changed

  • Added a Multi-frame fusion tool
  • Fixed swipe gestures on the image container by #3051
  • Added 14 depth AI models to create depth maps and smart effects
  • Added a Compression Lab tool to compare formats, optimize quality and file size
  • Added Recent Tools to the Share Sheet by #3054
  • Added ability to load auxiliary images into GMIC filters by #3053
  • Added ability to specify defaults for text markup layers in settings by #3061
  • Added an option to collapse groups in fullscreen settings by #3062
  • Fixed a regression when saving to the original folder by #3042
  • Added 9 AI image detector models by #3063

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.2.0-rc09...4.2.0-rc10

24 days ago
AestheticDialogs

Aesthetic Dialogs v3.0.0

What's Changed

Full Changelog: https://github.com/gabriel-TheCode/AestheticDialogs/compare/2.0.0...3.0.0

25 days ago
ImageToolbox

4.2.0-rc09

What's Changed

  • Added 61 built-in export profiles for social networks
  • Added screenshot mode to Image Stitching tool
  • Added 4 new PDF tools:
    • Contact Sheet
    • Compare
    • Resize
    • Sanitize
  • Fixed crop with aspect ratio output by #3048
  • Added 59 new filters from GMIC
  • Added 3 new filter groups: Frames, Enhancement, Artistic
  • Improved images folder picker speed
  • Added a Photomosaic tool
  • Added GMIC commands info by #3050

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.2.0-rc08...4.2.0-rc09

25 days ago
react-native

0.87.0


Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.