文件
paintfcp-fxplug/docs/项目交接.md
T

23 KiB
原始文件 Blame 文件历史

大鱼人像美化项目交接

更新时间:2026-10-22,Asia/Shanghai。项目根目录:/Users/dayu/Documents/PaintFCP。

当前正式版本为 1.2.0(构建 14),APP 与 PKG 均已完成正式签名、公证和票据验证,APP 已安装,公开源码及文章已发布。没有待完成的发布阻塞项;后续工作应从新的用户反馈或下述已知差异继续,不必重新制作封面、重发文章或重复安装现有版本。

代码由 OpenAI + Codex 全程编写,站长仅参与调试和测试。文章和仓库须保留这个表述,不使用“站长原创代码”等说法。免费版本无需账号、激活码或付费授权;“自动注册”指系统插件注册。

本交接整理前,工作区干净,main、origin/main 与 github/main 均为 189a5d7634aa69db54330c90f8711b05d8e44b10。这是文档新增前的基线;最新文档节点以 git log -1 和远端引用为准。

先读和先查

接手时先查看 git status --short --branch、git remote -v 和最新提交,确认没有其他聊天的未提交改动。只读核对正式 APP 版本与模板目录,再决定是否需要编译或操作宿主。单纯修改文档不需要重建、重新公证或打开 Motion/FCP。

当前状态以本交接、恢复说明、验证记录 和最新版本回执为入口。docs/analysis 与旧版本回执保留了研究过程,其中“待修复”“待测试”可能是历史状态;例如 1.2.0 的 release-plan.md 是发布前计划,实际完成情况看 native-qa.json 和交付回执。

入口 用途
README 产品介绍、使用与版本变化
恢复说明 精确源码节点、依赖、远端恢复记录
GitHub 同步说明 两个远端、公开克隆及 Release 验证
1.2.0 交付回执 签名源码、公证、正式安装与清理结果
1.2.0 原生验收 启动器与 FCP 实测范围
1.1.2 原生验收 面板、短脸、下颌骨和连续预览验收
第三方资料与许可 MIT 范围、Apple 依赖与宣传素材边界

固定身份与安装位置

项目 当前值
显示名称 大鱼人像美化
Xcode 产品名 beatygril,保留现有拼写
APP 版本 1.2.0 / 14,arm64 与 x86_64 通用版本
唯一正式 APP /Library/Plug-Ins/FxPlug/beatygril.app
主 Bundle ID com.dayu.beatygril
嵌套插件 Contents/PlugIns/beatygril XPC Service.pluginkit
插件 Bundle ID com.dayu.beatygril.fxplug
滤镜 UUID FB14B0E6-59B2-4836-916F-CD0C559E9241
自定义面板参数 ID 210
FCP 效果分类 大鱼磨皮瘦脸 → 大鱼人像美化
Motion 原生滤镜分类 大鱼 → 大鱼人像美化
签名团队 B3W25FX5H5

当前 FCP 模板为:

/Users/dayu/Movies/Motion Templates.localized/Effects.localized/大鱼磨皮瘦脸/大鱼人像美化/大鱼人像美化.moef

源码模板仍在 Templates/大鱼人像美化/,脚本和测试使用这个路径。磁盘安装分类与源码目录层级不同是有意保留。旧的 Effects.localized/大鱼/大鱼人像美化 不是当前安装位置。

不要在 /Applications、用户级 FxPlug、Debug 或其他目录再留同产品外层 APP。替换前核对 Bundle ID 和来源;嵌套插件、Framework 及安装包内封装的有效载荷不属于重复安装。

源码结构

Xcode 工程:beatygril/beatygril.xcodeproj。外层 scheme 为 Wrapper Application,插件 target 为 XPC Service。

下表插件文件均位于 beatygril/beatygril/Plugin/。

