קראתם את מדריך 06 והבנתם מה זה סקריפט. קראתם את מדריך 24 וכתבתם expressions קצרים. עכשיו הזמן לכתוב סקריפט שלם — לא expression. סקריפט שרץ "על" הפרויקט, יוצר שכבות, מסדר אותן, מחיל אפקטים. עבודה של 30 דקות הופכת ל-3 שניות. במדריך הזה — מ-zero ל-script שלם של 50 שורות.
ExtendScript הוא JavaScript של Adobe — גרסה מ-1999 (ECMAScript 3) עם תוספות לעבודה עם אפליקציות. אפטר מריצה אותו מקומית.
בניגוד ל-Expression שרץ בתוך תכונה, סקריפט רץ על האפליקציה כולה. הוא יכול ליצור קומפוזיציות, להוסיף שכבות, לשנות properties — בקיצור, לעשות כל דבר שאפשר לעשות באפטר ידנית, אוטומטית.
| סוג | איפה רץ | איך מפעילים |
|---|---|---|
| Run Once | פותח, רץ, נסגר | File → Scripts → Run Script File |
| ScriptUI Panel | פאנל קבוע (כמו Effects) | Window → [שם הפאנל] |
| Startup Script | רץ אוטומטית כל הפעלה | בתיקיית Scripts/Startup |
אדובי מספקת editor משלה — אבל רוב המקצוענים משתמשים ב-VS Code. נציג את שניהם.
לסקריפטים פשוטים — Notepad++, Sublime, או אפילו Notepad. אבל בלי autocomplete של ה-API של אפטר, התהליך איטי וטעון שגיאות.
סקריפטים נשמרים עם סיומת .jsx (לא להתבלבל עם React JSX). אפטר מזהה את הסיומת. גם .jsxbin (גרסה מקומפלת) ו-.jsxinc (לקובץ Include) קיימים.
מתחילים בקטן — alert פשוט. גם הסקריפטים הכי מורכבים בנויים מאותם בני-חלקים.
alert("שלום מסקריפט!");
hello.jsx ב-Desktop.
כן, אפטר תומכת בעברית ב-alerts. תוכלו לבדוק עם alert("Hello אפטר 123!").
var comp = app.project.activeItem; if (comp && comp instanceof CompItem) { alert("הקומפוזיציה: " + comp.name + "\n רוחב: " + comp.width + "\n גובה: " + comp.height + "\n משך: " + comp.duration + " שניות"); } else { alert("בחרו קומפוזיציה ב-Project Panel קודם!"); }
פתחו פרויקט עם Comp פעיל, הריצו את הסקריפט. תקבלו דיאלוג עם פרטי הקומפוזיציה.
תמיד בדקו עם alert ביניים. אפטר לא מציגה שגיאות יפות בתוך הסקריפט. alert(variable_name) אחרי כל שלב = הדרך לדבג.
כדי לכתוב סקריפט שעושה דברים שימושיים, צריך לדעת לגשת לאלמנטים של הפרויקט. ה-DOM של אפטר מסודר היררכית — בדיוק כמו ש-מדריך 03 מתאר.
var proj = app.project; // הפרויקט var comp = proj.activeItem; // הקומפ הפעיל var layer = comp.layer(1); // שכבה ראשונה (1-indexed!) var pos = layer.transform.position; // תכונה Position var value = pos.value; // ערך נוכחי [x, y]
בניגוד ל-JavaScript הרגיל (0-indexed), ב-ExtendScript אובייקטים של אפטר הם 1-indexed. comp.layer(1) זו השכבה הראשונה (לא layer(0)).
for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); alert("שכבה " + i + ": " + layer.name); }
for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); if (layer instanceof TextLayer) { alert("טקסט: " + layer.name); } }
Adobe מספקת מסמך PDF בשם "After Effects Scripting Guide" — חינם ב-aescripts.com או באתר של Adobe. שם יש את כל ה-API. כשתתחילו לכתוב סקריפטים אמיתיים — תפתחו את ה-PDF הזה לידכם.
עד עכשיו רק קראנו. הכוח האמיתי הוא ביצירה — לבנות שכבות, להגדיר את התכונות שלהן, להחיל אפקטים.
var proj = app.project; var newComp = proj.items.addComp( "My Script Comp", // שם 1920, // רוחב 1080, // גובה 1.0, // pixel aspect 10, // משך בשניות 30 // FPS ); newComp.openInViewer();
var textLayer = newComp.layers.addText("שלום עולם"); // הגדרת property של הטקסט var textProp = textLayer.property("Source Text"); var doc = textProp.value; doc.fontSize = 100; doc.fillColor = [1, 1, 1]; // לבן [R, G, B] בטווח 0-1 doc.font = "Heebo-Bold"; textProp.setValue(doc);
var scale = textLayer.transform.scale; // keyframe ב-0 שניות, ערך [0, 0] scale.setValueAtTime(0, [0, 0]); // keyframe ב-1 שנייה, ערך [100, 100] scale.setValueAtTime(1, [100, 100]); // Easy Ease על שני ה-keyframes var ease = new KeyframeEase(0.5, 75); scale.setTemporalEaseAtKey(1, [ease, ease]); scale.setTemporalEaseAtKey(2, [ease, ease]);
תמיד עטפו פעולות בסקריפט ב-app.beginUndoGroup("שם") ו-app.endUndoGroup(). בלי זה, כל פעולה הופכת ל-undo נפרד — והמשתמש צריך ללחוץ Ctrl+Z 50 פעמים. עם זה — Undo אחד מבטל את כל הסקריפט.
אפטר מאפשרת לסקריפט שלכם להציג חלון/פאנל עם כפתורים, שדות טקסט, רשימות. זה הופך את הסקריפט מ"רץ ועובר" ל-tool קבוע.
var win = new Window("palette", "כותרת"); win.add("statictext", undefined, "שלום"); var btn = win.add("button", undefined, "לחץ עליי"); btn.onClick = function() { alert("לחצת!"); }; win.show();
var input = win.add("edittext", undefined, ""); input.characters = 20; var okBtn = win.add("button", undefined, "OK"); okBtn.onClick = function() { var userText = input.text; alert("הוקלד: " + userText); };
כדי שהסקריפט יופיע כפאנל קבוע (כמו Effects Panel), הקוד מתחיל אחרת:
function myPanel(thisObj) { var panel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "My Tool"); panel.add("statictext", undefined, "זה הפאנל שלי"); if (panel instanceof Window) { panel.show(); } } myPanel(this);
שמרו את הקובץ ב-[AE Install]/Scripts/ScriptUI Panels/. אפטר תזהה אותו אוטומטית, והוא יופיע ב-Window menu עם השם של הקובץ. אחרי restart — לחיצה אחת ויש לכם פאנל מותאם.
מקומפילים את הכל. סקריפט שלם של ~50 שורות שיוצר Composition, מוסיף 10 שכבות טקסט בגוונים שונים, ומסדר אותן.
// סקריפט: יוצר 10 שכבות טקסט מסודרות // מאת: BDNHOST · 2026 app.beginUndoGroup("Create 10 Text Layers"); try { // 1. יצירת קומפוזיציה חדשה var comp = app.project.items.addComp( "Generated Comp", 1920, 1080, 1.0, 10, 30 ); // 2. רשימת מילים שייצרו את השכבות var words = [ "חלום", "מטרה", "תוכנית", "פעולה", "התמדה", "כישלון", "לימוד", "שיפור", "הצלחה", "חזרה" ]; // 3. צבעים שונים לכל שכבה var colors = [ [1.0, 0.5, 0.3], [0.3, 0.7, 1.0], [0.5, 1.0, 0.3], [1.0, 0.3, 0.7], [1.0, 1.0, 0.3], [0.7, 0.3, 1.0], [0.3, 1.0, 1.0], [1.0, 0.7, 0.3], [0.5, 0.5, 1.0], [1.0, 1.0, 1.0] ]; // 4. לולאה — יוצרים 10 שכבות for (var i = 0; i < words.length; i++) { var textLayer = comp.layers.addText(words[i]); // הגדרת stilo var textProp = textLayer.property("Source Text"); var doc = textProp.value; doc.fontSize = 80; doc.fillColor = colors[i]; doc.font = "Heebo-Bold"; doc.justification = ParagraphJustification.CENTER_JUSTIFY; textProp.setValue(doc); // מיקום: עמודה אחת, מסודרים אנכית textLayer.transform.position.setValue( [960, 100 + i * 90] ); // keyframes של Opacity (delay לפי i) var opacity = textLayer.transform.opacity; opacity.setValueAtTime(i * 0.1, 0); opacity.setValueAtTime(i * 0.1 + 0.3, 100); } // 5. פתיחת הקומפוזיציה comp.openInViewer(); alert("נוצרו " + words.length + " שכבות טקסט!"); } catch(e) { alert("שגיאה: " + e.toString()); } app.endUndoGroup();
create-10-layers.jsx.הסקריפט הזה יצר 10 שכבות. שדרוג: הוסיפו ScriptUI Panel שמאפשר למשתמש להגדיר כמה שכבות, באיזה פונט, ובאיזו רשימה של מילים. זה הופך את הסקריפט לכלי שאתם יכולים למכור — בדיוק איך ש-Text Layer Manager נבנה.
ExtendScript / JSX מאפשר לכם לכתוב קוד שעובד "על" אפטר. גישה ל-DOM (project, comp, layer, property), יצירת אובייקטים (addComp, addText, setValueAtTime), ובניית UI עם ScriptUI. הסקריפט הראשון שלכם הוא 50 שורות שמייצרות שכבות אוטומטית — הבסיס לכל אוטומציה רצינית.
מהסקריפט הראשון לסקריפט מסחרי הדרך לא ארוכה: שיפוץ הקוד, הוספת UI, debugging, וטיפול ב-edge cases. זה בדיוק התהליך שעברנו עם Text Layer Manager — שיוצר היום הכנסה חודשית.
אחרי שהסקריפט הראשון שלכם עובד — תרצו ללמוד יותר. מדריך 06 מספק את היסודות העמוקים. במדריכים הבאים בסדרה, נכסה את ההיבטים העסקיים — איך להוציא את הסקריפט שלכם לעולם, לתמחר, ולמכור.