Repository navigation
Releases
v1.13.0
v1.12.0
v1.11.1
v1.11.0
v1.10.0
Added
animate-from-data: generate After Effects keyframes for a layer or
effect property directly from an arbitrary numeric time series - stock
prices, sensor readings, scores, survey results, anything time-ordered
and numeric, no audio involved.- Accepts either explicit
{time, value}points (data) or an
evenly-spaced series (values+interval). - Each raw value is normalized using
[inputMin, inputMax]
(auto-detected from the series when not given) and mapped to
[outputMin, outputMax], reusing the same response-curve shaping and
moving-average smoothinganimate-to-audiouses. - Targets a plain layer property or an effect property via the same
schemeanimate-to-audioalready uses (now shared as one
PropertyTargetSchema). - Required zero ExtendScript changes: reuses
animate-to-audio's
keyframe-batching bridge handler unchanged, registered under its own
setPropertyKeyframesBatchcommand name.
- Accepts either explicit
- Bridge protocol bumped to
1.10.0-mcp-enhanced.
Fixed
- Every plain numeric field on
animate-to-audioandanimate-from-data
now rejectsInfinity(via zod's.finite()) in addition toNaN. - Stale bridge-version string in both READMEs (still read
1.7.4despite
the protocol having moved twice already).
v1.9.0
Added
animate-to-audio: generate After Effects keyframes for a layer or
effect property directly from an audio file's waveform, in one call.waveformmode follows the amplitude envelope continuously (one
keyframe per analyzed sample), with optional smoothing and a response
curve (linear / exponential / logarithmic).peaksmode pulses the property at each detected transient and decays
back to a baseline, optionally scaling each hit by how loud that
specific transient was (velocitySensitivePeaks).- Accepts any audio format ffmpeg supports, the same way
analyze-audio-waveformdoes. - All keyframes are set in a single ExtendScript round-trip and a single
undo step, capped at 2000 keyframes to protect After Effects'
responsiveness.
- Bridge protocol bumped to
1.9.0-mcp-enhancedfor the new
setPropertyKeyframesBatchcommand.
Internal
analyze-audio-waveform's WAV-native-plus-ffmpeg-fallback loading logic
was extracted into a sharedloadAudioAnalysishelper reused by both
audio tools, with no behavior change for existing callers.
v1.8.0
Added
analyze-audio-waveformnow accepts any audio format, not just PCM WAV.
Non-WAV input (mp3, m4a/aac, ogg, flac, a video file's audio track, ...) is
transcoded to a temporary PCM WAV via ffmpeg if it is installed and on
PATH(override its location with theAE_FFMPEG_PATHenv var); the
temporary file is removed after analysis. Uncompressed WAV still goes
through the original, dependency-free path unchanged. If ffmpeg is not
installed, the tool now reports that explicitly instead of a generic
"unsupported format" error.- Hardening: the ffmpeg conversion restricts input to the
fileprotocol
(-protocol_whitelist file) so a path that happens to look like a URL
cannot make ffmpeg fetch a network resource instead, and both the ffmpeg
version probe and the conversion itself run under a hard timeout so a hung
ffmpeg process cannot block the server indefinitely.
v1.7.4: Nested precomp localization, three live-tested fixes
This release extends localize-comp to reach text nested inside precompositions, and fixes three bugs that only showed up under real, live testing in After Effects.
What changed
localize-compnow takes apath(a chain of precomp layers ending in the text layer) instead of only a top-levellayerIndex/layerName. Every precomposition on the path is duplicated the first time it's reached, and the duplicate is reused if another translation in the same call passes through the same precomp, so nested source content is never edited in place.
Fixed, found through live testing
- Arabic auto-detection matched nothing at runtime, despite working outside After Effects: ExtendScript's regex engine doesn't reliably parse a literal character class with certain characters as range boundaries. Rebuilt with escape-text ranges instead, and corrected a range that ran three code points too far, into the byte-order mark.
localize-compfailed on a second translation sharing a precomp with an earlier one in the same call. After Effects renames a layer to match its new source after a swap, which broke the next lookup by the original name. The name is now captured and restored.- Reading or writing a layer's Position, Scale, Rotation, or Opacity directly, instead of through the layer's Transform group first, silently returned null instead of throwing on this After Effects build, for every layer type. This broke
create-text-layer,create-shape-layer,create-adjustment-layer, andbatch-set-layer-properties. All of these now go through the Transform group correctly.
The bridge protocol is now 1.7.4. Reopen the panel in After Effects and run "check the After Effects bridge" to confirm it reports 1.7.4.
v1.7.3: Localized compositions
This release adds a new tool that duplicates a composition and swaps in translated text for one or more layers, so building a localized version of a design no longer means recreating it by hand.
What changed
localize-compduplicates a composition and replaces the text of one or more layers with translated text you provide, auto-detecting Arabic and applying right-to-left direction and alignment per layer, the same logiccreate-text-layeralready uses.- The source composition is left untouched. Every other layer, effect, and animation carries over unchanged in the new copy.
- Translation itself stays the caller's job. The tool only automates the mechanical part: duplicating safely and getting direction and alignment right per layer.
Also included: releases now publish to npm automatically through GitHub Actions, with a provenance attestation linking the published package to the exact commit it was built from.
The bridge protocol is now 1.7.3. Reopen the panel in After Effects and run "check the After Effects bridge" to confirm it reports 1.7.3.
v1.7.2: Faster bridge
This release speeds up how the server and the After Effects panel talk to each other, so multi-step builds finish sooner. Output quality is unchanged.
What changed
- The server now polls for a result with an adaptive backoff that starts at 40ms instead of a fixed 250ms, so quick commands return in a fraction of the time.
- The panel checks for new commands every 250ms instead of 500ms.
- Together these cut the per command latency roughly in half, which adds up across a build with many steps.
This only changes how often the two sides check for each other. It does not touch the ExtendScript that renders your work, so every frame comes out exactly the same, just faster.
The bridge protocol is now 1.7.2. Reopen the panel in After Effects and run "check the After Effects bridge" to confirm it reports 1.7.2.