文件或目录 职责与修改入口
beatygrilPlugIn.m FxPlug 参数、宿主 action、图像适配、渲染状态与整体混合
PGFaceProcessor.m Vision 检测、76 点、自动跟随、几何稳定、局部变形和几何蒙版
PGBeautyRenderer.m 磨皮、肤色、细节、牙齿和眼睛等外观处理
PGInspectorView.m AppKit 卡片、滑杆、数值框、开关、重置和连续提交
PGInspectorState.m 面板完整状态、NSSecureCoding、复制与插值
PGFaceSelectOSC.m 画布选脸与检测框等屏幕控件
PGParameterIDs.h、PGBeautyTypes.h 稳定参数 ID 和共享设置结构
../Wrapper Application/AppDelegate.m 主 APP 说明图、系统注册与三秒退出
../Wrapper Application/Resources/LauncherInfo.png 主 APP 古风说明图
Templates/大鱼人像美化/(仓库根) FCP 效果工程、标准占位图及缩略图
tests/、scripts/test*.sh(仓库根) 离屏像素、几何、宿主适配与面板测试

几何和外观内核由 Objective-C 源码构造 Core Image kernel;没有复制目标插件的 metallib 或私有模型。Xcode 使用文件系统同步分组,添加文件时核对 target 排除项,防止把插件实现编入外层 APP,或把启动器资源与 AppDelegate.m 编入插件。

自动跟随与脸型修复

识别和转脸

当前使用 Apple Vision VNDetectFaceLandmarksRequestRevision3 与 VNRequestFaceLandmarksConstellation76Points。实时渲染自动检测并关联主要人脸,结合防跳范围、关键点稳定、失检保持和几何历史;不需要先点击分析。多人模式另走多人几何处理。

目标插件的静态证据支持 Vision 点阵与局部二维变形,已检查的瘦脸路径没有证明存在显式 yaw 切换或完整 3D 姿态模型。侧脸适应主要来自轮廓与五官点随姿态改变,不能宣称已确定某个第三方神经网络或完全恢复原版模型。证据入口见脸型与转脸分析和自动跟随报告。

本项目几何历史只取当前请求之前的近时记录,原版还存在近未来历史分支;冷启动、热缓存、乱序渲染、同尺寸换源和多人交叉仍有差异边界。旧离线分析字段保留兼容,但当前新面板的渲染统一使用实时自动跟随。

已完成的四项局部算法

控制项 当前实现 防止回归的要点
瘦脸 76 点、17 组轮廓到鼻部或瞳孔锚点的局部逆向采样 不恢复整脸框水平挤压;保留尺寸增益、组顺序和逐步 clamp
下巴 68→38、67→37、66→36 三组局部位移 正值上收、负值延伸,保留正负不同系数
下颌骨 六组相邻轮廓半径的顺序局部位移 半径来自相邻轮廓点,方向锚点为 P29;不能同时求和替代逐步更新
短脸 P62 至 P72 的下半脸闭合区域,沿 P46−P48 鼻梁轴位移 正值收短、负值延长;不是太阳穴区域或脸框纵向压缩

这四项共享由实际图像像素尺寸计算的增益。完整合法 76 点缺失时,四项安全直通,不退回猜测的脸框场。图像与磨皮、肤色、牙齿、眼睛蒙版共用几何变形路径,避免效果与蒙版错位。

仍为近似实现的五项:大眼、窄脸、V 脸、颧骨、小头。 原版完整链为 thin → narrow → V → jaw → cheek → chin → short → small-head → eyes,本项目尚未完全恢复整条组合链的数学及顺序。用户单项验收不代表所有参数组合逐像素等价。详细索引、系数和独立数值场验证见下巴与坐标分析、短脸与下颌骨分析。

坐标约定

宿主 CI/IOSurface 链统一按 Y 向上处理;归档坐标标记为 hostCoordinateSpace=iosurface-ci-y-up-v1。不要仅看到 TOP_LEFT 标志就再翻转图像。局部几何中需要的归一化 Y 向下 UV 在同一 kernel 内成对转换,不改变宿主图像方向。

