Skip to content

Releases

v1.13.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 15 Aug 21:34
23c549e

1.13.0 (2026-08-15)

Features

  • add layer structure tools (set-layer-parent, reorder-layer, precompose-layers) (87f5a81)

Bug Fixes

  • reject duplicate indices in precompose-layers up front (acfedb5)

v1.12.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 15 Aug 21:09
57adda4

1.12.0 (2026-08-15)

Features

  • add project asset management tools (import-footage, list-project-items, relink-footage) (4baa734)

Bug Fixes

  • correct import-footage's asSequence handling and avoid mislabeling a successful import as failed (618d843)

v1.11.1

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 13 Aug 13:14
5f9f6fb

1.11.1 (2026-08-13)

Bug Fixes

  • wait for asynchronously written frame PNGs before reading them (#14) (96c00e2)

Performance Improvements

  • poll scratch PNGs concurrently in see-frame/contact-sheet/match-reference (e2cef9e)

v1.11.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 13 Aug 09:47

1.11.0 (2026-08-13)

Features

  • add populate-template for bulk composition generation from data (95edd33)

Bug Fixes

  • verify release-please labeling works end-to-end in production (temporary, will be reverted) (047c2c1)

Reverts

  • remove temporary release-please verification commit (1e21bce)

v1.10.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 19 Jul 03:16

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 smoothing animate-to-audio uses.
    • Targets a plain layer property or an effect property via the same
      scheme animate-to-audio already uses (now shared as one
      PropertyTargetSchema).
    • Required zero ExtendScript changes: reuses animate-to-audio's
      keyframe-batching bridge handler unchanged, registered under its own
      setPropertyKeyframesBatch command name.
  • Bridge protocol bumped to 1.10.0-mcp-enhanced.

Fixed

  • Every plain numeric field on animate-to-audio and animate-from-data
    now rejects Infinity (via zod's .finite()) in addition to NaN.
  • Stale bridge-version string in both READMEs (still read 1.7.4 despite
    the protocol having moved twice already).

v1.9.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 17 Jul 12:38

Added

  • animate-to-audio: generate After Effects keyframes for a layer or
    effect property directly from an audio file's waveform, in one call.
    • waveform mode follows the amplitude envelope continuously (one
      keyframe per analyzed sample), with optional smoothing and a response
      curve (linear / exponential / logarithmic).
    • peaks mode 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-waveform does.
    • 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-enhanced for the new
    setPropertyKeyframesBatch command.

Internal

  • analyze-audio-waveform's WAV-native-plus-ffmpeg-fallback loading logic
    was extracted into a shared loadAudioAnalysis helper reused by both
    audio tools, with no behavior change for existing callers.

v1.8.0

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 16 Jul 15:53

Added

  • analyze-audio-waveform now 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 the AE_FFMPEG_PATH env 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 file protocol
    (-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

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 14 Jul 17:44

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-comp now takes a path (a chain of precomp layers ending in the text layer) instead of only a top-level layerIndex/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-comp failed 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, and batch-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

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 13 Jul 19:13

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-comp duplicates 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 logic create-text-layer already 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

Choose a tag to compare

@a-y-ibrahim a-y-ibrahim released this 05 Jul 10:56

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.