Compare commits

...

10 Commits

5 changed files with 1364 additions and 727 deletions

2
.gitignore vendored
View File

@@ -23,3 +23,5 @@ __pycache__/
.playwright-mcp/
.playwright-cli/
ui-*.png
artifacts/
.memory/screenshots/

View File

@@ -1,6 +1,6 @@
# 项目接力
- 生成时间May 30, 2026 at 16:22
- 生成时间May 31, 2026 at 18:30
- 项目AI玩具专利生成工作流
- 路径:/Users/kangwan/Projects/code/20260518-ai-toy-patent-workflow
- 状态active
@@ -9,7 +9,7 @@
## 最近助手会话概览
- Claude9827598a-67e8-4581-a39c-b89f12dedee8 · 时间未知
- Codex019e52d9-22f1-77d3-9897-146889dd551a · 时间未知
- Codex019e77fa-5990-7621-874c-2a05f076d02c · 时间未知
## Claude 最近会话
@@ -53,47 +53,47 @@
## Codex 最近会话
- Session ID019e52d9-22f1-77d3-9897-146889dd551a
- Transcript/Users/kangwan/.codex/sessions/2026/05/23/rollout-2026-05-23T11-20-22-019e52d9-22f1-77d3-9897-146889dd551a.jsonl
- Session ID019e77fa-5990-7621-874c-2a05f076d02c
- Transcript/Users/kangwan/.codex/sessions/2026/05/30/rollout-2026-05-30T16-22-36-019e77fa-5990-7621-874c-2a05f076d02c.jsonl
- 工作目录:/Users/kangwan/Projects/code/20260518-ai-toy-patent-workflow
- 分支master
- 敏感字段:已对 token / key / password / secret 做脱敏
### 最近用户要求
- # AGENTS.md instructions for /Users/kangwan/Projects/code/20260518-ai-toy-patent-workflow <INSTRUCTIONS> # AI玩具专利生成工作流 Agent Rules ## Must Read First - 全项目规则真源:`/Users/kangwan/Projects/code/20260317-rules-dashboard/RULES.md` - 全项目元数据规范:`/Users/kangwan/Projects/code/20260317-rules-dashboard/SCHEMA.md` - `.project.json` 是机器真源:公网链接、快捷登录、凭证引用都以它为准 - `RULES.md` 是人工规则和部署事实:启动命令、平台、域名、注意事项都写这里 - 不允许编造不存在的域名、账号、密码;未知就保持空白并明确标记待补充 ## Deployment Metadata Contract - 任何任务只要新增、删除或修改公网地址,必须在同一次任务里更新 `.project.json` - `urls[]` 推荐显式写 `type``app``backend``docs``admin``repo` - 项目专属的网页登录信息,如果允许放进仓库,就写 …
- 你现在是在 Codex CLI 里的项目承接会话。 这不是对话立项台;项目目录已经存在,当前目标是接住上下文并等待用户下一步。 项目路径:/Users/kangwan/Projects/code/20260518-ai-toy-patent-workflow 承接步骤: - 先读取 `.memory/assistant-handoff.md` - 再阅读 `.project.json``RULES.md``AGENTS.md` - 结合当前仓库状态建立上下文 要求: - 不要要求用户重新粘贴 Claude / Codex / Cursor 的总结 - 先理解最近进度、未完成项和下一步候选 - 不要立即修改代码、继续上一个任务或自行执行命令 - 等待用户给出下一条明确指令后再开始动手 - 如果后续需要 Cursor提醒用户从看板打开 Cursor GUI 到当前项目目录
- 生图不用节约
- 亥猪为c位做三个45秒的视频其他角色充当背景 主要是展示视频 触感细节 群体快闪 亥猪是这次的c位
- 你把这两天弄的 在桌面也打包一份 我要传给别人
### Codex 最近回复
> 我看到当前交接文件比它自己记录的状态更新:现在 `.memory/assistant-handoff.md` 和 `.memory/worklog.json` 都是本地修改。再补一轮只读检查最近提交、diff 概览和全局规则真源,避免只信旧交接文本
> 素材已整理好214 个文件缺失为 0。现在压成桌面 zip压缩包会保留完整目录结构和交付说明
> 接住上下文,当前只做了只读同步,没有改代码或续跑旧任务。
> 经打包到桌面:
>
> 项目当前状态:`master` 与 `origin/master` 对齐在 `f38c524 docs: record video panel deploy`,前一条功能提交是 `7abbb7d fix: dedupe suffixed video tasks`。最新部署事实是 2026-05-22 的视频面板修复:`video_turntable_60s` 这类真实成片会映射回默认视频卡,不再重复显示不可播放空卡。生产入口是 `https://ai-toy.kang-kang.com`,本地固定端口 `4560`,推荐 `npm run docker:up`。
> [有你家族-两日成果交付包-20260531.zip](/Users/kangwan/Desktop/有你家族-两日成果交付包-20260531.zip)
>
> 当前未提交变更只有接力/日志类文件:
> 包大小约 `508M`,共整理 `214` 个文件,缺失文件 `0`,我也做了压缩包完整性测试:`No errors detected`。
>
> 里面包含三组:
>
> - `01_生肖幻装系列_50cm_亥猪C位`12 款专利六视图、18 张宣发图、3 条 45 秒视频成片、文字资料、QA 总览图
> - `02_亥猪MEEY机甲陪伴机器人_40cm`专利、配件、生产、宣发、文字资料、7 条视频成片
> - `03_糯糯猪智能陪伴毛绒玩具`:专利、配件、生产、宣发图;视频是本地分段草稿,未作为最终成片交付
>
> 包内有 `交付说明.md` 和 `交付文件索引.csv`,可以直接发给别人。
>
> `git status -sb`
> ```text
> ## master...origin/master
> M .memory/assistant-handoff.md
> M .memory/worklog.json
> ```
>
> 下一步候选我先不执行:可以验证线上/本地当前页面、继续查视频播放问题、处理 Claude 交接里提到的本地 dev server chunk 问题或做路线里的导出专利包、ZIP/PDF、Seedance 轮询 UI。后续如果需要 Cursor请从看板打开 Cursor GUI 到当前项目根目录 `/Users/kangwan/Projects/code/20260518-ai-toy-patent-workflow`,不要打开父目录。
>
> <oai-mem-citation>
> <citation_entries>
> MEMORY.md:503-511|note=[handoff read order and no-recap protocol]
> MEMORY.md:517-520|note=[AI toy repo runtime and provider caveats]
> MEMORY.md:49-58|note=[AI toy continuation scope and prior rollout pointer]
>
## 当前仓库状态
- 当前分支master
- 未提交变更1 项
- 最近提交:docs: add orchestration logic overview (PDF + HTML source)
- 最近提交:feat: add zodiac fantasy pig video templates
- 变更文件:
- M .memory/worklog.json

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,10 @@
## 部署事实
- 平台:个人 VPS `76.13.31.179`Docker Compose接入现有 Coolify Traefik
- 发布状态VPS 生产已发布,仅个人使用
- 最近生产数据同步2026-05-31`有你家族 · 生肖幻装系列` session `s_zodiac_fantasy_20260531_main` 已同步到 VPS `data/`,包含 12 张专业投影六视图专利图、18 张系列/单款宣发图、6 份专业文字资产;产品尺度统一按 50cm+ 具身 AI 智能陪伴机器人处理,视频暂缓未生成。本轮使用 `scripts/generate-zodiac-fantasy-series-assets.mjs` 以桌面参考图 `1400a0c9-6501-4a8f-942a-59d5e82edacd.png` 为视觉锚点生成
- 最近生产数据同步2026-05-31新增两条补充展示视频并同步到 VPS `data/``有你家族 · 糯糯猪` session `s_mps3u047_48e383` 新增 45 秒 `nuonuo_pig_motion_feedback_showcase`,重点展示主动耳朵、三套以上眼睛反馈、灵巧尾巴和四肢小范围互动动作;`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 新增 30 秒 `meey_face_display_dynamic_30s`,快节奏聚焦完整无遮挡面部显示屏、互动表情、智能对话情绪反馈和演唱会视频播放
- 最近生产数据同步2026-05-31`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 追加 1 条 45 秒“有你家族 MEEY 屏幕脸展示视频”并同步到 VPS `data/`,任务 `youni_family_meey_screen_showcase` 当前指向 `family-screen45v2` 成片v2 使用 `scripts/seedance-60s-compose.mjs --no-reference` 降低旧参考图 visor 影响,重点要求面部是一整块完整无遮挡显示屏,展示喜怒哀乐/爱心等表情包,以及屏幕播放演唱会舞台画面的智能陪伴场景。
- 最近生产数据同步2026-05-31新增 3 条 45 秒互动展示成片并已同步到 VPS `data/``有你家族 · 生肖幻装系列` session `s_zodiac_fantasy_20260531_main` 新增 `zodiac_fantasy_interaction_showcase`,重点展示亥猪屏幕脸、喜怒哀乐表情包、人机互动和视频播放,且额头猪鼻子可不显示;`有你家族 · 亥猪 MEEY 机甲陪伴机器人` session `s_mpsn5ef3_edc352` 新增 `hai_pig_meey_interaction_showcase`,重点展示面部显示器表情包、语音互动和视频播放;`有你家族 · 糯糯猪` session `s_mps3u047_48e383` 新增 `nuonuo_pig_interaction_showcase`,重点展示自主行动、语音互动,以及猪鼻子、猪耳朵、猪尾巴、猪眼睛的触摸反馈。本轮使用 `scripts/seedance-60s-compose.mjs``interaction45` 分段拼接流程生成,每条成片 3 段拼接约 45 秒。
- 最近生产数据同步2026-05-31`有你家族 · 生肖幻装系列` session `s_zodiac_fantasy_20260531_main` 已同步到 VPS `data/`,包含 12 张专业投影六视图专利图、18 张系列/单款宣发图、6 份专业文字资产、3 条亥猪 C 位 45 秒 Seedance 分段拼接视频(展示视频、触感细节、群体快闪);产品尺度统一按 50cm+ 具身 AI 智能陪伴机器人处理。本轮使用 `scripts/generate-zodiac-fantasy-series-assets.mjs` 以桌面参考图 `1400a0c9-6501-4a8f-942a-59d5e82edacd.png` 为视觉锚点生成图片,视频使用 `scripts/seedance-60s-compose.mjs``zodiac_fantasy_pig_*` 模板生成。
- 最近生产部署2026-05-31`有你家族 · 亥猪` 模板约束已发布并完成生产:视频任务统一改为 45 秒;图片包模板移除默认动物鼻子、尾巴、耳朵等提示,改为 40cm+ AI 陪伴机器人摆件、正面宽约 28cm、侧面深约 22cm、软壳/短绒触感但不改变基础机甲结构。生产 session `s_mpsn5ef3_edc352` 已完成 64 张基础图片、4 张十二生肖装甲组合图、5 条 45 秒亥猪视频和 2 条 30 秒十二生肖集合视频。
- 上一轮生产部署2026-05-30视频 provider 改为默认 Seedance`VIDEO_PROVIDER=seedance`OpenAI Sora 仅作为可选回退;实测 Ark / Seedance `doubao-seedance-2-0` R2V 不接受 `duration=60`,当前 Seedance 单任务按 15 秒提交。若仍需 60 秒成片,需要分段拼接,或回退 OpenAI Sora 的延展链路。
- 最近生产数据同步2026-05-30`有你家族 · 糯糯猪` session `s_mps3u047_48e383` 已同步到 VPS `data/`,包含专利包、配件包、生产打样包、宣发包共 64 张图片Seedance 生产环境 Key 已换新并作为当前默认视频 provider。