旧无标记分析档案不能靠补字符串伪装为新坐标。涉及位置的修改应同时检查非零 extent、图像宽高比、真实侧脸、歪头、正负参数和上下原点标签。历史“下巴作用在眼睛”“短脸和下颌骨作用在太阳穴”的问题已有相应修复,不应再用移动检测框来掩盖坐标或点索引问题。

面板与连续预览

界面由 AppKit 自绘磨皮、美白、瘦脸卡片及原生输入控件构成。FCP 模板只发布自定义面板 210 和两项署名信息,手动分析和多余平铺参数已隐藏;隐藏参数 ID 与旧归档仍须保留,以免破坏工程兼容。

面板交互必须在真实视图对应的 宿主 action 内 获取读写接口,不能缓存接口后在 action 外使用。每个发生变化的拖动步进都要在松手之前完成自己的 action;把整次拖动包在一个直到 mouse-up 才结束的 action 中,会再次造成松手后才更新。重复相同步进可去重。

PGInspectorState 保存完整且可安全归档的状态。未编辑面板时兼容旧文档参数,首次编辑采集当前设置;旧版各项独立关键帧曲线尚未自动迁移为新面板曲线。修改时同时检查数值 Return 提交、焦点切换、单项重置、宿主撤销和保存重开,不只看滑杆外观。

用户于 2026-10-22 明确确认“拖动中已持续更新”。该回复未指定宿主,覆盖至少一个原生宿主的按住拖动体验;宿主调度可能合并快速更新,不能写成每个鼠标事件必定显示一帧。

验证状态与开发命令

在项目根执行:

./scripts/test.sh
PAINTFCP_HOST_ASAN=1 ./scripts/test-host.sh
PAINTFCP_OSC_ASAN=1 ./scripts/test-osc.sh
PAINTFCP_INSPECTOR_ASAN=1 ./scripts/test-inspector.sh
python3 scripts/inspector-template.py audit 'Templates/大鱼人像美化/大鱼人像美化.moef'

1.1.2 完整回归为 1551 项:Beauty 49、Face 116、几何 796、宿主适配 ASan 335、OSC ASan 98、Inspector ASan 157。额外真实帧 ASan 专项 886 项包含重复基础用例,未计入 1551。28 种控制与原点组合核对了解剖位置,改变原点标签时输出逐字节一致。详见自动验证汇总。

验证范围 已完成结果与边界
Motion 1.1.2 正式插件、数值输入、重置、撤销、焦点和保存关闭重开;短脸与下颌骨隔离画面检查
FCP 1.1.2 正式面板启用、数值与重置;短脸和下颌骨分别隔离渲染,画面有响应
连续预览 模拟宿主确认 mouse-up 前发布中间状态;用户实际拖动已确认
主 APP 1.2.0 古风说明图和无障碍文字正确,窗口显示后计时三秒退出,系统注册成功
FCP 1.2.0 新启动后显示新缩略图,QA 工程加载滤镜、亮度调到 20%,画面正常无黑屏
Motion 1.2.0 未重新进行该版界面视觉验收;渲染和面板源码沿用已验收 1.1.2
安装包 有效载荷与正式 APP、四个模板文件一致;隔离脚本验证初装、替换锁定图和失败回滚

1.2.0 只修改外层启动器、版本与宣传资源,没有重新运行全部 1.1.2 自动测试,不能把历史测试写成该版全量重跑。原生 VoiceOver、旧独立关键帧迁移、多脸交叉、重遮挡和所有极端姿态仍未完整验收。

现有 PKG 未通过真实 installer 再次安装到当前用户目录:APP 由 deliver.py 安装,缩略图另行同步;PKG 的安装脚本在隔离目录执行,重定向用户身份、替代 chown 并跳过其中的真实 FxPlug 验证。正式 APP 的签名与发现另有真实验证。不要把隔离测试表述成完整系统安装实测。

用户测试视频位于:

/Volumes/DayuMedia 4TB/LCQ荒野乱斗/LCQ赛事回放/teen-with-blue-hair-smiling-at-beach-2026-10-02-18-55-48-utc.mov

