Files
amz-pic-flow/lib/template-config.js

630 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 可配置的套路模板系统
* 运营人员可以自定义每张图的布局和内容
*/
// ============================================================
// 默认套路配置(基于真实交付成品分析)
// ============================================================
const DEFAULT_MAIN_TEMPLATES = {
// Main_01: 场景首图 + 卖点文字
Main_01: {
type: 'lifestyle_with_features',
name: '场景首图+卖点',
aspectRatio: '1:1',
layout: {
scene: 'left-center', // 场景图位置
title: 'center-bottom', // 标题位置
features: 'bottom-row' // 卖点位置
},
config: {
title: 'DESIGNED FOR COMFORTABLE RECOVERY',
titleStyle: 'curved-banner', // curved-banner | simple | none
features: [
{ icon: 'egg', text: 'LIGHTER THAN AN EGG' },
{ icon: 'water', text: 'WATERPROOF & EASY WIPE' },
{ icon: 'cloud', text: 'BREATHABLE COTTON LINING' }
],
background: 'warm-home'
}
},
// Main_02: 白底平铺 + 局部放大(关键改进!)
Main_02: {
type: 'product_with_callouts',
name: '白底平铺+细节放大',
aspectRatio: '1:1',
layout: {
product: 'center',
callouts: 'corners' // 放大镜效果在角落
},
config: {
title: 'DURABLE WATERPROOF PU LAYER',
titlePosition: 'top',
callouts: [
{
position: 'bottom-left',
target: 'material-edge',
label: 'DURABLE WATERPROOF PU LAYER',
hasArrow: true
},
{
position: 'bottom-right',
target: 'neck-binding',
label: 'DOUBLE-LAYER COMFORT',
hasArrow: true
}
],
background: 'white'
}
},
// Main_03: 功能调节展示
Main_03: {
type: 'feature_showcase',
name: '功能调节展示',
aspectRatio: '1:1',
layout: {
mainScene: 'left',
featureCircles: 'right-column'
},
config: {
title: 'ADJUSTABLE STRAP FOR A SECURE FIT',
titlePosition: 'top-left',
mainScene: {
type: 'cat-wearing',
background: 'lifestyle'
},
featureCircles: [
{ label: 'SECURE THE ADJUSTABLE BELLY STRAP', showDetail: 'velcro-close-up' },
{ label: 'ADJUST FOR A SNUG FIT', showDetail: 'full-product-view' }
],
background: 'matching-color' // 使用产品主色作为背景
}
},
// Main_04: 多场景使用4宫格
Main_04: {
type: 'multi_scenario_grid',
name: '多场景使用',
aspectRatio: '1:1',
layout: {
grid: '2x2',
captionPosition: 'below-each'
},
config: {
scenarios: [
{ scene: 'standing', caption: '• HYGIENIC & EASY TO CLEAN', subtext: 'WATERPROOF OUTER LAYER' },
{ scene: 'eating', caption: '• UNRESTRICTED EATING/DRINKING', subtext: 'SPECIALLY DESIGNED OPENING' },
{ scene: 'playing', caption: '• REVERSIBLE WEAR', subtext: 'FLIP-OVER DESIGN' },
{ scene: 'sleeping', caption: '• 360° COMFORT', subtext: 'FREE MOVEMENT' }
],
background: 'warm-beige'
}
},
// Main_05: 尺寸图
Main_05: {
type: 'size_chart',
name: '尺寸图',
aspectRatio: '1:1',
layout: {
product: 'top-center',
table: 'bottom'
},
config: {
title: 'PRODUCT SIZE',
measurements: ['NECK', 'WIDTH'],
sizeChart: {
XS: { neck: '5.6-6.8IN', depth: '3.2IN' },
S: { neck: '7.2-8.4IN', depth: '4IN' },
M: { neck: '8.8-10.4IN', depth: '5IN' },
L: { neck: '10.8-12.4IN', depth: '6IN' },
XL: { neck: '12.8-14.4IN', depth: '7IN' }
},
footer: 'NOTE: ALWAYS MEASURE YOUR PET\'S NECK BEFORE SELECTING A SIZE'
}
},
// Main_06: 多角度展示
Main_06: {
type: 'multiple_angles',
name: '多角度展示',
aspectRatio: '1:1',
layout: {
images: 'side-by-side',
divider: 'curved-line'
},
config: {
angles: [
{ view: 'front', petType: 'cat' },
{ view: 'side', petType: 'cat' }
],
background: 'warm-interior'
}
}
};
const DEFAULT_APLUS_TEMPLATES = {
// APlus_01: 品牌横幅
APlus_01: {
type: 'brand_banner',
name: '品牌横幅',
aspectRatio: '3:2',
config: {
brandName: 'TOUCHDOG',
productName: 'CAT SOFT CONE COLLAR',
brandStyle: 'playful-curved', // 品牌字体风格
brandColor: '#E8A87C', // 珊瑚色
scene: 'cat-on-furniture',
background: 'warm-home'
}
},
// APlus_02: 对比图(关键改进!)
APlus_02: {
type: 'comparison',
name: '对比图',
aspectRatio: '3:2',
layout: {
left: 'our-product',
right: 'competitor',
center: 'none' // 不要中间的产品图!
},
config: {
leftSide: {
label: 'OUR',
labelBg: '#E8876C',
checkmark: true,
colorful: true,
sellingPoints: [
'CLOUD-LIGHT COMFORT',
'WIDER & CLEARER',
'FOLDABLE & PORTABLE'
]
},
rightSide: {
label: 'OTHER',
labelBg: '#808080',
xmark: true,
grayscale: true,
weaknesses: [
'HEAVY & BULKY',
'BLOCKS VISION & MOVEMENT',
'HARD TO STORE'
]
},
background: 'warm-beige'
}
},
// APlus_03: 功能细节
APlus_03: {
type: 'feature_details',
name: '功能细节',
aspectRatio: '3:2',
config: {
title: 'ENGINEERED FOR UNCOMPROMISED COMFORT',
detailImages: [
{ focus: 'inner-lining', caption: 'STURDY AND BREATHABLE', subtext: 'DURABLE AND COMFORTABLE' },
{ focus: 'wearing-with-size', caption: 'EASY TO CLEAN, STYLISH', subtext: 'AND ATTRACTIVE' },
{ focus: 'stitching-detail', caption: 'REINFORCED STITCHING', subtext: 'AND DURABLE FABRIC' }
],
background: 'warm-beige'
}
},
// APlus_04: 多场景横版
APlus_04: {
type: 'multi_scenario_horizontal',
name: '多场景横版',
aspectRatio: '3:2',
config: {
scenarios: [
{ scene: 'standing', caption: '• HYGIENIC & EASY TO CLEAN' },
{ scene: 'eating', caption: '• UNRESTRICTED EATING/DRINKING' },
{ scene: 'playing', caption: '• REVERSIBLE WEAR' },
{ scene: 'sleeping', caption: '• 360° COMFORT' }
]
}
},
// APlus_05: 多角度横版
APlus_05: {
type: 'multiple_angles_horizontal',
name: '多角度横版',
aspectRatio: '3:2',
config: {
angles: ['front', 'side'],
dividerStyle: 'curved'
}
},
// APlus_06: 尺寸表横版
APlus_06: {
type: 'size_chart_horizontal',
name: '尺寸表横版',
aspectRatio: '3:2',
config: {
title: 'PRODUCT SIZE',
layout: 'product-left-table-right'
}
}
};
// ============================================================
// 从配置生成Prompt的函数
// ============================================================
function generatePromptFromConfig(templateConfig, product, skuInfo) {
const { type, config, layout } = templateConfig;
// 基础产品描述
const productDesc = product.goldenDescription || 'Pet recovery cone collar';
switch (type) {
case 'lifestyle_with_features':
return generateLifestyleWithFeatures(productDesc, config, skuInfo);
case 'product_with_callouts':
return generateProductWithCallouts(productDesc, config, skuInfo);
case 'feature_showcase':
return generateFeatureShowcase(productDesc, config, skuInfo);
case 'multi_scenario_grid':
return generateMultiScenarioGrid(productDesc, config, skuInfo);
case 'size_chart':
return generateSizeChart(productDesc, config, skuInfo);
case 'multiple_angles':
return generateMultipleAngles(productDesc, config, skuInfo);
case 'brand_banner':
return generateBrandBanner(productDesc, config, skuInfo);
case 'comparison':
return generateComparison(productDesc, config, skuInfo);
case 'feature_details':
return generateFeatureDetails(productDesc, config, skuInfo);
default:
return generateGenericPrompt(productDesc, config, skuInfo);
}
}
// ============================================================
// 各类型Prompt生成函数
// ============================================================
function generateLifestyleWithFeatures(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - LIFESTYLE WITH FEATURE TEXT]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
SCENE:
- Beautiful ${skuInfo.petType || 'cat'} wearing the product comfortably
- Warm, cozy home interior background (soft focus)
- Product clearly visible, occupies 50-60% of frame
- Pet looks comfortable and relaxed
TEXT OVERLAY REQUIREMENTS:
- ${config.titleStyle === 'curved-banner' ? 'CURVED BANNER in muted blue (#8BB8C4) across center' : 'SIMPLE TITLE at center-bottom'}
- TITLE TEXT: "${config.title}" in white, clean sans-serif font
- BOTTOM ROW: 3 feature boxes in rounded rectangles
${config.features.map((f, i) => ` - Box ${i+1}: "${f.text}" with ${f.icon} icon`).join('\n')}
STYLE:
- Professional Amazon product photography
- Warm color palette
- Clean, readable text
- Subtle paw print watermarks
- 8K quality, 1:1 aspect ratio
CRITICAL: Product must match reference image EXACTLY in shape, color, and material.
`.trim();
}
function generateProductWithCallouts(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - PRODUCT WITH DETAIL CALLOUTS]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT:
- TOP: Title "${config.title}" in dark green banner with white text
- CENTER: Product C-shape flat lay view on white/light background
- CALLOUT CIRCLES: Magnifying glass style detail views with arrows pointing to product
CALLOUT DETAILS:
${config.callouts.map(c => `- ${c.position.toUpperCase()}: Circular magnified view of ${c.target}
Label: "${c.label}"
Arrow pointing from circle to corresponding area on product`).join('\n')}
STYLE:
- Clean product photography with infographic elements
- Dark green (#2D4A3E) for title banner
- Thin lines/arrows connecting callouts to product
- Professional Amazon listing style
- 8K quality, 1:1 aspect ratio
CRITICAL: Product must show C-shaped opening clearly. Match reference image EXACTLY.
`.trim();
}
function generateFeatureShowcase(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - FEATURE SHOWCASE]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT:
- BACKGROUND: Solid color matching product main color (use product's primary color)
- TOP-LEFT: Large title "${config.title}" in dark text
- LEFT SIDE (60%): Main lifestyle scene - ${skuInfo.petType || 'cat'} wearing product, walking through doorway/arch
- RIGHT SIDE (40%): 2 feature detail circles stacked vertically
FEATURE CIRCLES:
${config.featureCircles.map((f, i) => `${i+1}. Circle showing: ${f.showDetail}
Button/label below: "${f.label}"`).join('\n')}
STYLE:
- Lifestyle photography meets infographic
- Rounded rectangle buttons for labels
- Paw print decorations scattered on background
- Modern, clean design
- 8K quality, 1:1 aspect ratio
CRITICAL: Product color and shape must match reference image EXACTLY.
`.trim();
}
function generateMultiScenarioGrid(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - MULTI-SCENARIO 2x2 GRID]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT: 2x2 grid of scenes, each in rounded rectangle frame
${config.scenarios.map((s, i) => `SCENE ${i+1} (${['TOP-LEFT', 'TOP-RIGHT', 'BOTTOM-LEFT', 'BOTTOM-RIGHT'][i]}):
- ${skuInfo.petType || 'Cat'} ${s.scene} while wearing product
- Caption below: "${s.caption}"
- Subtext: "${s.subtext}"`).join('\n\n')}
BACKGROUND: Warm beige (#F5EDE4) with subtle paw print watermarks
STYLE:
- Each scene in rounded rectangle with slight shadow
- Captions in dark text, clean sans-serif
- Professional lifestyle photography
- 8K quality, 1:1 aspect ratio
CRITICAL: Product in ALL 4 scenes must be identical and match reference image.
`.trim();
}
function generateSizeChart(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - SIZE CHART INFOGRAPHIC]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT:
- TOP: Title "${config.title}" in bold dark text
- CENTER: Product flat lay with measurement arrows and labels
- Arrow across neck opening: "NECK"
- Arrow across width: "WIDTH"
- BOTTOM: Size chart table
SIZE CHART TABLE (clean, rounded corners):
| SIZE | NECK CIRCUMFERENCE | DEPTH |
${Object.entries(config.sizeChart).map(([size, dims]) =>
`| ${size} | ${dims.neck} | ${dims.depth} |`).join('\n')}
FOOTER TEXT: "${config.footer}"
BACKGROUND: Warm beige with subtle paw prints
STYLE:
- Clean infographic design
- Table with alternating row colors
- Professional product photography
- 8K quality, 1:1 aspect ratio
`.trim();
}
function generateMultipleAngles(productDesc, config, skuInfo) {
return `
[AMAZON MAIN IMAGE - MULTIPLE ANGLES]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT:
- Split view with decorative curved divider in center
- LEFT: ${skuInfo.petType || 'Cat'} wearing product, ${config.angles[0].view} view
- RIGHT: Same ${skuInfo.petType || 'cat'} or similar, ${config.angles[1].view} view
SCENE:
- Warm home interior background
- Both pets look comfortable
- Product clearly visible from different angles
STYLE:
- Lifestyle photography
- Soft warm lighting
- Decorative curved line or wave between images
- NO text overlay
- 8K quality, 1:1 aspect ratio
CRITICAL: Product must be IDENTICAL in both views, matching reference image exactly.
`.trim();
}
function generateBrandBanner(productDesc, config, skuInfo) {
return `
[AMAZON A+ BRAND BANNER - HORIZONTAL]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT (970x600px aspect ratio):
- LEFT 40%: Brand text area with decorative elements
- RIGHT 60%: Lifestyle scene
LEFT SIDE:
- Brand name "${config.brandName}" in playful, slightly curved font
- Color: ${config.brandColor} (coral/salmon)
- Decorative paw prints around text
- Product name "${config.productName}" below in smaller gray text
RIGHT SIDE:
- ${skuInfo.petType || 'Cat'} wearing product on modern furniture
- Warm cozy interior background
STYLE:
- Professional Amazon A+ content
- Warm, inviting color palette
- 8K quality, ~1.6:1 aspect ratio
`.trim();
}
function generateComparison(productDesc, config, skuInfo) {
const { leftSide, rightSide } = config;
return `
[AMAZON A+ COMPARISON IMAGE - SPLIT SCREEN]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT: Two-column comparison, NO center product image
LEFT SIDE (OUR PRODUCT):
- GREEN CHECKMARK icon at top
- "${leftSide.label}" label on ${leftSide.labelBg} background
- ${skuInfo.petType || 'Cat'} wearing OUR PRODUCT (must match reference exactly!)
- Cat looks HAPPY and comfortable
- FULL COLOR, warm tones
- Selling points in white text on colored background:
${leftSide.sellingPoints.map(p => `${p}`).join('\n')}
RIGHT SIDE (COMPETITOR):
- RED X-MARK icon at top
- "${rightSide.label}" label on ${rightSide.labelBg} background
- ${skuInfo.petType || 'Cat'} wearing HARD PLASTIC transparent cone
- Cat looks SAD/uncomfortable
- GRAYSCALE/desaturated
- Weaknesses in gray text:
${rightSide.weaknesses.map(p => `${p}`).join('\n')}
BACKGROUND: Warm beige (#F5EDE4) with paw print watermarks
STYLE:
- Clear visual contrast between sides
- Professional comparison layout
- Clean readable text
- 8K quality, ~1.6:1 aspect ratio
CRITICAL:
- LEFT product must match reference image EXACTLY (our soft cone)
- RIGHT shows generic hard plastic cone (NOT our product)
- NO product image in the center
`.trim();
}
function generateFeatureDetails(productDesc, config, skuInfo) {
return `
[AMAZON A+ FEATURE DETAILS - HORIZONTAL]
PRODUCT (MUST MATCH REFERENCE IMAGE EXACTLY):
${productDesc}
LAYOUT:
- TOP: Large title "${config.title}" in bold dark font
- MIDDLE: 3 detail images in rounded rectangles, evenly spaced
${config.detailImages.map((d, i) => `DETAIL ${i+1}:
- Focus: ${d.focus}
- Caption: "${d.caption}"
- Subtext: "${d.subtext}"`).join('\n\n')}
BACKGROUND: Warm beige (#F5EDE4) with subtle paw print watermarks
STYLE:
- Professional product detail photography
- Clean modern typography
- Rounded rectangle frames for each detail
- 8K quality, ~1.6:1 aspect ratio
`.trim();
}
function generateGenericPrompt(productDesc, config, skuInfo) {
return `
[AMAZON PRODUCT IMAGE]
PRODUCT:
${productDesc}
REQUIREMENTS:
- Professional product photography
- Match reference image exactly
- High quality, clear details
- 8K resolution
`.trim();
}
// ============================================================
// 导出
// ============================================================
module.exports = {
DEFAULT_MAIN_TEMPLATES,
DEFAULT_APLUS_TEMPLATES,
generatePromptFromConfig,
// 生成所有12张图的Prompts
generateAllPrompts: (product, skuInfo, customConfig = {}) => {
const mainTemplates = { ...DEFAULT_MAIN_TEMPLATES, ...customConfig.main };
const aplusTemplates = { ...DEFAULT_APLUS_TEMPLATES, ...customConfig.aplus };
const prompts = [];
// 主图6张
for (const [id, template] of Object.entries(mainTemplates)) {
prompts.push({
id,
name: template.name,
aspectRatio: template.aspectRatio || '1:1',
type: template.type,
prompt: generatePromptFromConfig(template, product, skuInfo)
});
}
// A+图6张
for (const [id, template] of Object.entries(aplusTemplates)) {
prompts.push({
id,
name: template.name,
aspectRatio: template.aspectRatio || '3:2',
type: template.type,
prompt: generatePromptFromConfig(template, product, skuInfo)
});
}
return prompts;
}
};