# Auto_Tinify 更新日志

## 版本 2.0.6（PS/AE 双平台兼容）
- **重大更新**：同一份 `.jsx` 脚本支持 After Effects 和 Photoshop 双平台运行
- **环境检测**：
  - 新增 `isPhotoshop` / `isAfterEffects` 环境变量
  - 窗口标题末尾显示 `[PS]` / `[AE]` 环境标识
- **PS 兼容性修复**：
  - PS 窗口改用 `"dialog"` 模态窗口（palette 脚本结束后销毁）
  - `String.prototype.trim` polyfill（PS ExtendScript 缺失）
  - `Array.prototype.indexOf` polyfill（PS ExtendScript 缺失）
  - `system.callSystem` → PS 改用 `app.system()`
  - `${projectPath}` 路径获取：PS 用 `app.activeDocument.path`（未保存时 try-catch）
- **快捷键功能重映射**：
  - `Ctrl+Shift`：AE/PS 均支持 — 导出选中图层为 PNG 并压缩替换
  - `Alt`：仅 AE — 压缩项目中选中的图片素材文件（恢复原功能）
  - 按钮文本随快捷键动态切换：`开始压缩` / `导出图层并压缩` / `压缩选中素材`
- **PS 图层导出**：
  - ActionManager `targetLayers` + `executeActionGet(layerRef)` 获取多选图层
  - 逐个图层复制到新文档 → 导出 PNG 到导出目录 → Tinify 压缩替换
- **AE 图层导出**：
  - 创建临时合成 → 渲染队列渲染单帧 PNG → Tinify 压缩替换
  - 自动处理 AE 单帧渲染的 `00000` 后缀重命名
- **导出目录输入框**：
  - 在"开始压缩"按钮下方新增输入框（AE/PS 均显示）
  - 默认值 `images`，可自定义
  - 点击"导出目录:"标签读取当前选中图层，弹窗+日志显示
  - 悬浮提示显示待导出图层名称列表

## 版本 2.0.5（交互统一与压缩对比显示）
- **去掉"替换"按钮**：不再需要先压缩到临时文件夹再替换
- **统一交互逻辑**：所有压缩入口（开始压缩、选择文件、选择文件夹、Ctrl+Shift）统一行为
  - 点击后弹出 confirm 对话框：
    - **是**：直接替换原图（会二次确认）
    - **否**：压缩后添加 `_tiny` 后缀保存为副本（如 `logo.png` → `logo_tiny.png`）
- **去掉 Alt 键快捷键**：不再依赖 Alt 键触发替换，所有操作通过询问对话框完成
- **新增压缩对比显示**：
  - 所有压缩操作完成后，alert 弹窗显示：
    - 压缩前总大小
    - 压缩后总大小
    - 节省了：XXX KB/MB（XX.XX%）
  - 修复了直接替换原图时压缩前后对比数据不准确的问题（压缩前先保存原始文件大小）
- **新增函数**：
  - `addSuffixToFileName(file, suffix)`：给文件名添加后缀
  - `compressFolderWithSuffix(sourceFolder, suffix, apiKey)`：递归压缩文件夹并添加后缀保存
- **Ctrl+Shift 修复**：修复了压缩选中文件时输出到临时文件夹而没有替换或加后缀的问题
- **UI 布局调整**：
  - "开始压缩"按钮独占第一行（宽度 315px）
  - "选择文件"和"选择文件夹"在第二行
  - "API Key 设置"和"路径设置"在第三行
  - "日志"和"帮助"在第四行

## 版本 2.0.3（设置窗口拆分与配置存储优化）
- **设置窗口重大改版**：将统一设置窗口拆分为两个独立窗口
  - API Key 设置窗口：专门管理 API Key 的添加、删除、刷新
  - 路径配置窗口：专门管理路径模式的添加、更新、删除、测试
