Taste Application
管道的后半部分。taste-distillation 将参考素材测量并提炼成风格包;此部分则根据该风格包生成内容并剪辑结果。
执行与交付合约
原始实现位于 scripts/ 目录下,无需单独的 ito-video 检出。本地处理请安装 scripts/requirements.txt。仅限供应商执行时安装 scripts/requirements-live.txt。直播上传、提交和下载需要显式设置 TASTE_FORGE_ALLOW_LIVE=1 以及凭据;仅在对用户授权的运行中设置。--dry-run 无需凭据,并生成带标签的占位符。超时不明确的供应商请求不会作为新的付费任务重试。在决定是否再次提交前,请先检查供应商请求。
使用已有的已完成的片段,无需调用任何供应商:
python scripts/pipeline.py --genre example --root stylepacks \
--takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
--out out/review-v1.mp4
--duration 是一个尽力而为的节奏目标,而非精确的运行时长。完整的镜头序列可能产生较短或较长的剪辑;装配器不会重复片段或添加填充来满足目标。输出清单保留实际的 duration,并添加 duration_contract,包含请求和实际的秒数、不足、超出以及 cadence_target 策略。相差至少一个输出帧时会显式警告。不提供精确时长模式;当需要精确运行时长时,请检查收据并在交付前修改或拒绝该剪辑。
管道会保留每次运行的已评分镜头文件,因为可编辑的 FCPXML 和 EDL 会引用它们。管道会拒绝输出冲突并报告时间线导出失败。已完成的渲染并不等于已保存的编辑项目或创意批准。在直播编辑前后,请保留源资产和版本化的项目检查点;将保存的路径和摘要与内存中的时间线收据分开记录。
可克隆的 Fal 图及其离线输入编译器在 workflows/README.md 中有文档说明。在提交前编译简要说明和风格方向;不要假设一个断开连接的模式字段会影响模型提示。在进行付费运行前,请对照实际供应商验证当前端点字段。
对于 Blender,请使用完整纹理的源 GLB;重拓扑是单独命名的衍生品,绝不能替换该源。blender_prop.py 支持显式的 --width 1920 --height 1080 --fps 30 --receipt receipt.json,并保留包导出的边缘光和材质纹理。保存场景与渲染场景不同;请检查收据的状态和打包的图像。
对于 Resolve 叠加,使用 taste.resolve.apply_placements,并注入来自显式选择、带版本的目标的对象。将 source_end_mode 设置为在该主机上验证的约定。不要假设 Resolve 版本之间包含源端的特性。适配器在保留轨道之上分配重叠效果,并在每次放置后立即检查,在所有追加完成后再次检查。复合整数必须与安装的 API 匹配;对于已验证的 Studio 21 主机,Screen 是 5,而非历史构建器错误使用的 22。收据仅证明内存中的放置。保存项目,验证其检查点,然后检查精确渲染的输出,再报告交付。
何时激活
- "以此风格制作视频" / "应用风格包" / "补充此素材"
- 将生成的片段组装成具有真正编辑节奏的作品
- 根据外观创建 3D 道具并将其放回视频中
- 验证完成的成品是否确实与参考素材匹配
分工
模型提供内容、运动、构图和光照结构。风格包提供色彩和节奏。 这是经过测量的,而非风格偏好——参见 taste-distillation 了解具体数据。实际后果:
- 生成提示包含零色彩语言。添加 "色彩:无。渲染中性。调色在之后应用。"
- 保持两个独立的标志:
--brief(发生了什么:主体、动作、地点)和--style-steer(看起来如何)。合并它们会将风格词泄露到场景中("青色" 变成青色物体),并将主体词泄露到调色中。 - 模型对局部的、可检查的规则的反应远优于全局规则。"背景纯黑且无光;主体朝向白色曝光过度" 有效;"极端对比度" 无效。
生成 TAKE,而非镜头
"匹配节奏" 的直观理解是每个镜头生成一次。这在经济上是荒谬的。一个平均 0.78 秒/镜头的参考素材,配合每秒成本 4 秒的端点,一个 10 秒的作品需要 12 次调用,生成 48 秒,只使用 10 秒(21% 效率),并且将 12 个不相关的片段拼接成应该看起来连续的内容。
剪辑师会拍摄更长的 take 并在其中剪辑。将镜头分组为约 5 秒的 take:3 次调用,生成 13 秒,77% 效率,并且连续的镜头实际上彼此关联,因为它们来自同一次生成。
告诉模型你想要的形状,否则它会渲染一个缓慢的锁定推镜,而内部的六次剪辑读起来像结巴:
"拍摄为一次连续的 take,内部无硬切。它将在编辑中被剪成 6 段约 0.8 秒的片段,因此构图、主体和光照必须在整个过程中持续变化——任何 0.8 秒的窗口都必须能够独立作为一个镜头。"
剪辑规则
- 必须重新编码,绝不能流复制。 流复制仅在关键帧上剪切,在 0.78 秒的镜头中,这意味着每个镜头边界都会四舍五入到最近的 GOP——破坏了管道存在的根本目的。
- 当补充现有素材时,使用其自身的镜头边界。 将基础视频切片成连续的片段并按顺序播放只会重新组装原始内容:每个"剪辑"都落在镜头中间,变得不可见。经测量,一个 20 镜头的组装只检测到 12 个剪辑。检测真实边界并每第 N 个取一个,确保连续选取保证不连续。这使剪辑测量值从目标 0.78 秒的 1.29 秒降低到 0.83 秒。
- 从参考素材的分布中采样镜头长度,而不是从其平均值,这样剪辑继承了节奏的方差,而不是扁平化为均匀的片段。
调色规则
- 当你有片段时,直接测量优于套用 LUT:测量它,匹配其 L* CDF,应用区域色度。
grade_clip_direct达到了 MAE 1.58 和对比度 34.0(目标 34.7)。 - 当片段的直方图与参考不同时,使用锚定,而非 CDF 匹配。 将一个 68% 黑的生成片段强制匹配到一个繁忙的参考直方图上,会将整个背景从黑色中提升出来:背景保留率从 69.0%(锚定)降至 26.0%(CDF),而 MAE 和对比度看起来仍然很好。默认使用锚定色调。
- 批处理大小很重要。 一次对 48 帧进行调色会导致进程因内存不足被杀死;6 帧是安全的。
恢复的 fal 平台行为
这些观察结果和端点示例来自恢复的工作流。请重新检查当前端点元数据;它们并非对所有未来供应商版本的保证。附带的图模板记录了单独验证的工作流输入,包括显式的生成音频控制。
这些是花费真实时间发现的。在设计图之前检查它们。
| 限制 | 详情 |
|---|---|
| 完全没有 3D 渲染器 | fal 有 image-to-3d、text-to-3d、3d-to-3d,没有其他。每个 3d-to-3d 端点都会输出另一个网格。没有 3d-to-image/3d-to-video 类别,因此生成的 GLB 无法重新进入 fal 视频图。在本地渲染,然后使用 fal-ai/ffmpeg-api/images-to-video。 |
| compose 无法叠加 | fal-ai/ffmpeg-api/compose 拒绝第二个轨道,提示 "不支持多个视频轨道"——并且它将 image 轨道计为视频轨道。它仅支持一个视频轨道的序列。在本地使用 ffmpeg 合成。 |
| compose 关键帧是毫秒 | 响应中没有说明。以秒为单位提交的运行会被接受,但返回的视频长度会短 1000 倍。 |
| extract-frame 仅提供第一/中间/最后一帧 | 不支持任意时间戳。将这三帧用作三个不同的条件图像。 |
| DAG 中无循环、无字符串拼接 | 每个镜头的扇出必须逐节点编写,或保持在本地。 |
| Kling 3.0 无参考转视频 | v3 系列仅支持文本/图像/运动控制;参考转视频位于 o3 系列:fal-ai/kling-video/o3/pro/reference-to-video。 |
| 前缀不统一 | bytedance/*、tripo3d/*、meshy/*、minimax/*、openai/* 没有 fal-ai/ 前缀。kling-video、veo3.1、flux-*、hunyuan-3d、ffmpeg-api 则有。 |
端点选择
| 插槽 | 最佳选择 | 性价比替代 |
|---|---|---|
| 参考→视频 | bytedance/seedance-2.5/reference-to-video(约 $0.473/s @720p) | fal-ai/kling-video/o3/pro/reference-to-video(约 $0.112/s) |
| 图像→3D | fal-ai/hunyuan-3d/v3.1/pro/image-to-3d($0.375,最多 8 视图) | tripo3d/h3.1/image-to-3d($0.20) |
| 文本→3D | fal-ai/hunyuan-3d/v3.1/pro/text-to-3d | tripo3d/h3.1/text-to-3d |
| 重拓扑 | fal-ai/hunyuan-3d/v3.1/smart-topology($0.75) | tripo3d/tripo/remesh(约便宜 75 倍) |
| 部件分割 | fal-ai/hunyuan-3d/v3.1/part(仅 FBX) | tripo3d/tripo/segment |
| 文本→图像 | fal-ai/nano-banana-pro($0.15 固定) | fal-ai/flux-2-pro($0.03/MP) |
Seedance 的价格是 Kling o3 在相同 5 秒时长下的约 4 倍。它在多参考保真度方面(最多 50 个混合图像/视频/音频参考)值得这个价格,但在仅基于单张静态图像进行条件化时不值得。
模型 ID 和价格会变化。在承诺任何内容之前,请对照 fal.ai/models 进行验证。
3D 分支
python mint3d.py --genre <name> --from-stills 4 --retopo --render
python mint3d.py --genre <name> --prompt "一个破裂的铬色面罩" --render
- 首先生成干净的画面;不要从参考静态图像中提取。 端点要求的输入是简单背景、单一物体、物体占画面超过 50%。参考素材恰恰相反——拼贴画、广角镜头、多个主体、烧入的图形——它们会产生杂乱无章的噪声。文本→单一物体画面→网格成本约 $0.15,是可用网格和废弃网格之间的区别。
- 多视图是每个角度的命名字段,而非列表。
input_image_url(正面,必需),然后是back_image_url、left_image_url、right_image_url、left_front_image_url、right_front_image_url、top_image_url、bottom_image_url。没有input_image_urls也没有multi_view标志——发明它们会将每次生成降级为单视图,同时看似正常工作。错误的角度标签比省略视图更糟糕,因为模型信任它。 - 通过键来引用 GLB,而非位置。 响应包含一个
thumbnailPNG 和一个model_urls块以及model_glb;获取第一个 URL 仅在键重新排序之前有效,而预览 PNG 下载正常——直到 Blender 拒绝打开它之前,一切都不会失败。 - 请求 PBR 贴图。 没有它们,网格看起来像涂漆的纸板。
- 进行重拓扑,如果有人将编辑或装配它。生成的网格密集且混乱。
- 在本地渲染以闭合循环。 一旦转盘变成帧,它就是视频素材,下游的每个阶段都已经处理视频素材——对其进行调色、剪辑、作为元素筛选,或作为条件参考上传。当有二进制文件在 PATH 上时使用 Blender;保持一个依赖轻量的软件光栅化器作为默认选项,因为无头 GL 上下文是容器中最常缺失的东西,而仅在工作站上工作的渲染器不属于管线。
验证,然后相信
每个其他阶段都会声称一个结果。检查它,并且检查分布形状,而不仅仅是矩:
background——低于 L*10 的帧占比,与风格包的数字进行比较。与源片段进行比较是错误的:一个 68% 黑的生成源比任何在 24–55% 范围内的参考都更黑,因此"保留源的黑色"要求了错误的东西,并且同样会容忍一个被提亮的调色。chroma_mae——每个区域的 a*/b* 误差,使用中位数(与风格包目标测量方式匹配;使用均值会报告一个对偏斜敏感的统计量与一个稳健统计量的比较,并将定义不匹配报告为错误)。contrast/black_point/white_pointbanding——位于已占用 L* 直方图区间之间的空区间。计算空区间总数不起作用:一个合法的暗片会有空的明亮区间。cadence——检测到的平均镜头长度与参考的比较。
注意单位陷阱:OpenCV 会根据 dtype 改变 Lab 约定。在 float32 上,L* 是 0–100,a*/b* 是有符号的;在 uint8 上,L* 是 0–255,a*/b* 是偏置的 +128。混合它们报告数百的色度误差。
完整链
python pipeline.py --genre <name> --refs a.mov b.mov \
--brief "发生了什么" --duration 12 \
--base-video existing.mp4 --out out/FINAL.mp4
mint → distill → (mint3d) → apply → forge → verify。阶段 1-3 是缓存的,因此迭代 brief 时无需重新测量任何内容。--dry-run 会模拟每个网络调用:计划、提示、轨道布局和清单都会得到执行。
反模式
| 不要做 | 原因 |
|---|---|
| 每个镜头一次生成 | 21% 效率,12 个不相关的片段 |
| 在提示中包含色彩 | 经测量不起作用;推动远离 LUT 所需的基色 |
| 流复制剪切 | 仅关键帧边界会破坏亚秒级节奏 |
| 连续剪切基础视频 | 重新组装原始内容;每个剪辑都不可见 |
| 信任 compose 可以叠加 | 它不能;它会拒绝第二个轨道 |
| 向 compose 发送秒数 | 静默地缩短 1000 倍 |
| 仅凭 MAE 交付 | 增加背景占比检查 |
借用的素材会携带录制应用的 UI
在已交付剪辑中发现的最严重缺陷:完成的视频包含别人的点赞按钮、观看计数器和评论气泡,因为基础
…
[内容已截断]