Skip to main content
MattDude
New Member
Nov 8, 2026 2:14 PM UTC
Question

Plugin API: manualKeyframeTracks throws "Unsupported base value type: 0" on layers with visibility keyframes

Hello,

Reading Motion keyframes from a plugin fails for some layers.

Both getters throw on these layers: node.manualKeyframeTracks -> Error: in get_manualKeyframeTracks: Unsupported base value type: 0 node.animations -> Error: in get_animations: Unsupported base value type: 0

This is not the Dev Mode limitation from the thread "Can a Dev Mode plugin read Figma Motion data" (answered in July): the plugin runs in the Design editor, and the same getters return full tracks for position, rotation, scale, size and opacity on other layers in the same file.

What the affected layers have in common: they are switched on or off during the timeline (the visibility keyframes you set with the eye icon in the timeline).

Examples from one file:

- a text layer that is hidden at rest and switched on at a point in the timeline (a number being "typed" on a calculator screen, one layer per step);

- a vector that is visible at rest and switched off part way through (a mouth line that disappears as another shape takes over);

- a hidden rectangle inside a frame that is switched on. One more affected layer has no visibility switch that we can see: an ellipse whose X and Y position are keyframed separately (different times for X and Y).

The same kind of separate X / Y tracks created through applyManualKeyframeTrack on a new rectangle read back fine, so the cause there is unclear.

Layers with position, rotation, scale, size or opacity keyframes otherwise read fine.

 

What we tried:

1. removeManualKeyframeTrack({ type: 'PROPERTY', name: X }) on a copy of such a layer, for every documented KeyframePropertyFieldName: every call throws the same "Unsupported base value type: 0".

Names such as VISIBLE are rejected by validation ("Property \"field\" failed validation").

2. Copies made with clone() keep the problem (the copy throws the same error, and still animates).

3. figma.motion.playheadPosition is undefined outside an open editor timeline, so a plugin cannot sample a layer's state at a given time.

4. The REST API (GET /v1/files/:key/nodes) returns no animation data for any layer.

5. The keyframes do play correctly in Figma itself and in a video export of the frame, so the data is there.

What a plugin would need:

- manualKeyframeTracks (and animations) should not throw for the whole layer when one track has a value type the API does not cover; returning the other tracks and skipping or flagging the unknown one would already help.

- A way to read visibility keyframes: the times and the on/off values (and their easing, if any), for example a BOOLEAN value type for a VISIBLE field, like the other KeyframePropertyFieldName entries.

- Optionally, a way to read a node's animated state at a given timeline time (or to set the playhead from a plugin), so other unsupported tracks could still be sampled.

Environment: Figma desktop app, Plugin API with the Motion beta, November 2026.

 

Thank you.