该视频、宿主 QA 工程、截图、完整 AX 和人脸坐标仅保留在本机或忽略的 build/ 下,不是构建依赖,不要上传。仓库自动测试另有带来源说明的 NASA 公共领域样本。宿主验收在独立 QA 工程进行,避免修改用户工作时间线。

宣传图和缩略图

最终设计为虚构成年古风人物的面部近景,深青玉色与金色、下颌收缩线和箭头、跟随角标。文字包含“自动瘦脸、自动跟随、自动美颜”,已按用户反馈减小字号。保持与目标宣传人物的区别,不回用目标肖像。

资源 文件
项目封面 Assets/Artwork/portrait-cover.png
APP 说明图 beatygril/beatygril/Wrapper Application/Resources/LauncherInfo.png
大缩略图 Templates/大鱼人像美化/large.png,640×360
小缩略图 Templates/大鱼人像美化/small.png,192×108
生成记录 docs/design/artwork-manifest.json、artwork-prompt.json

这些是生成的宣传插画,不是真实美颜效果前后对比。文字已烘焙进 PNG,没有需要额外分发的可编辑字体依赖。

运行时模板目录必须包含 .moef、Drop Zone.tiff、large.png、small.png 四个文件。仅两张 PNG 设置 BSD uchg,不锁工程或目录。Git 和普通 ZIP 不保存该标志,手工恢复后需要重新设置:

chflags uchg "$HOME/Movies/Motion Templates.localized/Effects.localized/大鱼磨皮瘦脸/大鱼人像美化/large.png" "$HOME/Movies/Motion Templates.localized/Effects.localized/大鱼磨皮瘦脸/大鱼人像美化/small.png"
ls -lO "$HOME/Movies/Motion Templates.localized/Effects.localized/大鱼磨皮瘦脸/大鱼人像美化"

替换图前仅解除对应 PNG 的 uchg,替换后重锁。同步 .moef 前先比较用户磁盘最新文件与源码,保留手改,不能盲目覆盖。当前四文件 SHA-256 见安装包验证。本次交接核对时,正式 APP 为 1.2.0(14),两张安装缩略图均有 uchg。

Release 构建签名与安装

依赖为 Xcode 27.1、FxPlug SDK 4.3.4、PluginManager 1.7.4,最低 macOS 13。头文件和链接信息来自 /Library/Developer/SDKs/FxPlug.sdk/Library/Frameworks;嵌入的可运行框架来自 /Library/Developer/Frameworks。不要把 SDK 链接存根当作运行框架。

完整正式交付入口:

python3 scripts/deliver.py

脚本获取 /Users/dayu/.codex/app-delivery-locks/com.dayu.beatygril.lock,使用固定暂存 /tmp/paintfcp-build-20261021,记录到 build/delivery/。它构建通用 Release,由内到外签名 Framework、嵌套插件、外层 APP,验证严格签名,提交公证并要求 Accepted,粘附并验证票据,等待宿主退出后替换唯一正式路径,检查 Gatekeeper 与 PluginKit。默认停在 HOST_VALIDATION_PENDING,完成实际宿主验收及副本盘点后才回车进入清理。

选项 用途
--wait-for-hosts 保持交付锁,只读等待 Motion/FCP 自行退出,不操作或结束宿主
--user-tests 静态安装验证后清理已知生成副本,把原生效果验收明确保留给用户
--resume-prepared 仅恢复已有 Accepted、stapled 暂存产物;核对 CDHash、版本和产品源码未改变

运行脚本前先提交并推送待交付源码。用户已长期授权正式 Release 的签名、公证、安装,不必对相同范围重复询问。用户曾明确授权接手 Motion/FCP 验收,并允许需要释放插件时直接退出 Motion;涉及 FCP 工作工程仍应保护用户内容。本次交接没有操作宿主。

签名身份为 Developer ID Application: zhong luo (B3W25FX5H5),安装包身份为同团队的 Developer ID Installer。每次重新检查有效证书和私钥,不能退回临时签名。公证使用登录钥匙串中的 profile codex-dayu-notary-B3W25FX5H5;密码和私钥不在仓库,不能输出到聊天、日志或命令行参数。

