The repository is organized as a layered animation stack rather than a single monolithic control.
| Layer | Public package | Rendering model | Typical use |
|---|---|---|---|
| 1 | AnimationControl |
Avalonia DrawingContext + RequestAnimationFrame |
Simple custom animations without Skia |
| 2 | CompositionAnimatedControl |
Avalonia composition custom visual + SKCanvas |
Reusable Skia rendering surfaces |
| 3a | Lottie |
Skottie animation rendered into the composition-backed canvas | JSON animation playback |
| 3b | ShaderAnimatedControl |
SKRuntimeEffect hosted on the composition-backed canvas |
Shader effects and procedural visuals |
AnimationControl when a normal Avalonia control and a frame callback are enough.CompositionAnimatedControl when you need Skia rendering or explicit playback control.Lottie when you already have animation assets in Lottie JSON format.ShaderAnimatedControl when the visual should come from SKSL instead of vector assets.Lottie : CompositionAnimatedControlShaderAnimatedControl : CompositionAnimatedControlThat shared base is why both controls expose concepts such as RepeatCount, PlaybackRate, Seek(...), Start(), Stop(), and Redraw().
AnimationControl only depends on Avalonia rendering. The other three packages depend on Avalonia.Skia and render through SKCanvas, so they are intended for Skia-backed Avalonia applications.