feat: add MEEY screen face video template

This commit is contained in:
2026-05-31 19:33:24 +08:00
parent 628d7e85db
commit 69687116e7

View File

@@ -27,6 +27,7 @@ const TEMPLATE_IDS = [
]; ];
const runLabel = safe(args['run-label'] || `seedance${TARGET_SECONDS}`); const runLabel = safe(args['run-label'] || `seedance${TARGET_SECONDS}`);
const freshRun = Boolean(args.fresh); const freshRun = Boolean(args.fresh);
const noReferenceImages = Boolean(args['no-reference']);
const selectedTemplateIds = String(args.templates || '') const selectedTemplateIds = String(args.templates || '')
.split(',') .split(',')
.map(item => item.trim()) .map(item => item.trim())
@@ -106,6 +107,12 @@ const VIDEO_TEMPLATE_BLUEPRINTS = {
ratio: '16:9', ratio: '16:9',
prompt: character => `生成 ${TARGET_SECONDS} 秒“有你家族 · 亥猪 MEEY 机甲陪伴机器人互动展示视频”:${character}. 主角是 40cm+ 亥猪 MEEY 机甲陪伴机器人白色圆润机甲头盔、橙色弧形显示屏脸、深灰面部底层、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带和灰橙功能扣必须稳定一致。面部显示器要清楚呈现喜、怒、哀、乐、撒娇、确认、睡眠等表情包切换,并展示用户靠近说话、机器人屏幕文字/表情回应、播放家庭短视频或动画片段、用灯效和轻微身体动作反馈的场景。镜头结构:开场桌面/客厅真实比例亮相;中段重点拍屏幕脸表情包和视频播放;后段成人手部或儿童在旁边互动,机器人转头/屏幕回应;最后产品完整正面收束。不要变成真实猪、毛绒动物或小手办。风格温暖科技、适合新品展示,原创电子节奏,不使用真实受版权保护歌曲。`, 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+ 陪伴机器人比例。镜头结构:开场“有你家族”温暖家庭空间中产品亮屏;中段大特写展示无遮挡全屏表情包切换和演唱会播放;后段用户语音点播音乐会,机器人屏幕回应并播放舞台画面;最后回到正面完整屏幕露出微笑表情收束。风格温暖、科技、家庭陪伴、品牌发布感,原创电子音乐氛围,不使用真实受版权保护歌曲。`,
},
nuonuo_pig_interaction_showcase: { nuonuo_pig_interaction_showcase: {
title: '糯糯猪互动展示视频', title: '糯糯猪互动展示视频',
description: `${TARGET_SECONDS} 秒,展示自主行动、语音互动和猪鼻/耳朵/尾巴/眼睛触摸反馈。`, description: `${TARGET_SECONDS} 秒,展示自主行动、语音互动和猪鼻/耳朵/尾巴/眼睛触摸反馈。`,
@@ -215,7 +222,7 @@ async function ensureTracker() {
} }
const anchor = findAnchor(session); const anchor = findAnchor(session);
const referenceUrls = findVideoReferenceUrls(session, anchor); const referenceUrls = noReferenceImages ? [] : findVideoReferenceUrls(session, anchor);
const character = characterSummary(session); const character = characterSummary(session);
for (const templateId of activeTemplateIds) { for (const templateId of activeTemplateIds) {
const task = (session.videoTasks || []).find(item => item.templateId === templateId) || buildDefaultVideoTask(session, templateId, character, anchor); const task = (session.videoTasks || []).find(item => item.templateId === templateId) || buildDefaultVideoTask(session, templateId, character, anchor);
@@ -317,7 +324,7 @@ async function submitSegment(entry, part) {
const body = { const body = {
model, model,
content: [ content: [
{ type: 'text', text: segmentPrompt(entry.prompt, part) }, { type: 'text', text: segmentPrompt(entry, part) },
...entry.referenceUrls.map(url => ({ ...entry.referenceUrls.map(url => ({
type: 'image_url', type: 'image_url',
image_url: { url: publicUrl(url) }, image_url: { url: publicUrl(url) },
@@ -537,20 +544,33 @@ function taskStatus(entry) {
return 'processing'; return 'processing';
} }
function segmentPrompt(prompt, part) { function segmentPrompt(entry, part) {
const fullScreenFaceConstraints = entry.templateId === 'youni_family_meey_screen_showcase'
? [
'本条视频必须把“脸部是一整块完整显示屏”作为最高优先级,覆盖参考图中的橙色弧形 visor 造型;不要生成窄条 visor、护目镜、眼罩、头盔眉檐压住屏幕、外壳横条遮挡、口罩或任何挡住屏幕的结构。',
'每个正面或近景镜头都要能看见完整矩形或大圆角矩形屏幕边界,屏幕面积占脸部主体,大屏里显示表情包或演唱会画面;屏幕外壳只能作为薄边框。',
'可以保留白色圆润机甲身体、MEEY 顶部识别条、胸前 M 徽章、斜挎能量肩带和 40cm+ 陪伴机器人比例,但不要保留旧参考图的橙色眯眼 visor 脸。',
]
: PRODUCT_CONTEXT.constraints;
return [ return [
prompt.trim(), entry.prompt.trim(),
'', '',
`这是 Seedance 分段生成的第 ${part}/${SEGMENT_COUNT} 段,每段 ${SEGMENT_SECONDS} 秒,最终会拼成 ${TARGET_SECONDS} 秒完整视频。`, `这是 Seedance 分段生成的第 ${part}/${SEGMENT_COUNT} 段,每段 ${SEGMENT_SECONDS} 秒,最终会拼成 ${TARGET_SECONDS} 秒完整视频。`,
partCue(part), partCue(part, entry.templateId),
`硬性尺寸约束:${PRODUCT_SIZE_TEXT}`, `硬性尺寸约束:${PRODUCT_SIZE_TEXT}`,
`必须明显是 ${PRODUCT_SIZE_LABEL} 以上的实体产品:${PRODUCT_CONTEXT.scaleProof}`, `必须明显是 ${PRODUCT_SIZE_LABEL} 以上的实体产品:${PRODUCT_CONTEXT.scaleProof}`,
'参考图里的中文和数字只用于理解尺寸比例;成片画面中不要生成任何数字、厘米文字、箭头尺寸标注或文字海报,避免出现错误读数。', '参考图里的中文和数字只用于理解尺寸比例;成片画面中不要生成任何数字、厘米文字、箭头尺寸标注或文字海报,避免出现错误读数。',
...PRODUCT_CONTEXT.constraints, ...fullScreenFaceConstraints,
].filter(Boolean).join('\n'); ].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 (PRODUCT_CONTEXT.kind === 'nuonuo') { if (PRODUCT_CONTEXT.kind === 'nuonuo') {
if (part === 1) return '第 1 段:建立家庭使用场景,糯糯猪从沙发、床边或儿童房角落自主行动到用户身边,展示 45cm 大尺寸毛绒体量。'; if (part === 1) return '第 1 段:建立家庭使用场景,糯糯猪从沙发、床边或儿童房角落自主行动到用户身边,展示 45cm 大尺寸毛绒体量。';
if (part === 2) return '第 2 段:重点展示语音互动和触摸反馈,猪鼻子、耳朵、眼睛、尾巴分别被触发并给出灯效、声音或动作回应。'; if (part === 2) return '第 2 段:重点展示语音互动和触摸反馈,猪鼻子、耳朵、眼睛、尾巴分别被触发并给出灯效、声音或动作回应。';