Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 61 additions & 13 deletions AR_C4DSplinesToAEMasksPart2(CC).jsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
/*
/*
AR_C4DSplinesToAEMasksPart2

Author: Arttu Rautio (aturtur)
Website: http://aturtur.com/
Name-US: AR_C4DSplinesToAEMasksPart2
Description-US: Imports AI sequence folder and creates animated mask(s).
Written for Adobe After Effects CC 2019 (Version 16.0.1 Build 48)
Update: extend render region (ChatGPT+Aleksandrovsky)
*/
//@target aftereffects
app.beginUndoGroup("c4d-splines-to-ae-masks"); // Begin undo group
Expand All @@ -17,24 +16,57 @@ var myImportOptions=new ImportOptions();
var myFolder=Folder.selectDialog("Import Folder");
var myFiles=myFolder.getFiles();
var file;
var frameCount=0, frameWidth=0, frameHeight=0;
var frameCount=0, frameWidth=0, frameHeight=0, userFps=30;
var itemsa=new Array();
// -------------------------------------------------------------------------------------
for(var i=1; i<=app.project.numItems; i++){itemsa[itemsa.length] = app.project.item(i);} // collect items
for (var j=0; j<itemsa.length; j++) {itemsa[j].selected = false;} // deselect items
for (var i=0; i < myFiles.length; i++){
// Write current progress to info panel
percent = Math.round((i/myFiles.length)*100); // Calculate progress
clearOutput(); // Clear old stuff from info panel
writeLn("Importing files..."); // Write stuff to info panel
writeLn("Progress: "+percent.toString()+ " %"); // Write stuff to info panel
for (var i = 0; i < myFiles.length; i++) {
var ext = myFiles[i].name.split('.').pop().toLowerCase();
if (!(myFiles[i] instanceof File) || ext === "json") continue; // without .json
percent = Math.round((i / myFiles.length) * 100);
clearOutput();
writeLn("Importing files...");
writeLn("Progress: " + percent.toString() + " %");
myImportOptions.file = myFiles[i];
file = app.project.importFile(myImportOptions);
file.parentFolder = tempFolder; // put imported file to folder
file.parentFolder = tempFolder;
}
// -------------------------------------------------------------------------------------
// read Json File
var jsonFile = null;
for (var i = 0; i < myFiles.length; i++) {
if (myFiles[i] instanceof File && myFiles[i].name.toLowerCase().indexOf("_info.json") !== -1) {
jsonFile = myFiles[i];
break;
}
}

if (jsonFile && jsonFile.open("r")) {
try {
var raw = jsonFile.read();
jsonFile.close();
raw = raw.replace(/^\uFEFF/, "");

if (typeof JSON === "undefined") {
JSON = {};
JSON.parse = function (s) { return eval('(' + s + ')'); }
}

var data = JSON.parse(raw);
var jsonW = Math.round(Number(data.original_width));
var jsonH = Math.round(Number(data.original_height));
jsonFPS = Math.round(Number(data.project_fps));

} catch (e) {
//alert("Alert:JSON file dont find: " + e.toString());
userFps = prompt("Input frame rate", 30);
}
}else{
userFps = prompt("Input frame rate", 30);
}

// new comp
var userFps = prompt("Input frame rate", 25);
var itemsc = new Array();
for(var i=1; i<=app.project.numItems; i++){itemsc[itemsc.length]=app.project.item(i);} // collect items
for (var j=0; j<itemsc.length; j++){
Expand Down Expand Up @@ -176,4 +208,20 @@ for (var j=0; j<itemsx.length; j++){
tempFolder.remove(); // remove ai-folder
// -------------------------------------------------------------------------------------
clearOutput(); // Clear old stuff from info panel
app.endUndoGroup(); // End undo group

// resize ae-comp
if (jsonFile && jsonFile.open("r")) {
try {
comp.width = jsonW;
comp.height = jsonH;
writeLn("OK:Final Resolution: " + jsonW + " x " + jsonH);
} catch (e) {
alert("WARNING: Error change Comp Resolution: " + e.toString());
}
}

for (var i = 1; i <= comp.numLayers; i++) {
comp.layer(i).property("Transform").property("Position").setValue([comp.width / 2, comp.height / 2]);
}

app.endUndoGroup(); // End undo group
86 changes: 67 additions & 19 deletions AR_C4DSplinesToAEShapesPart2(CC).jsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
/*
AR_C4DSplinesToAEShapesPart2

Author: Arttu Rautio (aturtur)
Website: http://aturtur.com/
Name-US: AR_C4DSplinesToAEShapesPart2
Description-US: Imports AI sequence folder and creates animated shape(s).
Written for Adobe After Effects CC 2019 (Version 16.0.1 Build 48)
Update: extend render region (ChatGPT+Aleksandrovsky)
*/
//@target aftereffects
app.beginUndoGroup("c4d-splines-to-ae-shapes"); // Begin undo group
Expand All @@ -17,24 +18,57 @@ var myImportOptions=new ImportOptions();
var myFolder=Folder.selectDialog("Import Folder");
var myFiles=myFolder.getFiles();
var file;
var frameCount=0, frameWidth=0, frameHeight=0;
var frameCount=0, frameWidth=0, frameHeight=0, userFps=30;
var itemsa=new Array();
// -------------------------------------------------------------------------------------
for(var i=1; i<=app.project.numItems; i++){itemsa[itemsa.length] = app.project.item(i);} // collect items
for (var j=0; j<itemsa.length; j++) {itemsa[j].selected = false;} // deselect items
for (var i=0; i < myFiles.length; i++){
// Write current progress to info panel
percent = Math.round((i/myFiles.length)*100); // Calculate progress
clearOutput(); // Clear old stuff from info panel
writeLn("Importing files..."); // Write stuff to info panel
writeLn("Progress: "+percent.toString()+ " %"); // Write stuff to info panel
for (var i = 0; i < myFiles.length; i++) {
var ext = myFiles[i].name.split('.').pop().toLowerCase();
if (!(myFiles[i] instanceof File) || ext === "json") continue; // without .json
percent = Math.round((i / myFiles.length) * 100);
clearOutput();
writeLn("Importing files...");
writeLn("Progress: " + percent.toString() + " %");
myImportOptions.file = myFiles[i];
file = app.project.importFile(myImportOptions);
file.parentFolder = tempFolder; // put imported file to folder
file.parentFolder = tempFolder;
}
// -------------------------------------------------------------------------------------
// read Json File
var jsonFile = null;
for (var i = 0; i < myFiles.length; i++) {
if (myFiles[i] instanceof File && myFiles[i].name.toLowerCase().indexOf("_info.json") !== -1) {
jsonFile = myFiles[i];
break;
}
}

if (jsonFile && jsonFile.open("r")) {
try {
var raw = jsonFile.read();
jsonFile.close();
raw = raw.replace(/^\uFEFF/, "");

if (typeof JSON === "undefined") {
JSON = {};
JSON.parse = function (s) { return eval('(' + s + ')'); }
}

var data = JSON.parse(raw);
var jsonW = Math.round(Number(data.original_width));
var jsonH = Math.round(Number(data.original_height));
jsonFPS = Math.round(Number(data.project_fps));

} catch (e) {
//alert("Alert:JSON file dont find: " + e.toString());
userFps = prompt("Input frame rate", 30);
}
}else{
userFps = prompt("Input frame rate", 30);
}

// new comp
var userFps = prompt("Input frame rate", 25);
var itemsc = new Array();
for(var i=1; i<=app.project.numItems; i++){itemsc[itemsc.length]=app.project.item(i);} // collect items
for (var j=0; j<itemsc.length; j++){
Expand Down Expand Up @@ -213,17 +247,31 @@ for (var j=0; j<itemsx.length; j++){
tempFolder.remove(); // remove ai-folder
// -------------------------------------------------------------------------------------
clearOutput(); // Clear old stuff from info panel
app.endUndoGroup(); // End undo group









// resize ae-comp
if (jsonFile && jsonFile.open("r")) {
try {
comp.width = jsonW;
comp.height = jsonH;
writeLn("OK:Final Resolution: " + jsonW + " x " + jsonH);
} catch (e) {
alert("WARNING: Error change Comp Resolution: " + e.toString());
}
}

for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i);
var posProp = layer.property("Transform").property("Position");

// Remove keys on Position
if (posProp.numKeys > 0) {
for (var k = posProp.numKeys; k >= 1; k--) {
posProp.removeKey(k);
}
}

// Centroid Layer
posProp.setValue([comp.width / 2, comp.height / 2]);
}

app.endUndoGroup(); // End undo group