ExtendScript Coverage¶
Implementation progress of the ExtendScript API in py_aep.
Each row lists the attributes and methods from the After Effects Scripting Guide that are not yet implemented.
- ✅ = all attributes and methods implemented
- 🚧 = partially implemented
- ❌ = class does not exist in py_aep
Two kinds of members are excluded from the tables and do not count against a class's status:
- Runtime members reflect the state of a running After Effects instance
(UI panels, rendering, dialogs, the font server, watch folders,
Team Projects). They are not stored in
.aepfiles and are out of scope for a file parser; each section's note lists them. - Intentionally different APIs: members py_aep exposes through a more
Pythonic surface - keyframe
key*()methods >Property.keyframes, collection classes (ItemCollection,LayerCollection,OMCollection,RQItemCollection) > plain lists plusadd_*()methods on the owning model,toString()>str(). See Differences from ExtendScript.
General¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| Application | 🚧 | effects |
|
| System | ❌ | ||
| Project | ✅ |
Note:
All System members and the remaining Application members are runtime
state: availableGPUAccelTypes, disableRendering,
exitAfterLaunchAndEval, exitCode, fonts, isoLanguage,
isRenderEngine, isWatchFolder, memoryInUse, onError,
saveProjectOnCrash, settings, and every Application method (undo
groups, dialogs, watch folders, tasks, memory limits). app.open() and
app.newProject() correspond to py_aep.parse() and py_aep.new().
The installed-effect names are available as Project.effect_names;
app.effects's per-effect category and version are not parsed.
Note:
Project runtime members: dirty, selection, toolType, close(),
saveWithDialog(), importFileWithDialog(), showWindow(),
setDefaultImportFolder(), and the Team Projects methods.
itemByID(id) is project.items[id] (a dict keyed by item id);
item(index) indexes the same collection.
Items¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| Item | ✅ | ||
| AVItem | ✅ | ||
| CompItem | 🚧 | selectedLayers, selectedProperties |
exportAsMotionGraphicsTemplate() |
| FolderItem | ✅ | ||
| FootageItem | ✅ |
Note:
Item.setGuide() is covered by the writable Guide objects on
Item.guides. CompItem.getMotionGraphicsTemplateControllerName() /
setMotionGraphicsControllerName() are covered by the read/write
EssentialGraphicsController.name. Runtime members: CompItem.counters
(an undocumented app-wide no-op), openInViewer(),
openInEssentialGraphics().
Layers¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| Layer | 🚧 | selectedProperties |
applyPreset() |
| AVLayer | 🚧 | sourceRectAtTime() (text and shape layer content bounds) |
|
| CameraLayer | ✅ | ||
| LightLayer | ✅ | ||
| TextLayer | ✅ | ||
| ShapeLayer | ✅ | ||
| ThreeDModelLayer | ✅ | ||
| ParametricMeshLayer | ✅ |
Note:
sourceRectAtTime() returns the source bounds for footage, solid,
precomposition and adjustment layers; the text-layer ink bounding box
(glyph extents) and shape-layer geometry bounds raise
NotImplementedError (see Differences).
Layer.doSceneEditDetection() (which runs Adobe Sensei's AI scene-cut
detection on the rendered media) and openInViewer() are runtime.
Properties¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| PropertyBase | ✅ | ||
| PropertyGroup | ✅ | ||
| Property | 🚧 | selectedKeys |
|
| MaskPropertyGroup | ✅ |
Note:
The keyframe accessors (keyTime(), keyValue(), keyInTemporalEase(),
...) and mutators (setValueAtKey(), setTemporalEaseAtKey(), ...) are
covered by the Keyframe objects on Property.keyframes and the 0-based
mutation methods; setValue() is the value setter, setPropertyParameters()
the property_parameters setter and setAlternateSource() the alternate_source
setter (see Differences). PropertyBase.propertyGroup(countUp) is
covered by walking parent_property. Key selection (selectedKeys,
keySelected(), setSelectedAtKey()) is not parsed.
Render Queue¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| RenderQueue | ✅ | ||
| RenderQueueItem | 🚧 | saveAsTemplate() |
|
| OutputModule | 🚧 | saveAsTemplate() |
Note:
setSetting() and setSettings() are covered by the writable settings
mapping on both classes: item.settings[key] = value sets one setting and
item.settings = {...} applies a whole dict (a round-tripped
dict(item.settings) re-applies cleanly; read-only keys such as "Format"
are left untouched). Runtime members: RenderQueue.canQueueInAME,
rendering, render(), pauseRendering(), queueNotify, stopRendering(),
queueInAME(), showWindow(), and RenderQueueItem.onStatusChanged.
RenderQueue.item(index) and RenderQueueItem.outputModule(index) are the
items and output_modules lists. saveAsTemplate() writes to the AE
preference files, which py_aep treats as read-only.
Sources¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| FootageSource | ✅ | ||
| FileSource | ✅ | ||
| SolidSource | ✅ | ||
| PlaceholderSource | ✅ |
Note:
FootageSource.guessAlphaMode() and guessPulldown() analyze the media
file at runtime; py_aep deliberately does not estimate alpha or pulldown
on import.
Other¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| Shape | ✅ | ||
| KeyframeEase | ✅ | ||
| MarkerValue | ✅ | ||
| ImportOptions | ✅ | ||
| Preferences | 🚧 | saveToDisk() |
|
| Settings | ❌ | ||
| Viewer | ✅ | ||
| ViewOptions | ✅ | ||
| View | ✅ |
Note:
Shape's parallel feather arrays are covered by the FeatherPoint
objects on Shape.feather_points, and MarkerValue.getParameters() /
setParameters() by the params attribute (see
Differences).
Note:
The AE preference .txt files are read-only in py_aep: set_pref_as_*
writes an in-memory override layer, so saveToDisk() is deliberately
not provided. getPrefAsLong / getPrefAsFloat merge into
get_pref_as_number(), and savePrefAs* are the set_pref_as_*
methods. Settings is the runtime settings store (not part of .aep);
Viewer.maximized and setActive() are runtime panel state.
Text¶
| Class | Status | Missing attributes | Missing methods |
|---|---|---|---|
| TextDocument | 🚧 | fontFamily, fontLocation, fontStyle |
|
| FontObject | 🚧 | designAxesData, familyName, fullName, nativeFamilyName, nativeFullName, nativeStyleName, styleName, technology, type, writingScripts |
postScriptNameForDesignVector() |
| FontsObject | ❌ | ||
| CharacterRange | ✅ | ||
| ComposedLineRange | ✅ | ||
| ParagraphRange | ✅ |
Note:
The .aep file stores only a font's PostScript name, version, and
design vector; the missing FontObject members describe the installed
font and would require system font-database resolution. The remaining
FontObject members are runtime font-server state (fontID,
isFromAdobeFonts, isSubstitute, location,
otherFontsWithSameDict, hasGlyphsFor(), hasSameDict()), as is the
whole FontsObject collection. TextDocument.fontFamily / fontStyle
/ fontLocation likewise resolve from the installed font (py_aep
exposes the stored font and font_object instead).