BDNHOST · AE SCRIPTS LAB
מדריך 25 · Phase 4 · Automation

JSX משלכם —
הסקריפט הראשון שלכם.

קראתם את מדריך 06 והבנתם מה זה סקריפט. קראתם את מדריך 24 וכתבתם expressions קצרים. עכשיו הזמן לכתוב סקריפט שלם — לא expression. סקריפט שרץ "על" הפרויקט, יוצר שכבות, מסדר אותן, מחיל אפקטים. עבודה של 30 דקות הופכת ל-3 שניות. במדריך הזה — מ-zero ל-script שלם של 50 שורות.

זמן קריאהכ-25 דקות רמהמתקדם דרישות קדם06, 24 תוצרscript שעובד
פרק 01 · ExtendScript בקצרה

איך אפטר רץ קוד

ExtendScript הוא JavaScript של Adobe — גרסה מ-1999 (ECMAScript 3) עם תוספות לעבודה עם אפליקציות. אפטר מריצה אותו מקומית.

בניגוד ל-Expression שרץ בתוך תכונה, סקריפט רץ על האפליקציה כולה. הוא יכול ליצור קומפוזיציות, להוסיף שכבות, לשנות properties — בקיצור, לעשות כל דבר שאפשר לעשות באפטר ידנית, אוטומטית.

מה אפשר לעשות עם script

סוגי scripts

סוגאיפה רץאיך מפעילים
Run Once פותח, רץ, נסגר File → Scripts → Run Script File
ScriptUI Panel פאנל קבוע (כמו Effects) Window → [שם הפאנל]
Startup Script רץ אוטומטית כל הפעלה בתיקיית Scripts/Startup
פרק 02 · הסביבה

איפה כותבים את הקוד

אדובי מספקת editor משלה — אבל רוב המקצוענים משתמשים ב-VS Code. נציג את שניהם.

אופציה 1 — ExtendScript Toolkit (ESTK)

אופציה 2 — VS Code עם Extension (מומלץ)

אופציה 3 — לפתוח עם editor רגיל

לסקריפטים פשוטים — Notepad++, Sublime, או אפילו Notepad. אבל בלי autocomplete של ה-API של אפטר, התהליך איטי וטעון שגיאות.

סיומת קובץ

סקריפטים נשמרים עם סיומת .jsx (לא להתבלבל עם React JSX). אפטר מזהה את הסיומת. גם .jsxbin (גרסה מקומפלת) ו-.jsxinc (לקובץ Include) קיימים.

פרק 03 · Hello World

הסקריפט הראשון

מתחילים בקטן — alert פשוט. גם הסקריפטים הכי מורכבים בנויים מאותם בני-חלקים.

הקוד המינימלי

alert("שלום מסקריפט!");

איך מריצים

  1. שמרו את הקובץ כ-hello.jsx ב-Desktop.
  2. באפטר: File → Scripts → Run Script File.
  3. בוחרים את hello.jsx ולוחצים Open.
  4. קופץ דיאלוג עם הטקסט "שלום מסקריפט!".

כן, אפטר תומכת בעברית ב-alerts. תוכלו לבדוק עם alert("Hello אפטר 123!").

קוד שני — בודק עם איזה Comp עובדים

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) אחרי כל שלב = הדרך לדבג.

פרק 04 · DOM

גישה לפרויקט

כדי לכתוב סקריפט שעושה דברים שימושיים, צריך לדעת לגשת לאלמנטים של הפרויקט. ה-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]

חשוב — אינדקסים מתחילים מ-1

בניגוד ל-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 הזה לידכם.

פרק 05 · יצירת אובייקטים

יוצרים שכבות מתוך קוד

עד עכשיו רק קראנו. הכוח האמיתי הוא ביצירה — לבנות שכבות, להגדיר את התכונות שלהן, להחיל אפקטים.

יצירת Composition

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);

הוספת keyframes

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.beginUndoGroup("שם") ו-app.endUndoGroup(). בלי זה, כל פעולה הופכת ל-undo נפרד — והמשתמש צריך ללחוץ Ctrl+Z 50 פעמים. עם זה — Undo אחד מבטל את כל הסקריפט.

פרק 06 · ScriptUI

מיוצרים פאנל משלכם

אפטר מאפשרת לסקריפט שלכם להציג חלון/פאנל עם כפתורים, שדות טקסט, רשימות. זה הופך את הסקריפט מ"רץ ועובר" ל-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 — לחיצה אחת ויש לכם פאנל מותאם.

פרק 07 · התרגיל

סקריפט שיוצר 10 שכבות טקסט מסודרות

מקומפילים את הכל. סקריפט שלם של ~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();

איך מריצים

  1. שמרו את הקוד כ-create-10-layers.jsx.
  2. פותחים אפטר עם פרויקט פתוח.
  3. File → Scripts → Run Script File.
  4. בוחרים את הקובץ. בלחיצה — נוצרת קומפוזיציה חדשה עם 10 שכבות טקסט בעברית, בצבעים שונים, נכנסות עם delay של 0.1 שניות בין אחת לשנייה.
השלב הבא

הסקריפט הזה יצר 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 מספק את היסודות העמוקים. במדריכים הבאים בסדרה, נכסה את ההיבטים העסקיים — איך להוציא את הסקריפט שלכם לעולם, לתמחר, ולמכור.