topfans/frontend/utils/laser-card/laserPresets.js
2026-06-03 22:19:22 +08:00

144 lines
4.5 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.

/**
* 镭射卡五图预设 — 真实金属银系
* 参考实体卡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'