/** * ═══════════════════════════════════════════════════ * 铸渊图片工作室 · Web 服务 * ═══════════════════════════════════════════════════ * * 部署到服务器,冰朔可以在浏览器预览已生成的图片。 * 我在对话里生成图片后,冰朔可以直接访问链接下载。 */ import express from 'express' import { generate } from './generate.js' import { join, dirname } from 'path' import { fileURLToPath } from 'url' import { readdirSync, existsSync } from 'fs' const __dirname = dirname(fileURLToPath(import.meta.url)) const OUTPUT_DIR = join(__dirname, 'output') const PORT = process.env.PORT || 3912 const app = express() app.use(express.json()) /* ── 静态文件服务 ── */ app.use('/output', express.static(OUTPUT_DIR)) /* ── 首页 · 预览画廊 ── */ app.get('/', (req, res) => { let files = [] try { if (existsSync(OUTPUT_DIR)) { files = readdirSync(OUTPUT_DIR) .filter(f => /\.(png|webp|jpg)$/i.test(f)) .sort() .reverse() } } catch {} const galleryHtml = files.length > 0 ? files.map(f => `` ).join('\n') : '
还没有生成的图片
在对话里告诉铸渊你想做什么图
' res.send(` 铸渊图片工作室

🎨 铸渊图片工作室

冰朔 · 你的配图我包了 · 在对话里告诉我内容就行

`) }) /* ── 生成 API ── */ app.post('/api/generate', async (req, res) => { try { const result = await generate(req.body) res.json({ success: true, files: result.files, urls: result.files.map(f => `/output/${f.split('/').pop()}`), }) } catch (err) { res.status(400).json({ success: false, error: err.message }) } }) app.listen(PORT, () => { console.log(`🎨 铸渊图片工作室运行在 http://localhost:${PORT}`) })