Fix missing FCP effect-source media chain; add native render diagnostics

这个提交包含在:
dayu 于 2026-10-21 17:46:29 +08:00 提交
1 父节点 75a16835f2
当前提交 dd04a471e1
8 个文件已更改
+102 -13

没有与搜索条件相匹配的文件

二进制文件未显示。
+11 -1
查看文件
@@ -488,5 +488,15 @@
"value": "",
"published": false
}
]
],
"effectSource": {
"object": "510000004",
"sourceMediaChannel": "./1/324/300",
"clip": "510000006",
"footage": "510000007",
"type": 3,
"dropZone": 1,
"path": "Drop Zone.tiff",
"resourceBundled": true
}
}
+10 -2
查看文件
@@ -11,7 +11,7 @@
- 保留磨皮、肤色、细节、脸型、人脸选择与跟踪、蒙版与输出六个原生 FxPlug 参数组,发布46项可见功能参数,包括前向/后向分析及清除按钮。
- 目标1–3的隐藏分析数据以参数60/61/62保留在滤镜节点中,不发布成用户控件;分析完成后由插件写入宿主参数并随工程保存。
- 选脸位置发布为原生二维参数,并启用滤镜的“发布 OSC”宿主通道。跟踪按钮、OSC与工程关闭重开后的数据恢复须由实际 FCP 验证。
- 画面只含一个标准 Effect Source(Type=3),供 FCP 使用当前时间线片段;没有外部素材、旧 Drop Zone.tiff 引用、媒体路径、旧滤镜或动画。Motion中效果源没有示例照片属于无媒体模板的预期状态,FCP应使用被应用的片段。
- 画面只含一个标准 Effect Source(Type=3、Drop Zone=1),其 Source Media 指向 clip `510000006`,clip 位于 footage `510000007`。`pathURL=Drop Zone.tiff` 为模板同目录内的相对引用,标准1200×1200占位图已随模板附带,没有外部安装目录依赖、示例人像、旧滤镜或新动画。FCP时间线片段的实际替换仍须原生验收。
- 作者与网站为两个原生空绑定展示菜单,不改变渲染。
建议模板安装位置:`~/Movies/Motion Templates.localized/Effects.localized/Dayu/大鱼人像美化/`。APP正式安装与模板安装、Motion/FCP原生验收由主任务处理。
@@ -20,6 +20,14 @@
Apple项目、群组、Effect Source和滤镜节点骨架来源于用户自有“大鱼去黑.moef”;仅保留这些原生结构,已替换滤镜UUID、名称、版本和全部功能参数。FxPlug组/字符串/点参数的原生结构交叉参照自有Number与Zoom and Pan样本;作者/网站空绑定来自ae-to-motion技能的原生版权样本。
`PARAMETERS.json`逐项记录参数ID、组、发布通道及初始值;`VALIDATION.json`记录本次静态核验。48个发布路径(46功能+2信息)均能反查实际对象和通道,实体ID无冲突,三个隐藏数据通道未发布,无外部素材,保存选择状态为0个内容对象且焦点为项目。技能`motion_selection.py check`与`audit_motion.py --require-no-selection`通过。
`PARAMETERS.json`逐项记录参数ID、组、发布通道及初始值;`VALIDATION.json`记录本次静态核验。48个发布路径(46功能+2信息)均能反查实际对象和通道,实体ID无冲突,三个隐藏数据通道未发布;必要占位媒体以相对路径随包附带,保存选择状态为0个内容对象且焦点为项目。技能`motion_selection.py check`与`audit_motion.py --require-no-selection`通过。
上述结果只证明结构、发布引用和保存状态;Motion实际加载、FCP面板控制、按钮/OSC路由及保存重开由主任务继续验证,不能用XML解析通过代替原生验收。
## 前版输入链错误与本次修复
前版生成稿(SHA256 `3b7984e11a92487834ab67121fd3814bf13c22b77a70851298efa84206f91478`)将效果源的 Source Media 设为0,并删除了原生clip/footage。用户在FCP应用后实测整幅黑屏。这是模板装配错误;保留Type=3本身并不能证明FCP输入替换链完整。此前XML解析、发布路径和无缺媒体检查通过,也没有覆盖真实FCP画面输入,不能当作该模板已经可用的证据。
本次仅恢复标准效果源clip/footage和Source Media关联,并随包加入标准`Drop Zone.tiff`;滤镜算法、49个插件参数、48个发布入口、Type=3/Drop Zone=1及版本1.0.1均保留。该占位图从Apple Motion的Ozone.framework标准资源复制,实际运行只引用本模板内的相对副本。图像SHA256为 `a7f8e3a2a431dbb3ce9e777040bb55e701cfe9ab9632e8cbb10359732bc8692e`,420128字节。
本次已经静态核验Source Media→clip→相对文件链存在、文件字节一致、48项发布仍解析、隐藏数据未发布和保存选择状态;修复后的FCP新增实例、输入替换、Mix=0直通及实际人像渲染需由主任务重新实测。不得将“恢复链条”描述为已经通过FCP黑屏复测。
+18 -4
查看文件
@@ -1,13 +1,27 @@
{
"version": "1.0.1",
"sha256": "3b7984e11a92487834ab67121fd3814bf13c22b77a70851298efa84206f91478",
"sha256": "2f7d1e0bf91a6dab82f5dde0a20d971a75abd2056a48104d861e9c112870aae4",
"filterUUID": "FB14B0E6-59B2-4836-916F-CD0C559E9241",
"publishedFunctionalControls": 46,
"informationalControls": 2,
"hiddenTrackingSlots": 3,
"publishedPathsResolved": 48,
"externalMediaPaths": 0,
"sourceType": 3,
"sourceMedia": 0,
"hostValidation": "Motion/FCP native load and interactivity pending parent agent verification"
"sourceMedia": "510000006",
"clip": "510000006",
"footage": "510000007",
"sourceResource": {
"relativePath": "Drop Zone.tiff",
"bytes": 420128,
"sha256": "a7f8e3a2a431dbb3ce9e777040bb55e701cfe9ab9632e8cbb10359732bc8692e",
"origin": "Apple Motion Ozone.framework standard placeholder; copied into this template for relative reference"
},
"inputChainRepair": {
"previousTemplateSHA256": "3b7984e11a92487834ab67121fd3814bf13c22b77a70851298efa84206f91478",
"previousSourceMedia": 0,
"previousFootageCount": 0,
"problem": "Previous generated template removed the standard source clip and could not establish the native effect-source input chain. XML/reference checks did not validate FCP timeline replacement.",
"change": "Restored the user-owned reference template clip/footage skeleton with new unique IDs; restored the Source Media link; bundled standard Drop Zone.tiff; filter, publications and Type=3/Drop Zone=1 preserved."
},
"hostValidation": "Pending parent agent Motion/FCP validation after input-chain restoration; earlier XML checks did not prove input replacement."
}
@@ -249,7 +249,7 @@
</parameter>
<parameter name="Media" id="324" flags="8589938704">
<foldFlags>4</foldFlags>
<parameter name="Source Media" id="300" flags="12901744656" default="0" value="0" />
<parameter name="Source Media" id="300" flags="12901744656" default="510000006" value="510000006" />
<parameter name="Source Media" id="325" flags="8590000146" />
</parameter>
<parameter name="Page Number" id="301" flags="8589934610" default="1" value="1" />
@@ -407,5 +407,40 @@
<parameter name="New Fixed Res Behavior" id="315" flags="8594194480" default="1" value="0" />
</parameter>
</layer>
<footage name="效果源媒体" id="510000007">
<clip name="Effect Source" id="510000006">
<pathURL>Drop Zone.tiff</pathURL>
<missingWidth>1200</missingWidth>
<missingHeight>1200</missingHeight>
<missingDuration>0.033333333333333333</missingDuration>
<creationDuration>1</creationDuration>
<mediaID />
<flags>0</flags>
<timing in="0 1 1 0" out="0 120000 1 0" offset="0 1 1 0" />
<foldFlags>0</foldFlags>
<baseFlags>524304</baseFlags>
<parameter name="Properties" id="1" flags="8589938704" />
<parameter name="Object" id="2" flags="8589938704">
<parameter name="Pixel Aspect Ratio" id="104" flags="12884901888" default="1" value="1" />
<parameter name="Frame Rate" id="107" flags="8589934592" default="0" value="30" />
<parameter name="Fixed Width" id="114" flags="12884901888" default="600" value="600" />
<parameter name="Fixed Height" id="115" flags="12884901888" default="600" value="600" />
<parameter name="Use Background Color" id="116" flags="8589934594" default="0" value="0" />
<parameter name="Background Color" id="117" flags="8589971458">
<foldFlags>15</foldFlags>
<parameter name="Red" id="1" flags="8589967376" default="1" value="1" />
<parameter name="Green" id="2" flags="8589967376" default="1" value="1" />
<parameter name="Blue" id="3" flags="8589967376" default="1" value="1" />
</parameter>
<parameter name="Missing Is Still" id="128" flags="8589934610" default="0" value="1" />
</parameter>
</clip>
<flags>0</flags>
<timing in="0 1 1 0" out="0 120000 1 0" offset="0 1 1 0" />
<foldFlags>0</foldFlags>
<baseFlags>524304</baseFlags>
<parameter name="Properties" id="1" flags="8589938704" />
<parameter name="Object" id="2" flags="8589938704" />
</footage>
</scene>
</ozml>
+1 -1
查看文件
@@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>1.0.1</string>
<key>CFBundleVersion</key>
<string>2</string>
<string>3</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>PlugInKit</key>
+25 -3
查看文件
@@ -6,6 +6,13 @@
#import <IOSurface/IOSurface.h>
#import <stddef.h>
#import <math.h>
#import <os/log.h>
static os_log_t PGRenderLog(void) {
static os_log_t log; static dispatch_once_t once;
dispatch_once(&once, ^{ log=os_log_create("com.dayu.beatygril", "render"); });
return log;
}
typedef struct { UInt32 identifier; const char *name; size_t offset; float min, max, step; BOOL percent; } PGSlider;
#define PGS(ID, NAME, FIELD, MIN, MAX, STEP, PERCENT) {ID, NAME, offsetof(PGBeautySettings, FIELD), MIN, MAX, STEP, PERCENT}
@@ -40,6 +47,7 @@ static const PGSlider PGSliders[] = {
#undef PGS
static BOOL PGFail(NSError **error, NSString *message) {
os_log_error(PGRenderLog(), "%{public}@", message);
if (error) *error = [NSError errorWithDomain:FxPlugErrorDomain code:kFxError_InvalidParameter
userInfo:@{NSLocalizedDescriptionKey:message}];
return NO;
@@ -68,6 +76,7 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
@property BOOL analyzing;
@property BOOL analysisForward;
@property (strong) NSArray<NSString *> *loadedTracks;
@property BOOL reportedRender;
@end
@implementation beatygrilPlugIn
@@ -214,6 +223,17 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
PGBeautySettings s;[plist[@"settings"] getBytes:&s length:sizeof(s)];
if(s.version!=1) return PGFail(error,@"此版本不支持保存的渲染状态。");
CIImage *input=PGImageFromTile(sources.firstObject); if(!input) return PGFail(error,@"无法读取 IOSurface。");
@synchronized(self) {
if(!_reportedRender) {
_reportedRender=YES;
IOSurfaceRef src=(__bridge IOSurfaceRef)sources.firstObject.ioSurface;
IOSurfaceRef dst=(__bridge IOSurfaceRef)destination.ioSurface;
FxRect a=sources.firstObject.tilePixelBounds,b=destination.tilePixelBounds;
os_log(PGRenderLog(), "source format=%u %zux%zu bytes=%zu planes=%zu origin=%lu bounds=%d,%d,%d,%d extent=%{public}@; destination format=%u %zux%zu bytes=%zu planes=%zu origin=%lu bounds=%d,%d,%d,%d; midtone=%f mix=%f mask=%u",
IOSurfaceGetPixelFormat(src),IOSurfaceGetWidth(src),IOSurfaceGetHeight(src),IOSurfaceGetBytesPerElement(src),IOSurfaceGetPlaneCount(src),(unsigned long)sources.firstObject.imageOrigin,a.left,a.bottom,a.right,a.top,NSStringFromRect(input.extent),
IOSurfaceGetPixelFormat(dst),IOSurfaceGetWidth(dst),IOSurfaceGetHeight(dst),IOSurfaceGetBytesPerElement(dst),IOSurfaceGetPlaneCount(dst),(unsigned long)destination.imageOrigin,b.left,b.bottom,b.right,b.top,s.midtoneDetail,s.mix,s.showMask);
}
}
CIContext *context=[self contextForTile:destination]; if(!context) return PGFail(error,@"没有可用的 Metal 图形设备。");
CIImage *output=nil; CIImage *overlay=nil;
@synchronized(_faceProcessor) {
@@ -226,10 +246,12 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
}
_loadedTracks=[tracks copy];
}
PGFaceFrame *frame=[_faceProcessor processImage:input settings:s time:time error:error];
if(!frame) return NO;
NSError *stageError=nil;
PGFaceFrame *frame=[_faceProcessor processImage:input settings:s time:time error:&stageError];
if(!frame) { os_log_error(PGRenderLog(), "face processing failed: %{public}@",stageError); if(error)*error=stageError; return NO; }
PGBeautySettings beauty=s; beauty.mix=1;
output=[_beautyRenderer processImage:frame.image settings:beauty skinMask:frame.skinMask teethMask:frame.teethMask eyeMask:frame.eyeMask error:error];
output=[_beautyRenderer processImage:frame.image settings:beauty skinMask:frame.skinMask teethMask:frame.teethMask eyeMask:frame.eyeMask error:&stageError];
if(!output) { os_log_error(PGRenderLog(), "beauty processing failed: %{public}@",stageError); if(error)*error=stageError; return NO; }
overlay=frame.overlayImage;
}
if(!output) return NO;
@@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key>
<string>1.0.1</string>
<key>CFBundleVersion</key>
<string>2</string>
<string>3</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSHumanReadableCopyright</key>