Skip to main content
Participating Frequently
July 14, 2021
質問

AFX Script Problem Visual Studio Code

  • July 14, 2021
  • 返信数 2.
  • 1979 ビュー

Hi, 

i recently started scripting and wrote a script in VS Studio for After Effects, which works fine when i run it from Visual Studio. But when i save it and run the script from After Effect it gives me an error message: "unable to execute at line 20..."  

which is a function in my script. everything before gets executed. 

I have Variables (a,b)  in my function because i am looking for several Objects meaning CompItem, FootageItem, Folderitem where I'm looking for specific names as a string. 

The Function looks like that: 

 

function graballItems(a, b) {
  var proj, curItem, itemTotal, ItemAry;

  proj = app.project;

  itemTotal = proj.numItems;

  ItemAry = new Array();

  for (var i = 1; i <= itemTotal; i++) {
    curItem = proj.item(i);

    if (curItem instanceof b && curItem.name.indexOf(a) !== -1) {
      ItemAry = curItem;
    }
  }
  return ItemAry;
}

// And i use it like that:

var myCompBeauty = graballItems("CAN_ENDTAG_PRE", CompItem);

 

 

But strange though, that it is working from VS Studio. 

Does anybody know why the error message appears? 

 

Cheers 

Martin 

このトピックへの返信は締め切られました。

返信数 2

Mathias Moehl
Community Expert
Community Expert
July 15, 2021

The line "ItemAry = new Array()" suggests that you want to return an array of the found items. But in the line

ItemAry = curItem;

you replace your array with a single item.

If you want to grab all items, you most likely want to do

ItemAry.push(curItem)

instead.

 

 

 

 

Mathias Möhl - Developer of tools like BeatEdit and Automation Blocks for Premiere Pro and After Effects
mmueller2作成者
Participating Frequently
July 15, 2021

First of all, thank you both for your quick reply. 

I tried to implement the try and catch statement but without any sucess. 

I implemented the push item command but recognized that i only need one item not an array so i changed it to just get the curitem. But still the same error. 

Last thing i wanted to try to set an alert line by line to check where the code breaks exactly. 

Strange enough the script works like that: 

 

function graballItems (a,b){
    alert("OK");
    var proj,curItem,itemTotal,MyItem;
    proj = app.project;
    itemTotal = proj.numItems
    for (var i =1i<= itemTotali++){
        curItem = proj.item(i);
        if (curItem instanceof b && curItem.name.indexOf(a) !== -1  ){
            MyItem = curItem;
            
        }
       
        }
    return MyItem;
    
}
 
But of course i don't want to have an alert 10 times while the script is running. 
 
mmueller2作成者
Participating Frequently
July 28, 2021

And it is the same error message. The line number differs but it is always between: 

for (var i =1i<= itemTotali++){
    curItem = proj.item(i);
    if (curItem instanceof CompItem && curItem.name.indexOf("COMP_NAME") !== -1  ){ 
And again launching via VS Code works, debugging works, launching from after effects with run script command does not work except when i set an alert between the first and the second for loop. 
So the same problem as with the function implemented. 
 

And here is the complete Code with function and function calls. And the alert between the first and second function call. That's how it would work from AFX. 

 

 

//@target aftereffects
var myWindow = new Window("palette""Script Name"undefined, {closeButton: true});
var groupOne = myWindow.add("group"undefined"GroupOne");
groupOne.orientation = "column";
groupOne.add("image", [0,0,300,500], "Path to Image");
var ButtonBeauty = groupOne.add("button",undefined,"Select & Change Beauty Layer");
var groupTwo = myWindow.add("group"undefined"GroupTwo");

myWindow.center();
myWindow.show();
var my_File = new File("Path to Project");
var newproject = app.open(my_File);
//alert("OK");


function graballItems (itemName,itemType){
    //alert("OK");
    var typeOptions = Array("Composition","Footage","Folder");
    for (var t = 0t<=3t++ ){
            if (itemType == typeOptions[t]){
                var proj,curItem,itemTotal,MyItem;
                proj = app.project;
                itemTotal = proj.numItems
                for (var i =1i<= itemTotali++){
                    curItem = proj.item(i);
                    if (curItem.typeName == itemType && curItem.name.indexOf(itemName) !== -1  ){
                        return curItem;
                        
                    }
                
                    } 
                throw new Error("could not find item!");
                    }
                
            }
            
    }





var myCompBeauty = graballItems("COMP_NAME1","Composition");
//alert("Beauty Comp ="+ myCompBeauty.name);

//alert("Next click the Button =Select & Change Beauty Layer= and import your newly rendered C4d File"); 

var myCompReflection = graballItems("COMP_NAME2","Composition");
//alert("ReflectionComp ="+myCompReflection.name);


var FootageFolder = graballItems("FolderName","Folder");
//alert(FootageFolder.name);

var DelFile = graballItems("FootageName","Footage");
//alert(DelFile.name);




ButtonBeauty.onClick = function(){ 
    app.project.importFileWithDialog();
    app.project.activeItem.parentFolder = FootageFolder;
    for (var i = 1i <= myCompBeauty.numLayersi ++) {    
        if (myCompBeauty.layer(i).name.indexOf("NAME") !== -1) {          
            layerBeauty = myCompBeauty.layer(i);         
            myCompBeauty.layer(i).replaceSource(app.project.activeItem,true);  
            }}
            
            
    for (var i = 1i <= myCompReflection.numLayersi ++) {    
        if (myCompReflection.layer(i).name.indexOf("NAME") !== -1) {          
            layerRef = myCompReflection.layer(i);         
            myCompReflection.layer(i).replaceSource(app.project.activeItem,true);
            }}
                  
    DelFile.remove();
    var ProjectName = app.project.activeItem.name;
    var newProjectName = "Endslates"+ProjectName.substring(21,ProjectName.length-15);
    var new_SaveFile = new File("path" + newProjectName + ".aep" );
    app.project.save(new_SaveFile);        

    var extension = new Array("AA","BB","CC","DD","EE","FF","GG");
    var name = new Array("Name1","Name2","Name3","Name4","Name5","Name6","Name7"); 

    for (var i = 0i<= extension.length-1i++){
        
        
            if(ProjectName.indexOf(extension[i])!==-1){
                var newUserName = name[i];
                break
        }
        

    }
    //alert(newUserName);
       
    
    var RenderQueue = app.project.renderQueue.items.add(myCompReflection);
    var OutputModule = RenderQueue.outputModule(1);
    //alert(OutputModule.templates);
    var OutputFolder = "Output Path";
    OutputModule.applyTemplate("Prores4444");
    OutputModule.file =File(OutputFolder+newProjectName + "_proxie");
    
    alert("Hi " +newUserName" Your Project was happily saved at Path "newProjectName".aep"); 

      

        

       
    





Justin Taylor-Hyper Brew
Community Expert
Community Expert
July 14, 2021

Just tested and it works for me after commenting out that line. Try putting it in a try catch and see if you can get any more info on the error.