Loop
Trimmed gradient ellipses rotate around a radial core.
A Kotlin Multiplatform Lottie gallery turned inside out: source payloads, playback geometry, timing, and palette transformation are all visible on one page.
The production app loads JSON with Compottie, paints through Compose/Skia, and lets a user recolor an animation without editing every shape by hand. These three studies bundle the real JSON files and translate representative layers into lightweight inline SVG motion.
Why the translation? The deployed project contains no vendored lottie-web. Its renderer is the multi-megabyte Kotlin/Skia application runtime, so this dependency-free course uses auditable SVG adaptations while reading metadata and source colors directly from the original payloads.
openanimationTrimmed gradient ellipses rotate around a radial core.
Vector layers combine an outlined globe with a looping flight path.
Stroke reveal and staggered particles turn state change into feedback.
The source map exposes the production implementation. It recursively finds every JSON key named c or g, decodes static and animated fills plus gradient stops into typed paint nodes, and remembers each node’s deep JSON path.
From the extracted paints it chooses five maximally different representative colors. Presets combine hue shifts in 45-degree steps with chroma shifts, transform every color in perceptual LCh space, then immutably replace each node at its recorded path. Animated keyframe start/end colors and gradient alpha stops are preserved.
Source: openanimation/site/composeResources/openanimationapp.composeapp.generated.resources/files/ and Kotlin sources recovered from openAnimation.js.map. Software and bundled JSON are MIT licensed, © 2025 OpenAnimationApp. Playback on this page is a native-SVG course adaptation; no CDN or third-party runtime is loaded.