From 0a8cdfc67efb2c336a0796b266815e814ec9e5b5 Mon Sep 17 00:00:00 2001 From: storybored379 Date: Sat, 3 Oct 2026 23:36:10 -0700 Subject: [PATCH] Scripting: Property.keyInSpatialTangent / keyOutSpatialTangent under their AE names The getters were registered as keySpatialInTangent / keySpatialOutTangent, so scripts using the documented After Effects names failed with "TypeError: not a callable function" (setSpatialTangentsAtKey and the other keySpatial* methods already use AE's names). Co-Authored-By: Claude Opus 5.5 --- crates/script/src/prelude.js | 4 ++-- crates/script/src/tests.rs | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/crates/script/src/prelude.js b/crates/script/src/prelude.js index c06bc9bf..ce048bfd 100644 --- a/crates/script/src/prelude.js +++ b/crates/script/src/prelude.js @@ -865,8 +865,8 @@ Property.prototype.property = function () { return null; }; P.setTemporalAutoBezierAtKey = function (i, b) { this.__select(i); __call("keys.interpolation", { comp: this.__layer.__comp, autoBezier: !!b }); }; P.keyRoving = function (i) { return !!this.__key(i).roving; }; P.setRovingAtKey = function (i, b) { this.__select(i); __call("keys.interpolation", { comp: this.__layer.__comp, roving: !!b }); }; - P.keySpatialInTangent = function (i) { return this.__key(i).spatialIn.slice(0, this.__info().dims); }; - P.keySpatialOutTangent = function (i) { return this.__key(i).spatialOut.slice(0, this.__info().dims); }; + P.keyInSpatialTangent = function (i) { return this.__key(i).spatialIn.slice(0, this.__info().dims); }; + P.keyOutSpatialTangent = function (i) { return this.__key(i).spatialOut.slice(0, this.__info().dims); }; P.keySpatialContinuous = function (i) { return !!this.__key(i).spatialContinuous; }; P.keySpatialAutoBezier = function (i) { return !!this.__key(i).spatialAutoBezier; }; P.setSpatialTangentsAtKey = function (i, inT, outT) { diff --git a/crates/script/src/tests.rs b/crates/script/src/tests.rs index 4df252b6..b5ea092b 100644 --- a/crates/script/src/tests.rs +++ b/crates/script/src/tests.rs @@ -241,6 +241,22 @@ fn keyframes_eases_and_interpolation() { assert_eq!(v[9], json!(2)); } +#[test] +fn spatial_tangents_round_trip() { + let mut s = session(); + let o = ok( + &mut s, + r#" + var c = app.project.items.addComp("T", 100, 100, 1, 2, 25); + var p = c.layers.addNull().transform.position; + p.setValuesAtTimes([0, 1], [[0, 0], [100, 0]]); + p.setSpatialTangentsAtKey(1, [0, 0], [30, 40]); + [p.keyOutSpatialTangent(1)[0], p.keyOutSpatialTangent(1)[1], p.keyInSpatialTangent(1)[0]] + "#, + ); + assert_eq!(o.result, json!([30, 40, 0])); +} + #[test] fn text_documents() { let mut s = session();