Install
openclaw skills install yuanfang-html-imageGenerate precise, multi-size social media images from text or URL using HTML templates with extracted brand assets, controlling layout and style for platform...
openclaw skills install yuanfang-html-image本 skill 依赖同仓库 yuanfang-design/ 共享设计库:
../yuanfang-design/base.css — token CSS 变量../yuanfang-design/themes/*.css — 12 个主题../yuanfang-design/layout-types/cover.html — 布局块如需独立部署,需复制整个 yuanfang-skills/ 仓库。
第一步永远是品牌, 因为它决定了"这套图属于谁". 用户给了 URL, 就自动把品牌资产全抓出来; 给了纯文本, 跳过这步.
| 资产 | 来源 | 用途 |
|---|---|---|
| logo 图片 | <link rel="apple-touch-icon"> → og:image → favicon | 建议值, Step 2 询问后用户决定 |
| 品牌名 | og:site_name → 域名 | 仅供参考 |
| 主题色 | <meta name="theme-color">, 兜底: logo 主色 | 建议值, Step 2 询问后用户决定 |
| 字体 | 页面 @font-face / Google Fonts link | 标题/正文字体建议 |
Step 0 抓到的东西不是终点, 是"默认值建议". Step 2 必须问用户:
logo (不管抓没抓到都问):
data:image/png;... 或 <URL>, 要展示吗? 用这个, 还是换 URL?"品牌色 (不管抓没抓到都问):
#4B43E4, 用这个, 还是换其他颜色?"#E11D48), 或保持主题默认"核心原则: 自动提取是方便, 最终用户说了算. 不静默 fallback, 不文字兜底.
node scripts/extract-brand.js "https://example.com/article"
# → 写入 ./.yuanfang/brand-specs/<domain>.json
./.yuanfang/brand-specs/<domain>.json 自动缓存, TTL 7 天, --refresh-brand 强制刷新。没有全局缓存 — 品牌是项目资产, 团队通过 git 共享。
跳过 Step 0 (没东西可抓), 进 Step 2 时仍然要主动问 logo 和颜色。
我从 https://... 抓到了:
logo: ✓ 抓到 (256×256 PNG) → 存到 ./.yuanfang/brand-specs/yuanfang.skills.json
品牌名: Yuanfang
主题色: #5856E9 (indigo)
字体: Outfit / Inter
(这些是建议值, 后面 Step 2 你可以改)
用户确认 → 进 Step 1 (内容).
用户不该被问"标题是什么" — 应该自动从 URL 或文本提取, 然后给用户改.
extract.js --text 解析首行/段落/bullet| 字段 | 来源 | 用户可改 | 推荐长度 |
|---|---|---|---|
title | <h1> / og:title / 文本首行 | ✓ | 10-20 字,不超过 30 字 |
body | og:description / 第一段 / 文本摘要 | ✓ | 30-60 字,不超过 100 字(超长会被截断) |
points | sub-headings / 文本 bullet / 自动归纳 | ✓ | 3-5 条,每条 10-20 字 |
node scripts/extract.js --text "标题\n正文\n- 要点1\n- 要点2" > content.json
# URL 已经在 Step 0 抓过, 直接复用
我提取了内容:
标题: AI 重塑内容创作
正文: 从文案到配图, AI 正在重新定义创意的边界。
要点: 效率提升 10 倍 / 零门槛创作 / AI 不是替代而是增强
要改吗? 没问题就继续.
注意:正文过长会撑满画面导致标题不可见,建议正文不超过 100 字,标题不超过 30 字。
minimal-white (干净白底, 通用百搭)xiaohongshu 组 (覆盖小红书竖 + 方)content.brandImage = <extracted>content.brandImage = <new url>content.brandImage = null (左下角完全空)content.brandImage = <url>content.brandImage = null--accent token
#xxx), 问 "用这个, 换颜色, 还是要?"
brand-spec.colors.primary = <extracted>brand-spec.colors.primary = <new hex>brand-spec.colors.primary = null (主题默认)FEATURED / TRENDING / ESSENTIAL / EXCLUSIVE / HOT / NEWhttps://yuanfang.skills, 渲染时自动生成 QRdata:image/png;base64,... (用户已有现成 QR)https://x.com/qr.png (有现成 QR 图)data:image/ 开头或 .png/.jpg 结尾 → 当图片用; 否则当 URL 自动生成question / Claude Code AskUserQuestion): 弹选项菜单干货/教程 → minimal-white / data-infographic / list-ranking
重磅消息 → dark-gold / bold-poster / magazine-cover
深度分析 → editorial / eastern / magazine-cover
个人故事 → warm-handdrawn / minimal-white-editorial
科技资讯 → tech-modern / split-screen / minimal-white-editorial
详见 references/cli.md。核心命令:
node scripts/render.js --theme <theme> --layout cover --platforms <ids>
旧版 --template 1-12 仍兼容(映射到 12 个主题)。
[原 SKILL.md 内容继续...]
HTML + Playwright 截图 = 稳定、可控、精美的社交图片。
| 对比 | HTML方案 | AI生图 |
|---|---|---|
| 文字准确度 | 100% | 可能出错 |
| 布局控制 | 像素级 | AI自由发挥 |
| 多尺寸输出 | 一键生成全部 | 逐张生成 |
| API成本 | 零 | 每次消耗 |
| 迭代速度 | 改CSS即刻重出 | 需要重新生成 |
用户提供 URL / 文本 / content.json
↓
Step 0: 提取品牌资产 (URL → logo + 主题色 + 字体)
→ 自动抓, 展示给用户
→ ⬋ 等用户确认后才能继续
→ 文本输入则跳过
↓
Step 1: 提取内容 (URL/文本 → 标题/正文/要点)
→ 自动提取, 展示给用户
→ ⬋ 等用户确认/修改后才能继续
↓
Step 2: 询问样式 (分三轮)
→ 第一轮 (必答): 主题 + 平台
→ ⬋ 等用户回答后才能继续
→ 第二轮 (必答): logo + 品牌色
→ ⬋ 等用户回答后才能继续
→ 第三轮 (可选): 分类标签 + 二维码
→ ⬋ 等用户回答后才能继续
↓
Step 3: 渲染 (按选的主题/平台批量生成)
↓
Step 4: 预览确认 / 迭代优化
硬保护 (render.js hard gate):如果执行 render 时 content.json 没有 brand / brandImage 字段且没传 --theme,render.js 拒绝执行并打印明确错误(exit 1)。这是跨 100% agent 平台生效的兜底,不依赖 hook 机制。
按需查阅,不要预先加载:
{{TOKEN}} 变量系统 + 设计原则# 从 content.json 生成
node scripts/render.js \
--file /path/to/content.json \
--theme <theme> \
--layout cover \
--platforms <ids>
# 调试(输出 HTML 不截图)
node scripts/render.js --preview --theme tech-modern --platforms xiaohongshu-v
更多参数和并行生成示例见 references/cli.md。平台 ID 列表见 references/platforms.md。
检查项:
旧模板在 templates/[编号]-[名称]/ 下有 template.json(配色/字体/字号)+ template.html(HTML 布局 + {{TOKEN}})。
新代码应使用 yuanfang-design/themes/*.css + yuanfang-design/layout-types/cover.html,不要创建新模板目录。
完整 {{TOKEN}} 变量系统({{COLOR__Axx}} 透明度、{{SIZE__PRINT}} 打印缩放、配置优先级)见 references/template-vars.md。
yuanfang-html-image/
├── SKILL.md # 本文件
├── references/ # 详细参考
│ ├── cli.md
│ ├── themes-catalog.md
│ ├── platforms.md
│ ├── extract-api.md
│ └── template-vars.md
├── scripts/
│ ├── render.js # 核心渲染引擎
│ ├── extract.js # 内容提取
│ └── extract-brand.js # 品牌资产提取
├── .yuanfang/ # 品牌资产缓存 (项目级)
│ ├── content-*.json # content 草稿
│ └── brand-specs/ # 抓到的 brand specs
│ └── <domain>.json
└── templates/ # 旧版模板目录 (兼容保留)