ADOBE AFTER EFFECTS: Forum Expressions Tutorials Creative Cloud

How to Bezier Path with no keyframes ?

COW Forums : Adobe After Effects

<< PREVIOUS   •   FAQ   •   VIEW ALL   •   PRINT   •   NEXT >>
Shai Benshoshan
How to Bezier Path with no keyframes ?
on Jan 7, 2019 at 9:38:50 am

Using the powerful ' Create nulls from paths ' script, I am writing a script that reads the Path from an external XML file.
The Path has no keyframes, but the points auto-created as linear :

How can I convert the path to bezier by script? or expression?
It can be done manually > select the path > alt+shift +click to convert the points to bezier :
Can AE do it automatically?


Return to posts index

Oleg Pirogov
Re: How to Bezier Path with no keyframes ?
on Jan 7, 2019 at 10:30:56 am

Since CC 18 you can directly access path nodes and their tangents in a manner like this:

comp("Comp").layer("Shape Layer").content("Shape").content("Path").path.points()[i] = [666, 666]
comp("Comp").layer("Shape Layer").content("Shape").content("Path").path.inTangents()[i] = [1, 0]
comp("Comp").layer("Shape Layer").content("Shape").content("Path").path.outTangents()[i] = [0,1]

Those "linear" nodes of yours are nodes with no tangent handles i.e. with In Tangent and Out Tangent both equal [0,0]. Changing those to something different than [0,0] will give you a Bezier curve.

Hope this helps you one way or another.

Return to posts index

Shai Benshoshan
Re: How to Bezier Path with no keyframes ?
on Jan 7, 2019 at 4:55:13 pm

Thank you Oleg <:]

I'll try that ;
So ill need to know what is the next point is to figure out the direction and value of those tangents.
Since the path is created automatically


Return to posts index

Oleg Pirogov
Re: How to Bezier Path with no keyframes ?
on Feb 2, 2019 at 3:30:30 pm

I've written a script which does the thing for every selected property of shape type (i.e. select the shape path and run the script):

//the script smooths (sets interpolation to Auto Bezier) selected shape properties

//smooths a shape path
function shapeSmoother(shape){
//create dummy composition and a text layer in it
var comp = app.project.items.addComp("Dummy", 100, 100, 1, 1, 1);
var pos = comp.layers.addText().transform.position;

//create key frames in null position for every shape vertex
var newKey;
for (var i=0; i<shape.value.vertices.length; i++){
newKey = pos.addKey(i);
pos.setValueAtKey(newKey, shape.value.vertices[i]);

//smooth text's motion path by setting spatial interpolation to Auto Bezier for every key frame
for (var i=1; i<=pos.numKeys; i++){
pos.setSpatialAutoBezierAtKey(i, true);

//create new shape add copy to it all text 's motion path properties
s = new Shape();

s.closed = shape.value.closed;

var vert = [];
var inTang = [];
var outTang = [];
for (var i=1; i<=pos.numKeys; i++){
vert.push([pos.keyValue(i)[0], pos.keyValue(i)[1]]);
inTang.push([pos.keyInSpatialTangent(i)[0], pos.keyInSpatialTangent(i)[1]]);
outTang.push([pos.keyOutSpatialTangent(i)[0], pos.keyOutSpatialTangent(i)[1]]);

s.vertices = vert;
s.inTangents = inTang;
s.outTangents = outTang;

//assign shape to the original shape property
//delete Dummy comp

//recursive function to look for selected shape properties;
function selectedShapeSearch(thePropertyGroup){
for (var i=1; i<=thePropertyGroup.numProperties; i++){
currentProperty =;

//checking, if it's a property and not a property group
if (currentProperty.propertyType == PropertyType.PROPERTY){
//checking, if it's a shape property
if (currentProperty.propertyValueType == PropertyValueType.SHAPE){
//checking, if it is selected
if (currentProperty.selected){

function main(){
var prj = app.project;

//searching in every comp...
for (i=1; i<=prj.numItems; i++){
if (prj.item(i).typeName == "Composition"){
currentComp = prj.item(i);

//...and in every layer
for (j=1; j<=currentComp.layers.length; j++){



Return to posts index

<< PREVIOUS   •   VIEW ALL   •   PRINT   •   NEXT >>
© 2020 All Rights Reserved