- **主面板按钮优化**：
  - 将原"设置"按钮拆分为两个独立按钮：
    - "⚙ API Key设置"：打开 API Key 管理窗口
    - "⚙ 路径设置"：打开路径配置窗口
  - 日志按钮调整到第三行，布局更清晰
- **路径配置UI优化**：
  - 删除了"名称:"、"路径模式:"、"解析路径:"三个文本标题
  - 界面更加简洁，所有信息通过下拉列表和列表框展示
  - 合并"测试路径"和"查看文件"按钮为"测试与查看"按钮
  - 一次操作同时测试路径并列出匹配的图片文件
- **中文文件名支持修复**：
  - 修复查看文件列表时中文文件名显示为URL编码的问题
  - 使用 `decodeURI()` 正确解码中文文件名
  - 添加异常处理，解码失败时使用原始文件名
- **配置文件存储优化**：
  - 统一使用 `auto_tinify_config.txt` 一个配置文件
  - API Key 配置保存密钥和剩余次数（格式：`key:xxx,yyy`）
  - 路径配置保存在同一个配置文件中（格式：`名称|路径模式`）
  - 配置文件格式统一，示例：
    ```
    key:your_api_key_here,495
    默认-输出文件夹|${projectPath}/输出
    自定义路径|D:/MyProject/images
    ```
  - 剩余次数持久化存储，跨脚本运行保持
  - 删除了不可靠的脚本缓存方案，改用配置文件存储
- **状态栏显示优化**：
  - 修改剩余次数显示格式：从"状态：剩余/总计=995/1000"改为"剩余 995/1000"
  - 添加当前路径信息：显示格式为"剩余 995/1000|路径：xxx"
  - 路径自动省略：路径超过30个字符时用"..."省略，保持界面简洁
  - 悬浮提示完整信息：鼠标悬浮在状态栏上显示完整的剩余次数和完整路径
  - 示例：`剩余 995/1000|路径：E:\工作\2026\202603\20260320 星球...`
- **窗口类型优化**：
  - 主窗口从模态对话框改为非模态面板（palette）
  - 允许在脚本运行的同时继续操作After Effects
  - 主窗口保持打开状态，可以随时执行压缩操作
  - 提升工作效率，无需关闭脚本即可编辑AE项目
- **路径配置功能**：
  - 下拉列表选择配置，列表仅显示不可编辑
  - 所有编辑操作通过对话框完成（添加/更新/删除）
  - 支持测试路径、查看文件、获取AI帮助Prompt
  - 路径模式语法：`${projectPath}` 变量代表项目路径

## 版本 2.0.2（多 API Key 支持与使用次数追踪）
- **新增功能**：支持多个 API Key 配置和管理
- API Key 管理功能：
  - 支持添加多个 API Key
  - 支持删除选中的 API Key
  - 显示当前配置的 API Key 数量
  - API Key 列表多选删除功能
  - 新增"获取 API Key"按钮，点击后在浏览器中打开注册页面
- API Key 轮换使用：
  - 压缩时自动轮换使用不同的 API Key
  - 避免单个 API Key 超出月度 500 次限制
  - 支持无限扩展 API Key 数量
- 剩余次数追踪：
  - 配置文件存储剩余次数（格式：`key,remaining`）
  - 压缩后自动更新 API Key 剩余次数
  - 主面板状态栏显示剩余次数/总次数（如：`剩余=495+500/1000`）
  - 设置对话框可点击"刷新次数"按钮查看每个 API Key 的剩余情况
  - API Key 列表显示每个 Key 的剩余次数（如：`aBcDeFgH...xYzW (剩余: 495/500)`）
  - 压缩日志同时显示使用次数和剩余次数
- 设置面板 UI 优化：
  - 精简界面，去掉冗长的提示文本
  - API Key 列表采用左右平分布局，左侧显示脱敏的 Key，右侧显示剩余次数
  - 增强脱敏处理（显示前12个字符+...+后6个字符）
  - 列表支持滚动，可查看大量 API Key
  - 按钮布局优化：[添加] [删除选中] [刷新次数] [获取 API Key] 同一行显示
  - 显示格式简化：只显示剩余次数，不再重复显示已用次数