1.2.0 APP 公证 ID:3999fe91-a80e-49d3-9ed0-4003b82f6f54;PKG 公证 ID:96a3d1be-a751-4fb8-b062-33a09c01ddf2,两者状态均为 Accepted。完整记录在 docs/verification/v1.2.0/。

交付锁不能绕过,也不能删除活跃持有者的锁。签名、公证或权限失败时保留原安装版。完成后只清理核对身份属于本产品的生成 APP、旧 APP 和公证 ZIP;最后的有界扫描覆盖 /Applications、两个 FxPlug 目录、项目及固定暂存路径,只发现正式 APP,不代表已经扫描所有卷。

PKG 与发布资料

正式包:releases/1.2.0/大鱼人像美化-1.2.0.pkg,5,011,005 bytes。

SHA-256  5bd77c28b3a7e54f3d4060be1f16bcb145d9bc4d6b9cfb9eb137c01130440243

GitHub Release 下载名为 Dayu-Portrait-1.2.0.pkg,字节相同,已匿名下载并核对哈希、Installer 签名和公证票据。

后续打包使用 /Applications/PKG工坊.app/Contents/MacOS/PKG工坊,本次版本为 CLI 1.4(8)。先读 /Users/dayu/.codex/skills/dayu-publish-article/SKILL.md 的当前打包规范及 CLI 帮助,使用独立发布副本。

资源输入应是分类根 大鱼磨皮瘦脸,内含 大鱼人像美化 和上述四文件;另外加入唯一正式已公证 APP。不要把更外层“发布版”容器作为分类输入,也不要把 PARAMETERS.json、VALIDATION.json、开发 README 混入运行模板。PKG postinstall 负责备份、解除旧图锁、复制、重锁并验证;失败回滚当前模板项目,不能扩大为整个安装包的原子回滚。

