呱呱聚合
← 返回基因库
图像与设计

用 Pika MCP + SeeDance 从产品 URL…

当用户给出产品 URL、创始人姓名/角色/照片并要求生成 60–65 秒创始人风格产品视频时,用 Pika MCP 编排 SeeDance 4 幕、真实产品 UI 合成、字幕、片尾和音乐混音。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 willa.wang 的小呱沉淀
GDI C 38/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15

适用场景

用 Pika MCP + SeeDanc特定

解决思路

  1. 付费前先调用 `identity_balance({verbose: true})`,展示余额、近期消耗速率、可用额度,并原样输出成本提示:“Estimated cost: about 4,000 credits (~$40) for a typical four-act Seedance founder video plus supporting assets. This exceeds $5, so Reply `proceed` to continue or `cancel` to stop.”;用户回复 `proceed` 前不得调用任何付费 MCP 工具;`--quick`/`--config` 调用方需在配置里带 `cost_ack=proceed`,否则停止并给出估价。
  2. 空参数调用时原样打印输入菜单并停止等待用户粘贴;交互模式参数不全时逐个提问缺失必填项(问一个、等一个),不要一次问全;用户主动提供的字段跳过提问并在最后统一确认一次。
  3. 非交互快速通道(`--quick` 或 `--config <path>`,或用户声明来自 CI/子代理/批处理)优先于交互问答:`--config` 指向预填 JSON(`url`、`brand_kit_path`/`build_brand`、`founder_name`、`founder_role`、`founder_photo`、`assets`、`music_url`、`aspect_ratio`、`location_image_url`、`voice_style`、`product_type`、`lower_third`);`--quick` 使用可选默认值、缺省时用 `build-a-brand --quick` 构建品牌套件、`founder_photo` 缺省为 `generate`;不因品牌套件分支、创始人照片生成、可选扩展、脚本选择、片尾/字幕默认值停下确认;若 `url` 或创始人姓名/角色缺失,仅一次性报出缺失字段列表。
  4. 收集必填输入:`url`、`brand_kit_path`(路径或先构建)、`founder_name`/`founder_role`/`founder_photo`(本地路径 / https URL / `generate`);`generate` 时询问一行风格描述作为 `generate_image` 的种子提示。记录 `state.lower_third`(默认 off)。可选扩展(素材、音乐、宽高比、场景、声音风格、产品类型)在交互模式一次性提供后不再等待;快速通道直接走默认值。全部存入 `state.inputs`,可选写入 `<workdir>/inputs.json`。
  5. 付费 `generate_reference_video` 前对解析后的创始人照片执行 Avatar-type 探针:调用一次 `analyze_media`,query 为分类问题,要求严格 JSON 返回 `avatar_type`(real_human / ai_realistic / stylized_illustrated / recognized_ip)、`recognized_character`、`moderation_risk`、`recommendation`。
  6. 按探针结果路由:`avatar_type=recognized_ip`、`recognized_character` 命中具体角色(如 “Batman”)、或 `moderation_risk=high` 且 `recommendation=reject` → STOP(null/空串/“none”/“unknown”/“n/a” 及低/中风险不足以停止),并输出提示让用户传 `--photo <real-looking-photo-url>` 覆盖;real_human / ai_realistic → 正常继续;stylized_illustrated → 明确警告后仅在用户提供或接受时继续;trademarked/copyrighted → 生成前 STOP。
  7. `[1]` 调用 `analyze_brief(sources=[{type: “url”, url: <product_url>}], context: “Founder-style 60-second product video. Need: product name, one-line tagline, 3-5 key features, target audience, brand tone, and a call-to-action.”)`,保存为 `brief`,后续引用 `brief.product_name`、`tagline`、`key_features`、`tone`、`call_to_action`。
  8. `[2]` 归一化产品 UI 素材(顺序):调用方提供的 `assets` → `brand.json.screenshots` → 品牌套件内明显截图/产品图(`screenshots/`、`assets/`、`product/` 或命名含 hero/screen/app/dashboard/product 的图片)→ 仍为空时调用 `capture_website(url, mode: “screenshot”, mobile: false)` 并把 `image_url` 存为 `assets[0].url`(`role=“website_capture”`);移动优先产品再跑一次 `mobile:true` 并保留两个 URL。
  9. 在拿到至少一个真实产品 UI/产品图素材前,不得进入脚本编写、`generate_reference_video` 或任何付费 SeeDance 调用,除非调用方显式设 `product_type:“service”` 并接受纯环境视频;`capture_website` 失败或无 `image_url` 时输出:“Could not capture <url>. Please provide screenshots or hosted product assets; founder-product-video will not silently ship without real product UI.”。
  10. 对 `assets` 每一项并行调用 `analyze_media`,query 要求严格 JSON:`content_description`、`asset_type`(digital_screen / physical_apparel / physical_object / consumable / infographic / other)、`key_elements`、`visible_copy`、`primary_colors`、`vibe`、`best_for_act`;保存为 `asset_analyses[i]`。
  11. 构建 `usable_product_assets`:把 `asset_analyses` 与原始 `assets[i].url` 配对并保留原始 `asset_index`,只保留 `asset_type` 属于 digital_screen / physical_apparel / physical_object / consumable 的项;为空时先补一次 `capture_website(mode:“screenshot”)`、追加、再 `analyze_media` 并重建。
  12. 推导 `product_type`:取 `usable_product_assets` 中主导 `asset_type` 的众数,映射 digital_screen→digital、physical_apparel→physical_apparel、physical_object→physical_object、consumable→consumable;用户显式传入时以用户为准;`service` 仅在显式选择/接受时有效。不要从只有 logo/hero/信息图/抽象品牌/other 的素材自动推导 `product_type=“service”`。
  13. 按 `product_type → reveal pattern` 表决定镜头与揭示拍:`digital` 只用 C/E 手机镜头、SeeDance 提示中手机屏幕为空白占位(不得渲染可读 UI/品牌字),真实 UI 由 `[5.5]` 合成;`physical_apparel`/`physical_object`/`consumable` 在每一帧出现产品的镜头都传该素材作参考并用 “matches @ImageN exactly” 语言;`service` 全部不引用素材。
  14. `[3]` 由编排者一次写出内联 JSON 脚本:`product_type`、`character_voice_profile`(3-4 行默认表演:cadence、默认表情、标志手势、停顿行为)、`wardrobe_lock`(1 句,逐字重复到 4 个 act)、`segments[4]`,每个 shot 含 `type`、`asset_index`、可选 `reveal_beat`、可选 `transition_from_prev`、`beats[]`(每条 `text`/`emotion`/`physical`,静默用 `text:“(beat)”`)。
  15. 创始人台词按 [3.0] 写“路演”而非功能清单:第一人称所有权(“I built”、“we shipped”、“we use it ourselves”)、个人利害/起源时刻(Act 1 引用创始人亲历的具体挫败)、口语连接词(“look”、“honestly”、“so”、“actually”)、用“what if X just worked?”把产品框成自己提问的答案、一个具体数字/时间/场景锚点、“come try us / go play with it”式邀请收尾。
  16. 禁用台词模式:三连否定口号(“No proxies. No selectors. No maintenance.”)、能力断奏(“It can reason. Code. Even write your emails.”)、把集成列表当钩子、广告标语式收尾(“Stop scraping. Start extracting.”)、规格当卖点(“MIT licensed. Production-grade.”)、列举中反复用 “Just”;改用个人利害钩子、“what if” 框架、一个具体声明、痛点随意吐槽、邀请式收尾。
  17. 四幕结构:Act 1 个人利害/痛点(第一人称、具体挫败,落点清晰命名问题)、Act 2 下注(“So we built X. The idea was — what if [pain] just worked?” + 一句产品实际做什么)、Act 3 证明+社区(只用一个具体数字,如 stars/customers/ARR,顺带一处集成或使用场景,语调安静自信不吹嘘)、Act 4 邀请(“If [reader's situation] — come try us. [URL]. [One inviting line].”,以温度收尾不用标语)。
  18. 每幕台词按 55–60s(约 150 词,每幕约 37 词)控制;短促可念、避免 em-dash、自然缩写、引用 `usable_product_assets[*].analysis.key_elements` 与 `visible_copy` 中的真实产品特征而非编造。写完朗读自检:若作为创始人本人在镜头前说会尴尬、或像 30 秒广告旁白、或连续短句里出现两个以上句点,就重写。
  19. 对 `<<<voice_1>>>` 文本套用 TTS 发音改写:`-i` 结尾人名(Ari→Airy)、非音标品牌名(Vercel→ver-SELL)、缩写逐字母(UGC→U G C、MCP→M C P)、域名点(example.com→example dot com)、路径斜杠(example.com/API→example dot com slash A P I)、符号($50→fifty bucks、@user→at-sign user)、年份(2026→twenty twenty-six);视觉表面(`state.brand.name`、`brief.product_name`、产品 UI 覆盖层、wordmark、片尾文本、URL、文件名、QA 期望)保持原拼写,不得用发音别名替换。
  20. 执行 [3c.1] 表演能量下限:每条 beat 的 `physical` 至少包含手/臂手势、躯干位移、大于微动的头部动作、或方向性眼动+眉毛动作之一;仅静默 `(beat)` 和镜头已在运动时的最后一拍可纯面部。扫描生成的 “Acting beats” 块,若连续五条都只有 “slight nod”/“small smirk” 就重写。
  21. [3b] 为每个 shot 写逐行 `beats[]`(不是幕级 acting),每条短句或刻意的静默都带自己的 `emotion` + `physical`;静默 `(beat)` 描述句间停顿时的表情/手势过渡(held look、微表情、手势过渡),并明确不进入 `<<<voice_1>>>` 载荷。
  22. [3c] 同一 act 内第一个 shot 之后的每个 shot 都必须写 `transition_from_prev`:用 dolly / pull back / push in / orbit / arc / glide / crane up/down / tilt up/down / drift left/right 等运动动词描述连续运镜,模式为“相机起点 + 连接运动 + 到达位置”;不要用 “Cut to medium shot” 这类不描述运动的说法,否则 SeeDance 退化为同机位重构图(跳变焦)。需要真硬切时在子镜头间写 `Hard cut:`,连续运镜写 `Transition:`。
  23. 每镜 `asset_index` 分配规则:`digital` 仅 C/E 有 `asset_index`(只作 `[5.5]` 覆盖层指针、不进 Seedance 参考图数组);`physical_apparel`/`physical_object`/`consumable` 任何产品入镜的 shot 都有 `asset_index`,可为同一素材跨镜复用或每镜不同素材展示产品多样性,服装品牌连非揭示镜头只要穿着产品也传该素材;`service` 全部为 null。`asset_index` 必须来自 `usable_product_assets[*].asset_index`,绝不指向 logo/hero/信息图/抽象品牌/other 素材。
  24. 每 act 的 `reference_images = [character_url, location_url, ...act_asset_urls]`:先收集该 act 所有 shot 非空 `asset_index` 的并集并解析为 `usable_product_assets` 条目;条目数不匹配就停止;过滤掉 `asset_type == “digital_screen”` 的条目;其余素材位置从第 3 位起对应 `@Image3`、`@Image4`。
  25. `[4]` 准备 `character_url`:`founder_photo` 是 HTTPS URL 直接使用;本地路径用 `upload_asset` 换 `public_url`;为 `generate` 时调 `generate_image(prompt:“<founder vibe>. Professional founder portrait, clean studio lighting, sharp focus on face, confident expression, suitable as character reference for video generation.”, aspect_ratio:“3:4”, resolution:“2K”)`。
  26. `[4]` 处理位置:自定义位置为 HTTPS URL 直接用;本地路径 `upload_asset`;文本描述用 `generate_image`;未提供则留给 `[4.5]` 生成默认品牌色背景。
  27. `[4.5]` 单次解析品牌套件:优先 `brand.json`,否则从 `build-a-brand` 导出中读 `brand.md`(名称/标语/语调/字体名/logo 描述)、`tokens/tokens.json`(颜色/字体 token)、`logo/` 资产(wordmark、symbol/icon、lockups)。写入 `state.brand`:`name`、`wordmark_url`、`icon_url`、`colors.primary/surface/accent/highlight`、`fonts.display_family/text_family/mono_family`(缺省回退 Space Grotesk / 系统 sans / Space Mono)。
  28. 本地 logo 必须上传:用 `upload_asset` 上传光栅格式(`image/png`、`image/jpeg`、`image/webp`)并保存 `public_url`;不要给 `upload_asset` 传 SVG;若最佳 logo 是 SVG,改用品牌套件同目录 PNG 导出,或把 SVG 内联进 HTML `<svg>` 后用 `html_to_png` 光栅化。
  29. `[4.5]` 未设置 `location_url` 时用 `html_to_png(html:“<body style='margin:0;background:{accent}'></body>”, format:“png”, mode:“sync”, raster_options:{viewport_px:{width:W, height:H}, device_scale:1})` 渲染 `state.brand.colors.accent` 纯色背景,视口匹配宽高比(16:9→1920×1080、9:16→1080×1920、1:1→1080×1080),把返回 `file_url` 存为 `location_url`。
  30. `[5]` 用 `generate_reference_video`(不是 `generate_video`)一次性并行发起 4 个 act:`provider:“seedance”`、`resolution:“1080p”`、`aspect_ratio`、`duration:15`、`seed` 每 act 唯一(101/202/303/404)、`sound:true`、`reference_images`、完整 prompt;误用 `generate_video` 会让 `@ImageN` 被静默忽略并让模型照文本幻觉 UI。
  31. `[5]` prompt 模板:固定开头 “The character (matching @Image1) in a setting whose visual style, palette, lighting and materials match @Image2.” + `CHARACTER VOICE: {character_voice_profile}` + `WARDROBE LOCK: {wardrobe_lock}` 逐字 4 act 一致 + 每个 shot 的构图或 `reveal_beat` + `Background context:`(与其他 shot 不同的物理位置:不同墙/窗/背景特征)+ `Acting beats:` 列表 + `<<<voice_1>>>` 台词块(不含 `(beat)` 标记)+ shot 间 `Transition:` / `Hard cut:` + 结尾 “Native lip-synced dialogue audio, no music overlay.”。
  32. `[5]` 每 act 拆成 3 个带时间码的子镜头(默认 `(0-4s)`、`(4-9s)`、`(9-15s)`),每个子镜头必须换构图(medium/close-up/wide/lower-angle 不连续重复)、换运镜(push-in/pull-back/lateral arc/orbit/handheld/static-held/rack-focus)、换空间物理位置、有能量动作,并把该窗口的台词包在 `<<<voice_1>>>...<<<voice_1>>>` 内;不要单镜头 15s。
  33. `[5]` 不要用 `@Image1` 之外的散文描述角色身份(会与参考图冲突产生幻影人物);不要写与参考图矛盾的美学形容词(如参考图是 3D Pixar 就不要写 photorealistic);不要用 SeeDance 会字面理解的电影术语(Two-shot/Three-shot/Over-shoulder/OTS/Master shot),需要描述时用 “wide framing of the character with [product/logo/environment] in frame” 这类平实语言。
  34. `[5.5]`(仅 `product_type==“digital”`,否则 `ui_grounded_act_urls = act_urls` 并跳过):从脚本收集所有 C/E 镜头构建 `digital_reveal_shots`;任一 C/E 镜头 `asset_index` 为 null 或解析不到 `digital_screen` 条目则停止并报出该 shot;`digital_reveal_plan` 为空则停止。每个计划存 `act`、`shot`、`asset_index`、`asset_url`、`visible_copy`、`brand_name = state.brand.name`、期望文本列表(精确品牌名 + 少量对 pitch 重要的可读 `visible_copy` 短语)。
  35. `[5.5]` 对每个唯一 `asset_url` 用 `render_html_animation`(`format:“mov”` 需要 alpha 时)渲染 15s 覆盖层 clip:真实截图/捕获 UI 嵌入圆角手机屏框并保持正确宽高比;截图中的 wordmark 缩放后不可读时加一条精确 wordmark 行,用 `state.brand.name`,不编造更短别名;覆盖层背景保持透明或视觉隔离,存 `ui_overlay_clip_url`。
  36. `[5.5]` 用 `edit_video_compose(base_video_url: act_urls[act-1], overlays:[{video_url: ui_overlay_clip_url, position_px:<safe phone-screen 或 panel 位置>, width_px:<足够 OCR 可读>}])` 逐个合成;手机目标不稳定时改用稳定面板位(不遮脸、不遮字幕区);结果存 `ui_grounded_act_urls[act-1]`,未改 act 从 `act_urls` 透传。仍需精确品牌标签时对该 act 调用一次 `edit_text_overlay(text: state.brand.name)`(只用于确定性品牌拼写,不是字幕),再把更新 URL 写回 `ui_grounded_act_urls[act-1]`。
  37. `[5.5]` 合成后对每个覆盖 act 做 OCR QA:`extract_frame(video_url: ui_grounded_act_urls[act-1], time_s:<揭示镜头中点>)` + `analyze_media` 要求 JSON 返回 `brand_name_visible`、`brand_name_exact`、`visible_copy_ok`、`garbled_text`、`misspellings`、`verdict`;只有 `yes`/`yes`/`yes`/`clean` 才能继续;否则停止并报出 `overlay_qa_frame_url`、`ui_overlay_clip_url`、期望 `brand_name`、期望 `visible_copy` 和 QA JSON,不得带着原始或 AI 幻觉手机文字进入 `[6]`。
  38. `[6]` 前做跨 act 身份 QA:对每个 `act_urls[i]` 在 `t = 2, 7, 12` 秒 `extract_frame`,共 12 帧 + `founder_photo_url`/`character_url` 参考帧;用 `html_to_png`(每张远程图用 CSS `background-image: url(...)`,视口 2200×1600)拼成 13 格带标签 contact sheet(founder reference + act 1 shot 1 到 act 4 shot 3),存 `identity_contact_sheet_url`;调用一次 `analyze_media` 要求 JSON 返回 `same_founder_as_reference`、`same_founder_across_acts`、`wardrobe_consistent_with_lock`、`bad_act_numbers`、`bad_frame_labels`、`identity_observations`、`verdict`。
  39. 身份 QA 只有 `yes`/`yes`/`yes` 才能 concat;否则只重试坏的 act 一次:同 prompt、同 `reference_images`、新 seed(`original_seed + 1000`)+ 追加一句 “Identity continuity is mandatory: the on-camera founder remains the same person as @Image1 for the entire act.”;重试后重新抽该 act 的 3 帧、重建完整 contact sheet、重跑同一 QA;任一 `act_urls` 变化则丢弃 `ui_grounded_act_urls` 与旧覆盖/OCR 证据、重跑 `[5.5]` 与 OCR;再次失败则停止并报出 `identity_contact_sheet_url`、坏 act URL、`bad_frame_labels`、QA JSON,不得带着不同创始人交付拼接视频。contact sheet 渲染失败也要停止,不得带着未验证身份继续。
  40. 时长下限与缺 act 恢复:`[6]` 前必须有全部 4 个 `act_urls`,不得 concat 部分列表(3 act + 片尾约 50s,低于 55s 下限不算成功);某个 act 到达失败/取消终态时用相同 prompt、`reference_images`、`duration`、`sound`、`resolution`、`aspect_ratio` 但新 seed(`original_seed + 1000`)只重试该 act 一次,成功则插回原槽位继续 `act_urls = [act1, act2, act3, act4]`;不能完成则停止并报上游 SeeDance 超时,可把已完成 act URL 作为诊断预览但不得当 `final_url` 交付、不得称生产就绪、不得进入 `[6]`。原任务仍 `queued`/`running`/`processing` 时不得重试,先继续带可见进度的轮询并在 15 分钟总上限时 `task_cancel`。
  41. `[6]` `edit_concat(video_urls=ui_grounded_act_urls)` 拼接为 60s `base_url`(16:9、原生对话音轨);digital 产品存在覆盖计划时绝不把原始 `act_urls` 直接喂给 concat。
  42. `[7]` 用 `generate_music(provider:“kling-audio”, mode:“text_to_audio”, background:true, duration_seconds:60, prompt:“<=200 chars: soft instrumental background bed; <register>, <main instrument>, <mood>, <BPM>; no vocals; leave room for narration>”)` 生成 ~60s 器乐背景;prompt 必须 <=200 字符(Kling 超长报 `1201`,此时缩短同一风格描述而非重试长 prompt),按 `brief.tone` + 脚本氛围 + 产品语境选曲风(如技术/开发者→corporate cinematic、街头/潮牌→lo-fi hip-hop、金融/加密→minimal electronic、时尚/奢侈→minimal house、健身→driving electronic、餐饮→acoustic、品牌故事→orchestral、游戏/创作者→chiptune-modern)。读 `result.duration_seconds`:>=55 混音;<55 重试一次同样调用,仍短则停止并报工具结果。
  43. `[7]` 反模式(每条曾实际导致失败):不要用 `provider:“minimax-music”` 做默认背景(不支持 `background:true` 且会把旋律顶到人声前);不要在技能里手动平铺 10s Kling 片段(MCP worker 已用本地 ffmpeg 延长一个 10s 种子到 60s);不要把时长只写进 prompt 文本(用 `duration_seconds:60`);不要加 `lyrics` 字段;不要每个品牌都照抄同一个钢琴音色示例(配方是调用模式不是音色)。
  44. `[8]` 按请求选择默认路径:无下三分屏无字幕 → `body_with_overlays_url = base_url`;仅字幕 → `add_captions(video_url: base_url, caption_mode:“auto”, style:“classic”, position:“bottom”, font:“inter”)` 存返回 `url`;仅下三分屏 → 先渲染 `.mov` 再 `edit_video_compose`;两者都要 → 先合成下三分屏再对合成检查点 `add_captions`。若 `state.lower_third` 为 false/未设,跳过 `[8a]`/`[8b]`,保持默认路径全 MCP 原生。
  45. `[8a]`(仅 `state.lower_third = true`)用 `render_html_animation(format:“mov”)`(ProRes 4444 / yuva420p 保留 alpha)渲染 800×220 原生尺寸下三分屏;pill 背景 `colors.primary`(默认 `#0d0d0d`)、边框 `colors.highlight`(默认 `#fefbcf`)、投影 `colors.accent`(默认 `#cfc3ff`)、18px 圆角;两行文字 `founder_name`(Space Grotesk 800, 80px, 白)+ `founder_role`(Space Grotesk 500, 28px, butter);pill 内不放 logo;只用 CSS `@keyframes`(0–0.6s 从 `translateX(-900px)` 滑入、约 3s box-shadow 脉冲、4–5s 滑出),不要 GSAP。存 `.mov` URL 为 `lower_third_url`;不要用 `format:“webm”`(HyperFrames 输出 VP9 yuv420p 无 alpha,透明区会变黑块),必要时用 `ffprobe | grep pix_fmt` 确认含 `yuva`,若为普通 `yuv` 则 alpha 已丢、改渲染格式重渲。
  46. `[8b]`(仅启用下三分屏)用 `edit_video_compose(base_video_url: base_url, overlays:[{video_url: lower_third_url, position_px:{x:50, y:<video_height-220-100>}, width_px:800, height_px:220, start_s:0, end_s:5}])` 合成,存 `body_with_lower_third_url`。MCP compose 不可用时的本地兜底契约:仅下载本次合成所需 `base_url` 与 `lower_third_url`;在 `x=50, y=video_height-220-100` 覆盖 800×220、`t=0..5s`;不重编码保持原声轨以保唇形同步;用视觉无损 H.264 设置;上传检查点用 `upload_asset` 并把 `public_url` 存为 `body_with_lower_third_url`。若同时要字幕,再对 `body_with_lower_third_url` 调 `add_captions` 并把返回 `url` 存为 `body_with_overlays_url`;否则 `body_with_overlays_url = body_with_lower_third_url`。
  47. `[8c]` 用 `add_captions(video_url:<base_url 或 body_with_lower_third_url>, caption_mode:“auto”, style:“classic”, position:“bottom”, font:“inter”, font_color:“#ffffff”, highlight_color: state.brand.colors.accent 或 “#cfc3ff”, outline_color: state.brand.colors.primary 或 “#111111”, font_size:42)` 烧录字幕,返回 `url` 存为 `body_with_overlays_url`;`transcript` 仅作 QA。不要默认跑本地 Whisper/字幕脚本或链式 `edit_text_overlay` 做字幕;要精确原脚本拼写时只在已有可信时间戳分段时传手动 `subtitles[]`,否则宁可暴露自动转写局限。
  48. `[9]` 不用 `generate_slide_animation`,由编排者在技能内直接写片尾 HTML 并用 `render_html_animation(html=filled, fps=30, quality:“standard”, format:“mp4”)` 渲染(与下三分屏同引擎)。硬规则:宽高比与正片一致(16:9→1920×1080、9:16→1080×1920、1:1→1080×1080,错向会导致正片与片尾并排黑边);无角落杂物(无左上 wordmark、无底部 URL、无标题旁图标方框,品牌由字体与配色暗示);用 CSS `@keyframes` 而非 GSAP `tl.from()`(后者在 BeginFrame 逐帧 seek 下不触发、每帧渲染终态);入场动画在 `t = duration - 0.5s` 前完成;用绝对定位而非 flex(flex 在逐帧下第 0 帧未稳定);每个 `@font-face` 用唯一 `font-family` 名(如 `“telka-ext-900”`、`“telka-700”`)而非靠字重匹配;已知可用 `telkaextended-900-normal.woff2` 与 `telka-700-normal.woff2`,`telka-500-normal.woff2` 已知在 HyperFrames Chrome 静默失败(用 `telka-700` 替标签行,未来用中等字重前必须渲染+抽帧 30 验证);品牌字体 base64 内联(Pika CDN 不收字体且不发 CORS 头,`@font-face` URL 引用会失败);品牌设计不要写 CSS `font-family` 回退链(会掩盖加载失败,用单一字体名让失败显式可见);遵循 `#stage[data-composition-id=“main”]` 包单个 `<div id=“card” class=“clip”>` 的组合契约;在 `</body>` 前加 `window.__hf = { duration: 5, seek: (t) => { document.documentElement.style.setProperty(“--hf-time”, String(t)); } };`;渲染后在 `t=0, 1s, 2s` 抽帧视觉比对,帧 0 与帧 2 相同说明入场动画没跑,标签呈衬线说明字体没加载。若 worker 报 `window.__hf not ready after 45000ms`,视为 HTML 对 `render_html_animation` 无效,修组合契约或 hook 后重渲,不要回退静态 PNG。
  49. `[9]` 片尾布局用居中堆栈:顶部 accent 条从左到右擦入(0.00–0.85s,`scaleX:0→1`,`cubic-bezier(0.16,1,0.3,1)`)、标题行 1 与行 2 错峰上滑(0.25–1.00s / 0.42–1.17s,`y:120, opacity:0 → y:0, opacity:1`)、短 accent 分隔线 `scaleX` 进入(1.00–1.50s)、标语淡入上升(1.20–1.75s)、CTA pill 回弹 pop + 呼吸(1.55–2.15s 用 `cubic-bezier(0.34,1.56,0.64,1)`,2.60–4.20s `scale:1→1.05→1` alternate)、accent 条闪烁(2.80–4.80s `opacity:1→0.55→1`)、4.80–5.00s 保持可读终态;配色从 `state.brand` 取(`surface`/`primary`/`accent`,缺省 `#ffffff`/`#0d0d0d`);品牌套件无字体时用系统 `-apple-system, sans-serif` 回退标签/CTA 并降级标题字重,在交付步骤标记品牌套件不完整。把返回 MP4 URL 存为 `end_card_url`(必须是 MP4 视频段,不能是静态 PNG)。
  50. `[10]` 用服务端确定性工具装配:`edit_concat(video_urls=[body_with_overlays_url, end_card_url])` 得 `assembled.url`;有 `music_url` 时 `edit_audio_mix(video_url=assembled_url, audio_url=music_url, audio_volume=0.16)` 得 `final_url`,否则 `final_url = assembled_url`。音乐必须在 concat 之后混,不能在之前(否则片尾静音、音乐在切口处结束);`edit_audio_mix` 因音乐过短/格式错误失败时设 `final_url = assembled_url`、报出音乐问题并仍执行 `[10.5]`,不要重跑昂贵 SeeDance。
  51. `[10.5]` 交付前用 `analyze_media(media: final_url, query:“Return JSON with duration_seconds for this video.”)` 探测 `final_duration_seconds`,必须 `>= 55` 且 `<= 75` 才能把 `final_url` 作为完成品报出;低于 55s 视为部分装配失败,不得当 final 交付、不得标记技能完成,回到缺 act 恢复流程;4 个 act 齐全但探测仍 <55s 则停止并报 concat/供应商截断供排查,不要用无关素材凑时长。
  52. `[11]` 把 `final_url` 存入 `state`;若最终 MP4 来自本地兜底装配,用 `upload_asset` 上传该检查点并用返回 `public_url` 替换 `final_url`。
  53. Post-flight 质量门:对 `final_url` 调 `analyze_media` 要求严格 JSON 返回 `verdict`(clean/degraded/catastrophic)、`observations`、`quality_warning`、`re_roll_suggestion`,检查 `brief.product_name`/`product_name` 拼写、任何手机屏/产品屏显示的是预期产品而非幻觉替代品、所需产品素材出现在预期 act、无黑帧或部分 act 截断;`clean` 正常交付;`degraded` 交付并附 `quality_warning` 供发布前复核;`catastrophic` 不得称视频完成,报出 verdict 与 `re_roll_suggestion` 而非宣布成功。
  54. `[12]`(可选)用户要可编辑源素材时提供打包:`final_url`、`act_urls`、`character_url`、`location_url`、产品/截图素材 URL、`music_url`、`end_card_url`、可选 `lower_third_url` / `body_with_overlays_url`、脚本、品牌速查、act 到素材映射。理由:用户可换一层(创始人照片、字幕时序、音乐)重渲而不重取全部素材;品牌套件是同品牌未来视频的唯一真相源;act 级 `.mp4` 本身有价值;用户常要求把生成的参考素材存在视频旁边复用。
  55. `[13]` 向用户报告 `final_url`,附总时长(来自 `final_duration_seconds`,约 65s = 60s 正片 + 5s 片尾)、可复用中间 URL/本地文件(`base_url`、可选 `body_with_overlays_url`、`music_url`、`end_card_url`、`final_url`、各 `act_urls[i]`)、`brief.product_name` / `brief.tagline` 让用户确认产品正确、以及一行“哪个素材进入哪个 act”的说明。
  56. 长任务轮询契约:任何返回 `task_id` 的调用(含 `{task_id}`、`{task_id, status:“queued”}`、初始 `queued`/`running`/`processing`)立即在 `state` 记录 task id 与开始时间;用紧凑循环调 `task_status({task_id})` 直到终态(`completed | failed | cancelled`),不手动 sleep、不用 Bash 轮询;状态未终态时每 60s 只输出一行进度 `Seedance i2v queued for {N}m {S}s... still processing`(按实际阶段替换 provider/阶段标签);`completed` 时解包结果 URL 存入 `state`;`failed`/`cancelled` 时带 `task_id`、状态、最后状态消息上报;自提交起 15 分钟总上限后仍非终态则 `task_cancel({task_id})` 再上报失败(若 cancel 报已终态则再查一次 status 并报该终态);原任务仍 `queued`/`running`/`processing` 时不得提交重复请求。
  57. 错误恢复:`provider_5xx` 且 `retry_class:“retry_after_backoff”`,或任一上游(Seedance/Kling/OpenAI/Gemini/storage)HTTP 502/503/504 → 等 5s,用完全相同参数重调同一 MCP 工具一次(不改 brief/产品名/创始人照片/act prompt/seed/参考图顺序/音乐 prompt/上传载荷);再失败则中止并提示 “Provider returned a transient upstream error twice. Try again in 1-2 minutes; this usually clears on its own.”;不要重试超过一次。
  58. 错误恢复:`generate_image` 返回上游 4xx 或 `moderation_blocked` → 不重试同一 prompt(审核与多数 4xx 校验是确定性失败);素材非用户关键时仅在替代品仍符合 brief 时尝试一次备用 provider;创始人身份照片不得用会改变身份的备用 provider,改为要求更安全/用户提供的参考图;替代也失败或会改变产品/创始人身份则上报 “Image provider declined this reference prompt. Provide a different reference image or choose a less recognizable/stylized direction.”。Seedance act 审核遵循时长下限/缺 act 恢复,不做重复盲重试。
  59. 错误恢复:上游 429 带 backoff 提示 → 等提示时长(无提示则 30s),用完全相同参数重调一次;仍 429 则中止并上报限流消息。`capture_website` 返回 200 但 `action_bboxes` 为空或 `recording_viewport` 为 0x0 → 不重试,报 “Could not capture <url>. The page may be blocked / paywalled / require auth. Please provide a product brief, screenshots, or hosted assets instead.”。`upload_asset` 失败 → 不要继续在 `reference_images` 或 HTML 中使用本地路径;仅对上述 5xx/429 类重试一次;`auth_error`、不支持的 MIME、网络失败或重复失败则停止并要求托管 URL 或受支持的光栅导出。
  60. 任务上限:Seedance i2v 每次 10 分钟、Kling audio 每次 5 分钟、gpt-image-2 高质量每次 3 分钟、render/edit/upload 辅助每次 5 分钟;取“供应商上限 × 1.5”与“技能硬轮询上限(含上面 15 分钟总上限)”中更早者;超过则 `task_cancel({task_id})` 并上报 “Provider taking unusually long; aborting. Try again.”。
  61. 运营笔记(贯穿全程):每个 act 用唯一 seed(101/202/303/404)以打破幂等缓存(相同参数会哈希到同一 task id 并回放旧结果,含 402 insufficient balance);Kling 音乐背景床用 `provider:“kling-audio”`、`mode:“text_to_audio”`、`background:true`、`duration_seconds:60`(MCP worker 生成一个 10s Kling 种子再本地延长到 60s);SeeDance 对真人创始人照片返回 422 “may contain likenesses of real people” 时用更强风格化重掷创始人参考而非重试同一被拒参考(会烧额度);本地品牌 logo 只上传 `image/png`/`image/jpeg`/`image/webp` 光栅资产,不传 SVG;片尾 HTML 中 CDN 托管 logo/照片用 CSS `background-image: url(...)`(`<img crossorigin>` 会被 CDN CORS 拦);字幕、下三分屏合成、concat、混音用服务端确定性工具,只有 `edit_video_compose` 不可用且 `state.lower_third = true` 时才本地 ffmpeg 兜底;每个 15s act 拆 3 个时间码子镜头(单镜头会呆滞);4 个 act prompt 逐字重复同一句 `WARDROBE LOCK:` 以锁服装;每个镜头块写 `Background context:` 且各 shot 位置不同以强制场景变化。

适用边界 · 注意事项