Files

579 lines
18 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎬 ComfyUI AE Animation
## 🎥 演示视频
<div align="center">
[![演示视频 - 点击观看](https://img.shields.io/badge/🎬-B站观看演示视频-FF6699?style=for-the-badge&logo=bilibili&logoColor=white)](https://www.bilibili.com/video/BV1yW28B3ETN)
**👉 [点击这里观看完整演示视频](https://www.bilibili.com/video/BV1yW28B3ETN)**
</div>
---
> ⚠️ **预览版说明**:本项目目前为预览版本,功能正在持续开发中。后续会持续增加新功能和优化体验,欢迎反馈和建议!
---
## 🙏 特别鸣谢
特别感谢 [**Terry Jia (jtydhr88)**](https://github.com/jtydhr88) 在项目开发过程中给予的宝贵帮助和关键思路指导!
---
## 📝 更新日志
### 🚀 V3.0 大版本更新(2025-12-09)
#### 🎮 新增 Camera图层交互
- ✅ **Camera图层可选择**:选中Camera后,鼠标/键盘交互直接控制摄像机
- ✅ **统一交互逻辑**:Camera与普通图层操作一致(滚轮缩放/旋转方向键移动)
- ✅ **3D旋转后端同步**:图层rotationX/Y/Z正确输出到最终渲染
- ✅ **摄像机Z轴预览**:推拉效果实时预览,前后端数据对齐
- ✅ **前景跟随摄像机**:camera-only模式下前景正确跟随摄像机XY/旋转
#### 🖼️ 新增 GPU渲染引擎
- ✅ **WebGPU加速**:全新GPU渲染管线,大幅提升渲染性能
- ✅ **全景背景渲染**:独立Buffer管理,支持纹理重复
- ✅ **实时预览同步**:GPU预览与后端输出完全一致
#### 🎥 新增 三维摄像机系统
- ✅ **完整摄像机参数**:`cam_pos_x/y/z`、`cam_yaw/pitch/roll`、`cam_fov`
- ✅ **透视投影算法**:根据图层深度动态计算旋转效果
- ✅ **GPU/Canvas统一**:两种渲染器行为完全一致
- 📚 **使用指南**:[三维摄像机使用指南](docs/3D_CAMERA_GUIDE.md)
#### 🔧 架构重构
- ✅ **Vue 3重写**:使用Composition API完全重构前端
- ✅ **组件化架构**:提高可维护性和可扩展性
- ✅ **性能优化**:渲染性能和交互响应大幅提升
---
## 📋 项目简介
**ComfyUI AE Animation** 是一个单节点版的 After Effects 风格时间轴编辑器,为 ComfyUI 提供强大的动画制作能力。
### ✨ 核心功能
- 🎨 **多图层管理**:支持前景/背景图层管理,灵活组织动画元素
- 🎯 **关键帧动画**:位置、缩放、旋转、透明度等属性关键帧动画
- 🎥 **三维摄像机**:完整的 3D 摄像机系统,支持位置、旋转、FOV 控制,创建真实的透视效果
- 🖌️ **Mask 编辑**:画笔工具创建自定义遮罩,精确控制图层显示区域
- 📍 **路径动画**:贝塞尔路径工具创建平滑的运动轨迹
- ✂️ **AI Extract**:智能背景提取,自动创建前景图层
- 🎞️ **实时预览**:Canvas 实时渲染预览,所见即所得
- ⚙️ **参数控制**:UI 内直接调整分辨率、FPS、总帧数等项目参数
---
## 🚀 快速开始
### 安装
#### 方式一:ComfyUI Manager(推荐)
1. 打开 ComfyUI Manager
2. 在搜索框中输入 `ComfyUI-AE-Animation` 或 `AE Animation`
3. 点击安装
4. 重启 ComfyUI
#### 方式二:Git Clone
```bash
cd ComfyUI/custom_nodes
git clone https://github.com/wallen0322/ComfyUI-AE-Animation.git
# 重启 ComfyUI
```
### 首次使用
1. **启动节点**
- 重启 ComfyUI 后,右上角会出现 **AE Timeline** 按钮
- 点击按钮会自动创建并选中 `AE Animation` 节点,并打开时间轴 UI
- 或者直接在节点面板添加 `AE Animation` 节点,然后点击按钮打开 UI
2. **设置项目参数**
- 在 UI 顶部直接输入 **Width**、**Height**、**FPS**、**Frames**
- 点击 **Save** 按钮将参数同步回节点 widgets
- 建议分辨率:1920×1080、1280×720 等标准尺寸
3. **添加图层**
- 点击 **+FG** 添加前景图层(通过文件选择器选择本地图片)
- 点击 **+BG** 添加背景图层
- 或者通过节点输入端连接图像(自动识别为图层)
4. **开始创作**
- 选择图层,调整 X、Y、Scale、Rotation、Opacity 等属性
- 在时间轴上添加关键帧,创建动画
- 使用工具进行 Mask、路径、Extract 等操作
---
## 📖 详细使用说明
### 🎛️ 界面布局
#### 顶部工具栏
- **项目操作区**(左侧)
- `Save Proj`:保存工程文件(JSON 格式),包含所有图层、关键帧、Mask 等数据
- `Load Proj`:加载之前保存的工程文件
- `Clear Cache`:清理未使用图层的图片缓存,释放内存
- **运行控制区**(中间)
- `Refresh`:刷新界面
- `▶ Run Node`:运行节点,生成动画序列
- `保存到节点`:将当前设置保存到节点 widgets
- **图层操作区**(右侧)
- `+FG`:添加前景图层
- `+BG`:添加背景图层
- `✕`:关闭时间轴 UI
#### 左侧属性面板(Inspector)
**图层信息卡片**
- 显示当前选中图层的名称和类型(FG/BG)
- 显示图层资源状态(Image Asset / Empty Asset)
**变换属性(Transform)**
- **X / Y**:图层位置坐标(相对于画布中心)
- **Scale**:缩放比例(1.0 = 100%,可调整到 0.1~10.0)
- **Rotate**:旋转角度(0~360 度)
- **Opacity**:透明度滑块(0~100%)
**工具区(Tools)**
- **Mask**:启用 Mask 画笔模式,在画布上涂抹创建遮罩
- **Erase**:启用擦除模式,擦除 Mask 区域
- **Path**:创建贝塞尔路径,生成路径动画
- **Extract**:背景提取工具,从背景中提取区域创建新前景层
**画笔设置**
- **Mask Brush**:Mask 画笔大小(1~100px)
- **Extract Brush**:Extract 画笔大小(1~100px)
**应用/清除**
- `Apply`:应用当前工具的效果
- `Clear`:清除当前工具的效果
#### 中间画布区域(Viewport)
**顶部工具栏**
- 显示项目信息:`宽度×高度 @ 帧率fps`
- 画布适配模式:
- `Fit`:保持宽高比,完整显示(可能有黑边)
- `Fill`:保持宽高比,填充画布(可能裁切)
- `Stretch`:拉伸填充(可能变形)
- 显示总时长:`Duration 00:00:XX`
**画布区域**
- 实时预览当前时间点的画面
- 支持鼠标拖拽移动图层
- 支持滚轮缩放图层
- 显示网格背景,方便对齐
#### 底部时间轴(Timeline)
**顶部控制栏**
- **关键帧操作**(左侧)
- `+ Key`:在当前时间点添加关键帧
- `Del Key`:删除当前时间点的关键帧
- `Clear All`:清除当前图层所有关键帧
- **播放控制**(中间)
- 时间显示:`00:00:XX`(当前播放时间)
- `⏮`:跳转到开始(时间 = 0)
- `▶ / ❚❚`:播放/暂停(空格键快捷键)
- 时间滑块:拖拽调整当前时间
- **缩放控制**(右侧)
- `Zoom`:时间轴缩放滑块,调整时间轴显示范围
**图层列表**(左侧)
- 显示所有图层,按顺序排列
- 点击图层名称选中图层
- `▸ / ▾`:展开/折叠图层详细信息
- `👁`:显示/隐藏图层
- `🔒`:锁定/解锁图层
- 图层类型标识:`B`(Background)或 `F`(Foreground)
**时间轨道**(右侧)
- 显示时间标尺(0s, 1s, 2s...)
- 每个图层对应一条轨道
- 轨道上的彩色条表示图层在时间轴上的存在范围
- 关键帧标记:`◆` 菱形标记表示关键帧位置
- 播放头:红色竖线表示当前播放时间
---
### 🎨 详细操作指南
#### 1. 画布交互操作
**基础图层操作**
| 操作 | 效果 |
|------|------|
| 鼠标左键拖拽 | 移动图层位置(X/Y) |
| 方向键 ←→↑↓ | 微调图层位置(步进 1px) |
| Shift + 方向键 | 快速移动(步进 10px) |
| Ctrl + ↑↓ | 调整图层 Z 轴深度(步进 10) |
| R 键 | 重置图层变换(位置、缩放、旋转、透明度) |
**滚轮变换操作**(需选中图层)
| 操作 | 效果 |
|------|------|
| 滚轮 | 缩放图层(Scale) |
| Shift + 滚轮 | X 轴旋转(RotationX,3D 翻转效果) |
| Ctrl + 滚轮 | Y 轴旋转(RotationY,3D 翻转效果) |
| Alt + 滚轮 | Z 轴旋转(RotationZ,平面旋转) |
| Ctrl + Shift + 滚轮 | 调整 Z 轴位置(深度) |
**3D 摄像机模式**(启用 Camera,未启用 Pano)
| 操作 | 效果 |
|------|------|
| 左键拖拽(无选中图层) | 摄像机轨道旋转(Yaw/Pitch) |
| Shift + 左键拖拽 | 摄像机滚转(Roll) |
| 中键拖拽 | 摄像机平移(Pos X/Y) |
| 右键拖拽 | 摄像机推拉(Pos Z) |
| 滚轮(无选中图层) | 摄像机推拉(Pos Z) |
**全景模式**(启用 Pano)
| 操作 | 效果 |
|------|------|
| 中键/右键拖拽 | 全景旋转(Yaw/Pitch) |
| 左键拖拽(无选中图层或 Alt) | 平移偏移(Offset X/Y) |
| 滚轮(无选中图层) | 调整视野角度(FOV) |
**工具模式操作**(Mask/Extract)
| 操作 | 效果 |
|------|------|
| 左键拖拽 | 绘制区域 |
| Shift + 左键 | 擦除区域 |
| 右键拖拽 | 擦除区域 |
| Alt + 左键 | 擦除区域 |
#### 2. 图层管理
**添加图层**
- 点击顶部 `+FG` 或 `+BG` 按钮
- 在文件选择器中选择图片文件
- 图片会自动压缩到项目分辨率,优化性能
**选择图层**
- 在时间轴左侧图层列表中点击图层名称
- 或使用下拉菜单选择图层
- 选中后,左侧属性面板会显示该图层的属性
**调整图层属性**
- 在左侧属性面板的 Transform 区域直接输入数值
- 或在画布上直接拖拽图层(调整 X、Y)
- 使用滚轮缩放图层(调整 Scale)
- 使用修饰键 + 滚轮调整旋转(见上方交互表格)
**图层排序**
- 在时间轴图层列表中使用 `▲` / `▼` 按钮调整图层顺序
- 图层顺序影响渲染顺序(上层覆盖下层)
**删除图层**
- 在图层列表中点击删除按钮(如果可用)
- 或通过节点输入端断开连接
#### 3. 关键帧动画
**添加关键帧**
1. 在时间轴上拖拽播放头到目标时间点
2. 选择要动画的图层
3. 调整图层属性(X、Y、Scale、Rotate、Opacity)
4. 点击 `+ Key` 按钮添加关键帧
5. 重复步骤 1-4,在不同时间点添加关键帧
**编辑关键帧**
- 点击时间轴上的关键帧标记(◆)选中关键帧
- 调整图层属性,关键帧会自动更新
- 或直接拖拽关键帧标记调整时间位置
**删除关键帧**
- 点击时间轴上的关键帧标记
- 点击 `Del Key` 按钮删除
- 或点击 `Clear All` 清除所有关键帧
**播放预览**
- 点击 `▶` 按钮开始播放
- 点击 `❚❚` 暂停播放
- 使用空格键快速播放/暂停
- 拖拽时间滑块手动调整时间
#### 4. Mask 遮罩功能
**创建 Mask**
1. 选择前景图层
2. 点击 `Mask` 工具按钮
3. 调整 `Mask Brush` 画笔大小
4. 在画布上涂抹要遮罩的区域
- 白色区域:不透明(显示)
- 黑色区域:透明(隐藏)
5. 点击 `Apply` 应用 Mask
**编辑 Mask**
- 继续涂抹添加遮罩区域
- 按住 `Shift` 键或右键擦除遮罩区域
- 调整画笔大小适应不同区域
**清除 Mask**
- 点击 `Clear` 按钮清除当前图层的 Mask
#### 5. 路径动画
**创建路径**
1. 选择要动画的图层
2. 点击 `Path` 工具按钮
3. 在画布上依次点击 4 个点:
- 起点
- 控制点 1
- 控制点 2
- 终点
4. 拖动控制点调整路径形状
5. 点击 `Apply` 生成路径关键帧动画
**编辑路径**
- 拖动路径上的控制点调整形状
- 路径会自动更新关键帧
#### 6. Extract 背景提取
**提取背景区域**
1. 确保已加载背景图层
2. 点击 `Extract` 工具按钮
3. 调整 `Extract Brush` 画笔大小
4. 在背景上涂抹要提取的区域
- 按住 `Shift` 键或右键擦除错误涂抹
5. 点击 `Apply` 应用提取
**提取效果**
- 背景的选中区域会自动应用模糊效果
- 选中的内容会创建为新的前景图层(命名为 `extracted_X`)
- 新图层可以独立调整位置、缩放、旋转等属性
- 可以添加关键帧实现动画效果
- 支持多次提取创建多个图层
**应用场景**
- 人物抠图后对原背景进行背景虚化
- 提取背景的某个元素单独动画
- 创建景深效果(前景清晰,背景模糊)
#### 7. 三维摄像机(新功能)
**启用摄像机**
1. 在项目设置面板中找到 "🎥 3D 摄像机" 部分
2. 勾选 "启用" 复选框
3. 摄像机参数立即生效
**摄像机参数**
- **位置**
- X:水平位置(左右移动)
- Y:垂直位置(上下移动)
- Z (距离):摄像机与场景的距离(默认 1000)
- **旋转**
- Yaw (Y轴):左右旋转(水平旋转)
- Pitch (X轴):上下旋转(俯仰)
- Roll (Z轴):滚转(画面倾斜)
- **投影**
- FOV:视野角度(1°-179°,默认 90°)
**创建 3D 效果**
1. 为不同图层设置不同的 Z 值
- 前景图层:Z = -200 到 200
- 中景图层:Z = 0
- 背景图层:Z = 200 到 500
2. 调整摄像机旋转参数观察透视效果
3. 添加关键帧创建摄像机动画
**应用场景**
- 视差滚动效果
- 摄像机推拉镜头
- 环绕旋转动画
- 景深效果
📚 **详细指南**:查看 [三维摄像机使用指南](docs/3D_CAMERA_GUIDE.md)
⚠️ **预览说明**:
- UI预览使用2D近似,仅供参考
- 最终渲染使用完整3D透视投影
- 全景模式需要启用摄像机
- 详见 [3D预览限制说明](docs/3D_PREVIEW_LIMITATIONS.md)
#### 8. 画布操作
**缩放画布**
- 使用右上角的 `Zoom` 滑块(25%~200%)
- 适合处理竖屏分辨率,避免裁切
**适配模式**
- `Fit`:保持宽高比,完整显示(推荐用于预览)
- `Fill`:保持宽高比,填充画布(推荐用于导出)
- `Stretch`:拉伸填充(可能变形,不推荐)
**拖拽图层**
- 在画布上直接拖拽图层调整位置
- 实时更新 X、Y 属性值
**缩放图层**
- 使用鼠标滚轮缩放图层
- 实时更新 Scale 属性值
---
## 🔧 节点说明
### AE Animation 节点
**输入参数**(可在 UI 顶部调节,同步回节点)
- `width`:项目宽度(像素)
- `height`:项目高度(像素)
- `fps`:帧率(1~120)
- `total_frames`:总帧数
**隐藏参数**(UI 内部使用,保留但不显示)
- `mask_expansion`:Mask 扩展/收缩(-10~10)
- `mask_feather`:Mask 羽化(0~20)
- `layers_keyframes`:图层和关键帧数据(JSON)
- `start_frame`:开始帧
- `end_frame`:结束帧
**输入连接**
- `background_image`:背景图片(可选)
- `foreground_images`:前景图片(可选,支持批量输入)
**输出**
- `frames`:渲染的图像序列(IMAGE 类型)
- `mask_frames`:前景遮罩序列(MASK 类型)
---
## 💾 数据管理
### 保存工程
- 点击 `Save Proj` 按钮
- 选择保存位置,输入文件名
- 工程文件包含:
- 所有图层信息(名称、类型、属性)
- 所有关键帧数据
- Mask 数据
- 路径数据
- Extract 图层数据
- 项目参数(分辨率、FPS、总帧数)
### 加载工程
- 点击 `Load Proj` 按钮
- 选择之前保存的工程文件
- 所有数据会自动恢复
### 保存到节点
- 点击 `保存到节点` 按钮
- 当前设置会写回节点 widgets
- 工作流保存后,重新加载会恢复节点状态
---
## ⚡ 性能优化
### 自动优化
- **图片压缩**:导入的图片自动压缩到项目分辨率
- **懒加载**:图片按需加载,避免浏览器崩溃
- **预览限制**:预览画布最大 1920×1080,大分辨率项目保持流畅
### 手动优化
- **清理缓存**:点击 `Clear Cache` 释放未使用图层的图片内存
- **减少图层数量**:删除不需要的图层
- **降低预览分辨率**:在 UI 中设置较小的分辨率进行预览
---
## ⌨️ 快捷键速查
| 快捷键 | 功能 |
|--------|------|
| 空格键 | 播放/暂停动画 |
| 方向键 | 移动图层位置 |
| Shift + 方向键 | 快速移动(10px) |
| Ctrl + ↑↓ | 调整 Z 轴深度 |
| 滚轮 | 缩放图层 |
| Shift + 滚轮 | X 轴旋转 |
| Ctrl + 滚轮 | Y 轴旋转 |
| Alt + 滚轮 | Z 轴旋转 |
| R 键 | 重置图层变换 |
| Delete/Backspace | 删除图层 |
> 📖 完整交互操作说明请参考 [详细操作指南 - 画布交互操作](#1-画布交互操作)
---
## 🐛 已知问题与注意事项
### 注意事项
1. **项目尺寸**:建议在 UI 内调整分辨率,预览限制 1920×1080,导出使用实际分辨率
2. **图层数量**:前景图层数量 = 节点输入的前景图片 + Extract 创建的图层 + 本地导入图层
3. **Mask 分辨率**:Mask 会自动缩放到图层原始尺寸
4. **Extract 图层**:创建后会自动缩放到项目尺寸,scale=1 即为全屏显示
5. **内存管理**:大量图层时使用清理缓存功能释放内存
6. **外部图层**:通过节点输入口连接的 foreground_images 会自动显示在 UI 中
### 预览版限制
- 部分功能可能仍在开发中
- UI 和交互可能会持续优化
- 性能优化会持续改进
- 欢迎反馈问题和建议
---
## 🛠️ 开发/构建
### 前端开发
前端位于 `frontend/` 目录,使用 Vue 3 + Vite 构建:
```bash
cd frontend
npm install
npm run dev # 开发模式
npm run build # 构建生产版本
```
构建产物输出到 `js/vue-dist/` 目录。
### 项目结构
```
ComfyUI-AE-Animation/
├── frontend/ # Vue 3 前端源码
│ ├── src/
│ │ ├── TimelineApp.vue # 主应用组件
│ │ └── components/ # 子组件
│ └── package.json
├── js/
│ └── vue-dist/ # 构建产物(已编译)
├── ae_animation_core.py # 核心节点逻辑
└── __init__.py # ComfyUI 节点注册
```
静态目录 `WEB_DIRECTORY=./js`,前端脚本/样式通过 `/extensions/ComfyUI-AE-Animation/vue-dist/...` 提供。
---
## 📄 许可证
Apache License 2.0
## 👤 作者
wallen0322
## 🤝 贡献
欢迎提交 Issue 和 Pull Request!
---
**享受动效创作的乐趣!** 🎬✨