Hi Figma team,
I’m developing a plugin that exports Figma Motion animations to PAG, Tencent’s vector animation file format.
While working on this exporter, I’ve encountered several gaps between Figma Motion’s canvas rendering and the animation data currently exposed through the Plugin API.
The most important issue is the transform anchor or pivot point. I cannot find a reliable API for reading the actual anchor used by Motion. This becomes critical when a designer has manually adjusted the anchor point. Reconstructing it from the node bounds, relativeTransform, absoluteTransform, or the first animation frame is not always accurate, especially for rotated groups and nested nodes.
I also could not find detailed documentation explaining how node.animations should be interpreted and reproduced outside Figma. Some areas that need clarification include:
- Whether Position values are absolute coordinates, parent-space values, or offsets from the static transform.
- How Position, Rotation, Scale, Width, and Height tracks should be composed and in which order.
- How animated transforms should be combined with
relativeTransformandabsoluteTransform. - How transform anchors should be applied to nested or rotated groups.
- How sub-frame keyframes, easing, multiple tracks, and track operations such as
SET,OFFSET, andSCALEshould be evaluated. - Whether Width and Height animations resize geometry from the top-left corner or behave like scale animations around an anchor.
- How animated masks should be reconstructed, including mask position, dimensions, opacity, gradient fills, coordinate spaces, and masked group composition.
- How Motion handles spatial Position curves when the curve data is not exposed through the Plugin API.
Animated masks are particularly difficult. The result rendered directly by Figma Motion is correct, but recreating the same animation from node.animations can produce different mask positions or reveal regions. Exporting the design as animated SVG is not a reliable reference either, because some mask and animation effects are missing or rendered differently. So far, only Figma’s video export appears to preserve the complete Motion rendering.
The currently published official Lottie exporter also appears not to support every Motion effect, which suggests that third-party animation exporters may be missing access to some internal rendering information.
Could you provide guidance on the following?
- Is there a supported way to read the effective Motion anchor or pivot point, including manually adjusted anchors?
- Is there a formal specification for evaluating
node.animations? - Are Position spatial curves or path control points available through another API?
- What coordinate space does each animated transform property use?
- How should animated masks be evaluated to match Figma Motion exactly?
- Is there an official reference renderer, sample implementation, or intermediate animation format that plugin developers can use?
- Are there plans to expose more complete Motion data for third-party exporters such as PAG, Lottie, or other runtime formats?
A documented evaluation model—or an API that provides the final per-frame transform and mask state—would make it much easier for third-party exporters to match Figma Motion accurately.
https://github.com/0x1306a94/figma-motion-export-pag/tree/develop
