Package-level declarations
Functions
Play an already-decoded KiteAnimation: the one frame loop shared by KiteImage's byte-array overload and kiteimage-coil's KiteAsyncImage. Public because callers running their own decode pipeline deserve playback too, exactly like the KiteImage overload that takes a KiteBitmap.
Display an already-decoded KiteBitmap (for callers running their own decode pipeline). Conversion to ImageBitmap is remembered per instance.
Display any image KiteImage can decode: and it decides on its own whether to animate. Feed it a GIF and it plays (correct delays, disposal compositing, NETSCAPE loop count, holding the last frame after a finite loop ends); feed it a PNG/BMP and it just draws. One composable, no format branching at call sites.
Android path. createBitmap(IntArray, …) takes non-premultiplied ARGB color ints, exactly KiteBitmap's layout, and premultiplies internally.
Convert a decoded KiteBitmap (non-premultiplied ARGB_8888 in an IntArray) to a Compose ImageBitmap.
Skiko path (JVM, iOS, macOS, JS, WASM). UNPREMUL, not OPAQUE/PREMUL: the core hands over straight (non-premultiplied) alpha, and Skia premultiplies on draw; same choice KitePDF's compose viewer landed on after transparent PDF logos rendered on grey boxes.