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 | ✅ | ||
| CameraLayer | ✅ | ||
| LightLayer | ✅ | ||
| TextLayer | ✅ | ||
| ShapeLayer | ✅ | ||
| ThreeDModelLayer | ✅ | ||
| ParametricMeshLayer | ✅ |
Note:
sourceRectAtTime() returns the source bounds for footage, solid,
precomposition and adjustment layers, and the content bounds of shape
and text layers, raising NotImplementedError outside the measured
envelope (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).