- 配置文件格式更新：
  - 支持多行存储（每行一个 API Key）
  - 格式：`key,remaining`（记录 API Key 和剩余次数）
  - 向下兼容旧配置文件，自动转换使用次数为剩余次数
- Bug 修复：
  - 修复刷新次数功能（改用 `curl -i` 获取完整响应）
  - 修复日志面板为空的问题（日志内容全局变量）
  - 修复设置窗口无法再次打开的问题
  - 修复日志窗口无法再次打开的问题
  - 修复"获取 API Key"按钮跨平台兼容性问题
  - 添加详细的调试日志便于排查问题

## 版本 2.0.1（UI 重构）
- **UI 重大重构**：重新设计主界面布局，更加简洁直观
- 主界面只保留核心功能按钮：
  - 开始压缩
  - 替换
  - 设置（⚙ 图标）
  - 日志（📋 图标）
- 新增设置对话框：
  - 统一管理 API Key 设置和目录设置
  - 显示当前压缩目录
  - 支持更改目录和打开目录操作
- 日志功能优化：
  - 日志面板改为独立对话框
  - 点击"日志"按钮后弹出日志窗口
  - 支持清空日志和关闭窗口
- 按钮布局优化：
  - 采用两行布局，视觉更清晰
  - 添加按钮图标，提升识别度
  - 统一按钮尺寸，界面更整齐

## 版本 2.0（Tinify API 版本）
- **重大更新**：不再依赖外部 tiny.exe，直接使用 Tinify API 进行图片压缩
- 新增 API Key 配置功能：
  - API Key 自动保存到脚本旁边的 `auto_tinify_config.txt` 文件
  - 输入框失去焦点时自动保存
  - 下次打开脚本自动加载保存的 API Key
- 两种压缩模式：
  - **默认模式**：压缩到临时文件夹（`C:\Users\[用户名]\AppData\Local\Temp\auto_tinify_output`）
    - 压缩完成后需要点击"替换"按钮将文件复制到原目录
    - 适合需要预览或备份的场景
  - **Alt + 点击"开始压缩"**：直接替换原图
    - 压缩后立即覆盖原文件
    - 会弹出确认对话框防止误操作
    - 适合确定要替换的场景
- 恢复"替换"按钮：用于将临时文件夹中的压缩文件复制到原目录
- 使用 curl 命令调用 Tinify HTTPS API
- 支持显示压缩统计信息：
  - 原始文件大小 vs 压缩后大小
  - 压缩节省百分比
  - 本月已使用压缩次数
- 支持中文文件名：通过临时文件处理避免 curl 路径问题
- 优化错误处理和日志记录
- 支持的图片格式：jpg、jpeg、png、webp

## 版本 1.4
- 新增版本号显示
- 将窗口类型从 `palette` 改为 `dialog`（更正式的对话框）
- 重新设计界面布局：
  - 使用 panel 分组（控制面板、日志面板）
  - 新增进度条（0-100%）
  - 新增状态文本实时显示
  - 为路径按钮添加帮助提示
- 优化文件复制过程：每处理10个文件更新一次UI
- 修复 start 命令参数（增加空的标题参数）
- 所有操作都有进度条和状态文本反馈

## 版本 1.2
- 新增日志显示面板（可滚动的多行文本框）
- 新增"刷新日志"按钮
- 添加 `addLog()` 函数记录所有操作过程
- 增强错误处理和日志记录
- 使用 `start` 命令让 tiny.exe 在新进程启动（不阻塞脚本）
- 优化 UI 布局，提升用户体验

## 版本 1.1
- 修复 `folderPath` 初始化问题（当 `useOutputFolder=0` 时正确使用 Folder 对象）
- `copyFolder` 函数改为返回文件数量，不再弹窗显示
- 开始压缩时同时清理 `tempSourceFolder` 和 `outputFolder`
- 优化流程：当没有复制文件时提前退出，避免执行后续操作

## 版本 1.0（原始版本）
- 基础功能实现：
  - 三个按钮：开始压缩、替换、设置目录
  - 复制文件时弹窗显示复制的文件列表
  - 基本的文件复制和清理功能
- 支持 jpg、jpeg、png、gif、bmp、tiff 图片格式
- 调用外部 tiny.exe 进行图片压缩

---

## 功能说明

**开始压缩**：
- **点击**：弹出询问对话框，选择直接替换原图或添加 `_tiny` 后缀保存副本

**选择文件**：
- 选择一个或多个图片文件，同样询问替换原图或添加后缀保存副本

**选择文件夹**：
- 选择一个文件夹递归压缩内部图片，同样询问替换原图或添加后缀保存副本

**Ctrl+Shift + 点击**：
- AE/PS 均支持：导出选中图层为 PNG 到导出目录，然后压缩替换

**Alt + 点击（仅 AE）**：
- 压缩 AE 项目面板或合成面板中选中的图片素材文件

**导出目录输入框**：
- 修改导出目录名称（默认 `images`）
- 点击标签读取当前选中图层

**API Key 设置**：打开 API Key 管理窗口
- 添加 API Key
- 删除选中的 API Key
- 刷新 API Key 剩余次数
- 获取 API Key（跳转到 Tinify 官网）

**路径设置**：打开路径配置窗口
- 下拉列表选择当前使用的路径配置
- 添加新的路径配置
- 更新现有的路径配置
- 删除路径配置
- 测试与查看：测试路径并列出匹配的图片文件
- 帮助：查看给 AI 的 Prompt

**日志**：打开日志查看窗口
- 查看操作日志
- 清空日志

---

## 配置文件说明

**auto_tinify_config.txt**：主配置文件（唯一配置文件）
- API Key 配置，包含密钥和剩余次数（格式：`key:xxx,yyy`）
- 路径配置（格式：`名称|路径模式`）
- 示例：
  ```
  key:your_api_key_here,495
  默认-输出文件夹|${projectPath}/输出
  自定义路径|D:/MyProject/images
  ```
- 剩余次数持久化存储，跨脚本运行保持

---

## 使用环境
- **v2.0.6**：
  - 操作系统：Windows / macOS
  - 支持宿主：After Effects CC 2020+ / Photoshop CC 2020+
  - 依赖：curl（系统内置）、Tinify API Key
  - 优势：PS/AE 双平台兼容，图层导出压缩，快捷键动态切换
  - 配置文件：`auto_tinify_config.txt`

- **v2.0.5**：
  - 操作系统：Windows
  - 依赖：curl（Windows 10+ 内置）、Tinify API Key
  - 优势：交互统一，所有压缩入口均询问替换或加后缀，完成后显示压缩对比数据
  - 配置文件：`auto_tinify_config.txt`（自动生成，存储 API Key、剩余次数和路径配置）

- **v2.0.3**：
  - 操作系统：Windows
  - 依赖：curl（Windows 10+ 内置）、Tinify API Key
  - 优势：设置窗口分离，配置文件统一，剩余次数持久化存储
  - 配置文件：`auto_tinify_config.txt`（自动生成，存储 API Key、剩余次数和路径配置）

- **v2.0.2**：
  - 操作系统：Windows
  - 依赖：curl（Windows 10+ 内置）、Tinify API Key
  - 优势：支持多 API Key 轮换，追踪剩余次数

- **v2.0.1**：
  - 操作系统：Windows
  - 依赖：curl（Windows 10+ 内置）、Tinify API Key
  - 优势：无需额外安装 tiny.exe，使用官方 API，UI 更简洁

- **v1.x**：
  - 操作系统：Windows
  - 依赖：需要安装 tinify.exe（位于 D:/auto_tiny/ 目录）