# 显示与音频资产台账 ## 范围、日期与计量口径 这是 2026-10-09 lucky-cat 工作区的核对快照;初始采集时 listening 素材尚未提交, 两个历史待机 C 资产未跟踪;本次已追加 HUD 字形/电池素材及构建结果。 它不是构建输入或自动生成的实时报告。 新增、替换、移出固件或经授权清理资产时,应同步更新此表及指南。 范围包含平台图片/图层/音频、生成 GFX C 文件、旧音频副本、领域内嵌网页和项目 显示预览;不逐个列第三方库的内部样例/字体、ESP-IDF 文件或 build 缓存。 语音模型作为独立构建产物在后文单列,不冒充项目图片资产。 - 文件字节为文件逻辑长度;分配字节来自本机 stat 的 st_blocks×512,可能随文件 系统、压缩、克隆共享而改变,不能当作唯一物理磁盘成本或固件占用。 - C 文件是十六进制数组的文本,文本长度不等于 Flash。Flash 载荷必须按数组 字节统计;描述结构、代码、对齐和其他数据最终以应用镜像为准。 - 源图、图层、预览、manifest、旧副本不因出现在仓库中就自动进入固件。 - PNG/Opus 素材包与六份 GFX RLE 都已包含在应用镜像里,不能重复加算。 - 本文只记录分类,不授权删除任何文件。后备保留与清理条件见 [GFX 开发指南](GFX表情显示应用与开发指南.md#旧资源保留整理与迁移完成条件)。 ## 目录汇总 | 类别 | 文件数 | 文件字节合计 | 本机分配字节合计 | 当前用途 | | --- | ---: | ---: | ---: | --- | | 原始 LCD 图片 | 76 | 1,168,722 | 1,290,240 | 源图/历史 GIF,不直接入固件 | | 优化 PNG 与清单 | 76 | 465,933 | 593,920 | 按 PNG 白名单入包;manifest 不入包 | | 提示音 | 32 | 385,758 | 450,560 | 本目录 Opus 入包 | | 待机拆分图层及预览 | 8 | 74,585 | 94,208 | 制作输入/预览,不入包 | | 聆听拆分图层及预览 | 16 | 272,605 | 303,104 | 制作输入/预览,不入包 | | GFX 压缩 C 资产 | 8 | 1,232,250 | 1,253,376 | 六份参与编译;历史两份未参与 | | 旧音频副本 | 30 | 378,918 | 442,368 | 本目录不入包,不自动删除 | | 领域网页资源 | 1 | 5,373 | 8,192 | user_config.html 单独 EMBED_TXTFILES,不在素材包 | | 文档中的独立显示预览 | 2 | 98,302 | 102,400 | 仅电脑预览,不入固件 | 以下同名文件跨目录是不同用途,不应直接合并或重复计入 Flash。当前没有独立中文字体包;时间 HUD 已改为 Montserrat 14 数字子集,电量仅显示素材图标,不意味着已支持任意中文字形。 ## 原始 LCD 图片 目录:`components/platform/assets/lcd_source/`。源图/历史 GIF,不直接入固件。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `OTA.gif` | 40,441 | 40,960 | 320×240 | 不直接入固件 | | `buyunqian1.png` | 20,467 | 20,480 | 320×240 | 不直接入固件 | | `charging.png` | 3,018 | 4,096 | 50×70 | 不直接入固件 | | `chouqian_buyun0.png` | 16,883 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_buyun1.png` | 20,467 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_buyun2.png` | 27,971 | 28,672 | 320×240 | 不直接入固件 | | `chouqian_heping0.png` | 17,146 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_heping1.png` | 20,975 | 24,576 | 320×240 | 不直接入固件 | | `chouqian_heping2.png` | 28,152 | 28,672 | 320×240 | 不直接入固件 | | `chouqian_qianzhi0.png` | 13,739 | 16,384 | 320×240 | 不直接入固件 | | `chouqian_qianzhi1.png` | 16,425 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_qianzhi2.png` | 15,559 | 16,384 | 320×240 | 不直接入固件 | | `chouqian_shangshang0.png` | 17,377 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_shangshang1.png` | 20,582 | 24,576 | 320×240 | 不直接入固件 | | `chouqian_shangshang2.png` | 28,046 | 28,672 | 320×240 | 不直接入固件 | | `chouqian_xiaoji0.png` | 17,071 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_xiaoji1.png` | 20,313 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_xiaoji2.png` | 27,354 | 28,672 | 320×240 | 不直接入固件 | | `chouqian_zhongshang0.png` | 16,995 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_zhongshang1.png` | 19,968 | 20,480 | 320×240 | 不直接入固件 | | `chouqian_zhongshang2.png` | 26,989 | 28,672 | 320×240 | 不直接入固件 | | `east0.png` | 19,981 | 20,480 | 320×240 | 不直接入固件 | | `huo0.png` | 19,143 | 20,480 | 320×240 | 不直接入固件 | | `huo1.png` | 19,706 | 20,480 | 320×240 | 不直接入固件 | | `icon_huo0.png` | 2,028 | 4,096 | 56×58 | 不直接入固件 | | `icon_jin0.png` | 2,369 | 4,096 | 65×44 | 不直接入固件 | | `icon_mu0.png` | 3,741 | 4,096 | 86×50 | 不直接入固件 | | `icon_shui0.png` | 2,239 | 4,096 | 60×56 | 不直接入固件 | | `icon_tu0.png` | 2,873 | 4,096 | 75×42 | 不直接入固件 | | `jichubiaoqing0.png` | 20,645 | 24,576 | 320×240 | 不直接入固件 | | `jichubiaoqing1.png` | 16,355 | 16,384 | 320×240 | 不直接入固件 | | `jichubiaoqing2.png` | 14,340 | 16,384 | 320×240 | 不直接入固件 | | `jin0.png` | 17,398 | 20,480 | 320×240 | 不直接入固件 | | `jin1.png` | 19,311 | 20,480 | 320×240 | 不直接入固件 | | `lcdtest00.png` | 3,321 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest01.png` | 3,574 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest02.png` | 3,767 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest03.png` | 3,903 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest04.png` | 3,579 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest05.png` | 3,996 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest06.png` | 4,089 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest07.png` | 3,753 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest08.png` | 3,860 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest09.png` | 4,008 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest10.png` | 3,545 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest11.png` | 3,169 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest12.png` | 3,453 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest13.png` | 3,710 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest14.png` | 3,443 | 4,096 | 320×240 | 不直接入固件 | | `lcdtest15.png` | 3,646 | 4,096 | 320×240 | 不直接入固件 | | `listening0.png` | 19,615 | 20,480 | 320×240 | 不直接入固件 | | `listening1.png` | 15,072 | 16,384 | 320×240 | 不直接入固件 | | `listening2.png` | 10,758 | 12,288 | 320×240 | 不直接入固件 | | `lowbat.png` | 10,222 | 12,288 | 232×36 | 不直接入固件 | | `mu0.png` | 19,742 | 20,480 | 320×240 | 不直接入固件 | | `mu1.png` | 19,483 | 20,480 | 320×240 | 不直接入固件 | | `muyu0.png` | 17,340 | 20,480 | 320×240 | 不直接入固件 | | `muyu1.png` | 21,462 | 24,576 | 320×240 | 不直接入固件 | | `muyu2.png` | 34,079 | 36,864 | 320×240 | 不直接入固件 | | `north0.png` | 19,314 | 20,480 | 320×240 | 不直接入固件 | | `northeast0.png` | 21,808 | 24,576 | 320×240 | 不直接入固件 | | `northwest0.png` | 19,143 | 20,480 | 320×240 | 不直接入固件 | | `ota1.png` | 25,911 | 28,672 | 320×240 | 不直接入固件 | | `ota2.png` | 22,397 | 24,576 | 320×240 | 不直接入固件 | | `ota3.png` | 22,079 | 24,576 | 320×240 | 不直接入固件 | | `qianzhiwuxing0.png` | 16,670 | 20,480 | 320×240 | 不直接入固件 | | `qrcode.png` | 18,971 | 20,480 | 320×240 | 不直接入固件 | | `shui0.png` | 18,086 | 20,480 | 320×240 | 不直接入固件 | | `shui1.png` | 18,478 | 20,480 | 320×240 | 不直接入固件 | | `south0.png` | 22,767 | 24,576 | 320×240 | 不直接入固件 | | `southeast0.png` | 24,902 | 28,672 | 320×240 | 不直接入固件 | | `southwest0.png` | 22,298 | 24,576 | 320×240 | 不直接入固件 | | `spin0.png` | 17,071 | 20,480 | 320×240 | 不直接入固件 | | `tu0.png` | 18,101 | 20,480 | 320×240 | 不直接入固件 | | `tu1.png` | 20,059 | 20,480 | 320×240 | 不直接入固件 | | `west0.png` | 18,011 | 20,480 | 320×240 | 不直接入固件 | ## 优化 PNG 与清单 目录:`components/platform/assets/lcd_optimized/`。按 PNG 白名单入包;manifest 不入包。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `buyunqian1.png` | 7,598 | 8,192 | 320×240 | 入包 PNG | | `charging.png` | 1,254 | 4,096 | 50×70 | 入包 PNG | | `chouqian_buyun0.png` | 6,536 | 8,192 | 320×240 | 入包 PNG | | `chouqian_buyun1.png` | 7,598 | 8,192 | 320×240 | 入包 PNG | | `chouqian_buyun2.png` | 9,986 | 12,288 | 320×240 | 入包 PNG | | `chouqian_heping0.png` | 6,590 | 8,192 | 320×240 | 入包 PNG | | `chouqian_heping1.png` | 7,701 | 8,192 | 320×240 | 入包 PNG | | `chouqian_heping2.png` | 10,120 | 12,288 | 320×240 | 入包 PNG | | `chouqian_qianzhi0.png` | 5,203 | 8,192 | 320×240 | 入包 PNG | | `chouqian_qianzhi1.png` | 6,119 | 8,192 | 320×240 | 入包 PNG | | `chouqian_qianzhi2.png` | 5,984 | 8,192 | 320×240 | 入包 PNG | | `chouqian_shangshang0.png` | 6,578 | 8,192 | 320×240 | 入包 PNG | | `chouqian_shangshang1.png` | 7,519 | 8,192 | 320×240 | 入包 PNG | | `chouqian_shangshang2.png` | 9,804 | 12,288 | 320×240 | 入包 PNG | | `chouqian_xiaoji0.png` | 6,447 | 8,192 | 320×240 | 入包 PNG | | `chouqian_xiaoji1.png` | 7,424 | 8,192 | 320×240 | 入包 PNG | | `chouqian_xiaoji2.png` | 9,715 | 12,288 | 320×240 | 入包 PNG | | `chouqian_zhongshang0.png` | 6,291 | 8,192 | 320×240 | 入包 PNG | | `chouqian_zhongshang1.png` | 7,224 | 8,192 | 320×240 | 入包 PNG | | `chouqian_zhongshang2.png` | 9,387 | 12,288 | 320×240 | 入包 PNG | | `east0.png` | 5,681 | 8,192 | 320×240 | 入包 PNG | | `huo0.png` | 7,023 | 8,192 | 320×240 | 入包 PNG | | `huo1.png` | 7,269 | 8,192 | 320×240 | 入包 PNG | | `icon_huo0.png` | 1,422 | 4,096 | 56×58 | 入包 PNG | | `icon_jin0.png` | 1,509 | 4,096 | 65×44 | 入包 PNG | | `icon_mu0.png` | 1,866 | 4,096 | 86×50 | 入包 PNG | | `icon_shui0.png` | 1,457 | 4,096 | 60×56 | 入包 PNG | | `icon_tu0.png` | 1,643 | 4,096 | 75×42 | 入包 PNG | | `jichubiaoqing0.png` | 6,467 | 8,192 | 320×240 | 入包 PNG | | `jichubiaoqing1.png` | 5,306 | 8,192 | 320×240 | 入包 PNG | | `jichubiaoqing2.png` | 4,482 | 8,192 | 320×240 | 入包 PNG | | `jin0.png` | 6,488 | 8,192 | 320×240 | 入包 PNG | | `jin1.png` | 7,077 | 8,192 | 320×240 | 入包 PNG | | `lcdtest00.png` | 2,885 | 4,096 | 320×240 | 入包 PNG | | `lcdtest01.png` | 2,965 | 4,096 | 320×240 | 入包 PNG | | `lcdtest02.png` | 2,982 | 4,096 | 320×240 | 入包 PNG | | `lcdtest03.png` | 3,043 | 4,096 | 320×240 | 入包 PNG | | `lcdtest04.png` | 2,949 | 4,096 | 320×240 | 入包 PNG | | `lcdtest05.png` | 3,225 | 4,096 | 320×240 | 入包 PNG | | `lcdtest06.png` | 3,431 | 4,096 | 320×240 | 入包 PNG | | `lcdtest07.png` | 3,369 | 4,096 | 320×240 | 入包 PNG | | `lcdtest08.png` | 3,299 | 4,096 | 320×240 | 入包 PNG | | `lcdtest09.png` | 3,458 | 4,096 | 320×240 | 入包 PNG | | `lcdtest10.png` | 3,229 | 4,096 | 320×240 | 入包 PNG | | `lcdtest11.png` | 2,966 | 4,096 | 320×240 | 入包 PNG | | `lcdtest12.png` | 2,921 | 4,096 | 320×240 | 入包 PNG | | `lcdtest13.png` | 3,020 | 4,096 | 320×240 | 入包 PNG | | `lcdtest14.png` | 2,986 | 4,096 | 320×240 | 入包 PNG | | `lcdtest15.png` | 3,033 | 4,096 | 320×240 | 入包 PNG | | `listening0.png` | 6,165 | 8,192 | 320×240 | 入包 PNG | | `listening1.png` | 4,939 | 8,192 | 320×240 | 入包 PNG | | `listening2.png` | 3,577 | 4,096 | 320×240 | 入包 PNG | | `lowbat.png` | 3,527 | 4,096 | 232×36 | 入包 PNG | | `manifest.json` | 34,788 | 36,864 | — | 不入包,校验清单/非白名单 | | `mu0.png` | 7,270 | 8,192 | 320×240 | 入包 PNG | | `mu1.png` | 7,208 | 8,192 | 320×240 | 入包 PNG | | `muyu0.png` | 6,924 | 8,192 | 320×240 | 入包 PNG | | `muyu1.png` | 8,325 | 12,288 | 320×240 | 入包 PNG | | `muyu2.png` | 12,523 | 16,384 | 320×240 | 入包 PNG | | `north0.png` | 5,527 | 8,192 | 320×240 | 入包 PNG | | `northeast0.png` | 6,276 | 8,192 | 320×240 | 入包 PNG | | `northwest0.png` | 5,496 | 8,192 | 320×240 | 入包 PNG | | `ota1.png` | 8,745 | 12,288 | 320×240 | 入包 PNG | | `ota2.png` | 7,585 | 8,192 | 320×240 | 入包 PNG | | `ota3.png` | 7,525 | 8,192 | 320×240 | 入包 PNG | | `qianzhiwuxing0.png` | 5,811 | 8,192 | 320×240 | 入包 PNG | | `qrcode.png` | 11,039 | 12,288 | 320×240 | 入包 PNG | | `shui0.png` | 6,640 | 8,192 | 320×240 | 入包 PNG | | `shui1.png` | 6,932 | 8,192 | 320×240 | 入包 PNG | | `south0.png` | 6,609 | 8,192 | 320×240 | 入包 PNG | | `southeast0.png` | 7,354 | 8,192 | 320×240 | 入包 PNG | | `southwest0.png` | 6,599 | 8,192 | 320×240 | 入包 PNG | | `spin0.png` | 6,447 | 8,192 | 320×240 | 入包 PNG | | `tu0.png` | 7,028 | 8,192 | 320×240 | 入包 PNG | | `tu1.png` | 7,381 | 8,192 | 320×240 | 入包 PNG | | `west0.png` | 5,164 | 8,192 | 320×240 | 入包 PNG | ## 提示音 目录:`components/platform/assets/audio_prompts/`。本目录 Opus 入包。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `battery_checking.opus` | 4,366 | 8,192 | — | 入包 Opus | | `battery_low_20.opus` | 6,582 | 8,192 | — | 入包 Opus | | `battery_low_energy_warning.opus` | 26,369 | 28,672 | — | 入包 Opus | | `boot.opus` | 2,296 | 4,096 | — | 入包 Opus | | `button_interrupt_listening.opus` | 2,911 | 4,096 | — | 入包 Opus | | `charge_complete.opus` | 22,329 | 24,576 | — | 入包 Opus | | `daily_first_wake.opus` | 14,798 | 16,384 | — | 入包 Opus | | `daily_wake.opus` | 7,111 | 8,192 | — | 入包 Opus | | `enter_provisioning.opus` | 6,701 | 8,192 | — | 入包 Opus | | `intro_first_setup_success.opus` | 23,813 | 24,576 | — | 入包 Opus | | `local_wake_response.opus` | 3,680 | 4,096 | — | 入包 Opus | | `luck_flow_lost_help_find.opus` | 14,658 | 16,384 | — | 入包 Opus | | `muyu.opus` | 3,160 | 4,096 | — | 入包 Opus | | `network_connect_failed.opus` | 4,388 | 8,192 | — | 入包 Opus | | `network_connect_success.opus` | 4,778 | 8,192 | — | 入包 Opus | | `network_connecting.opus` | 2,836 | 4,096 | — | 入包 Opus | | `network_interrupted_repairing.opus` | 13,887 | 16,384 | — | 入包 Opus | | `network_unstable.opus` | 13,910 | 16,384 | — | 入包 Opus | | `server_abnormal_interrupted.opus` | 24,764 | 28,672 | — | 入包 Opus | | `server_connect_failed.opus` | 5,690 | 8,192 | — | 入包 Opus | | `server_connect_success.opus` | 6,302 | 8,192 | — | 入包 Opus | | `server_repair_wait_open.opus` | 17,193 | 20,480 | — | 入包 Opus | | `server_repair_wait_reopen.opus` | 17,829 | 20,480 | — | 入包 Opus | | `shutdown.opus` | 3,160 | 4,096 | — | 入包 Opus | | `shutdown_normal_goodbye.opus` | 6,396 | 8,192 | — | 入包 Opus | | `shutdown_power_empty.opus` | 19,970 | 20,480 | — | 入包 Opus | | `signal_restored_business_resume.opus` | 10,996 | 12,288 | — | 入包 Opus | | `standby_5min.opus` | 21,429 | 24,576 | — | 入包 Opus | | `system_update_complete.opus` | 12,396 | 16,384 | — | 入包 Opus | | `system_upgrading.opus` | 23,754 | 24,576 | — | 入包 Opus | | `welcome_luck_ready.opus` | 25,325 | 28,672 | — | 入包 Opus | | `wifi_password_wrong.opus` | 11,981 | 12,288 | — | 入包 Opus | ## 待机拆分图层及预览 目录:`components/platform/assets/lcd_layers/jichubiaoqing/`。制作输入/预览,不入包。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `idle_base.png` | 5,321 | 8,192 | 320×240 | 不直接入固件 | | `idle_eyes_closed.png` | 5,896 | 8,192 | 238×93 | 不直接入固件 | | `idle_eyes_half.png` | 8,791 | 12,288 | 238×93 | 不直接入固件 | | `idle_eyes_open.png` | 12,161 | 12,288 | 238×93 | 不直接入固件 | | `layout.json` | 387 | 4,096 | — | 不直接入固件 | | `preview_closed.png` | 10,881 | 12,288 | 320×240 | 不直接入固件 | | `preview_half.png` | 13,832 | 16,384 | 320×240 | 不直接入固件 | | `preview_open.png` | 17,316 | 20,480 | 320×240 | 不直接入固件 | ## 聆听拆分图层及预览 目录:`components/platform/assets/lcd_layers/listening/`。制作输入/预览,不入包。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `layout.json` | 346 | 4,096 | — | 不直接入固件 | | `listening_base.png` | 6,234 | 8,192 | 320×240 | 不直接入固件 | | `listening_eyes_closed.png` | 2,875 | 4,096 | 242×77 | 不直接入固件 | | `listening_eyes_half.png` | 6,460 | 8,192 | 242×77 | 不直接入固件 | | `listening_eyes_open.png` | 9,866 | 12,288 | 242×77 | 不直接入固件 | | `preview.gif` | 53,952 | 57,344 | 320×240 | 不直接入固件 | | `preview_000.png` | 13,633 | 16,384 | 320×240 | 不直接入固件 | | `preview_016.png` | 15,577 | 16,384 | 320×240 | 不直接入固件 | | `preview_024.png` | 15,540 | 16,384 | 320×240 | 不直接入固件 | | `preview_064.png` | 14,802 | 16,384 | 320×240 | 不直接入固件 | | `preview_080.png` | 14,347 | 16,384 | 320×240 | 不直接入固件 | | `preview_128.png` | 10,641 | 12,288 | 320×240 | 不直接入固件 | | `preview_160.png` | 10,937 | 12,288 | 320×240 | 不直接入固件 | | `preview_192.png` | 9,820 | 12,288 | 320×240 | 不直接入固件 | | `preview_232.png` | 7,674 | 8,192 | 320×240 | 不直接入固件 | | `preview_sheet.png` | 79,901 | 81,920 | 960×720 | 不直接入固件 | ## GFX 压缩 C 资产 目录:`components/platform/src/generated/emote_gfx/`。六份参与编译;历史两份未参与。 | 文件 | 文本文件字节 | 本机分配字节 | 图层尺寸 | 数组载荷字节 | RGB565+A8 像素字节 | 参与编译 | | --- | ---: | ---: | --- | ---: | ---: | --- | | `idle_base.c` | 29,698 | 32,768 | 284×37 | 4,764(RLE) | 31,524 | 是,GFX 开关开启时 | | `idle_eyes_closed.c` | 400,750 | 401,408 | 238×93 | 66,402(历史未压缩像素) | 66,402 | 否,历史文件,仅保留 | | `idle_eyes_half.c` | 400,744 | 401,408 | 238×93 | 66,402(历史未压缩像素) | 66,402 | 否,历史文件,仅保留 | | `idle_eyes_open.c` | 90,201 | 94,208 | 238×93 | 14,572(RLE) | 66,402 | 是,GFX 开关开启时 | | `listening_base.c` | 54,190 | 57,344 | 287×102 | 8,732(RLE) | 87,822 | 是,GFX 开关开启时 | | `listening_eyes_closed.c` | 26,097 | 28,672 | 242×77 | 4,172(RLE) | 55,902 | 是,GFX 开关开启时 | | `listening_eyes_half.c` | 81,985 | 86,016 | 242×77 | 13,236(RLE) | 55,902 | 是,GFX 开关开启时 | | `listening_eyes_open.c` | 148,585 | 151,552 | 242×77 | 24,036(RLE) | 55,902 | 是,GFX 开关开启时 | ## 旧音频副本 目录:`defaultAudio/`。本目录不入包,不自动删除。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `battery_checking.opus` | 4,366 | 8,192 | — | 不直接入固件 | | `battery_low_20.opus` | 6,582 | 8,192 | — | 不直接入固件 | | `battery_low_energy_warning.opus` | 26,369 | 28,672 | — | 不直接入固件 | | `boot.opus` | 2,296 | 4,096 | — | 不直接入固件 | | `button_interrupt_listening.opus` | 2,911 | 4,096 | — | 不直接入固件 | | `charge_complete.opus` | 22,329 | 24,576 | — | 不直接入固件 | | `daily_first_wake.opus` | 14,798 | 16,384 | — | 不直接入固件 | | `daily_wake.opus` | 7,111 | 8,192 | — | 不直接入固件 | | `enter_provisioning.opus` | 6,701 | 8,192 | — | 不直接入固件 | | `intro_first_setup_success.opus` | 23,813 | 24,576 | — | 不直接入固件 | | `luck_flow_lost_help_find.opus` | 14,658 | 16,384 | — | 不直接入固件 | | `network_connect_failed.opus` | 4,388 | 8,192 | — | 不直接入固件 | | `network_connect_success.opus` | 4,778 | 8,192 | — | 不直接入固件 | | `network_connecting.opus` | 2,836 | 4,096 | — | 不直接入固件 | | `network_interrupted_repairing.opus` | 13,887 | 16,384 | — | 不直接入固件 | | `network_unstable.opus` | 13,910 | 16,384 | — | 不直接入固件 | | `server_abnormal_interrupted.opus` | 24,764 | 28,672 | — | 不直接入固件 | | `server_connect_failed.opus` | 5,690 | 8,192 | — | 不直接入固件 | | `server_connect_success.opus` | 6,302 | 8,192 | — | 不直接入固件 | | `server_repair_wait_open.opus` | 17,193 | 20,480 | — | 不直接入固件 | | `server_repair_wait_reopen.opus` | 17,829 | 20,480 | — | 不直接入固件 | | `shutdown.opus` | 3,160 | 4,096 | — | 不直接入固件 | | `shutdown_normal_goodbye.opus` | 6,396 | 8,192 | — | 不直接入固件 | | `shutdown_power_empty.opus` | 19,970 | 20,480 | — | 不直接入固件 | | `signal_restored_business_resume.opus` | 10,996 | 12,288 | — | 不直接入固件 | | `standby_5min.opus` | 21,429 | 24,576 | — | 不直接入固件 | | `system_update_complete.opus` | 12,396 | 16,384 | — | 不直接入固件 | | `system_upgrading.opus` | 23,754 | 24,576 | — | 不直接入固件 | | `welcome_luck_ready.opus` | 25,325 | 28,672 | — | 不直接入固件 | | `wifi_password_wrong.opus` | 11,981 | 12,288 | — | 不直接入固件 | ## 领域网页资源 目录:`components/domain/assets/`。user_config.html 单独 EMBED_TXTFILES,不在素材包。 | 文件 | 文件字节 | 本机分配字节 | 尺寸 | 固件用途 | | --- | ---: | ---: | --- | --- | | `user_config.html` | 5,373 | 8,192 | — | 单独嵌入应用,文本尾部追加 NUL | ## 独立显示预览 | 文件 | 文件字节 | 本机分配字节 | 用途 | | --- | ---: | ---: | --- | | `docs/cat-face-screen-preview.html` | 5,225 | 8,192 | 文档/浏览器预览,不入固件 | | `docs/lcd-boundary-test-preview.gif` | 93,077 | 94,208 | 文档/浏览器预览,不入固件 | ## 实际入固件与构建快照 当前 PNG 白名单为 75 项,提示音为 32 项;已逐项对照 现有素材包名称及字节,确认本次台账快照与该包一致。资源变化后需重新核对构建, 不能只改本文数字。 | 项目 | 字节 | 计量说明 | | --- | ---: | --- | | 白名单优化 PNG 载荷 | 431,145 | 素材包内部像素文件 | | Opus 提示音载荷 | 385,758 | 素材包内部音频文件 | | 包头、条目头及名称 | 3,222 | 打包元数据 | | platform_assets.pack | 820,125 | 上述三项之和,包含于应用 | | 六份在用 RLE 载荷 | 69,512 | 独立 C 数组链接入应用,不在素材包内 | | 应用镜像 | 3,105,872 | HUD 更新后的本次构建,包含 PNG、Opus、RLE、网页、代码及其他链接数据 | | 单个 OTA 槽 | 4,718,592 | 应用余量 1,612,720 字节;不能把两个槽余量合并供一次 OTA 使用 | | 独立语音模型镜像 | 2,681,351 | model 分区容量 3,145,728 字节,不属于应用内图片包 | 文件总大小不能当作“当前整个 Flash 用量”;NVS、分区表、引导程序、模型和 其他分区另计,设备内容还取决于实际烧录/OTA。临时构建产物不应提交。 ## listening 压缩与旧方案对照 旧三张原 PNG 共 45,445 字节;旧优化 PNG 共 14,681 字节;新四份图层原始 RGB565+A8 像素共 255,528 字节,新 RLE 载荷共 50,176 字节。相对原始像素 减少约 80.4%,但比旧优化 PNG 多 35,495 字节,不能称为“比旧方案省 Flash”。 原旧 PNG 后备没有移出素材包,所以实际固件增量为 53,696 字节,不是仅比较 新旧素材大小的差。九张局部缓存共 335,412 字节 PSRAM,静态底图 87,822 字节, 常驻像素共 423,234 字节;初始化额外关键图 167,706 字节,随后释放。 当前没有新增 DMA 暂存区、合成缓冲或任务。它是用户已接受的空间换流畅度方案。 ## 新增时间字形与电池图标(2026-10-09 HUD 更新) 素材来自用户提供的 `battery_icons.zip`,只导入 `out/40x20/` 中明确列出的十张 PNG, 80×40 版本不入工程。源图与优化 PNG 均不加入 `platform_assets.pack`,避免重复计费; 实际链接生成的 C 只读数组。以下新增项不包含在上面的旧目录汇总里。 | 源图名称 | 原 PNG 字节 | 优化 PNG 字节 | 调色板+游程载荷字节 | | --- | ---: | ---: | ---: | | `battery_1.png` | 704 | 687 | 805 | | `battery_25.png` | 815 | 800 | 995 | | `battery_50.png` | 594 | 571 | 927 | | `battery_75.png` | 601 | 574 | 919 | | `battery_100.png` | 543 | 524 | 806 | | `battery_charging_1.png` | 1,206 | 1,197 | 1,300 | | `battery_charging_25.png` | 1,367 | 1,344 | 1,500 | | `battery_charging_50.png` | 1,333 | 1,319 | 1,363 | | `battery_charging_75.png` | 1,451 | 1,437 | 1,477 | | `battery_charging_100.png` | 1,359 | 1,353 | 1,350 | | 合计 | 9,973 | 9,806 | 11,442 | 源 PNG:`components/platform/assets/status_hud/battery_source/`,十文件分配空间共 40,960 B;优化 PNG:同目录 `battery_optimized/`,十文件分配空间共 40,960 B。 颜色先按现有 RGB565 精度转换,完整保留 A8;调色板编码对 RGB565+A8 无损, 不等于 RGB888 转 RGB565 无损。游程往返与 PNG 优化像素一致性由生成脚本验证。 十图标原始 RGB565+A8 为 24,000 B,索引游程为 11,442 B,减少约 52.3%; 但比优化 PNG 大 1,636 B。这里选的是无需运行时解码缓存的折中,不是最小文件编码。 时间字形来自已安装 LVGL 的 `lv_font_montserrat_14.c`,只提取数字、冒号、横线, 4-bit Alpha 位图 425 B,十二个描述共 96 B(ESP32-S3 对象验证),原始字号不放大。 许可说明保留在 `status_hud/LVGL-LICENSE.txt`(不入固件)。 生成脚本 `tools/prepare_status_hud_assets.py`,验证用 `--check`;输入字体版本/格式 变化会触发断言,不能静默生成错误字形。 实际编译 `components/platform/src/generated/lcd_status_assets.c`:文本文件 75,630 B, 目标对象只读载荷 12,083 B,包括 425 B 字形、96 B 字形描述、11,442 B 图标数据、 120 B 图标描述;目标对象可写 data/BSS 为 0。它不属于上面的六份表情 RLE。 PNG 包仍为 820,125 B、75 PNG/32 Opus;只读资产已包含于整个应用,不再重复相加。 完整应用从 3,094,176 B 增至 3,105,872 B,净增 11,696 B(包含旧字形/绘制代码 移除和段对齐变化),OTA 槽剩余 1,612,720 B。新增常驻/初始化像素 PSRAM、普通堆、 内部/DMA 专用缓冲及静态可写数据均为 0;复用既有 HUD 和行缓冲。 局部栈、CPU 耗时和设备最低内存尚未新增实机测量,不应写成整体资源零成本。 ## 新增抽签分层资产(2026-10-10) 以下新增项不合并进上面的历史目录汇总。旧抽签十八张源 PNG 共 372,012 B、 优化 PNG 共 136,226 B,全部保留且后备仍入包。PNG 包仍 820,125 B,不重复 加入本次拆分层。生成器使用优化 PNG 保存拆分层,但实际编译 LZ4,不是 RLE。 图层目录:`components/platform/assets/lcd_layers/chouqian/`。 | 图层 | 尺寸 | 优化 PNG B | 本机分配 B | RGB565+A8 B | LZ4 载荷 B | | --- | --- | ---: | ---: | ---: | ---: | | `pile.png` | 208×76 | 9,594 | 12,288 | 47,424 | 9,417 | | `back.png` | 63×113 | 2,999 | 4,096 | 21,357 | 4,179 | | `edge.png` | 41×110 | 2,957 | 4,096 | 13,530 | 4,389 | | `front.png` | 100×190 | 7,579 | 8,192 | 57,000 | 10,774 | | `question.png` | 27×50 | 730 | 4,096 | 4,050 | 817 | | `rod.png` | 169×56 | 1,584 | 4,096 | 28,392 | 2,094 | | `text_buyun.png` | 48×104 | 2,502 | 4,096 | 14,976 | 2,638 | | `text_heping.png` | 48×104 | 2,784 | 4,096 | 14,976 | 2,851 | | `text_shangshang.png` | 48×104 | 2,132 | 4,096 | 14,976 | 2,069 | | `text_xiaoji.png` | 48×104 | 2,091 | 4,096 | 14,976 | 2,210 | | `text_zhongshang.png` | 48×104 | 2,094 | 4,096 | 14,976 | 2,109 | | 合计 | 十一图层 | 37,046 | 57,344 | 246,633 | 43,547 | `layout.json` 1,929 B、分配 4,096 B,不入固件;目录共十二文件 38,975 B、 分配 61,440 B。预览工具默认输出 `/tmp/lucky-fortune-preview`,不是编译资产。 源十八 PNG 与本次拆分层不是相同数量的无损比较;背景/几何做了小幅性能适配。 LZ4 对转换后的 RGB565+A8 无损且完整保留 Alpha,但比拆分 PNG 多 6,501 B, 不能称为压得最小。生成器及实际 C 解码均做往返校验,原旧 PNG 不覆盖。 生成 C:`components/platform/src/generated/emote_gfx/fortune_assets.c`,文本 270,251 B、分配 270,336 B;目标对象只读段总计 43,831 B(载荷、176 B 资产 描述、20 B 目录指针、88 B 目录名),可写 data/BSS 为 0。生成 C 不手改。 本次完整应用 3,157,728 B,较 HUD 提交 3,105,872 B 增加 51,856 B,包含 资产、几何/解码、播放与 UART 显示测试命令的代码及对齐;单 OTA 槽余量 1,560,864 B。所有只读资源已经包含在应用里,不能再相加。 六共享层解压 171,753 B、一次仅选一份签文 14,976 B、208×220 RGB565 局部光栅缓冲 91,520 B,像素峰值合计 278,249 B PSRAM;目标编译器场景 描述 148 B 也在 PSRAM,明确申请峰值 278,397 B,不含堆管理。 正常结束/取消后释放,新增常驻像素为 0。临时 GFX 图片对象/状态/链节点 普通堆请求合计 96 B,不含分配器;LCD 静态可写数据增加 4 B 指针, 无新增内部/DMA 缓冲、合成整屏缓冲或任务;局部栈/CPU/实际最低余量另测。 解绑故障时保留绑定资源到重启,不冒充完整释放。 五签主机回归、IDF 5.5.4、日志关闭/GFX 关闭编译与应用烧录校验通过。 设备启动确认缓存成功、25 秒采样无显示锁/传输/崩溃错误;未捕获抽签运动 日志,FPS/五签观感/并行负载最低内存仍待实机验收。详见 [抽签开发说明](抽签分层动画开发说明.zh-CN.md)。 ## 维护与后续清理(通用) 1. PNG 新增/替换按 [图片优化流程](lcd-image-asset-optimization.zh-CN.md) 生成并验证, 不能编辑优化产物代替修改源图。GFX 新增/替换使用对应压缩脚本和编码往返测试。 2. 改白名单、图层、生成 C、音频或预览时更新分类、文件字节及载荷;重新构建时 同步镜像/包快照,记录常驻与峰值内存。不要把本文静态表当自动一致性校验。 3. 当前后备 PNG 全保留;历史 C 与旧副本只标记,未授权不删。删除前核对引用、 GFX 关闭/故障后备以及收益,经过用户确认并完成迁移验收后再修改构建及资源表。 4. 清理优先区分“不再入固件”与“删除可编辑源文件”。前者有 Flash 收益,后者 可能仅省开发机空间,不能混为一谈。保留 Git 可恢复记录,并验证正常/故障路径。 5. 这里没有安排立即清理、批量迁移所有表情或加入完整字库;当前仅按用户要求提取 Montserrat 数字子集。