144 lines
4.5 KiB
JavaScript
144 lines
4.5 KiB
JavaScript
/**
|
||
* 镭射卡五图预设 — 真实金属银系
|
||
* 参考实体卡:Pokémon holo / BTS photocard / 国产星穹镭射票
|
||
* 5 张卡都是金属底,仅银色微调 + 色带方向/速度不同
|
||
*
|
||
* Prompt 字段:
|
||
* bgPrompt — 背景主题描述(不含前缀/后缀,由 Gateway 拼接)
|
||
* overlayPrompt — 装饰层描述(同上)
|
||
* colorHint — 主色调提示(用于用户 prompt 的配色引导)
|
||
*/
|
||
|
||
export const LASER_BATCH_EXPORT_SIZE = { w: 450, h: 600 }
|
||
|
||
/** 兼容字段:旧的 rich 模式已弃用 */
|
||
export const PRESET_VARIANTS = [
|
||
{
|
||
id: 'dream',
|
||
style: 'dream',
|
||
beam: 'prism',
|
||
backdropMode: 'grating',
|
||
backdropTone: '#A8ACB2', // 冷银
|
||
sheenBandAngle: 135,
|
||
sheenSpeed: 0.35,
|
||
sheenIntensity: 0.40,
|
||
foilCoverage: 0.75,
|
||
laserStrength: 50,
|
||
frostIntensity: 8,
|
||
flowSpeed: 0.35,
|
||
colorHint: '淡紫色 粉色 银色',
|
||
bgPrompt: '梦幻柔光渐变,淡紫色调和粉色,柔和泡泡和星光光斑,虚化景深,纯净梦幻氛围',
|
||
overlayPrompt: '精致银色星点,细边框装饰线,散落星形闪光和柔和光斑',
|
||
},
|
||
{
|
||
id: 'classic',
|
||
style: 'classic',
|
||
beam: 'aurora',
|
||
backdropMode: 'grating',
|
||
backdropTone: '#A89E91', // 香槟银
|
||
sheenBandAngle: 120,
|
||
sheenSpeed: 0.45,
|
||
sheenIntensity: 0.38,
|
||
foilCoverage: 0.70,
|
||
laserStrength: 48,
|
||
frostIntensity: 6,
|
||
flowSpeed: 0.45,
|
||
colorHint: '香槟金 暖金色 浅米色',
|
||
bgPrompt: '经典复古胶片风格,暖色调,浅香槟色渐变,艺术纹理和柔和光影,优雅复古氛围',
|
||
overlayPrompt: '经典复古边框花纹,暖金色调和银色细线,精致几何图案',
|
||
},
|
||
{
|
||
id: 'holoFull',
|
||
style: 'holoFull',
|
||
beam: 'neon',
|
||
backdropMode: 'grating',
|
||
backdropTone: '#B0ACA6', // 珍珠银
|
||
sheenBandAngle: 150,
|
||
sheenSpeed: 0.30,
|
||
sheenIntensity: 0.50,
|
||
foilCoverage: 0.95,
|
||
laserStrength: 62,
|
||
frostIntensity: 10,
|
||
flowSpeed: 0.30,
|
||
colorHint: '银色 霓虹色 金属银',
|
||
bgPrompt: '全息科技感渐变,银色金属质感,未来主义光影和几何线条,珍珠光泽,炫酷科技氛围',
|
||
overlayPrompt: '全息科技感装饰,霓虹色细线光晕,电路板几何图案和星形闪光',
|
||
},
|
||
{
|
||
id: 'ice',
|
||
style: 'ice',
|
||
beam: 'white',
|
||
backdropMode: 'grating',
|
||
backdropTone: '#9C9993', // 暖银
|
||
sheenBandAngle: 110,
|
||
sheenSpeed: 0.50,
|
||
sheenIntensity: 0.36,
|
||
foilCoverage: 0.60,
|
||
laserStrength: 44,
|
||
frostIntensity: 5,
|
||
flowSpeed: 0.50,
|
||
colorHint: '浅蓝灰 冰蓝 银色',
|
||
bgPrompt: '冰雪冷色调渐变,浅蓝灰背景,冰晶纹理和雪花光斑,清爽透明感,纯净冰雪氛围',
|
||
overlayPrompt: '冰晶装饰,浅蓝色和银色星点,雪花图案和细线装饰',
|
||
},
|
||
{
|
||
id: 'sunset',
|
||
style: 'sunset',
|
||
beam: 'sunset',
|
||
backdropMode: 'grating',
|
||
backdropTone: '#9E958A', // 玫瑰金底
|
||
sheenBandAngle: 140,
|
||
sheenSpeed: 0.40,
|
||
sheenIntensity: 0.42,
|
||
foilCoverage: 0.80,
|
||
laserStrength: 52,
|
||
frostIntensity: 7,
|
||
flowSpeed: 0.40,
|
||
colorHint: '玫瑰金 暖橙色 粉色',
|
||
bgPrompt: '日落暖色调渐变,玫瑰金背景,暖橙色和粉色光影,温柔浪漫氛围',
|
||
overlayPrompt: '日落暖色调装饰,玫瑰金和琥珀色星点,柔和花卉和光线元素',
|
||
},
|
||
]
|
||
|
||
export const LASER_PRESET_IDS = PRESET_VARIANTS.map((p) => p.id)
|
||
|
||
export function getLaserPresetByIndex(index) {
|
||
const i = Number(index)
|
||
if (!Number.isFinite(i) || i < 0 || i >= PRESET_VARIANTS.length) {
|
||
return PRESET_VARIANTS[0]
|
||
}
|
||
return PRESET_VARIANTS[i]
|
||
}
|
||
|
||
export function getLaserPresetIndexById(presetId) {
|
||
const id = String(presetId || '').trim()
|
||
const idx = PRESET_VARIANTS.findIndex((p) => p.id === id)
|
||
return idx >= 0 ? idx : 0
|
||
}
|
||
|
||
/**
|
||
* 构建 Dify 工作流所需的 render_configs(每个 variant 的完整渲染参数)
|
||
* 用于 POST /api/v1/laser/generate 请求体
|
||
* @param {string[]} [presetIds] 需要生成的 preset ID 列表,默认全部5个
|
||
* @returns {Array<{preset_id: string, grating_config: object, bg_prompt: string, overlay_prompt: string}>}
|
||
*/
|
||
export function buildRenderConfigs(presetIds) {
|
||
const ids = presetIds || LASER_PRESET_IDS
|
||
return PRESET_VARIANTS
|
||
.filter((p) => ids.includes(p.id))
|
||
.map((p) => ({
|
||
preset_id: p.id,
|
||
grating_config: {
|
||
sheen_band_angle: p.sheenBandAngle,
|
||
sheen_intensity: p.sheenIntensity,
|
||
sheen_speed: p.sheenSpeed,
|
||
foil_coverage: p.foilCoverage,
|
||
backdrop_tone: p.backdropTone,
|
||
},
|
||
bg_prompt: p.bgPrompt || '',
|
||
overlay_prompt: p.overlayPrompt || '',
|
||
}))
|
||
}
|
||
|
||
export { resolveGratingConfig, DEFAULT_BACKDROP_TONE } from './laserGrating.js'
|