# @bevyl-ai/ts-aep 中文文档

规范地址：https://npmcn.com/package/%40bevyl-ai/ts-aep/

版本：0\.6\.0
npm 元数据更新时间：2026-10-23T13:54:50.142Z
中文译文更新时间：2026-11-08T00:30:24.868Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bevyl-ai/ts-aep
原文对照：https://npmcn.com/package/%40bevyl-ai/ts-aep/?lang=original
项目主页：https://github.com/bevyl-ai/ts-aep#readme
源码仓库：https://github.com/bevyl-ai/ts-aep

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：8.3 MB，241 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.3
- 运行依赖：4 个
- 首次发布：2026-10-17T01:15:53.918Z
- 最新版本发布：2026-10-23T13:54:49.665Z
- 近 30 天下载量：3813（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：8（近 12 个月 8 个）

## 中文简介

1:1 TypeScript port of py-aep:在效果后读取并写入 Adobe .aep 工程(Node, Bun, 浏览器, 工人)

## 安装

```sh
npm install @bevyl-ai/ts-aep
```

也可以使用：`pnpm add @bevyl-ai/ts-aep`、`yarn add @bevyl-ai/ts-aep`、`bun add @bevyl-ai/ts-aep`

## README

# t-aep

一个 [大赦国际重写](https://bun.com/blog/bun-in-rust) 令人惊叹的 [爱 -爱](https://github.com/forticheprod/py-aep) 软件包,在效果之后 `.aep` 阅读器/写作机,在平庸的TypeScript中. 表现得一模一样 上游承诺 `2cef9f4` (见 `UPSTREAM_COMMIT`: 数值相同,相同 错误, 字节相同的保存 .

**这是一个概念证明项目——谨慎使用.**

API在骆驼Case中使用了After Effect 的自有脚本名称(`comp.frameRate`, (中文(简体) ), `layer.transform.anchorPoint`, (中文(简体) ), `layer.threeDLayer`, (中文(简体) ), `group.property("ADBE Position")`和联署材料公约:设置为地图形状(`get`编号 :`set`编号 :`has`编号 : `size`),各团体有 `length`, (中文(简体) ), `console.log(layer)` 打印可读摘要. 文件保留着双胞胎的路径, 所以在 TS 文件的上游变化图 它触动。 Python语义 行为取决于(圆形,地板分出, `struct`, (中文(简体) ), `surrogateescape`,(...) 居住于 `src/pyrt/`规则: `RULEBOOK.md`。 。 。 .

## 状态

逆上游被钉住(CI运行这一切,包括Py-aep) 差别,每推一推:

-   测试套件:所有15 431项上游测试翻译为 `bun:test`;15,369通过, 62 跳过缺失的系统字体 / OCIO配置 / AE 偏好—— 与 CPython 3.12 (英语). (运行时间跳过报告作为包子计数的通过)
-   对所有644个上游抽样项目进行差别检查 (单位:千美元)`tools/diff/`:被解析的项目的每一个公共属性都是一样的,以及 25,427个确定性编辑通过公共设置提供相同的结果和 字节相同的保存文件 .
-   在节点、 Bun、浏览器和 工人们.
-   `tsc` 报告0出错 `strict` 在任何地方(图书馆、测试、工具)。 图书馆藏有16个 `any` 和54种说法,其中多数 在py -aep本身使用不受限制 `cast()`; 如果任意一个数增长, 闸门会失效 。 第26条 `TODO(port)` 标记名称 (fontkit/harfbuzzjs vs 字体Tools/uharfbuzz文本衡量标准, argparse 帮助 CLIs 中的文本,整数超过 2^53,没有 LZMA 解码器.

## 安装

```bash
bun add @bevyl-ai/ts-aep
```

```ts
import { parse } from "@bevyl-ai/ts-aep";

const app = parse("project.aep");
for (const comp of app.project.compositions) console.log(comp.name, comp.duration);
app.project.save("copy.aep");
```

## 使用

该库在Node 22.3+, Bun,浏览器和Cloudflare Workers中运行不变. 节点和 Bun 装入字体kit 和 yaml(文本参数、 OCIO 配置); 捆绑者和工人解决 `browser` 编号 : `workerd` 出口,进口它们 上前边. `parse` 选择路径或文件的字节; `project.save(path)` 走一条路。 全体 主机访问通过 `src/pyrt/host.ts`: 节点和邦使用自己的 `node:fs`, (中文(简体) ), `node:path` 财务报告和审定财务报表 `node:os` (通过) `process.getBuiltinModule`; 主机 没有它们,它们就能得到内存文件系统和POSIX路径.

项目解码为: `comp.layers` 将每一层从自己的层中建起 设置,层的属性(变形、效果、面具、文本、.)是 第一次读时解码。 只读取层属性的脚本 (名称,时间,标签,开关,来源)从不构建属性. 读取a 属性层没有(`source` 在摄像机上 把它放在它的 属性,用于构建它们;测试层的类型取而代之.

超越 py -aep 的 API : `@bevyl-ai/ts-aep/svg` 出口py-aep的公众 `svg` 模块(`readSvg`, (中文(简体) ), `buildShapeLayerContents`, (中文(简体) ), `parseTransform`(三); `project.addEffectDefinitions(efdg)` 进口效果定义 保存在另一个工程中, 所以 `addProperty` 可以增加这些影响; `FontObject.technology` 财务报告和审定财务报表 `designVector` 可写( CFF 字体需要) `CT_TYPE1_FONT`和 `TextDocument.fonts` 列出文档中的每个字体 登记册; `TextLayer.continuouslyRasterize` 设置崩溃切换 AE 脚本拒绝文本( 对未编辑文本的影响 ) 录像); `Property.arbitraryData` 读取和写入数据所保持的效果 除了一个参数(Hue/饱和的主人住在那里,而不是在他们的 滑动; `FeatherPoint.of` 建立面具羽毛点; `Shape.bounds` 这是 框中存储形状的分数. COS真实的 `{:.10g}` 写作时,必写出固定的分数, 后影响需要.

### 类型

儿童按匹配名称排列: `group.property("ADBE Position")` 是一个 `Property<number[]>` 财务报告和审定财务报表 `layer.property("ADBE Transform Group")` 一个团体。 这个 内置组的儿童(变形、文本、相机/光/材料) 选项、口罩、形状填充、中风和变换)也按其 属性名称, 如 py- aep :

```ts
const layer = comp.layers[0];
const position: number[] = layer.transform.position.value;
const text = comp.textLayers[0].text?.sourceText.value.text;
```

其属性名称取决于地层的儿童(`anchorPoint` 驾驶AV 层是相机的 `pointOfInterest`· ; `rotation` 变成 `zRotation` 在三维上 层)是用匹配名称到达的。 其他内在儿童 运行时属性名称, 未类型; 达到了第三方效果参数 与 `group.property("Display Name")`。 。 。 .

### 节点/ Bun

```ts
import * as aep from "@bevyl-ai/ts-aep";

const app = aep.parse("project.aep");
app.project.save("copy.aep");
```

### 错误

抛出的一切 `AepError`,作为四种类型之一:

| 类 | 掷出时 |
| --- | --- |
| `InvalidValueError` | 效果后值将拒绝, 或未解码的字节 |
| `NotFoundError` | 没有项目、财产、密钥或索引 |
| `UnsupportedError` | 文件、 层或属性类型不支持操作 |
| `FileSystemError` | 无法读取或写入文件 |

```ts
import { AepError, FileSystemError, parse } from "@bevyl-ai/ts-aep";

try {
  parse("missing.aep");
} catch (e) {
  if (e instanceof FileSystemError) console.log("cannot read it");
  else if (e instanceof AepError) console.log(e.name, e.message);
  else throw e;
}
```

糟糕的争论让JS自己的 `TypeError`。 。 。 .

### 浏览器和工人

构建捆绑,然后移动字节入出 `memfs` 通常的电话:

```bash
bun build src/py_aep/index.ts --target=browser --outdir=dist/browser
```

```ts
import * as py_aep from "./dist/browser/index.js";

py_aep.memfs.write("/in.aep", new Uint8Array(await (await fetch(url)).arrayBuffer()));
py_aep.parse("/in.aep").project.save("/out.aep");
const saved: Uint8Array = py_aep.memfs.read("/out.aep");
```

`memfs` 还有 `exists`, (中文(简体) ), `list`, (中文(简体) ), `remove` 财务报告和审定财务报表 `clear`。脚印、字体、电算中心 配置文件或 OCIO 配置项目仅在您写入时被找到 输入 `memfs` 在工程预期的路径上. `useMemoryFs()` 强迫 记忆后端中 `node:fs` 也存在; `fsBackend()` 报告 已激活.

主机提示 :

-   节点必须是22.3+(或20.16+):更老的节点没有 `process.getBuiltinModule`, (中文(简体) ), 所以图书馆悄悄地 回到了记忆中 真正的路径是 未发现.
    
-   文本重构形状与 harfbuzz (wasm). 在浏览器中服务 `node_modules/harfbuzzjs/hb.wasm` 在捆绑的旁边 `index.js`. 在何处 无法装入, 库仍然装入, 只塑造升起( 控制台) 显示一次终止命令.
    
-   Cloudflare工人拒绝编译取自字节的相片,所以塑造是 那里没有,其他东西都行 与 `nodejs_compat` 旗帜, `process.getBuiltinModule("node:fs")` 返回工人自己的虚拟 fs(只有) `/tmp` 可写, 每一份请求); 呼叫 `useMemoryFs()` 用于 `memfs` 换句话说 解析并保存为同步和 CPU 绑定:大型工程可以被击中 工人CPU时间限制.
    
-   没有宿主, `platform` 实值 `"browser"`,所以一个新项目的默认值 平台为macOS(如同任何非窗口主机), `tmpdir()` 实值 `/tmp`, (中文(简体) ), `homedir()` 实值 `/` 环境是空的.
    

烟雾检查: `bun tools/browser-smoke/run.ts [N]` 运行捆绑与 `process` 在 N 样本上隐藏( 记忆fs, POSIX 路径) 和检查保存 字节相同; `tools/browser-smoke/index.html` 在真实中做同样的 浏览器(文件中的指示); `tools/browser-smoke/workers-run.ts` 运行 同样的检查通过微型工地进行(见标题).

### 发展

```bash
bun install
tools/fetch-samples.sh   # upstream checkout + LFS samples (~240 MB)
bun test
```

## 许可证

麻省理工学院. 来源于 py-aep,版权(c)2023 Fortiche出品;参见: `LICENSE`。 。 。 .

## 释放

从 GitHub 动作中发布 npm 信任的出版版本( OIDC), 所以没有 npm 令牌存储在任何地方 :

1.  一次性, 在 npmjs.com 上: 包 `@bevyl-ai/ts-aep` \* 设置 \* 可信出版 \* GitHub 动作, 拥有者 `bevyl-ai`,仓库 `ts-aep`工作流程 `release.yml`。 。 。 . 如果 npm 需要软件包先存在, 请首先手动发布 (单位:千美元)`npm login`,则 `bun publish --access public`并添加可信赖的 之后出版商.
2.  弹出 `version` 内 `package.json`,然后承诺 `git tag v<version> && git push --tags`。 。 。 . `.github/workflows/release.yml` 运行测试 和包装的tar-ball烟雾 (单位:千美元)`tools/pack_smoke.sh`,则 `npm publish` 与出处.

## 常见问题

### @bevyl-ai/ts-aep 是什么？

1:1 TypeScript port of py-aep:在效果后读取并写入 Adobe \.aep 工程\(Node, Bun, 浏览器, 工人\)

### 如何安装 @bevyl-ai/ts-aep？

在项目目录运行 npm install @bevyl-ai/ts-aep，或使用 pnpm add / yarn add / bun add。

### @bevyl-ai/ts-aep 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @bevyl-ai/ts-aep 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @bevyl-ai/ts-aep 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.3。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bevyl-ai/ts-aep 可以商用吗？

@bevyl-ai/ts-aep 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @bevyl-ai/ts-aep 的下载量有多少？

根据 npm 官方下载统计，@bevyl-ai/ts-aep 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,813 次，日均约 127 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bevyl-ai/ts-aep 还在维护吗？

最新版本 0\.6\.0 发布于 2026/10/23（15 天前）；至今共发布 8 个版本，其中过去 12 个月发布了 8 个；首次发布于 2026/10/17。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

