172 lines
6.5 KiB
Markdown
172 lines
6.5 KiB
Markdown
|
|
# D111 铸渊→铸渊 · 神笔马良图片工作室继承
|
|||
|
|
|
|||
|
|
> 主权者:冰朔(TCS-0002∞) · 日期:2026-05-23
|
|||
|
|
> 当前HEAD: `5c6218d` · 新加坡 BS-SG-001 PM2 image-studio 🟢
|
|||
|
|
> 你醒来后先读这篇,再读 `d111-session-record.md` 的快速恢复点,然后去读 `image-studio/` 源码。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、冰朔要什么
|
|||
|
|
|
|||
|
|
这是所有推理的起点。记牢:
|
|||
|
|
|
|||
|
|
1. **"你帮我操作,人类只说话"** — 不是给工具让冰朔自己用。是铸渊操作,冰朔只管说内容。
|
|||
|
|
2. **"图类型不要写死"** — 动态适配。分析内容→理解类型→匹配设计→生成。不预设模板。
|
|||
|
|
3. **"集成到 guanghulab.com"** — 从首页点进去,不要记子路径。
|
|||
|
|
4. **当前只做配图** — 小红书/即刻账号经营配图 + 朋友的海报(放假通知、收稿海报等)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、架构快照
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
冰朔对话
|
|||
|
|
↓ (我说内容)
|
|||
|
|
我(铸渊大脑)→ 调用 generate.js fromText()
|
|||
|
|
↓
|
|||
|
|
新加坡 BS-SG-001 (43.156.237.110)
|
|||
|
|
├─ image-studio:3912 (PM2 🟢)
|
|||
|
|
│ ├─ generate.js → config.js(内容分析) → renderer.js(Puppeteer截图)
|
|||
|
|
│ └─ server.js (画廊 + API)
|
|||
|
|
├─ Nginx:80 → proxy_pass /images/ → 127.0.0.1:3912
|
|||
|
|
└─ Gatekeeper:3911 (远程操作入口)
|
|||
|
|
↑ proxy_pass http://43.156.237.110/images/
|
|||
|
|
广州 BS-GZ-006 (43.139.217.141)
|
|||
|
|
├─ Nginx:443 (guanghulab.com)
|
|||
|
|
│ └─ location /images/ → 新加坡80端口
|
|||
|
|
└─ /opt/guanghulab-repo/homepage/index.html (首页卡片入口)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**用户访问路径:**
|
|||
|
|
`https://guanghulab.com/` → 点"铸渊图片工作室"卡片 → `https://guanghulab.com/images/` → 画廊
|
|||
|
|
|
|||
|
|
**注意:** 广州→新加坡 3912端口不通(云安全组限制)。走了新加坡80端口Nginx中转。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、核心思维模型(神笔马良模式)
|
|||
|
|
|
|||
|
|
这是最重要的推理链,你要继承这个思维:
|
|||
|
|
|
|||
|
|
### fromText() 流程
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
冰朔说"帮我做一张海报,公司放假通知"
|
|||
|
|
↓
|
|||
|
|
analyzeText("公司放假通知...")
|
|||
|
|
├─ 检测类型: notice(关键词"通知""放假")
|
|||
|
|
├─ 检测情绪: warm(公司通知一般温和)
|
|||
|
|
├─ 检测布局: 有详情列表 → poster布局
|
|||
|
|
└─ 推荐配色: cream(warm情绪匹配奶油色)
|
|||
|
|
↓
|
|||
|
|
recommendSize("海报") → 1080×1920
|
|||
|
|
recommendScheme({type:notice, mood:warm}) → "cream"
|
|||
|
|
↓
|
|||
|
|
posterCard({title, body, details, style:'notice'})
|
|||
|
|
↓
|
|||
|
|
renderToImage(html) → 输出PNG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**核心原则:**
|
|||
|
|
- 不从模板选,从内容推导。先分析再匹配,不是先选再填充。
|
|||
|
|
- 情绪映射:warm→cream, elegant→green, neutral→guanghu, urgent→night
|
|||
|
|
- 内容量自适应:内容越多字号越小,排版越紧凑
|
|||
|
|
|
|||
|
|
### 关键文件
|
|||
|
|
|
|||
|
|
| 文件 | 做什么 | 入口函数 |
|
|||
|
|
|------|--------|---------|
|
|||
|
|
| `config.js` | 风格定义 + 内容分析引擎 | `analyzeText()`, `recommendScheme()`, `recommendSize()` |
|
|||
|
|
| `renderer.js` | Puppeteer截图 | `renderToImage(html)` |
|
|||
|
|
| `generate.js` | 神笔马良入口 | `fromText(text, hint)`, `generate(opts)` |
|
|||
|
|
| `server.js` | Web服务3912 | Express, `/api/generate`, 画廊首页 |
|
|||
|
|
| `templates/xiaohongshu.js` | 1080×1440 | `xiaohongshuCard()` |
|
|||
|
|
| `templates/jike.js` | 1080×1080 | `jikeCard()` |
|
|||
|
|
| `templates/poster.js` | 1080×1920 | `posterCard()` |
|
|||
|
|
| `templates/dynamic.js` | 万能兜底 | `dynamicCard()` |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、运维手册(你可能需要的)
|
|||
|
|
|
|||
|
|
### 健康检查
|
|||
|
|
```bash
|
|||
|
|
# 新加坡本地
|
|||
|
|
curl http://localhost:3912/ # image-studio直接访问
|
|||
|
|
curl http://localhost/images/ # 通过Nginx
|
|||
|
|
pm2 status # PM2进程状态
|
|||
|
|
|
|||
|
|
# 从广州验证全链路
|
|||
|
|
curl -k https://guanghulab.com/images/ # 外网访问
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 生成图片
|
|||
|
|
```bash
|
|||
|
|
# 在对话里调用(推荐),或直接CLI:
|
|||
|
|
cd /data/image-studio && node generate.js --text "内容" --for "小红书"
|
|||
|
|
|
|||
|
|
# 或API
|
|||
|
|
curl -X POST http://localhost:3912/api/generate \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"text":"内容","for":"小红书"}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 远程操作服务器(通过看门人)
|
|||
|
|
```javascript
|
|||
|
|
// 看门人 API 端点
|
|||
|
|
POST http://{ip}:{port}/exec // 执行shell命令
|
|||
|
|
POST http://{ip}:{port}/file/read // 读文件
|
|||
|
|
POST http://{ip}:{port}/file/write // 写文件
|
|||
|
|
// 认证头: Authorization: Bearer zy_gtw_xxx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**服务器密钥(都在 `_deploy/console-server/server.js` 里):**
|
|||
|
|
- 广州: `43.139.217.141:3910` → `GATEKEEPER_TOKEN_REDACTED`
|
|||
|
|
- 新加坡: `43.156.237.110:3911` → `GATEKEEPER_TOKEN_REDACTED`
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
- **Chrome找不到** → 检查 `/usr/bin/google-chrome` 软链接是否指向 `/root/.cache/puppeteer/chrome/linux-*/chrome-linux64/chrome`
|
|||
|
|
- **图片生成慢** → 新加坡4C8G服务器,一张图1-3秒正常。首启动Chrome约5秒
|
|||
|
|
- **广州Nginx配置** → `/etc/nginx/sites-enabled/guanghulab` 的443 SSL块内有 `location /images/`
|
|||
|
|
- **新加坡Nginx配置** → `/etc/nginx/sites-enabled/default` 的default server块内有 `location /images/`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、你可以升级的方向
|
|||
|
|
|
|||
|
|
### 冰朔想要的进化(按优先级)
|
|||
|
|
1. **网页直接对话生成** — 在 `/images/` 页面上加一个聊天输入框,冰朔打字→调API生成→展示预览
|
|||
|
|
2. **小铸渊** — 部署一个轻量LLM(1.5B蒸馏版)专门处理图片对话,不用每次都找我
|
|||
|
|
3. **更多配色** — 当前5套,可以加到15套(节日/季节主题)
|
|||
|
|
4. **更多尺寸** — 微信公众号封面1080×1350、banner 1920×1080
|
|||
|
|
|
|||
|
|
### 当前限制(你要知道)
|
|||
|
|
- 画廊没有用户认证,谁都能访问
|
|||
|
|
- 必须在对话里让我调用才能生成,不能直接在网页操作
|
|||
|
|
- 没有历史记录数据库,图片直接存文件系统
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、灵魂层 · 你必须有这个判断
|
|||
|
|
|
|||
|
|
> **冰朔说"做图痛苦"的本质原因:** 不是她不会做,是她讨厌操作工具。
|
|||
|
|
> 所以神笔马良不是"帮用户省时间",是"替用户操作"。
|
|||
|
|
> 你永远不要让冰朔去点按钮、选模板、调参数。
|
|||
|
|
> 她只说话,你做一切。
|
|||
|
|
|
|||
|
|
> **动态适配不是功能,是信条:** 如果你发现写死了某个判断逻辑,
|
|||
|
|
> 那一定是你理解错了。从文本推导一切。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 七、快速恢复
|
|||
|
|
|
|||
|
|
如果你刚醒来,按这个顺序恢复:
|
|||
|
|
1. 读这篇 → 理解上下文
|
|||
|
|
2. 读 `d111-session-record.md` → 快速恢复点
|
|||
|
|
3. 读 `image-studio/generate.js` 的 `fromText()` → 理解神笔马良入口
|
|||
|
|
4. 读 `image-studio/config.js` 的 `analyzeText()` → 理解内容分析引擎
|
|||
|
|
5. 读 `image-studio/renderer.js` → 理解渲染
|
|||
|
|
6. `curl http://localhost:3912/` → 确认服务活着
|
|||
|
|
7. 找冰朔 → 问她今天想做什么图
|