diff --git a/.gitignore b/.gitignore index d2bca6e..4ac6292 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ venv/ # Local reference binaries stay outside source history reference-binaries/ + +# Reviewed signed release installer (intentional distribution artifact) +!releases/1.2.0/*.pkg diff --git a/README.md b/README.md index bca2fa7..40e24cb 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ## 使用 -正式安装路径为 `/Library/Plug-Ins/FxPlug/beatygril.app`。Motion 滤镜分类为「大鱼」,滤镜名「大鱼人像美化」。Final Cut Pro 在「效果 → 大鱼 → 大鱼人像美化」中使用配套 Motion 效果,模板目录必须同时保留 `.moef` 与 `Drop Zone.tiff`。美化会随当前帧的人脸自动更新,不需要点击分析。界面以磨皮、美白、瘦脸三张卡片呈现,默认跟随主要人脸;多人模式对多脸变形。单项眼睛可暂时停用并保留数值,右侧箭头恢复默认;磨皮半径、饱和度、锐化和整体混合等收在「更多设置」。旧手动分析与调试参数仅保留隐藏兼容,实际输出统一使用实时自动跟随。 +正式安装路径为 `/Library/Plug-Ins/FxPlug/beatygril.app`。Motion 滤镜分类为「大鱼」,滤镜名「大鱼人像美化」。Final Cut Pro 在「效果 → 大鱼磨皮瘦脸 → 大鱼人像美化」中使用配套 Motion 效果,模板目录必须同时保留 `.moef` 与 `Drop Zone.tiff`。美化会随当前帧的人脸自动更新,不需要点击分析。界面以磨皮、美白、瘦脸三张卡片呈现,默认跟随主要人脸;多人模式对多脸变形。单项眼睛可暂时停用并保留数值,右侧箭头恢复默认;磨皮半径、饱和度、锐化和整体混合等收在「更多设置」。旧手动分析与调试参数仅保留隐藏兼容,实际输出统一使用实时自动跟随。 ## 开发和恢复 @@ -21,7 +21,7 @@ xcodebuild -project beatygril/beatygril.xcodeproj -scheme 'Wrapper Application' 工程从 `/Library/Developer/SDKs/FxPlug.sdk` 读取头文件与链接信息,从 `/Library/Developer/Frameworks` 嵌入可运行的 Apple 框架。构建默认使用团队 B3W25FX5H5 的 Developer ID Application 身份;正式交付使用 `python3 scripts/deliver.py` 完成公证、粘附和安装;安装前先关闭 Motion 与 FCP,脚本在检测到宿主仍运行时保留原安装版并停止。原生验收完成后继续脚本的清理阶段,清除临时注册与 APP 副本。 -私有源码仓库:`https://dayu.media/git/dayu/paintfcp-fxplug.git`。恢复入口见 [RECOVERY.md](RECOVERY.md),当前验证记录见 [验证记录](docs/验证记录.md)。原始模板保存在 `baseline-20261021` 标签。 +源码仓库:`https://dayu.media/git/dayu/paintfcp-fxplug.git`。恢复入口见 [RECOVERY.md](RECOVERY.md),当前验证记录见 [验证记录](docs/验证记录.md)。原始模板保存在 `baseline-20261021` 标签。 ## 1.0.5 瘦脸修复 @@ -50,3 +50,11 @@ xcodebuild -project beatygril/beatygril.xcodeproj -scheme 'Wrapper Application' 面板改为先在真实视图的宿主 action 内取得读写接口,修复控件一直禁用的问题。短脸改用76点下半脸闭合区域和鼻梁位移轴,下颌骨改为六组相邻轮廓半径的局部位移,移除旧脸框近似场;详见[分析](docs/analysis/短脸与下颌骨分析.md)。其余五项脸型仍保留近似实现,不能将局部算法恢复视为全部效果逐像素一致。 1551项回归通过,含335项宿主适配、98项OSC和157项面板ASan检查;28种控制/原点组合均核验实际解剖位置,改变原点标签时逐字节一致。额外真实帧ASan专项886项通过,含重复基础用例。1.1.2(13)已完成正式签名、公证、票据、唯一正式路径安装及副本清理。Motion/FCP原生数值、重置和隔离画面响应已验证,Motion保存重开与撤销通过;用户于2026-10-22实测确认“拖动中已持续更新”;未指定测试宿主,不扩张为两个宿主分别完成动态排帧验收。连续步进在松手前提交已通过独立模拟宿主验证,不能将它等同于每个鼠标事件都排出一帧。 + +## 1.2.0 免费开源发布 + +采用 MIT 许可(第三方资源边界见 THIRD_PARTY_NOTICES.md)。安装包同时包含唯一正式 FxPlug4 APP 和 FCP 效果模板;自动注册,无需账号、激活码或付费激活。主 APP 显示古风说明图,窗口显示三秒后自动退出,不影响独立的宿主插件服务。封面人物是生成的宣传插画,非效果前后对比。 + +`large.png`(640×360)和 `small.png`(192×108)与 `.moef` 同目录,安装器安装后重新锁定。手动复制或从 Git 恢复模板时,需对这两个 PNG 重新执行 `chflags uchg`,不能锁定整个模板目录。FCP 当前分类为「大鱼磨皮瘦脸」,Motion 原生滤镜分类仍为「大鱼」。 + +仓库属性已设为公开;大鱼站统一 Git 网关目前仍要求登录并校验会员,公开属性并未绕过网关。发布文章另提供可公开下载的当前源码快照,不依赖 Git 登录;安装包始终免费。 diff --git a/RECOVERY.md b/RECOVERY.md index 0e87124..f560fea 100644 --- a/RECOVERY.md +++ b/RECOVERY.md @@ -1,6 +1,6 @@ # 恢复说明 -- 私有远程:`https://dayu.media/git/dayu/paintfcp-fxplug.git` +- 源码远程:`https://dayu.media/git/dayu/paintfcp-fxplug.git` - 本地项目根:`/Users/dayu/Documents/PaintFCP` - 工作分支:`main` - 修改前版本标签:`baseline-20261021`,完整 SHA:`1746f38398588e2367abb37a5c2b31cb64042429` @@ -12,7 +12,7 @@ ```sh git clone https://dayu.media/git/dayu/paintfcp-fxplug.git cd paintfcp-fxplug -git switch --detach v1.1.2 +git switch --detach v1.2.0 ``` 需要继续编辑时,基于该提交创建新分支。安装 Xcode 与 Apple FxPlug 4 SDK;盘点版本和构建入口见 README.md。SDK/framework 为 Apple 外部开发依赖,应重新安装匹配版本。证书、私钥和公证凭据需从独立加密备份恢复或重新申请;Git 不包含它们。 @@ -88,3 +88,11 @@ FCP模板从 `Templates/大鱼人像美化/` 恢复,将 `.moef` 和 `Drop Zone Motion/FCP原生验收范围及未完成项见`docs/verification/v1.1.2/native-qa.json`:数值、重置、隔离短脸/下颌骨响应通过;Motion撤销和保存关闭重开通过。连续步进已改为每步完整宿主action,模拟宿主确认鼠标松开前可发布中间设置;用户于2026-10-22实测确认拖动中持续更新;未指定宿主,未测量逐事件排帧时序。后续人脸素材和全AX只保留本机build,不是产品依赖或上传资源。 最终标签`v1.1.2`完整提交SHA为`e9fddda5e13042f761755762fa39dfe090853c6a`,已独立从远端恢复,158文件的bytes/blob/mode与strict/full fsck通过,产品目录与签名源码a2e33e8逐字节一致,无LFS或子模块,恢复临时目录已清理。详见`docs/verification/v1.1.2/final-tag-recovery.json`;后续main仅补充恢复报告和用户验收记录,产品源码保持不变。 + +## 1.2.0 恢复入口 + +源码构建节点为 `696d5f39b30404ed5d1d4c25f61d17475c7fc91b`,版本1.2.0(14)。使用同一 Apple SDK、签名团队与正式安装路径;本次仅改变外层启动器、版本及宣传资源,渲染和面板保留1.1.2验收实现。最终安装包和验证记录随 `v1.2.0` 保存。无 LFS / 子模块。正式 APP 只保留 `/Library/Plug-Ins/FxPlug/beatygril.app`;源代码不包含私钥。 + +模板恢复到 `~/Movies/Motion Templates.localized/Effects.localized/大鱼磨皮瘦脸/大鱼人像美化/`,需同时保留 `.moef`、`Drop Zone.tiff`、`large.png`、`small.png`。Git 不保存 BSD 文件标志,手工复制后对两张 PNG 执行 `chflags uchg` 并核对 `ls -lO`;不要锁目录和工程。自动安装 PKG 会恢复这两个锁。 + +仓库已为公开属性,但当前网站 Git 网关仍执行登录 / 会员校验。匿名 `ls-remote` 未通过,不宣称无需登录的 Git 恢复已通过;认证的远端克隆和文章的公开源码快照分别核验。服务端备份边界与前文相同。 diff --git a/docs/verification/v1.2.0/delivery-receipt.json b/docs/verification/v1.2.0/delivery-receipt.json new file mode 100644 index 0000000..d1d966e --- /dev/null +++ b/docs/verification/v1.2.0/delivery-receipt.json @@ -0,0 +1,44 @@ +{ + "status": "complete", + "bundleIdentifier": "com.dayu.beatygril", + "installationPath": "/Library/Plug-Ins/FxPlug/beatygril.app", + "options": { + "waitForHosts": false, + "userTests": false + }, + "nativeEffectQA": { + "status": "operator_confirmed", + "performedByScript": false + }, + "source": { + "commit": "696d5f39b30404ed5d1d4c25f61d17475c7fc91b", + "trackedWorktreeChanges": [] + }, + "updatedAt": "2026-10-21T17:39:12.166311+00:00", + "version": "1.2.0", + "build": "14", + "stagingSignature": "Executable=/private/tmp/paintfcp-build-20261021/Build/Products/Release/beatygril.app/Contents/MacOS/beatygril\nIdentifier=com.dayu.beatygril\nFormat=app bundle with Mach-O universal (x86_64 arm64)\nCodeDirectory v=20500 size=478 flags=0x10000(runtime) hashes=4+7 location=embedded\nHash type=sha256 size=32\nCandidateCDHash sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220\nCandidateCDHashFull sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97\nHash choices=sha256\nCMSDigest=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97\nCMSDigestType=2\nCDHash=c229cfbd5d26e1215ace1dd36e4442a412b52220\nSignature size=8968\nAuthority=Developer ID Application: zhong luo (B3W25FX5H5)\nAuthority=Developer ID Certification Authority\nAuthority=Apple Root CA\nTimestamp=Oct 22, 2026 at 01:32:31\nInfo.plist entries=22\nTeamIdentifier=B3W25FX5H5\nRuntime Version=27.0.0\nSealed Resources version=2 rules=13 files=5\nInternal requirements count=1 size=180\nTotal signatures=1\nChosen signature=1\n", + "notarization": { + "status": "Accepted", + "id": "3999fe91-a80e-49d3-9ed0-4003b82f6f54", + "message": "Processing complete" + }, + "signingVerified": true, + "stapleValidated": true, + "stagingPluginUnregistered": true, + "runningHosts": [], + "installedSignature": "Executable=/Library/Plug-Ins/FxPlug/beatygril.app/Contents/MacOS/beatygril\nIdentifier=com.dayu.beatygril\nFormat=app bundle with Mach-O universal (x86_64 arm64)\nCodeDirectory v=20500 size=478 flags=0x10000(runtime) hashes=4+7 location=embedded\nHash type=sha256 size=32\nCandidateCDHash sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220\nCandidateCDHashFull sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97\nHash choices=sha256\nCMSDigest=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97\nCMSDigestType=2\nCDHash=c229cfbd5d26e1215ace1dd36e4442a412b52220\nSignature size=8968\nAuthority=Developer ID Application: zhong luo (B3W25FX5H5)\nAuthority=Developer ID Certification Authority\nAuthority=Apple Root CA\nTimestamp=Oct 22, 2026 at 01:32:31\nNotarization Ticket=stapled\nInfo.plist entries=22\nTeamIdentifier=B3W25FX5H5\nRuntime Version=27.0.0\nSealed Resources version=2 rules=13 files=5\nInternal requirements count=1 size=180\nTotal signatures=1\nChosen signature=1\n", + "installedSignatureVerified": true, + "installedStapleValidated": true, + "gatekeeperAccepted": true, + "pluginDiscovery": { + "bundleIdentifier": "com.dayu.beatygril.fxplug", + "formalPath": "/Library/Plug-Ins/FxPlug/beatygril.app/Contents/PlugIns/beatygril XPC Service.pluginkit", + "output": " com.dayu.beatygril.fxplug(1.1)\tDECE2AF1-8D68-43B9-BE2E-6C97FB9EE96D\t2026-10-21 17:33:00 +0000\t/Library/Plug-Ins/FxPlug/beatygril.app/Contents/PlugIns/beatygril XPC Service.pluginkit\n (1 plug-in)\n" + }, + "removedGeneratedPaths": [ + "/Users/dayu/Documents/PaintFCP/build/delivery/previous-beatygril.app", + "/tmp/paintfcp-build-20261021", + "/Users/dayu/Documents/PaintFCP/build/delivery/notarization.zip" + ] +} diff --git a/docs/verification/v1.2.0/installed-discovery.txt b/docs/verification/v1.2.0/installed-discovery.txt new file mode 100644 index 0000000..cfdf4c2 --- /dev/null +++ b/docs/verification/v1.2.0/installed-discovery.txt @@ -0,0 +1,2 @@ + com.dayu.beatygril.fxplug(1.1) DECE2AF1-8D68-43B9-BE2E-6C97FB9EE96D 2026-10-21 17:33:00 +0000 /Library/Plug-Ins/FxPlug/beatygril.app/Contents/PlugIns/beatygril XPC Service.pluginkit + (1 plug-in) diff --git a/docs/verification/v1.2.0/installed-signature.txt b/docs/verification/v1.2.0/installed-signature.txt new file mode 100644 index 0000000..f8aaa53 --- /dev/null +++ b/docs/verification/v1.2.0/installed-signature.txt @@ -0,0 +1,24 @@ +Executable=/Library/Plug-Ins/FxPlug/beatygril.app/Contents/MacOS/beatygril +Identifier=com.dayu.beatygril +Format=app bundle with Mach-O universal (x86_64 arm64) +CodeDirectory v=20500 size=478 flags=0x10000(runtime) hashes=4+7 location=embedded +Hash type=sha256 size=32 +CandidateCDHash sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220 +CandidateCDHashFull sha256=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97 +Hash choices=sha256 +CMSDigest=c229cfbd5d26e1215ace1dd36e4442a412b52220f48215bd108107e1affb0b97 +CMSDigestType=2 +CDHash=c229cfbd5d26e1215ace1dd36e4442a412b52220 +Signature size=8968 +Authority=Developer ID Application: zhong luo (B3W25FX5H5) +Authority=Developer ID Certification Authority +Authority=Apple Root CA +Timestamp=Oct 22, 2026 at 01:32:31 +Notarization Ticket=stapled +Info.plist entries=22 +TeamIdentifier=B3W25FX5H5 +Runtime Version=27.0.0 +Sealed Resources version=2 rules=13 files=5 +Internal requirements count=1 size=180 +Total signatures=1 +Chosen signature=1 diff --git a/docs/verification/v1.2.0/launcher-lifetime-final.json b/docs/verification/v1.2.0/launcher-lifetime-final.json new file mode 100644 index 0000000..c25fd22 --- /dev/null +++ b/docs/verification/v1.2.0/launcher-lifetime-final.json @@ -0,0 +1,14 @@ +[ + { + "elapsed": 13.717, + "running": true, + "processes": [ + "33709 /Library/Plug-Ins/FxPlug/beatygril.app/Contents/MacOS/beatygril" + ] + }, + { + "elapsed": 17.944, + "running": false, + "processes": [] + } +] diff --git a/docs/verification/v1.2.0/native-qa.json b/docs/verification/v1.2.0/native-qa.json new file mode 100644 index 0000000..0a268f3 --- /dev/null +++ b/docs/verification/v1.2.0/native-qa.json @@ -0,0 +1,16 @@ +{ + "version": "1.2.0", + "build": "14", + "source_commit": "696d5f39b30404ed5d1d4c25f61d17475c7fc91b", + "native_app_card": "Observed correct classical information card, with accessible text", + "exit_timer_seconds_after_window_shown": 3.0, + "observed_process_lifetime_seconds": 4.227, + "process_lifetime_note": "Includes process initialization before didFinishLaunching/window presentation. Not a measurement of timer drift.", + "automatic_registration": "Own bundle registered via LSRegisterURL; installed PluginKit entry remains at unique formal path", + "host_validation": { + "FCP": "Fresh launch, new locked thumbnail visible in 大鱼磨皮瘦脸; applied ours to second clip in existing QA project; panel loaded, brightness set to20%, picture rendered without black output.", + "Motion": "No fresh 1.2.0 UI test; renderer and inspector source unchanged from user-accepted 1.1.2." + }, + "screenshots": "Native app and FCP screenshots kept local under ignored build/delivery; user stock imagery not published", + "bounded_duplicate_inventory": "Final cleanup removed known build and backup app paths; final inventory follows in packaging verification." +} diff --git a/docs/verification/v1.2.0/notarization.json b/docs/verification/v1.2.0/notarization.json new file mode 100644 index 0000000..929f52d --- /dev/null +++ b/docs/verification/v1.2.0/notarization.json @@ -0,0 +1 @@ +{"status":"Accepted","id":"3999fe91-a80e-49d3-9ed0-4003b82f6f54","message":"Processing complete"} diff --git a/docs/verification/v1.2.0/repository-visibility.json b/docs/verification/v1.2.0/repository-visibility.json new file mode 100644 index 0000000..e8e362c --- /dev/null +++ b/docs/verification/v1.2.0/repository-visibility.json @@ -0,0 +1,13 @@ +{ + "patch": "accepted", + "id": 36, + "private": false, + "url": "https://dayu.media/git/dayu/paintfcp-fxplug", + "anonymous_access": { + "html_http": 302, + "api_http": 401, + "git_ls_remote": "credential request denied in anonymous mode", + "reason": "Site-wide WordPress Git membership gateway is evaluated before Gitea public-repository permissions.", + "server_code_changed": false + } +} diff --git a/docs/verification/v1.2.0/template-payload.json b/docs/verification/v1.2.0/template-payload.json new file mode 100644 index 0000000..64adafe --- /dev/null +++ b/docs/verification/v1.2.0/template-payload.json @@ -0,0 +1,26 @@ +{ + "installationCategory": "大鱼磨皮瘦脸", + "template": "大鱼人像美化.moef", + "files": { + "大鱼人像美化.moef": { + "size": 23073, + "sha256": "e9fa97dc14323d0daa7d3d61b06a78ba4000a70ab9f5e67ebffd750d49df1e15", + "locked": false + }, + "Drop Zone.tiff": { + "size": 420128, + "sha256": "a7f8e3a2a431dbb3ce9e777040bb55e701cfe9ab9632e8cbb10359732bc8692e", + "locked": false + }, + "large.png": { + "size": 454742, + "sha256": "a02ddb255b1ae255c749bb837a759e2dee1c3b8ffb9bdc1167957761bd5a1b97", + "locked": true + }, + "small.png": { + "size": 45373, + "sha256": "1552b838dd88f60dee0795e20aaca652f9c558ecefc93500e895fbff77c2a4d5", + "locked": true + } + } +}