2026-10-30。适用实验为HINK-T037A02-A1 / EPD037A02、JD7601、720×480。包含实验源图预处理、本机实时对照工具,以及后续 Film / 头像编辑接入;没有修改设备UI、LUT、电压、刷新相位或设备显示版本3.2.5。本轮不推送、不发布、不构建APK。
源图EXIF转正/同一裁剪与LANCZOS缩图 → 共享本屏白点/暗端 → 可选明暗拟合 → 可选暖色收缩 → 原联合ABC凸包映射 → 选择完整ABC编码 → 三相关联空间抖动。
测量palette不减黑、不裁剪,也不对三个相位分别处理RGB。当前采样仍属于未独立表征的相机相对空间,不是精确反射色度。512配方验证与这些限制见三相空间混色。
tools/epd-panel-lab/epd_source_fit.py的fit_source()复用现有sRGB线性化。以名义线性Y的CIE L*全范围做固定display映射,黑端使用已有ABC最低观察亮度floor、白端使用共享白点1;随后与原线性baseline按0..1强度混合。
本次floor为0.0239491,对应名义L*约17.4365。没有退回较亮的control黑锚,也没有把略高于白点的噪声/彩色候选当作新的白参考。精确测量palette仍完整保留。
不进行1%/99%硬裁尾;纯色、低对比图片也不依赖直方图跨度。灰阶输入全范围在源图处理阶段严格单调,黑白端点保持。为避免不合法的名义RGB分量,仅在需要时沿中性轴收缩色差,保持定义的目标Y。
这不是完整的自适应Lab a/b处理或epdoptimize的逐项移植。其范围拟合实现提供了方法参考;本轮选择不裁尾的固定范围,便于用同源阶梯做单变量验证。
独立强度0..1,默认0。平滑蒙版结合暖色通道差、彩度与中高亮度;沿中性轴收缩,保持源图处理所定义的线性Y。它不检测人脸,也可能影响木材、红花等暖色,应仅在确认肤色明显发黄时开启。
warmMaximumYResidual仅描述预处理数值误差。后续凸包映射与离散编码仍可能改变局部亮度,不能据此声称最终实屏亮度严格不变。扫描纸张用的warmPaper不能替代本功能。
启动tools/epd-panel-lab/tone_preview.py,仅监听127.0.0.1;页面有基线、仅明暗、明暗加可选暖色三列,共用同一源图、色板和Bayer参数。暖色默认关闭,关闭时后两列一致。提供原照片与包含照片、三组灰阶、暖色/中性/冷色控制的综合卡。
相同源RGB只求解一次几何,再恢复完整480×720排列后做坐标相关Bayer采样,不降分辨率。对照已验证优化前后编码逐像素一致。源色板与图片在服务启动时固定,更换数据需要重启;预览缓存仅保留12项,并有清理按钮,退出进程即释放。
浏览器单请求队列合并连续输入,仅最后revision可更新结果;参数变化时禁用导出。导出捕获已经显示的参数快照,与预览共用计算函数。页面不自动连接设备、不烧录、不发布。
python tools/epd-panel-lab/tone_preview.py --palette path/to/experimental-palette.json --image photo.png --crop 0 0 480 720 --output .output/tone-exports --port 8775
python tools/epd-panel-lab/abc_spatial_render.py --palette path/to/experimental-palette.json --image photo.png --crop 0 0 480 720 --range-strength 1 --warm-strength 0.5 --bayer-size 16 --output .output/tone-render
python -m pytest tools/epd-panel-lab/test_epd_source_fit.py -q
新CLI参数默认都为0,保留旧baseline;非法强度给出参数错误。导出ABC9仅用于已经归档的诊断固件,正常固件不应打开私有文件。上述记录对应先完成的实验工具阶段。生产 Film 与头像编辑的后续接入见下节;实验 Qual 三相的实屏证据不等于生产路径验收,不能把本次 ABC 端点直接套给快刷。
五项直接合同检查通过,覆盖关闭时逐元素保持旧baseline、256级灰阶单调及端点、暖色处理的名义Y保持与中性/蓝色控制、纯色/饱和输入与palette不修改、非法参数。另验证精确RGB去重与原全像素几何生成相同编码。
网页检查已确认暖色默认关闭、参数连动、连续调节后最终参数一致、全部480×720图载入、同图三组导出,以及缓存清理后恢复。综合卡本次热更新约422ms,清缓存后完整三组约1189ms,为该机器本轮观察值,不作为跨设备性能保证。
本地证据位于.output/ark/abc-tone-20261030/。网页导出B/L/W三份691232B实验文件,配置分别是范围/暖色0/0、1/0、1/0.5,Bayer16。实屏拍摄及恢复状态在本轮physical运行记录中,只有实际完成的步骤才能作为验收。
physical-1在OTA擦除阶段失去BLE连接:串口中断开在擦除完成之前,主机最后回包为0x59、未收到首次0x42屏障,没有进入数据发送。正常运行固件未被替换。physical-2核对此零数据证据后从已完成擦除的同一会话继续;实验ELF核验一致,随后三份文件确认保存、按名打开并完成原三相与关屏。
三组各做一次真实面板刷新,每组取九个UVC摄影帧中位图;九帧不代表九次面板复刷。曝光、白平衡等九项manual参数记录一致。整图完整、方向正常。共用透视校正,不逐图调色。
| 相机编码亮度首末阶跨度 | 基线 | 仅明暗拟合 | 加50%暖色收缩 |
|---|---|---|---|
| 暗部0..32 | 0.777 | 5.745 | 5.876 |
| 中间调96..160 | 46.864 | 56.183 | 54.863 |
| 高光223..255 | 20.106 | 17.842 | 18.734 |
本次暗部阶梯更容易分开,但100%明暗强度也收窄了高光跨度,不能说所有区域都更好。强度应保留可调,不据此直接确立生产默认值。中间调变亮/层次变化同样属于取舍。
三块暖色控制的相机相对暖偏指标(R+G)/2−B,从明暗版的36.83/47.81/48.82降至暖色版的20.21/27.25/23.96。灰阶三行以及中性、冷色三个控制块的发送编码逐像素完全相同,说明这些控制没有被暖色功能重写;实拍数值仍有时间/摄影漂移,不要求相机读数完全相等。
这些只是固定拍摄条件下的编码相机亮度与相对暖偏,不是反射率、校准色差、人眼阈值或512色验收。摄像头失焦限制了细节质量判断,肤色是否更自然仍需要主观选择。本轮基本验收是明暗/暖色选项确实产生了预期方向的实屏变化,且文件、方向和三相显示链路正常。
三份临时文件已按上传前快照清理,原16张图片和1个动画的集合一致。正常固件恢复后实读ELF为b7120217633972e13facafba93bf7140f12ed214b4826fce590516be1126d41c、显示版本3.2.5;原N2A900A1.film加载、HAL完成和关屏已核对,并以新UVC照片确认原图恢复。串口与摄像头已释放,physical-2/status.json为complete。
Flutter Film、Flutter 通行证头像编辑、ForFilm Film 与网页头像编辑增加两个独立选项:
处理顺序为原有裁剪/旋转/缩图、手动亮度/对比度/饱和度,再做本次预处理,最后进入原有量化/抖动。两项均为 0 时立即保留原字节路径;alpha 不变。黑白模式不应用这两项。SZ 已经有范围处理,因此关闭重复的范围拟合,仅保留可选暖色收敛;原 SZ 使用原图的分支也保持该输入语义。
Flutter 对新选项开启后的构图预览与导出共用 adjustFrameCompositionRgba。修改参数时保留上一张有效预览,结果完成后以最新 revision 替换,旧任务不得覆盖新参数。图像输出仍由原来的转换链路生成;像素处理完成的即时性受源图大小和运行设备影响,不保证显示器刷新率。关闭选项时沿用原来快速绘制的构图预览。
头像继续使用 Film 自适应量化和已有高质量缩图,编辑参数保存在本地草稿中。设备端仍接收原有头像文件,通行证继续 ColorFast;本次未新增文件格式、协议命令或刷新波形,也未将私有 ABC9 文件送入正常固件。
名义 sRGB / 原六色路径与测量色板路径分开处理:前者把白参考归一为 1,并使用对应模式的相机相对黑/白亮度比;后者使用所选色板自身黑白 RGB,不混用其它相机链路的绝对 RGB。当前参考值为:
| 路径 | 名义黑端 Y | 名义白端 Y | 来源 |
|---|---|---|---|
| 原六色 Film | 0.0814372764 | 1 | 本次原六色黑白控制块 |
| ColorFast / 彩色头像 | 0.1034168376 | 1 | 本次 Fast 黑白控制块 |
| 旧版 ColorQual | 0.0995761509 | 1 | 原 A/A/C 控制的 black3 / white15 |
以上不是反射率,也不是完成相机表征后的色度值。本次 UVC 固定曝光、增益和白平衡,但拍摄仍偏暗,原六色黑块存在单通道触底;这些比值属于暂定相对参考。需要改善照明和摄影条件后再复测,不能用它确立生产默认强度或宣布精确校色完成。也没有把实验 ABC 最低值 0.0239491 当成其它模式的黑端。
tester.runAsync 后三项相关测试通过。生产接入代码为 flutter_app/lib/source_image_fit.dart 与 tools/ForFilm/js/source-fit.js;本地黑白参考及恢复证据位于 .output/ark/production-fit-20261030/。512 色三相方案仍独立保留在实验线上,本次接入没有据此声明已实现 512 个实屏可辨颜色。