View File

@@ -15,6 +15,9 @@ if (!sessionId) fail('Usage: node scripts/seedance-60s-compose.mjs run --session
const SEGMENT_SECONDS = clampNumber(args['segment-seconds'], 15, 3, 15);
const TARGET_SECONDS = clampNumber(args['target-seconds'] || args.seconds, 45, SEGMENT_SECONDS, 180);
const SEGMENT_COUNT = Math.ceil(TARGET_SECONDS / SEGMENT_SECONDS);
const PRODUCT_CONTEXT = productContextForSession(sessionId);
const PRODUCT_SIZE_LABEL = args['product-size'] || PRODUCT_CONTEXT.sizeLabel;
const PRODUCT_SIZE_TEXT = args['product-size-text'] || PRODUCT_CONTEXT.sizeText;
const TEMPLATE_IDS = [
'video_turntable',
'video_unboxing',
@@ -24,6 +27,7 @@ const TEMPLATE_IDS = [
];
const runLabel = safe(args['run-label'] || `seedance${TARGET_SECONDS}`);
const freshRun = Boolean(args.fresh);
const noReferenceImages = Boolean(args['no-reference']);
const selectedTemplateIds = String(args.templates || '')
.split(',')
.map(item => item.trim())
@@ -73,6 +77,60 @@ const VIDEO_TEMPLATE_BLUEPRINTS = {
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒十二生肖装甲走秀短片:${character}. 以亥猪基型为领队,十二套外观像产品发布走秀一样在白色科技展台上轮换展示。颜色可以更丰富,但基础形象不能变:橙色 visor 情绪屏、胸前 M 徽章、斜挎黑色能量肩带、灰橙扣件和短胖站姿全部保留。每个生肖只通过可换装甲区域、色彩符号和表面短绒/软壳材料区分,禁止真实动物器官、禁止重装战斗化。镜头要有节奏感、旋转台、局部特写和集合收束,音乐为原创韩流感电子鼓点,不使用真实歌曲。`,
},
zodiac_fantasy_pig_showcase: {
title: '亥猪 C 位展示视频',
description: `${TARGET_SECONDS} 秒,亥猪作为 C 位主角,其它 11 款生肖幻装作为背景阵列。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 生肖幻装系列 · 亥猪 C 位展示视频”:${character}. 亥猪必须始终是画面 C 位和视觉焦点,粉色猪系毛绒幻装、粉紫情绪 visor、M 家族徽章、斜挎能量肩带、圆润机甲基型必须清晰保留。其它 11 款生肖机器人只能作为背景阵列、舞台两侧、虚化陈列或后景灯箱出现,不抢主角。镜头结构:开场亥猪 visor 点亮,随后 360 度慢旋展示正面、侧面、背面和顶部,再用展台灯光扫过背景十二生肖阵列,最后亥猪回到正中定格。硬性尺度:全系列都是 50cm+ 具身 AI 智能陪伴机器人,不是小手办。画面风格酷炫、干净、女性向高级感,原创韩流感电子节奏,不使用真实受版权保护歌曲。`,
},
zodiac_fantasy_pig_touch_detail: {
title: '亥猪 C 位触感细节',
description: `${TARGET_SECONDS}展示亥猪毛绒软壳、visor、徽章、肩带和脚底细节。`,
ratio: '9:16',
prompt: character => `生成 ${TARGET_SECONDS} 秒“亥猪 C 位触感细节视频”:${character}. 竖版近景,亥猪是唯一主角,其他生肖只作为远处柔焦背景或镜面反射,不抢画面。重点展示粉色短绒毛绒外层、软壳机甲基体、粉紫 visor 情绪屏呼吸光、胸前 M 徽章、斜挎肩带、猪系胸扣、侧面圆形模块、圆润手臂、稳定脚底。需要有手部轻触、指尖划过短绒、按压软壳边缘、visor 亮起回应的细节,但手部比例必须证明这是 50cm+ 大体量陪伴机器人。禁止把亥猪拍成小玩偶、钥匙扣或桌面小公仔。音乐是原创韩流电子节奏和干净鼓点,不使用真实歌曲。`,
},
zodiac_fantasy_pig_group_flash: {
title: '亥猪 C 位群体快闪',
description: `${TARGET_SECONDS} 秒,十二生肖群体快闪,亥猪领舞/领队/C 位收束。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“十二生肖群体快闪视频”:${character}. 亥猪必须是 C 位领队,先单独登场,再由其它 11 款生肖幻装机器人从左右和后方快闪入场形成阵列。其它角色只做背景节奏、队形变化和颜色补充,不改变亥猪主角身份。镜头节奏:快速灯光点亮、生肖角色依次闪现、亥猪向前一步、全员 visor 同步呼吸光、群体 3 排阵列收束。所有角色都是 50cm+ 具身 AI 智能陪伴机器人,体量接近家居摆件/陪伴设备,不是盲盒。风格要酷炫、潮流、女性向高级,原创韩流感电子鼓点,不使用真实受版权保护歌曲。`,
},
zodiac_fantasy_interaction_showcase: {
title: '生肖幻装系列互动展示视频',
description: `${TARGET_SECONDS} 秒,亥猪作为系列代表展示屏幕脸、表情包、视频播放和人机互动。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 生肖幻装系列互动展示视频”:${character}. 以系列中的亥猪为主要展示角色,其他生肖幻装机器人可以作为背景阵列、舞台两侧陈列或远景队列。亥猪面部必须是电子显示屏/情绪 visor屏幕上清楚变化喜、怒、哀、乐、害羞、惊喜等表情包并出现与用户语音互动、点头回应、灯效呼吸、播放短视频画面的场景。额头上的猪鼻子这条视频可以不要显示不要把猪鼻子做成突出的额头装饰保留粉色猪系幻装、M 家族徽章、斜挎能量肩带和圆润 50cm+ 具身 AI 陪伴机器人比例。镜头结构:开场系列展台点亮,亥猪屏幕脸从待机图标切换成表情包;中段展示用户说话、亥猪屏幕回应并播放小视频;后段其它生肖作为背景一起亮屏,最后回到亥猪正面定格。风格干净高级、亲和、有科技感,原创电子节奏,不使用真实受版权保护歌曲。`,
},
hai_pig_meey_interaction_showcase: {
title: '亥猪 MEEY 互动展示视频',
description: `${TARGET_SECONDS} 秒,展示屏幕脸、表情包、视频播放和陪伴交互。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 亥猪 MEEY 机甲陪伴机器人互动展示视频”:${character}. 主角是 40cm+ 亥猪 MEEY 机甲陪伴机器人白色圆润机甲头盔、橙色弧形显示屏脸、深灰面部底层、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带和灰橙功能扣必须稳定一致。面部显示器要清楚呈现喜、怒、哀、乐、撒娇、确认、睡眠等表情包切换,并展示用户靠近说话、机器人屏幕文字/表情回应、播放家庭短视频或动画片段、用灯效和轻微身体动作反馈的场景。镜头结构:开场桌面/客厅真实比例亮相;中段重点拍屏幕脸表情包和视频播放;后段成人手部或儿童在旁边互动,机器人转头/屏幕回应;最后产品完整正面收束。不要变成真实猪、毛绒动物或小手办。风格温暖科技、适合新品展示,原创电子节奏,不使用真实受版权保护歌曲。`,
},
youni_family_meey_screen_showcase: {
title: '有你家族 MEEY 屏幕脸展示视频',
description: `${TARGET_SECONDS} 秒,面部无遮挡显示屏,展示表情包、演唱会视频播放和有你家族陪伴主题。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · MEEY 机甲陪伴机器人屏幕脸展示视频”:${character}. 主题是“有你家族”,主角是亥猪 MEEY 机甲陪伴机器人但画面表达要更像品牌家族成员的智能陪伴产品发布片。最重要硬性要求机器人的面部就是一整块完整电子显示屏屏幕必须无遮挡、无护目镜遮挡、无金属横条挡住、无口罩、无外壳压住显示区域正面镜头要让观众清楚看见完整屏幕边界和屏幕内容。屏幕内容要不断变化开心、委屈、撒娇、惊喜、害羞、睡眼、爱心、确认等表情包中段必须出现播放演唱会视频的场景屏幕里有舞台灯光、歌手剪影、观众光棒或音乐可视化但不要使用真实明星肖像、真实歌曲名、真实品牌标识或可识别版权演唱会。机身保持白色圆润头盔、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带、灰橙功能扣、短胖 40cm+ 陪伴机器人比例。镜头结构:开场“有你家族”温暖家庭空间中产品亮屏;中段大特写展示无遮挡全屏表情包切换和演唱会播放;后段用户语音点播音乐会,机器人屏幕回应并播放舞台画面;最后回到正面完整屏幕露出微笑表情收束。风格温暖、科技、家庭陪伴、品牌发布感,原创电子音乐氛围,不使用真实受版权保护歌曲。`,
},
meey_face_display_dynamic_30s: {
title: 'MEEY 面部屏幕动态展示',
description: `${TARGET_SECONDS} 秒,快节奏展示面部显示屏、互动表情、演唱会播放和智能对话情绪反馈。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 亥猪 MEEY 机甲陪伴机器人面部屏幕动态展示”:${character}. 这是快节奏产品功能展示,核心只围绕面部显示屏展开。面部必须是一整块完整电子显示屏,无遮挡、无窄条 visor、无护目镜、无口罩、无金属横条遮住屏幕镜头要多次贴近完整屏幕边界。屏幕动态要丰富且切换快开心、惊喜、害羞、撒娇、认真倾听、思考中、确认收到、困困眼、爱心、音乐律动等互动表情快速轮换当用户说话时屏幕出现语音波形、听懂后的确认表情、情绪反馈动画当用户说“看演唱会”时屏幕立即播放演唱会视频效果画面里有舞台灯光、歌手剪影、观众光棒、音浪可视化和节奏跳动但不要出现真实明星肖像、真实歌曲名、真实品牌标识或可识别版权演唱会。镜头结构开场 0-5 秒快速亮屏与品牌氛围;中段 5-18 秒连续屏幕特写,表情包和语音互动快速切换;后段 18-27 秒屏幕播放演唱会并跟随节奏闪动;最后 27-30 秒回到完整正面屏幕用温暖笑脸和“陪伴感”收束。机身保持白色圆润机甲身体、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带、40cm+ 陪伴机器人比例。整体节奏比 45 秒版本更快,镜头更密集,重点是屏幕动态效果,不是全身慢展示。原创电子节奏氛围,不使用真实受版权保护歌曲。`,
},
nuonuo_pig_interaction_showcase: {
title: '糯糯猪互动展示视频',
description: `${TARGET_SECONDS} 秒,展示自主行动、语音互动和猪鼻/耳朵/尾巴/眼睛触摸反馈。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 糯糯猪智能陪伴毛绒玩具互动展示视频”:${character}. 主角是约 45cm 大尺寸浅粉色长绒毛糯糯猪,圆胖坐姿、黑亮圆眼睛、粉色立体猪鼻、下垂猪耳朵、短卷尾巴、金色挂绳项圈和爱心吊牌必须保持一致。视频必须体现它不是普通静态毛绒玩具,而是能自主行动、能和人语音互动的智能陪伴玩具:可以轻微前进/转身/抬头点头,听到用户说话后用软萌语音、眼部灯效、鼻尖呼吸光、耳朵轻动、尾巴摇动回应。必须安排人机互动镜头:用户摸猪鼻子时鼻尖发光并发出回应;摸耳朵时耳朵轻摆并听懂语音;摸尾巴时尾巴卷动或抖动反馈;看向眼睛时眼睛亮起、眨眼或显示情绪光。镜头结构:开场从沙发/儿童房自主走近;中段语音问答与触摸反馈;后段拥抱陪伴、睡前故事或亲子互动;最后糯糯猪坐回中心微笑收束。不要改成机甲机器人、不要失去毛绒小猪身份,不要变成小挂件。风格温暖治愈、真实家庭使用场景,原创轻快音乐,不使用真实受版权保护歌曲。`,
},
nuonuo_pig_motion_feedback_showcase: {
title: '糯糯猪动作反馈展示视频',
description: `${TARGET_SECONDS} 秒,重点展示主动耳朵、三套以上眼睛反馈、灵巧尾巴和四肢小动作。`,
ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 糯糯猪动作反馈展示视频”:${character}. 主角必须是约 45cm 大尺寸浅粉色长绒毛糯糯猪,圆胖可拥抱坐姿、黑亮圆眼睛、粉色立体猪鼻、下垂猪耳朵、短卷尾巴、短小四肢、金色挂绳项圈和爱心吊牌保持一致。核心主题是“身体反馈比上一条更丰富”:猪耳朵不是被动晃动,而是会主动抬起、轻摆、左右倾听、听到用户声音后有节奏地扇动;眼睛要有三套以上明确反馈效果,包括眨眼/星星眼/爱心光/困困眼/开心月牙眼/听懂后的确认光圈等,至少出现三种不同状态;尾巴要灵巧摆动,可以卷尾轻摇、左右摆、开心时快速抖动、被呼唤时像小天线一样回应;四肢也要小范围动起来,前肢可以抬手打招呼、轻轻抱住用户手指,后肢可以配合身体小步前进或坐姿调整,但动作要符合软萌毛绒玩具,不要变成硬质机器人。镜头结构:开场糯糯猪听到“有你家族”呼唤后耳朵主动竖动并小步靠近;中段连续展示眼睛三种以上反馈、尾巴灵巧摆动、前肢打招呼和语音互动;后段用户轻摸耳朵/鼻子/尾巴后分别触发不同灯效和动作反馈;最后糯糯猪坐在沙发或儿童房中央,用眼睛爱心光和尾巴轻摇温暖收束。不要失去毛绒猪身份,不要变成机甲机器人、小挂件或四足宠物。风格温暖治愈、亲子陪伴、真实家庭使用场景,原创轻快音乐,不使用真实受版权保护歌曲。`,
},
};
const env = {
@@ -83,7 +141,7 @@ const apiKey = env.SEEDANCE_API_KEY;
if (!apiKey) fail('SEEDANCE_API_KEY missing');
const apiBase = env.SEEDANCE_API_BASE || 'https://ark.cn-beijing.volces.com/api/v3';
const model = env.SEEDANCE_MODEL || 'doubao-seedance-2-0-260128';
const publicAppUrl = env.PUBLIC_APP_URL || env.NEXT_PUBLIC_APP_URL || 'https://ai-toy.kang-kang.com';
const publicAppUrl = args['public-app-url'] || env.PUBLIC_APP_URL || env.NEXT_PUBLIC_APP_URL || 'https://ai-toy.kang-kang.com';
const sessionPath = path.join(root, 'data', 'sessions', `${sessionId}.json`);
const trackerDir = path.join(root, 'data', 'video-segments');
const trackerPath = path.join(trackerDir, `${sessionId}-${runLabel}.json`);
@@ -176,7 +234,7 @@ async function ensureTracker() {
}
const anchor = findAnchor(session);
const referenceUrls = findVideoReferenceUrls(session, anchor);
const referenceUrls = noReferenceImages ? [] : findVideoReferenceUrls(session, anchor);
const character = characterSummary(session);
for (const templateId of activeTemplateIds) {
const task = (session.videoTasks || []).find(item => item.templateId === templateId) || buildDefaultVideoTask(session, templateId, character, anchor);
@@ -278,7 +336,7 @@ async function submitSegment(entry, part) {
const body = {
model,
content: [
{ type: 'text', text: segmentPrompt(entry.prompt, part) },
{ type: 'text', text: segmentPrompt(entry, part) },
...entry.referenceUrls.map(url => ({
type: 'image_url',
image_url: { url: publicUrl(url) },
@@ -498,21 +556,71 @@ function taskStatus(entry) {
return 'processing';
}
function segmentPrompt(prompt, part) {
function segmentPrompt(entry, part) {
const fullScreenFaceTemplate = entry.templateId === 'youni_family_meey_screen_showcase'
|| entry.templateId === 'meey_face_display_dynamic_30s';
const fullScreenFaceConstraints = fullScreenFaceTemplate
? [
'本条视频必须把“脸部是一整块完整显示屏”作为最高优先级,覆盖参考图中的橙色弧形 visor 造型;不要生成窄条 visor、护目镜、眼罩、头盔眉檐压住屏幕、外壳横条遮挡、口罩或任何挡住屏幕的结构。',
'每个正面或近景镜头都要能看见完整矩形或大圆角矩形屏幕边界,屏幕面积占脸部主体,大屏里显示表情包或演唱会画面;屏幕外壳只能作为薄边框。',
'可以保留白色圆润机甲身体、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带和 40cm+ 陪伴机器人比例,但不要保留旧参考图的橙色眯眼 visor 脸。',
]
: entry.templateId === 'nuonuo_pig_motion_feedback_showcase'
? [
...PRODUCT_CONTEXT.constraints,
'本条视频的动作反馈优先级最高:耳朵必须主动动,眼睛必须出现三套以上不同反馈效果,尾巴必须灵巧摆动,四肢必须做小范围互动动作。',
'眼睛反馈至少包含三种清晰状态,例如眨眼、星星眼、爱心光、开心月牙眼、困困眼、确认光圈或彩色情绪光;每一种都要在镜头中可辨认。',
'动作必须保持柔软毛绒玩具的可信度:耳朵、尾巴和四肢可以有内置机芯驱动的小动作,但不能变成硬质机器人、四足宠物或夸张卡通变形。',
]
: PRODUCT_CONTEXT.constraints;
return [
prompt.trim(),
entry.prompt.trim(),
'',
`这是 Seedance 分段生成的第 ${part}/${SEGMENT_COUNT} 段,每段 ${SEGMENT_SECONDS} 秒,最终会拼成 ${TARGET_SECONDS} 秒完整视频。`,
partCue(part),
'硬性尺寸约束:主角始终是“有你家族 · 亥猪”40cm+ AI 陪伴机甲摆件,高度必须超过 40cm正面宽约 28cm侧面深约 22cm。',
'必须明显是 40cm 以上的实体产品:可用成人双手、包装盒、展台、桌面或家居物件证明比例;不能像掌心小玩偶、桌面迷你摆件、挂件或钥匙扣。',
partCue(part, entry.templateId),
`硬性尺寸约束:${PRODUCT_SIZE_TEXT}`,
`必须明显是 ${PRODUCT_SIZE_LABEL} 以上的实体产品:${PRODUCT_CONTEXT.scaleProof}`,
'参考图里的中文和数字只用于理解尺寸比例;成片画面中不要生成任何数字、厘米文字、箭头尺寸标注或文字海报,避免出现错误读数。',
'必须保留白色圆润头盔、橙色弧形 visor 情绪屏、深灰面部底层、头顶 MEEY 竖条、胸前 M 徽章、斜挎黑色能量肩带、灰橙功能扣、侧面圆形模块、短胖站立比例。',
'外部可呈现亲肤短绒、软壳或软硅胶复合触感,但不能改变基础机甲设计。禁止猪鼻子、猪尾巴、写实猪耳、猪蹄、四足身体、其它动物主体、武器和攻击性重装机甲。',
].join('\n');
...fullScreenFaceConstraints,
].filter(Boolean).join('\n');
}
function partCue(part) {
function partCue(part, templateId) {
if (templateId === 'youni_family_meey_screen_showcase') {
if (part === 1) return '第 1 段:建立“有你家族”家庭陪伴场景,机器人正面亮屏登场,脸部必须是无遮挡大显示屏,先展示微笑、爱心、欢迎等表情包。';
if (part === 2) return '第 2 段:重点展示完整屏幕脸播放演唱会视频,屏幕里有舞台灯光、歌手剪影、观众光棒或音乐可视化;屏幕边界必须完整可见。';
if (part === SEGMENT_COUNT) return '最后一段:用户语音点播,机器人用完整屏幕切换表情包并继续播放音乐会画面,最后以无遮挡大屏微笑正面收束。';
return `${part} 段:保持完整大屏脸和有你家族陪伴主题,增加表情包、音乐播放或人机互动,不要回到窄条 visor。`;
}
if (templateId === 'meey_face_display_dynamic_30s') {
if (part === 1) return '第 1 段:快节奏亮屏开场,正面完整大屏无遮挡,快速切换开心、惊喜、害羞、认真倾听等互动表情。';
if (part === 2 || part === SEGMENT_COUNT) return '最后一段:用户点播演唱会,完整面部屏幕播放舞台灯光、歌手剪影、观众光棒和音乐可视化,同时穿插智能对话情绪反馈并用笑脸收束。';
return `${part} 段:保持完整大屏脸,密集展示表情包、语音波形、确认反馈和演唱会播放效果,节奏要比 45 秒版本更快。`;
}
if (templateId === 'nuonuo_pig_motion_feedback_showcase') {
if (part === 1) return '第 1 段:建立家庭场景,糯糯猪听到“有你家族”呼唤后耳朵主动抬起和左右轻摆,身体小步靠近,展示 45cm 可拥抱体量。';
if (part === 2) return '第 2 段:集中展示眼睛三套以上反馈效果,例如眨眼、星星眼、爱心光、开心月牙眼或确认光圈,并配合语音互动。';
if (part === SEGMENT_COUNT) return '最后一段:重点展示尾巴灵巧摆动和四肢小动作,前肢打招呼或抱住用户手指,后肢小步调整坐姿,温暖收束。';
return `${part} 段:保持同一只糯糯猪和同一尺寸,继续增加耳朵、眼睛、尾巴、四肢的互动反馈细节。`;
}
if (PRODUCT_CONTEXT.kind === 'nuonuo') {
if (part === 1) return '第 1 段:建立家庭使用场景,糯糯猪从沙发、床边或儿童房角落自主行动到用户身边,展示 45cm 大尺寸毛绒体量。';
if (part === 2) return '第 2 段:重点展示语音互动和触摸反馈,猪鼻子、耳朵、眼睛、尾巴分别被触发并给出灯效、声音或动作回应。';
if (part === SEGMENT_COUNT) return '最后一段:进入亲子陪伴或睡前故事场景,糯糯猪被拥抱后仍有轻微眨眼、耳朵摆动和尾巴反馈,温暖收束。';
return `${part} 段:保持同一只糯糯猪和同一尺寸,增加真实家庭人机互动、语音问答或柔软触感细节。`;
}
if (PRODUCT_CONTEXT.kind === 'zodiac-fantasy') {
if (part === 1) return '第 1 段:建立系列展台和亥猪主角,亥猪屏幕脸点亮,先展示整体体量、粉色幻装、胸前徽章和斜挎肩带;额头猪鼻子可以不出现。';
if (part === 2) return '第 2 段:继续同一只亥猪,展示显示屏脸切换喜怒哀乐表情包、语音互动回应和播放视频画面,其它生肖只做背景。';
if (part === SEGMENT_COUNT) return '最后一段:背景十二生肖阵列亮屏,亥猪回到 C 位,屏幕脸用温暖表情收束,明确 50cm+ 具身 AI 陪伴机器人尺度。';
return `${part} 段:保持亥猪主角身份和 50cm+ 尺度,增加人机互动、局部特写或系列阵列变化,不改变基础设计。`;
}
if (PRODUCT_CONTEXT.kind === 'hai-pig-meey') {
if (part === 1) return '第 1 段:建立亥猪 MEEY 在客厅或展台中的真实比例展示屏幕脸、MEEY 顶部识别条、胸前徽章和斜挎肩带。';
if (part === 2) return '第 2 段:重点拍面部显示器,连续切换喜怒哀乐表情包,并展示屏幕播放视频与用户语音互动。';
if (part === SEGMENT_COUNT) return '最后一段:成人手部或儿童与机器人互动,机器人用屏幕表情、灯效和轻微转头回应,完整产品正面收束。';
return `${part} 段:保持同一台亥猪 MEEY 和 40cm+ 尺寸,增加陪伴交互、局部特写或多媒体播放场景。`;
}
if (SEGMENT_COUNT <= 2) {
return part === 1
? '第 1 段:建立系列世界观和主角登场,亥猪先出现,镜头给足正面、肩带、徽章、情绪屏和 40cm+ 体量。'
@@ -524,6 +632,46 @@ function partCue(part) {
return `${part} 段:保持同一角色和同一尺寸,增加使用场景、局部特写、触感互动或系列装甲转换,不改变基础设计。`;
}
function productContextForSession(value) {
if (value.includes('s_mps3u047') || value.includes('nuonuo')) {
return {
kind: 'nuonuo',
sizeLabel: '45cm',
sizeText: '主角始终是“有你家族 · 糯糯猪”约 45cm 大尺寸智能陪伴毛绒玩具,必须明显是可拥抱的家庭陪伴产品体量;可用儿童/成人手部、沙发、床、地毯、抱枕或包装盒衬托比例,不能像掌心小玩偶、钥匙扣、小挂件或桌面迷你摆件。',
scaleProof: '可用儿童/成人手部、沙发、床、地毯、抱枕或包装盒证明约 45cm 可拥抱体量;不能像掌心小玩偶、桌面迷你摆件、挂件或钥匙扣。',
constraints: [
'必须保留浅粉色长绒毛圆胖坐姿小猪形象、黑亮圆眼睛、粉色立体猪鼻、下垂猪耳朵、短卷尾巴、短小四肢、金色挂绳项圈和爱心吊牌。',
'必须体现智能互动能力:自主轻微移动、语音问答、触摸传感反馈、眼部灯效、鼻尖呼吸光、耳朵轻摆、尾巴卷动或抖动。反馈可以温柔夸张,但不能变成硬质机甲机器人。',
'外观可以暗示内置可拆卸智能机芯和安全电池仓,但主体必须是亲肤长绒毛绒玩具。禁止第三方 IP、水印、文字广告、真实品牌标识和错误尺寸标注。',
],
};
}
if (value.includes('zodiac_fantasy')) {
return {
kind: 'zodiac-fantasy',
sizeLabel: '50cm+',
sizeText: '主角始终是“有你家族 · 生肖幻装系列”中的亥猪 50cm+ 具身 AI 智能陪伴机器人,必须明显是家庭空间级真实产品体量;可用成人手部、沙发、展台、包装盒或其他生肖机器人衬托比例,不能像桌面小摆件、掌心玩偶、挂件或盲盒。',
scaleProof: '可用成人双手、包装盒、展台、沙发或其他生肖机器人证明家庭空间级体量;不能像掌心小玩偶、桌面迷你摆件、挂件或盲盒。',
constraints: [
'必须保留亥猪作为系列代表:粉色猪系毛绒幻装、电子显示屏/情绪 visor 脸、M 家族徽章、斜挎能量肩带、圆润机甲基型和 50cm+ 陪伴机器人比例。',
'额头上的猪鼻子在本条互动展示中可以不显示;不要把猪鼻子做成突出的额头装饰。面部重点是显示屏脸、表情包、喜怒哀乐和视频播放。',
'其它生肖幻装机器人只能作为背景阵列、远景陈列或辅助队列,不能抢走亥猪主角。禁止真实动物身体、四足化、攻击性重装、武器、水印和错误文字。',
],
};
}
return {
kind: 'hai-pig-meey',
sizeLabel: '40cm+',
sizeText: '主角始终是“有你家族 · 亥猪 MEEY 机甲陪伴机器人”40cm+ AI 陪伴机甲摆件,高度必须超过 40cm正面宽约 28cm侧面深约 22cm。',
scaleProof: '可用成人双手、包装盒、展台、桌面或家居物件证明比例;不能像掌心小玩偶、桌面迷你摆件、挂件或钥匙扣。',
constraints: [
'必须保留白色圆润头盔、橙色弧形显示屏脸/visor、深灰面部底层、头顶 MEEY 竖条、胸前 M 徽章、斜挎黑色能量肩带、灰橙功能扣、侧面圆形模块、短胖站立比例。',
'面部显示器必须可以切换喜怒哀乐、撒娇、确认、睡眠等表情包,并可以播放视频或动画片段;人机互动要通过屏幕表情、灯效、语音回应和轻微身体动作体现。',
'外部可呈现亲肤短绒、软壳或软硅胶复合触感,但不能改变基础机甲设计。禁止变成真实猪、毛绒动物、四足身体、武器和攻击性重装机甲。',
],
};
}
function normalizeStatus(status) {
if (status === 'succeeded' || status === 'success' || status === 'completed') return 'succeeded';
if (status === 'failed' || status === 'error') return 'failed';
@@ -552,7 +700,20 @@ function findAnchor(session) {
}
function findVideoReferenceUrls(session, fallbackUrl) {
if (session.id?.includes('zodiac_fantasy') || sessionId.includes('zodiac_fantasy')) {
return [
findAssetUrl(session, 'zodiac_fantasy_pig_sku_card'),
findAssetUrl(session, 'patent_pig_six_view'),
fallbackUrl,
].filter(Boolean).filter((url, index, urls) => urls.indexOf(url) === index);
}
const preferredTemplateIds = [
'zodiac_fantasy_pig_sku_card',
'zodiac_fantasy_collection_kv',
'zodiac_fantasy_retail_grid',
'zodiac_fantasy_patent_overview',
'zodiac_fantasy_female_lifestyle',
'patent_pig_six_view',
'zodiac_hero_lineup',
'zodiac_armor_grid',
'zodiac_material_palette',