AE Programming
https://forums.creativecow.net/thread/227/18794 http://aescripts.com/templater/ https://www.premiumbeat.com/blog/10-time-saving-tips-in-after-effects/ http://www.molecularmovies.com/img/pdf_tutorials/AEbasics.pdf https://www.themarketingtechnologist.co/creating-dynamic-videos-using-javascript-and-after-effects-the-basics/
AE Expression
- position wiggle
fps=5; //frequency amount=8; //amplitude wiggle(fps,amount,octaves = 1, amp_mult = 0.5,(Math.round(time*fps))/fps);
AE Scripts
- run from cmd to call a javascript (your may or may not need full path)
afterfx.exe -s "var myArg="I'm a string!"; $.evalFile("Your path to script here")" c:\PathToAE\AfterFX.exe -r C:\"path"\"script name".jsx
- study example:
AE Common code
UI Code - ScriptUI
Details on Javascript UI, can refer to my Photoshop javascript study: scriptUI in detail
- ref:
- Adobe offical ScriptUI reference (Javascript Tool Guide): https://wwwimages2.adobe.com/content/dam/acom/en/devnet/scripting/pdfs/javascript_tools_guide.pdf
- ScriptUI for dummies:
- Video tutorial:
- Article tutorial:
ScriptUI vs Dockable ScriptUI in AfterEffects
- In general Adobe application, scriptUI are only 2 types: Pallete, Dialog; But in AfterEffects, there are 3 types: Dockable Pallete, non-dock normal Pallete, Dialog
- for ScriptUI pallete to become dockable window, it needs
- code written in certain format way
- code file need to be in ScriptUI folder in application folder, and it opened from Windows menu
ScriptUI dockable code
File Related
- show project file in explorer
app.executeCommand(app.findMenuCommandId("Reveal in Explorer"));
- show layer file path
var theLayer = app.project.activeItem.selectedLayers[0]; alert(theLayer.source.file.fsName);
- reveal layer source in project panel
// ref: http://www.smipple.net/snippet/francoisgfx/Reveal%20Layers%20in%20Project var proj = app.project; var comp = proj.activeItem; if(comp){ var selectedLayers = comp.selectedLayers; if(selectedLayers.length > 0){ for(var l = 0 ; l < selectedLayers.length ; l++){ selectedLayers[l].source.selected = true; } } }
Application Level
- write to info panel as output
write('info here'); writeln('info breakline');
- app interaction
app.activate(); // bring to front app.beginSuppressDialogs(); // no error pop-up; endSuppressDialogs // make undo group app.beginUndoGroup(commentString); app.endUndoGroup(commentString);
- current info
app.activeViewer; // current focused viewer (comp, layer, footage panel)
Comp and footage, Layer, Property
- get all item (Comp and Footage)
keyframe, animation, expression
- set expression for selected attributes
// ref: http://www.smipple.net/snippet/francoisgfx/Set%20Expression%20to%20selected%20property%20%28in%20AE%29 var link_expression = 'wiggle(10,30);' var cur_comp = app.project.activeItem; // our current selected & opened comp if(cur_comp && cur_comp.selectedLayers[0].selectedProperties[0]){ // if a comp and at least one property is selected for(var i = 0 ; i < cur_comp.selectedLayers.length; i++){ // go trough each selected layers var cur_layer = cur_comp.selectedLayers[i]; for(var j = 0 ; j < cur_layer.selectedProperties.length; j++){ // go through each selected properties var cur_attr = cur_layer.selectedProperties[j]; if(cur_attr.canSetExpression) { cur_attr.expression = link_expression; }else{ alert("Can't add expression to the selected property"); }; }; }; }else{ alert("properties of an effect or a layer has to be selected"); };
Render Related
- example
app.project.renderQueue.items.add(myComp).applyTemplate("TemplateName");
Network related
- since CS5 for Bridge, InDesign, InCopy, AE, Photoshop have socket object