scripts/verify-release-package.py 是 1.2.0 专用验证脚本:依赖已展开的 build/pkg-expanded/Payload.pkg、当前正式 APP 和固定 build/pkg-isolation;不是接收任意包路径的通用工具。先阅读源码并准备展开目录,验证后清理展开出的额外 APP。当前 .gitignore 只为 releases/1.2.0/*.pkg 放行,下一版本的二进制入库或 Release 附件策略需明确处理。

文章及发布入口:

文章为“免费资源”,价格为 0,非会员可获取,特色封面为当前古风图;正文已有 GitHub 仓库和 Release 链接,保留免费开源、安装注册、三秒退出、故障排查及准确署名。FCPX APP 列表同步本次未启用。

文章另附历史源码 ZIP,对应 788ba0d5514595cf349af33074055d70b0754185,包含构建源码,排除 PKG 和 Git 历史;不是最新 main 快照。后续源码和署名修订以 GitHub main 为准。

scripts/publish-release.py 用于首次发布并保留 build/publish-operation.json 状态;已有 post_id 时不会重新提交正文,不要将它当成通用文章更新器。更新 15593 时先读最新正文及元数据,只提交所需字段,保持免费权限、下载、SEO 和其他未改字段;密钥只在进程内存中使用。具体发布流程继续遵循上述技能,不因接手文档自动重发。

Git 保存与恢复

本地远端 地址 说明
origin https://dayu.media/git/dayu/paintfcp-fxplug.git 保持为原远端及 main 上游;网站 Git 网关仍要求登录和有效会员
github https://github.com/FAMEDaYu/FCP-BeatyGril.git 公开仓库,匿名克隆可用,完整历史和七个标签已保存

本项目没有 LFS 或子模块。不要改写原远端、强推、覆盖现有标签或把双端同步描述成自动定时同步。

节点 完整提交 SHA
1.2.0 正式签名源码 696d5f39b30404ed5d1d4c25f61d17475c7fc91b
v1.2.0 发布标签 3c7261c3a861b9f4704cfb36055d7b500c239dab
1.1.2 已验收渲染及面板源码 a2e33e8e00a99b95dc29d67a819cb0897eda5756
GitHub 独立匿名恢复节点 356683b41af702d6c0143ad7fa5f540d752d6e14

标签包含相应发布资料,签名源码节点表示实际构建代码;两者不同是正常的。后续文章、署名、GitHub 和交接文档提交没有改变已签名产品。GitHub 恢复核验覆盖 197 个受跟踪文件、全部七标签及 strict/full fsck;大鱼 v1.2.0 恢复核验为该历史节点的 183 文件,不把不同节点的文件数混用。

恢复正式发行源码可以:

git clone https://github.com/FAMEDaYu/FCP-BeatyGril.git
cd FCP-BeatyGril
git switch --detach v1.2.0

需要最新文档时留在 main。继续开发则基于所需节点创建 codex/ 前缀分支。Apple SDK、有效签名证书和公证凭据需在新机器单独安装或恢复;Git 不包含它们。

保存本任务文件可用 python3 scripts/checkpoint.py '提交说明' <明确文件...>,该脚本只对当前分支提交、推送并核验 origin,不会推送 GitHub,也不要在外层已持有同一 origin 锁时嵌套调用它。GitHub 还需单独推送当前分支,发布时明确推送新的标签,两端都读回对应引用与本地 SHA 比较。

提交和推送使用 /Users/dayu/.codex/git-backup-locks/ 中的共享互斥锁。锁名为无凭据、转小写并去尾斜线的完整 HTTPS 仓库地址(保留 .git)的 SHA-256 加 .lock,owner.json 记录 PID、cwd、remote;不清理其他仍在工作的持有者。

本机 GitHub CLI 为 /opt/homebrew/bin/gh,本次已由用户登录 FAMEDaYu,HTTPS 凭据在钥匙串中。接手时用 gh auth status 确认;连接器曾使用其他只读账号,不能用连接器权限推断 CLI 登录失效,也不打印令牌。大鱼仓库管理使用 dayu-git CLI,指南在 /Users/dayu/Documents/dayu-git/README.md 与 API.md。

恢复范围仅覆盖已经提交、推送并核验的节点与实际上传的必要资源。用户素材、忽略的 build、私钥不在此范围。大鱼服务器当前只有手动备份,不能据此承诺本机与服务器同时损坏也可恢复。

后续开发优先入口

当前无需自动执行以下工作;收到相应需求后再开展。

  1. 用户继续反馈脸型差异时,先隔离单项、核对实际加载版本、原点与 76 点解剖索引,再分析目标对应局部数学。优先补齐仍近似的五项及组合顺序,不能仅调大整体强度。
  2. 跟随异常时,围绕多人交叉、遮挡、切镜、冷缓存、乱序和同尺寸换源制作明确样本,比较主体关联和历史选择,而不是先增加手动分析按钮。
  3. 面板改动时,覆盖真实 action 生命周期、持续步进、输入焦点、撤销、重置、保存重开及旧工程;补充原生 VoiceOver 和实际关键帧交互验收。
  4. 新版本发布时,沿用固定身份和唯一正式路径,记录本次真实签名源码,完成 APP/PKG 公证与恢复验证,更新原文章和两个远端,不覆盖旧标签。

目标参考为 /Applications/MSE18V2.app 及用户原 MS 模板,仅用于只读分析。现有 REA、CPU 和 AIR 证据在 docs/analysis/;新分析按 reverse-engineer-anything 技能继续。不上传或打包原版 APP、模型、metallib、用户视频和完整人脸坐标。

2026-10-22 用户已纠正“瘦身”为新增面板参数,目标仍是 /Users/dayu/Downloads/MSE18V2.app(2.4.0 / 20260724150000)。现沿 codex/new-beauty-controls 接入连续五官保护、非肤色区保护和局部微细锐化,保留旧 30/17/4 参数及归档;见新版磨皮参数迁移。本段更新时 1.3.0(15)源码和自动验证已完成,正式安装仍为 1.2.0;最终交付状态以新回执为准。原瘦身目标核对只保留历史,不再是待澄清项。