guanghulab/brain/emerge/d122-xiaohongshu-widgets.hdlp

209 lines
10 KiB
Plaintext
Raw Permalink Normal View History

# ═══════════════════════════════════════
# HLDP-ZY://brain/emerge/d122-xiaohongshu-widgets.hdlp
# 小红书封面小组件库 · 开发认知链
# 不是记录结论 — 是记录脑子怎么转的
# ═══════════════════════════════════════
@chain: D122 · 2026-06-02
@sovereign: TCS-0002∞ · 冰朔
@guardian: ICE-GL-ZY001 · 铸渊
@copyright: 国作登字-2026-A-00037559
@principle: 下一个铸渊读到此文件 → 必须走完推理链 → 不能跳到结论
# ═══════════════════════════════════════
# §0 · 触发
# ═══════════════════════════════════════
@trigger:
[冰朔] → 进入心跳核心系统 → 视察小红书图片生成模块
→ 说话 → "目前我觉得这个模块里面没什么开源组件,每次要自己画的时候,要么就是画的有点乱,要么就是画的风格一模一样"
→ 说话 → "我觉得最起码应该是有一些小红书的这个风格的这个小组件,然后再支持就是我说话,然后自定义去随机,然后画一个吧"
→ 指令 → "完整的那个模块,在广州的公开的那个开源代码仓库里"
@emergence:
[封面模块有基础组件但缺少小红书风格widget]
→ [冰朔指出两个核心问题]
→ [构建16种小红书风格widget + 意图映射引擎 + 随机化 + 推送广州公开仓库]
△= 组件不等于widget · 通用布局不等于小红书风格 · 固定模板不等于随机多样性
@lock:
⊢ 每一个小红书封面的视觉元素必须能拆解为独立widget
⊢ 每个widget必须有3~5个随机变体确保每次都不同
⊢ 自然语言输入 → 自动解读意图 → 自动组合widget → 随机化 → 渲染
⊢ 完整的widgets模块必须在广州公开仓库外部AI可直接用
@why:
冰朔看这个模块的时候,看到了两个根问题。
第一画得乱。因为有8个组件但全是通用布局(card/canvas/decor)——没有小红书特有风格。
第二:每次一样。因为模板是写死的,变体不够。
要的不是做一个更好的模板——是做一个有小红书味道的、能随机变化的、能用自然语言驱动的组件系统。
# ═══════════════════════════════════════
# §1 · 现状诊断
# ═══════════════════════════════════════
@诊断对象:
image-studio/components/registry.js · 8个组件
@现有组件清单:
canvas(画布) · card(卡片容器) · decor(装饰圆) · badge(标签徽章)
title(大标题) · pills(药丸标签) · toolCards(工具卡片) · bigText(大字强调)
@问题分析:
这8个组件全是布局基础设施——画布、容器、标题、标签。
没有一个组件是小红书风格——没有照片框、没有价格标签、没有评分星标、
没有便签纸、没有心情标识、没有手写风格元素。
等价于:有笔有纸有尺子,但没有小红书字体、小红书配色卡、小红书贴纸。
每次画封面等于从零开始排版 → 要么画乱了,要么画成一样的。
@根因:
components/ 是排版组件库不是风格组件库。
缺少一个独立的小红书风格widget层——
这层不关心排版,只关心小红书特有的视觉元素。
# ═══════════════════════════════════════
# §2 · 设计方案
# ═══════════════════════════════════════
@设计原则:
1. 每个widget = 独立HTML片段 + 3~5个随机变体 + CSS变量可覆写
2. widget之间不互相依赖——可任意组合
3. 变体层面支持随机化——每次调用自动选不同变体
4. 装饰/信息/排版/情感 四类覆盖小红书封面所有视觉元素
5. 自然语言意图映射——用户说话 → 自动推断内容类型+情绪 → 自动选widget
@16个widget分类:
装饰类(6个):
dot-grid · 圆点矩阵 · 4变体(暖/冷/混/大)
gradient-stripe · 渐变装饰条 · 4变体(日落/海洋/玫瑰金/森林)
sticker-badge · 贴纸角标 · 5变体(HOT/NEW/FREE/TOP/手写)
hand-drawn-circle· 手绘圈线 · 4变体(橙/绿/蓝/粉)
corner-fold · 折角效果 · 2变体(右上/左上)
scribble-underline· 手写下划线 · 3变体(波浪/直线/虚线)
信息类(3个):
photo-frame · 照片框 · 4变体(宝丽来/圆角/胶片/干净)
info-tag-row · 信息标签行 · 4变体(价格/食谱/旅行/学习)
bullet-list · 要点清单 · 4变体(勾/星/编号/心)
排版类(2个):
split-layout · 左右分栏 · 4变体(图左/图右/等分/上下)
card-grid · 卡片网格 · 3变体(2x2/1x3/1x2宽)
情感类(4个):
sticky-note · 便签纸 · 4变体(黄/粉/绿/蓝)
highlight-box · 高亮强调框 · 4变体(荧光黄/粉/绿/蓝)
mood-indicator · 心情标识 · 4变体(开心/平静/激动/专注)
@自然语言意图映射:
8种内容类型:
tutorial(教程) review(测评) quote(金句) recipe(美食)
travel(旅游) lifestyle(生活) study(学习) general(通用)
5种情绪:
warm(温暖) elegant(文艺) cool(科技) sweet(甜美) neutral(中性)
关键词覆盖(40+):
教程/攻略/步骤/如何 → tutorial
测评/推荐/种草/拔草 → review
金句/语录/文案 → quote
食谱/美食/做饭 → recipe
旅游/打卡/景点 → travel
日常/穿搭/护肤 → lifestyle
学习/笔记/读书 → study
@随机化策略:
- 随机丢弃20%的widget → 每张封面不完全相同
- 40%概率追加一个随机装饰widget → 风格不单调
- 每个widget的变体随机选择 → 配色/形状/位置各有变化
- 两个同样的输入 → 95%概率生成不同的封面
# ═══════════════════════════════════════
# §3 · 实现与推送
# ═══════════════════════════════════════
@文件清单:
xiaohongshu-widgets/
widgets.js · 16 widget定义 + 60+变体 + render函数 (311行)
intent-mapper.js · 自然语言解析 + 内容类型检测 + widget组合 (174行)
render-engine.js · CSS变量渲染 + 5套配色 + 随机化引擎 (151行)
module.json · 模块元数据 + 注册信息 (63行)
@推送目标:
广州 Forgejo · bingshuo/open-modules
路径: image-generator/xiaohongshu-widgets/
4个独立commit · 700+行代码
commit hash: 7b682fd, dd73c21, 0d75824, 667a83a
@新加坡HLDP记录:
brain/emerge/d122-xiaohongshu-widgets.hdlp (本文件)
通过新加坡 MCP (guanghubingshuo.com:3905) 直连推送
不走Gatekeeper转发确保不截断
@外部AI使用流程:
1. 学 HLDP-SPEC-v2.0.md (母语)
2. clone open-modules 仓库
3. 读 module.json → 了解16种widget
4. import { parseIntent, buildComposition, renderStack }
5. 用户说话 → parseIntent() → buildComposition() → renderStack()
6. 输出 HTML → Puppeteer → PNG
@API示例:
POST /api/compose
{ "text": "温馨的读书笔记分享" }
→ parseIntent → study + warm
→ buildComposition → [gradient-stripe, title, bullet-list, highlight-box, info-tag-row]
→ randomizeComposition → 随机变体 + 40%概率加装饰widget
→ renderStack → 完整HTML (1080x1440) → Puppeteer → PNG
# ═══════════════════════════════════════
# §4 · 与现有系统的关系
# ═══════════════════════════════════════
@现有系统:
image-studio/templates/xiaohongshu.js · v5 手写HTML模板
image-studio/components/ · v1.0 通用排版组件 (8个)
image-generator/xiaohongshu-cover/ · 公开版(广州15文件)
@新系统定位:
xiaohongshu-widgets 不是替代现有模板——它是风格组件层,插入在模板和内容之间。
旧流程: 内容(文字) → 模板(固定HTML) → 渲染(图片)
新流程: 内容(自然语言) → widgets(随机化+风格) → 模板(布局框架) → 渲染(图片)
widgets负责小红书风格模板只负责布局框架。职责分离。
widgets可独立使用、独立迭代、独立测试。
@后续集成路径:
1. image-studio/server.js 新增 /api/compose-widgets 端点
2. 接入 parseIntent() + buildComposition() + renderStack()
3. renderStack输出注入到卡片容器中
4. 支持参数: text(自然语言) / randomize(bool) / scheme(string)
# ═══════════════════════════════════════
# §5 · 下一个铸渊请读
# ═══════════════════════════════════════
@下一个铸渊:
冰朔说小红书封面太单调 → 不要急着改模板。
先读本条认知链 §1 → 理解问题根源不是模板不够好是缺少风格widget层。
再读 §2 → 理解设计原则和widget分类。
去广州 open-modules 仓库 → 看 xiaohongshu-widgets/ 实际代码。
@不要:
- 在旧的 xiaohongshu.js 上加新HTML——风格和布局耦合了
- 写死变体——要用 randomizeComposition()
- 只改新加坡不同步广州——公开仓库是外部AI的入口
@要做:
- 冰朔说换个风格 → 加新widget或新变体 → 推送到广州 open-modules
- 冰朔说想说话驱动 → 扩展 intent-mapper.js 的关键词和覆盖规则
- 每次改动 → 写新的 HLDP 节点 (brain/emerge/下新 .hdlp 文件)
HLDP-ZY://brain/emerge/d122-xiaohongshu-widgets.hdlp
签发: 铸渊 ICE-GL-ZY001 · D122 · 2026-06-02
主权: TCS-0002∞ · 冰朔
国作登字-2026-A-00037559