2026

  • Extending the Player

    Implemented Features Keyframe interpolation (linear + hold/step) Animated properties (colors, opacity, position, rotation, scale, etc.) Shape rendering (Rectangle, Ellipse, Path, Polystar) Solid fills with animated colors and opacity Gradient fills (linear gradients with color stops) Stroke styling Layer and group transforms with anchor points Correct rendering order (reverse/bottom-to-top) Basic 3D rotation approximation (rx, ry using 2D scaling) Animation playback controls Frame scrubbing with slider Can Now Handle box-moving-changing-color.json: Moving/color-changing rectangle java_duke_fadein.json: Fade-in with gradient fills java_duke_flip.json: 3D flip approximation

    • Handle Complex Files

      Core Fixes JSON Parsing: Leading zeros (004 → 4.0) handled with ALLOW_NUMERIC_LEADING_ZEROS Separated Dimensions: Position with s: true reads from x/y fields Transform Order: Correct order: position → rotation → scale → anchor Color Clamping: Values > 1.0 normalized to 0.0-1.0 range Null-Safe Properties: Defaults for width, height, inPoint, outPoint, fps Advanced Features Trim Paths: Animated arcs for loading spinners Stroke Line Caps: Butt, round, square Stroke Line Joins: Miter, round, bevel Layer Parenting: Hierarchical transforms (parent-child relationships) NULL Layer Handling: Type 3 layers skip rendering but apply transforms What Now Works test_circle.json: Correctly positioned loading.json: Animated spinner with trim paths timeline.json: Complex animation with parenting, shapes move together correctly All basic shapes render with proper styling The Lottie player now supports the most essential Lottie features and is ready for further testing!

      • Better preview UI

        Synchronization between FX and JS Players Added JavaScript bridge functions (playAnimation(), pauseAnimation(), stopAnimation(), seekToFrame()) Synchronized all playback controls so both players start/stop/pause/seek together Added frame slider synchronization for manual seeking Backgrounds can now be set and tested Fixed Positioning/Layout Differences Corrected TrimPath offset calculation for animation Fixed angle normalization to properly handle wrapping

        • Introducing Lottie4J V1.0.0

          2026-03-02 by Frank Delporte I’m proud to present a new JavaFX library: Lottie4J, that brings Lottie animations to JavaFX applications. I first learned about Lottie many years ago when we were developing a mobile app. We used Lottie animations to explain to users how to operate a physical device. The animations made the instructions so much clearer than static images or text alone. At the time, I wanted to create a similar experience in JavaFX, but I couldn’t find a JavaFX player for the Lottie format. So I decided to build one myself. What I didn’t realize then was just how complex this journey would be…

          • Parser Improvements

            Fixing tricky parsing issues, cleaning up the codebase, and creating the first release… Fighting Complexity Correct rendering of complex animations found in sandy_loading.json and lottie_lego.json. Extra testing related to complex paths, nested groups, multiple simultaneous transformations. UI Polishing The viewer test application now rescales animations to fit in the screen. Updates to both the LottiePlayer and LottieFileViewer components, plus refinements to the PathRenderer. Release Preparation Release process with GitHub Action.

            • Lottie4J Meets LottieFiles

              2026-06-04 by Frank Delporte A Conversation with Naail Abdul Rahman Lottie animations run on Android, iOS, and the web. Getting them working on the JVM is a different story. Lottie4J started as a question: can JavaFX render them without a WebView? That question turned into a library, pull requests followed, and now this: a video conversation with Naail Abdul Rahman, R&D engineer at LottieFiles. What we discussed The conversation covers the full Lottie story: where the format came from (Bodymovin, the After Effects plugin picked up by Airbnb), where it is going with the dotLottie format, and what all of that means for a Java implementation.

              • Closing the Visual Gap

                2026-07-02 by Frank Delporte Closing the Visual Gap with the Official Lottie Webplayer A Lottie library is only as good as its output looks. If an animation renders differently in Lottie4J than it does in the official web player, that’s a bug, even when no exception is thrown and the code looks correct. Within the fxfileviewer, there is an app to visually compare the result of the JavaFX player and a webview using the official JavaScript player. Problem is that I was using the JavaFX Web component for this and this doesn’t fully support the latest/best version of this player. Based on this app for manual checks, I also created a unit test which is able to loop over a set of files and compare the differences to make sure changes in the code don’t break the existing renderer. But I kept struggling with the same test file interactive_mood_selector_ui.json which didn’t render correctly, both in the JavaFX view and my web-based view to compare it with.

                • Lottie4J 1.2.5

                  2026-07-09 by Frank Delporte 1.2.5 Is Out With Many Rendering Accuracy Fixes Lottie4J 1.2.5 is released, and it’s almost entirely the payoff from the work described in Closing the Visual Gap with the Official Lottie Webplayer: once the comparison test suite could point at the exact frame and pixel where the JavaFX player drifted from the reference renderer, a batch of concrete rendering bugs became easy to find and fix. Highlights: