Skip to content

Releases

启幕 v2.0.2(图标换成官方 Material Symbols)

Choose a tag to compare

@Baimacao Baimacao released this 12 Oct 10:55

启幕 v2.0.2

修复 PC 端图标。安卓端功能无改动,本版主要是把图标整体换成官方图标集。


问题:右上角图标很奇怪

反馈很准确。实测发现两个图标路径本身就是坏的数据:

图标 问题
「切换明暗主题」 路径画出来的不是太阳,而是一个歪扭的锯齿星形 —— 该路径缺少规范尖角星形的对称性
「退出程序」的 × 手改过的叉号,左右不对称(4.6/6.4 与 6.4/4.6 的镜像关系错位)

更根本的问题是两套图标体系混用:一部分是标准 Material 形状,一部分是手改过的路径,视觉重量不统一。

修法:整体换成官方 Material Symbols Outlined

按你的建议采用官方图标库。数据来自 npm 包 @material-symbols/svg-400(官方 Material Symbols,outlined 变体),
只提取 path 数据内嵌进 HTML —— 项目仍是零运行时依赖。

30 个通用图标全部替换,覆盖:appbar、卡片标题、特性格、拖放区、欢迎页、完成页、消息提示。

位置 图标
右上角 help(教程)、close(退出)
卡片 desktop_windows、crop_free、schedule、sync_alt、grid_view、movie_edit、folder、view_column、movie
操作 split、play_arrow、chevron_right、check、upload、layers
状态 info、warning、check_circle、verified_user、power_settings_new

保留品牌 logo 不动 —— 它是「启幕」的标识,必须与安卓应用图标同形,不属于通用图标体系。

顺带移除了一个失效功能

「切换明暗主题」按钮实际已经无效:applyTheme() 会设置 data-theme 属性,
但瑞士风格改成单主题后,CSS 里的 :root[data-theme="light"] 规则已被删除(实测 grep 为零),
所以点击它没有任何视觉变化。

已连同按钮、applyTheme()、state.theme 持久化一并删除 —— 而不是留一个无效果的控件。


验证情况

套件 结果
PC 后端端到端 109 / 109
PC 界面全流程 58 / 58,控制台零错误
PC 动效 15 / 15
安卓 APK 静态 114 / 114(新增 9 项图标/死代码断言)
安卓包解析逻辑 31 / 31
安卓制作核心 63 / 63

断言总计 390 项,0 失败。

图标改动做了浏览器实测(不是只看代码):放大到 96px 逐一目视确认 —— 问号、叉号、上传箭头
形状均正确、笔宽均匀;同时断言统计确认 viewBox="0 0 24 24" 只剩品牌 logo 一处。

新增断言防止回退,包括:官方图标数 ≥28、旧 viewBox 仅剩 1 处、appbar 只允许 2 个按钮、
旧的坏路径不得再出现(锯齿星形与不对称叉号各一条)。

⚠ 未能验证

本机无 adb、无真机,安卓端实际显示未经肉眼确认(本版安卓端无功能改动)。


下载

文件 说明
BootAnimForge-2.0.2-portable.zip PC 端(Node + ffmpeg)+ 安卓端 APK
BootAnimForge-Android-2.0.2-debug.apk 只要安卓端

启幕 v2.0.1(修复安卓端目标串味与循环设置)

Choose a tag to compare

@Baimacao Baimacao released this 12 Oct 10:34

启幕 v2.0.1

修复两个安卓端缺陷。PC 端无改动。


1. 选关机动画后,二级功能仍是开机动画相关

现象:主界面切到「关机动画」后,制作卡片、安装卡片、按钮文字、文件选择器标题仍写着"开机动画 / bootanimation.zip"。
更严重的是:备份也串了。

根因(实测):这些字符串是硬编码写死的,共 8 处,完全没有跟随当前选中的目标:

位置 原内容
制作卡片标题与说明 "制作开机动画"、"做成 bootanimation.zip"
安装卡片标题与说明 "安装开机动画"、"选一个 bootanimation.zip"
按钮文字(3 处) "选择 bootanimation.zip"
文件选择器标题 "选择 bootanimation.zip"
落盘暂存文件名 bootanimation.zip

修法:新增集中的 refreshTargetText(),所有目标相关文案改成由 AnimTarget.label() / AnimTarget.fileName() 动态生成;
切换目标时就地改写,不再重建界面。今后新增文案也走这里,避免再次写死。

顺带修掉一个更危险的问题:备份互相覆盖

BackupManager 原先把开机与关机的备份放在同一个目录,且共用同一个 origin-first.zip。
后果是:关机动画的"首次备份"会覆盖掉开机动画的"首次备份" —— 一旦开机动画被替换,就再也回不到出厂状态。

同时 rotate() 只清理 bootanimation- 前缀,关机备份永远不会被轮转删除(无限增长);
list() 也不过过滤,会把关机的备份列给开机。

修法:备份目录按目标分开(backup/boot/ 与 backup/shutdown/),文件名前缀跟随目标,
list() / rotate() 都接收 target。两者彻底隔离。


2. 安卓端无法设置循环部分

现象:安卓端只能"整段无限循环",改不了播放次数,也没有段间暂停。

根因(实测):CreatorActivity 只设置了 o.partType,从未设置 o.parts ——
而循环次数正是通过 Creator.Options.parts 传入的。底层 Creator.plan() 一直支持次数与暂停,只是 UI 从未暴露。

修法:新增「3b · 循环部分」卡片:

  • 预设按钮:无限循环 / 播 1 遍 / 播 2 遍 / 播 3 遍
  • 「自定义次数与段间暂停」:可填任意次数(0 = 无限循环)与暂停帧数
  • 实时显示「一遍 N 帧」「共约 M 帧(X 秒)」的预估

切换目标时自动给合理默认:开机 → 无限循环;关机 → 播 1 遍(配合"必须播完"类型,避免还没播完就断电)。

顺带发现并修复:Creator 写 desc.txt 时暂停字段被写死成 0,现已接上真实值。
暂停单位是帧不是秒(AOSP desc.txt 规范如此),UI 里有说明。


验证情况

套件 结果
PC 后端端到端 109 / 109
PC 界面全流程 58 / 58
PC 动效 15 / 15
安卓 APK 静态 105 / 105(新增 17 项"目标感知"断言)
安卓包解析逻辑 31 / 31
安卓制作核心 63 / 63(新增 7 项循环断言)

断言总计 381 项,0 失败。

新增的断言专门防回归:

  • MainActivity 代码中不得再出现硬编码的 "选择 bootanimation.zip" / "制作开机动画" / 落盘名
  • 必须存在 refreshTargetText() 且在切换后调用
  • BackupManager 必须按目标分目录、文件名前缀跟随目标、backup/list 必须接收 target
  • CreatorActivity 必须设置 o.parts(原先完全没设就是本缺陷的根因)
  • desc.txt 必须写出真实 pause 而非写死 0

⚠ 未能验证

本机无 adb、无真机,安卓端实际显示与交互效果未经肉眼确认。已验证的是:编译通过、静态断言通过、循环逻辑在 PC 上真跑(p 3 15 part0 正确写出)。


下载

文件 说明
BootAnimForge-2.0.1-portable.zip PC 端(Node + ffmpeg)+ 安卓端 APK
BootAnimForge-Android-2.0.1-debug.apk 只要安卓端

从 v2.0.0 升级

安卓端用同一调试密钥签名,可直接覆盖安装。已存在的备份不会丢失(旧备份在 backup/ 根下,新备份进 backup/boot/ 与 backup/shutdown/;旧的那份仍可用文件管理器手动取用)。

启幕 v2.0.0(瑞士国际主义风格改版)

Choose a tag to compare

@Baimacao Baimacao released this 10 Oct 10:35

启幕 v2.0.0

界面全面改版:Material Design 3 → 瑞士国际主义风格(Swiss / International Typographic Style)。

这是一次破坏性的视觉变更,因此升主版本号。功能与 v1.4.0 一致(开机/关机动画、双端制作与刷入、取用区间、取消、预览),本版只改视觉与交互质感。


1. 设计语言

维度 v1.4.0(MD3 深色) v2.0.0(瑞士风)
配色 深藏青 + 20 余色 三色平涂:黑 #1A1A1A / 米白 #F5F2ED / 强调红 #DA291C
圆角 55 处 全部 0(按钮保留小圆角以表达可点性)
阴影 13 处 + 四级高度 全部移除,层级改由 1px 细线承担
渐变 9 处 装饰性 5 处删除;功能性 3 处保留(进度条/刻度/滑杆)
对齐 5 处居中 一律左对齐(编号圆点等功能性元素除外)
字体 Segoe UI Inter 优先 + 雅黑兑中
字重 400/500/600/700 混用 统一体系:正文 --fw-body、强调 700
区块标识 无 01–08 编号 + 小号大写标签
间距 4px 基数 8px 基数,12 栏网格

层级只靠透明度、间距、字号、线宽表达,不引入第二强调色 —— 状态色(成功/警告/错误)也受三色约束,靠透明度区分强度。

2. 动效

运动系统分两条曲线,各司其职:

曲线 值 用途
--ease-elastic cubic-bezier(.34, 1.56, .64, 1) 仅形变(transform/scale)—— overshoot 提供重量感
--ease-emphasized cubic-bezier(.2, 0, 0, 1) 颜色/透明度/视图转场 —— 无 overshoot

为什么弹性曲线不用于视图转场:弹性会 overshoot,整屏视图切换会来回抖。弹性只服务于细节。

时长:微交互 90–180ms,面板 320ms,复杂过渡 480ms,全部在规范区间内。prefers-reduced-motion 完整保留。

修复前实测:10 处形变过渡中只有 3 处用弹性曲线,.btn(按钮)、.check .box、.opt .tick、.tip 仍是标准曲线 —— 这正是"交互缺重量感"的原因。现已 10/10。

3. 图标

  • 应用图标与品牌标记统一为同一几何(此前两者形状不一致)
  • 缺口由朝上改为朝下:原几何"缺口朝上 + 中心点"看起来是一张脸,改为缺口朝下后读作"升起的拱"
  • 图标几何用精确光栅化 + 无头浏览器双路对照验证(结果一致)

4. 安卓端同步

项 改动
颜色 35 个色值统一指向新增的共享 Palette
圆角 卡片/弹窗 → 0;按钮保留 11dp
字重 正文 → BOLD
colors.xml 重写为三色,删除 11 个死资源(md_space_*、md_shape_*、md_ripple,实测零引用)
styles.xml windowBackground 纠正为米白 —— 否则启动瞬间会闪深色背景

顺带消除重复逻辑:MainActivity 与 CreatorActivity 原先各自重复定义同一套 20/15 个颜色常量。现收敛为 Palette 单一来源,保留原常量名作别名,38 处调用点零改动。

5. 修复的缺陷

  • R1:creatortest-android.js 从 .work/ 读测试装置,而 .work 会被清理 → 测试整体失效。已把测试装置内联进脚本(与 coretest-android.js 同一模式),不再依赖临时目录。
  • R2:coretest 因测试素材缺失静默少跑 6 项断言。补回后 31/31。
  • 版本号一致性:package.json 2.0.0 = Manifest versionCode 200 / versionName 2.0.0。

验证情况

套件 结果
PC 后端端到端 109 / 109
PC 界面全流程 58 / 58,控制台零错误
PC 动效(双曲线) 15 / 15
安卓 APK 静态 88 / 88(新增 13 项色板断言,防止被改回 MD3)
安卓包解析逻辑 31 / 31
安卓制作核心 56 / 56

断言总计 357 项,0 失败。

⚠ 未能验证

  • 安卓端观感:本机无 adb、无真机。代码已同步、编译通过、88 项静态断言通过,但实际显示效果未经肉眼确认。
  • 键盘导航与屏幕阅读器、对比度实测未做。

下载

文件 说明
BootAnimForge-2.0.0-portable.zip PC 端(Node + ffmpeg,解压即用)+ 安卓端 APK
BootAnimForge-Android-2.0.0-debug.apk 只要安卓端

从 v1.x 升级

界面完全不同,但产物格式与功能不变,之前做的动画包无需重做。
安卓端 APK 用同一调试密钥签名,可直接覆盖安装。

启幕 v1.4.0(关机动画 + 裁切/区间/取消/预览)

Choose a tag to compare

@Baimacao Baimacao released this 06 Oct 14:18

启幕 v1.4.0

这个版本把双端都补齐了:关机动画、视频裁切、循环区间、取消任务、预览。


1. 关机动画(双端)

以前只做开机动画。现在 PC 端与安卓端都能做关机动画。

开机动画 关机动画
文件名 bootanimation.zip shutdownanimation.zip
视频版 bootanimation.mp4 shutdownanimation.mp4
段类型 p(可被打断) c(必须播完,否则可能播一半就被关掉)
Magisk 模块 id bootanimforge_bootanimation bootanimforge_shutdownanimation

两个动画的 Magisk 模块 id 不同,所以可以同时装、互不覆盖。

⚠ 关机动画的路径与文件名没有 AOSP 级的统一规范,各厂商自定义较多,部分机型根本不支持。
刷入前建议先确认设备上原本有没有这个文件、放在哪,再替换同一路径。

踩坑记录:段类型只在用户没显式指定时才由 target 决定。
一开始 normalizePart / 构造函数里写死了默认 type='p',结果 c 永远覆盖不上,
而 desc.txt 看上去完全正常 —— 双端都中过这个招,现在两边都改成"未指定时留空"。


2. 视频裁切 / 取用区间

  • PC 端:取用区间新增可拖动滑块,与输入框双向联动;拖动时时间轴与帧数预估实时更新
  • 安卓端:新增「设置取用区间」,可填起止秒数;生成前实时显示"预计多少帧",帧数偏多会变黄提醒

这是最实用的一项 —— 手机生成较慢,先截短几秒能省很多时间。


3. 取消当前任务(安卓端)

生成过程中显示百分比与当前段进度,并有取消当前任务按钮。
取消是逐帧检查的,响应很快;取消后会删掉半成品,不会留下看起来像成品的坏包。


4. 预览(安卓端)

解决"装上才知道效果、验证却要重启"的问题:

入口 作用
制作页 →「预览效果」 按当前参数(分辨率 + 取用区间)在内存里渲染 2 帧。黑色部分即留边,能直接看出比例对不对、有没有被拉伸。不写任何文件
主界面 →「预览当前动画」 用 root 把设备上正在使用的动画复制出来、解包、取若干帧显示,并列出 desc.txt 声明。不用重启就能确认现状

5. 其他同步

安卓端主界面新增操作对象切换(开机/关机),路径候选与文件名会跟着换,
扫描、校验、安装、备份、还原整条链路都对两种目标生效。


验证情况

套件 结果
PC 后端端到端 109 / 109
PC 界面全流程 58 / 58,控制台零错误
PC 动效 14 / 14
安卓 APK 静态 75 / 75
安卓包解析逻辑 31 / 31
安卓制作核心 56 / 56

新增的验证里,值得说的几条:

  • 取用区间真的生效:设 1.0s→2.0s @10FPS,断言产物只有 10 帧,且只向视频源取了 10 次帧
  • 取消真的干净:进度回调返回 false 时必须抛 InterruptedException,且不留下半成品文件
  • 关机动画的 desc 真的是 c:从真跑出来的 zip 里读出 desc.txt 逐字比对
  • 两个目标只有段类型不同:把 c 换成 p 后应与开机动画的 desc 完全一致
  • 用户显式指定段类型时不被 target 覆盖

手写的 PNG 编码器与 STORE zip 写入器依旧在 PC 上真跑,由 ffmpeg 逐像素当裁判、BootCore 双重校验。

⚠ 未能验证的部分

本机没有 adb、也没有真机,以下我不会假装验过:

  • 真机安装与启动
  • MediaMetadataRetriever 的实际取帧效果(尤其竖屏视频旋转方向对不对)
  • 制作速度与内存表现(大视频、高帧率)
  • 预览在当前设备上的显示效果
  • 关机动画的实际路径与是否被系统使用(最不确定的一项)
  • root 授权流程、写入分区后的权限与 SELinux 上下文
  • 圆屏安全区的视觉效果(16% 缩进是算出来的,好不好看要肉眼看)

下载哪个

文件 说明
BootAnimForge-1.4.0-portable.zip 推荐。PC 端(Node + ffmpeg,解压即用)+ 安卓端 APK
BootAnimForge-Android-1.4.0-debug.apk 只要安卓端

已知限制

  • 安卓端只做单段;多段拆分、每段循环次数/暂停、视频版输出格式、Magisk 模块生成都在 PC 端
  • 手机生成较慢(每秒视频约需几秒),建议先用取用区间截短
  • 需要 root 才能刷入;没 root 只能制作与查看状态
  • APK 用自动生成的调试密钥签名,正式分发请换自己的 keystore
  • 关机动画是否生效完全取决于机型,部分 ROM 不支持

启幕 v1.3.0(改名换图标 + 安卓端可制作)

Choose a tag to compare

@Baimacao Baimacao released this 06 Oct 13:19

启幕 v1.3.0

这个版本做了两件事:改名换图标,以及安卓端加入制作功能。


1. 改名与图标

  • 中文名从「开机动画工坊」改为 启幕(英文名保持 BootAnimForge)
  • 新图标:升起的弧 + 中心一点光,弧留一个缺口 —— 对应"开机动画会在系统起来前一直循环"

图标实现是脚本生成的(node tools/make-icons.js,纯 Node 无依赖,自带超采样抗锯齿),
一次输出 Android 五个密度与 Web 端,所以两端永远一致。


2. 安卓端可以制作了

以前安卓端只能刷入现成的包;现在手机上直接选视频、出 zip、装上去。
适合"截几秒 + 改成手表分辨率 + 直接装上"这种场景;长视频与复杂分段仍然建议用 PC 端。

流程:主界面「制作开机动画」→ 选视频 → 目标分辨率(手机/手表预设或自定义)→ 帧率 → 帧命名 → 生成。

技术上的三个关键决定

决定 原因
自己写 PNG 编码器 Bitmap.compress(PNG) 历史上支持不稳定、不同 ROM 行为不一致,而我没有真机可测。自己编码只用 Deflater + CRC32,Android 4.4 到最新版行为完全一致
自己写 STORE zip 写入器 ZipOutputStream 强制 DEFLATE,而开机动画规范要求 STORE(zip -0)。且必须流式:1080p 一帧 ARGB 就 8 MB,几百帧不可能全放内存
比对尺寸来处理旋转 竖屏视频常以横向存储 + rotation=90,而不同 Android 版本的 getFrameAtTime 是否已应用旋转并不一致。直接按元数据算出期望显示尺寸、再比对实际拿到的尺寸,比猜版本可靠

依旧保持 PC 端那条铁律:绝不拉伸(等比缩放 + 居中留边)。
生成后会立刻用 BootCore(刷入前用的同一份校验代码)反过来读一遍,确认合法才提示完成。


验证情况

套件 结果
PC 后端端到端 94 / 94
PC 界面全流程 47 / 47,控制台零错误
PC 动效 14 / 14
安卓 APK 静态 66 / 66
安卓包解析逻辑 31 / 31
安卓制作核心 34 / 34

手写的东西必须证明它是对的,所以制作核心全部在 PC 上真跑:

  • 手写 PNG 编码器的产物交给 ffmpeg 当裁判逐像素核对 —— 红底、绿块、四角蓝全部对上
  • 手写 STORE zip 用自己的读取器 + BootCore 双重校验(条目顺序、desc.txt、CRC)
  • "绝不拉伸"用像素证明:源 200×100 → 目标 100×100 时,四角必须是黑色留边、中心必须是画面内容

(为此把取帧抽象成了 FrameSource 接口,Creator/PngEncoder/ZipStoreWriter 全是纯 JDK 代码,因此不依赖真机就能测。)

⚠ 未能验证的部分

本机没有 adb、也没有真机,以下我不会假装验过:

  • 真机安装与启动
  • MediaMetadataRetriever 的实际取帧效果(尤其竖屏视频旋转方向对不对)
  • 制作速度与内存表现(大视频、高帧率)
  • root 授权流程、写入系统分区后的权限与 SELinux 上下文
  • 圆屏安全区的视觉效果(16% 缩进是算出来的,好不好看要肉眼看)

下载哪个

文件 说明
BootAnimForge-1.3.0-portable.zip 推荐。PC 端(Node + ffmpeg,解压即用)+ 安卓端 APK
BootAnimForge-Android-1.3.0-debug.apk 只要安卓端

已知限制

  • 安卓端只做单段;多段拆分、每段循环次数/暂停、视频版输出格式、Magisk 模块生成都在 PC 端
  • 手机生成较慢(每秒视频约需几秒),建议先用区间截短
  • 需要 root 才能刷入;没 root 只能制作与查看状态
  • APK 用自动生成的调试密钥签名,正式分发请换自己的 keystore
  • Android 端不申请 MANAGE_EXTERNAL_STORAGE,读写都走系统选择器与应用私有目录

BootAnimForge v1.2.0(含安卓端)

Choose a tag to compare

@Baimacao Baimacao released this 06 Oct 12:13

BootAnimForge v1.2.0

安卓端 App 来了:以前只负责"生成",现在还能"装进设备"。

这个版本新增

安卓端 App(android/,APK 60.8 KB)

一个刷入器:选现成的 bootanimation.zip → 校验 → root 安装 → 备份 / 一键还原。

为什么安卓端做这个而不是再做一遍视频转换:安卓端跑的就是要装动画的那台设备,它最缺的是
"文件该放哪、权限怎么设、装错了怎么退" —— 这三点做掉,比在手机上重新实现视频转帧有价值得多。

功能 说明
扫描现状 一次列清所有候选路径:哪个存在、多大、什么权限、SELinux 上下文、是不是 zip
安装前校验 传统帧序列 / 视频版识别、desc.txt 合法性、帧编号连续性、视频版 moov 是否前置
一键安装 自动备份 → /data/local/tmp → root 写入 → chown 0:0 + chmod 0644 + chcon → 复核
自动备份 每次安装前强制备份,另永久保留一份"首次备份",任何时候都能退回原状
一键还原 从备份列表选一个还原
Magisk 检测 已有模块提供 bootanimation 时提示先卸载,避免互相覆盖

圆屏适配(设置里可切换)

  • 判断顺序:用户手动设置 → Configuration.isScreenRound()(API 23+)→ UiModeManager 手表 + 近正方形(旧版本回退)
  • 三个选项:自动识别(显示系统判断结果)/ 强制圆形 / 强制方形,切换立即重排
  • 安全区:内切圆里最大正方形是 直径/√2 ≈ 0.707·直径,左右各留 16%,保证四角不被裁掉

向下兼容到 Android 4.4

项 值
minSdkVersion 19(Android 4.4)
targetSdkVersion 30
签名 v1 + v2 + v3(v1 让 Android 4.4–6.0 也能装)
语言特性 Java 8,不用 lambda/stream

兼容处理:圆屏判断双路径、RippleDrawable 有版本判断、用 od 而非 xxd 读文件头(精简 ROM 常无 xxd)、
su 路径 7 个候选、存储权限限定 maxSdkVersion、不申请 MANAGE_EXTERNAL_STORAGE。

构建不需要 Gradle

本机 Maven 仓库不可达,拿不到 AGP,所以直接用 SDK 工具链:
aapt2 compile → javac → d8 → aapt2 link → 注入 classes.dex → zipalign → apksigner。

下载哪个

文件 说明
BootAnimForge-1.2.0-portable.zip(83.3 MB) 推荐。含 PC 端(Node + ffmpeg,解压即用)和安卓端 APK
BootAnimForge-Android-1.2.0-debug.apk(60.8 KB) 只要安卓端

验证情况

套件 结果
PC 后端端到端 tools/selftest.js 94 / 94
PC 界面全流程 tools/uicheck.js --flow 47 / 47,控制台零错误
PC 动效 tools/uicheck.js --anim 14 / 14
安卓 APK 静态 tools/verify-android.js 43 / 43
安卓包解析逻辑 tools/coretest-android.js 31 / 31

安卓端最值得说的一点:包解析逻辑抽成了 BootCore.java(纯 JDK、无 Android 依赖),
所以能在 PC 上真跑,而不是靠看代码猜:

  • 手表风格样本(纯数字 001.png,两段)→ 正确识别 480×480/60fps、编号 1–12
  • 通用风格 frame_00000.png → 编号 0–19 连续
  • 编号不连续 → 告警但不阻断;缺帧目录 / 多套一层 / 非 zip / desc.txt 首行非法 → 分别报错并说明原因
  • 视频版 moov 前置 → 通过;moov 后置 → 告警
  • PC 端真实产物跨端一致(test-watch.zip / test-video.zip / ui-watch.zip)
  • 你上次给的手表样本 bootanimation.zip → 480×480/60fps,判定合法

⚠ 未能验证的部分

本机没有 adb、也没有连接真机,以下我不会假装验过,需要你装到设备上确认:

  • 真机安装与启动
  • root 授权流程(su 弹窗、不同 ROM 的实际 su 路径)
  • 写入系统分区后的权限与 SELinux 上下文是否真被系统接受
  • 圆屏安全区的视觉效果(16% 缩进是算出来的,好不好看要肉眼看)
  • 手机与手表各自的布局观感

已知限制

  • 安卓端目前只做刷入,不生成动画(生成请在 PC 端做)
  • 需要 root(Magisk / SuperSU 均可);没 root 只能看状态、不能装
  • APK 用自动生成的调试密钥签名,正式分发请换成自己的 keystore
  • 视频版格式只被 Android 12+ 的部分机型识别;黑屏就换回传统帧序列版

BootAnimForge v1.1.0

Choose a tag to compare

@Baimacao Baimacao released this 06 Oct 04:46

BootAnimForge v1.1.0

把 MP4 等视频转成安卓开机动画(bootanimation.zip)的 Windows 工具。Material Design 3 界面,本地 ffmpeg 引擎,零 npm 依赖、无构建步骤。

这个版本的三个变化

1. 自定义帧文件命名(手表写法)

厂商的帧命名差异很大。以前写死了 frame_00000.png,但很多安卓手表用的是纯数字名 —— 例如一台实测的 480×480 手表:

part0/001.png … part0/360.png
part1/001.png … part1/143.png

现在前缀 / 补零位数 / 起始编号都可以改,界面上有实时预览告诉你首帧和末帧会叫什么,并内置四个常用预设:

预设 用途
frame_00000.png 通用 / PC 工具生成(默认)
001.png 很多安卓手表
000.png 同上,从 0 开始
00001.png 部分老机型

补零位数不够时会直接报错(例如 3 位补零却有 1200 帧,001 会出现两次),而不是生成一个会撞名的坏包。

2. 无需任何前置

以前要求机器上先装 Node.js。现在启动器会自己准备:

  • runtime\node.exe —— Node.js 官方发行版,约 35 MB
  • runtime\ffmpeg.exe / ffprobe.exe —— 视频引擎

已装过 Node 的机器仍优先用系统 Node,不会重复下载。实测:把 PATH 清成只有系统目录(where node 返回 1)、解压便携包后直接双击启动器,服务正常起来,进程用的是包内 runtime\node.exe。

3. 新增手表分辨率与相关修正

  • 手表预设扩到 5 个:480×480、466×466、454×454、450×450、390×390
  • Magisk 模块与纯动画的默认文件名分开了(bootanimation-magisk.zip / bootanimation.zip),不会互相覆盖
  • 顺带修掉一个不一致:控件显隐原先散在三个地方,导致有些路径下「帧命名」该显示却是隐藏的。现在统一走一个入口 applyFormatVisibility()

下载哪个

文件 说明
BootAnimForge-1.1.0-portable.zip(83 MB) 推荐。内置 Node + ffmpeg,解压即用,不需要装任何东西
源码(Source code) 不含运行时,首次运行启动器会自动下载(约 150 MB)

运行要求:Windows 10/11 + Edge 或 Chrome。

验证情况

套件 结果
后端端到端 tools/selftest.js 94 / 94
界面全流程 tools/uicheck.js --flow 47 / 47,控制台零错误
动效 tools/uicheck.js --anim 14 / 14

本次新增覆盖:

  • 帧命名纯函数(前缀清洗、补零夹取、编号解析 001.png → 1、frame_00042.png → 42)
  • 手表写法端到端:part0/001.png 起于 1、末帧 012.png(1s × 12fps)、part1 同样从 001 开始、全程不含 frame_、编号严格递增
  • 补零位数不足被拦截
  • 界面里点预设 → 预览显示 001.png → 真跑一次 → 核对产出 zip 里的文件名
  • 无前置启动:清空 PATH 后便携版仍能跑(进程确认用的是包内 runtime\node.exe)

已知限制

  • 浏览器安全限制导致拖入文件时拿不到磁盘路径,程序会引导你按路径选择(读原文件,不复制不上传)
  • 视频版格式只被 Android 12+ 的部分机型识别;黑屏就换回传统格式
  • 随包的 ffmpeg 是 2018 年构建(N-92722),功能足够;换成新版 ffmpeg 也能直接用

许可

代码 MIT。Node.js 与 ffmpeg 的许可独立于本项目(ffmpeg 详见包内 runtime/FFMPEG-LICENSE.txt)。

BootAnimForge v1.0.0

Choose a tag to compare

@Baimacao Baimacao released this 02 Oct 17:29

BootAnimForge v1.0.0

把 MP4 等视频转成安卓开机动画(bootanimation.zip)的 Windows 工具。Material Design 3 界面,本地 ffmpeg 引擎,零 npm 依赖、无构建步骤。

下载哪个

文件 说明
BootAnimForge-1.0.0-portable.zip(50.5 MB) 推荐。已内置 ffmpeg 引擎,解压即用,不需要联网下载
源码(Source code) 不含引擎,首次运行 启动.cmd 会自动从 npm 镜像下载(约 115 MB,实测几秒)

运行要求:Windows 10/11 + Node.js 18+ + Edge 或 Chrome。

这个版本能做什么

两种输出格式

  • 传统帧序列:desc.txt + partN/ PNG 帧,Android 4–14 通吃
  • 视频版(Android 12+):bootanimation.mp4,体积通常只有帧序列的 1/10。自动保证 moov 前置 + yuv420p + Main profile + 无 B 帧,并在编码后校验 profile,不达标自动重编

一键生成 Magisk 模块
额外产出一个可直接刷入的模块 zip(module.prop + customize.sh + 系统载荷 + 中文说明)。挂载替换,卸载即恢复原开机动画,不动系统分区、不影响 OTA。

永不拉伸
等比缩放 + 居中留边(可配背景色),或等比放大 + 居中裁切。拉伸只是给高级用户的显式选项,且带警告。

分段与循环
时间轴上随时切分,每段独立设置 p/c/f 类型、循环次数(0 = 无限)、暂停帧数、淡出帧数、背景色。可以按 desc.txt 的真实播放逻辑试播一遍。

易用性
内置教程(F1)、每个参数旁的解释气泡、导出前预检、实时预览与产出摘要、27 个机型分辨率预设。

验证情况

  • 后端端到端自检 75 项断言全通过(node tools/selftest.js)
    • 用 ffmpeg 合成测试素材,解出 zip 里的真实帧做像素级检查,证明四角是背景色、中心是视频内容 —— 即确实没有拉伸
    • 旋转元数据两种来源、alpha 通道、JPEG 模式、视频版编码参数、Magisk 模块结构、任务取消、参数拦截
  • 界面端到端 28 项断言全通过(node tools/uicheck.js --flow)
    • 无头 Edge + DevTools 协议驱动真实界面,跑完传统格式与「视频版 + Magisk」两条完整流程,控制台零错误

已知限制

  • 浏览器安全限制导致拖入文件时拿不到磁盘路径,程序会引导你按路径选择(读原文件,不复制不上传)
  • 视频版格式只被 Android 12+ 的部分机型识别;黑屏就换回传统格式
  • 随包的 ffmpeg 是 2018 年构建(N-92722),功能足够;换成新版 ffmpeg 也能直接用

许可

代码 MIT。ffmpeg/ffprobe 来自 @ffmpeg-installer / @ffprobe-installer 的官方构建,许可(LGPL/GPL)独立于本项目,详见包内 runtime/FFMPEG-LICENSE.txt。