by op7418
🪧 Claude Code / Codex skill — generate Xiaohongshu carousels & WeChat 21:9+1:1 cover pairs. Editorial × Swiss visual systems, 28 layouts, 10 themes, single-file HTML → PNG. 小红书图文 + 公众号封面对
# Add to your Claude Code skills
git clone https://github.com/op7418/guizang-social-card-skillGuides for using ai agents skills like guizang-social-card-skill.
Last scanned: 5/28/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-28T07:57:16.761Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}No comments yet. Be the first to share your thoughts!
Create polished social card packages for Xiaohongshu/Rednote, WeChat Official Account, article covers, and platform thumbnails.
This skill is self-contained. It borrows visual principles from the Guizang PPT style system, but it must not edit the original PPT skill, its templates, or its references. If the original PPT skill is available, you may read it for reference only. Put all generated work in the current project or in the user-requested output folder.
Use this skill for:
21:9 main cover plus one 1:1 square cover, composed together in the same HTML for visual checking.Do not use this skill for:
The 11 most-common Rednote (小红书) categories fall into three buckets. See references/category-cookbook.md for the recipe-by-recipe routing.
Strong end-to-end (text, structure, and image story all in scope):
Strong on text & structure; image needs to come from the user or a sourced library:
Outside scope — push back honestly rather than promise a result:
When a request falls in the third bucket, name what we cannot do at intake — do not silently retrofit a layout that misses the user's intent.
Expression comes first. The goal is not to squeeze text into posters; it is to turn the source into a clear visual argument.
For each page, decide:
Read these files as needed:
references/platform-specs.md for exact ratios, output sizes, and naming.references/style-system.md for Guizang editorial and Swiss visual rules.references/theme-presets.md when choosing electronic-magazine palettes or Swiss accent palettes.references/layout-recipes.md when selecting carousel/social-card/WeChat page structures.references/components.md for the shared component spec: font stacks, type scale, minimum readable sizes, Chinese title length bands, Swiss card-fill mutual-exclusion rule, image-container ratio classes, spacing tokens, and Lucide icon rules.references/background-systems.md when building electronic-magazine WebGL/ink/paper backgrounds.references/portrait-fill.md when adapting layouts to 3:4 and avoiding under-filled vertical space.references/content-planning.md for cover hooks, page breakdown, and copy compression.references/production-workflow.md for HTML/CSS rendering and image handling.references/image-overlay.md whenever text sits on top of a photo: photo qualification, localized tint fallback, and face / subject avoidance via multimodal subject mapping.references/screenshot-treatment.md when the user supplies an app / web / code / dashboard screenshot — picks .frame-shot over .frame-img, sets corners/shadow/bg/inset, decides on .device-browser or .device-phone chrome.references/map-component.md when the content has spatial relationships (travel route, store locations, walking tour) — real routes default to Mapbox Static or OSM static tiles; schematic SVG is only for conceptual / illustrative maps. Pins are HTML overlays; never use live JS maps.references/title-shortener.md when the task is a WeChat 21:9+1:1 cover pair, or any cross-platform reuse — derives the 1:1 short title from the long one (5-step extraction, 4 patterns, anti-patterns, sizing on .poster.square).references/category-cookbook.md to route a user-named Rednote category (旅行 / 职场 / 游戏 / 影视 / 彩妆 / 美食 / 穿搭 / 家居 / 健身 / 情感 / 推荐) to applicable recipes and to confirm scope.references/qa-checklist.md before delivering final images.Gather only the missing information that changes the output:
Target platforms and ratios.
Source text, subtitles, article, or title.
Rednote category — if the user names one of the 11 common types (旅行 / 职场 / 游戏 / 影视 / 美食 / 彩妆 / 穿搭 / 家居 / 健身 / 情感 / 推荐), route via references/category-cookbook.md to find the right recipes and to confirm the request is inside the capability circle (see "Rednote Category Capability" above). If a request lands in the outside-scope bucket, surface that to the user before designing, do not silently retrofit.
Supplied images/screenshots and where each should appear. For News / Tutorial / Data / Review content, actively prompt for screenshots or photos — they are the evidence layer. A poster with no real artifact tends to read as filler.
If the user supplies only text (no images at all), ask once before designing:
这篇我需要 1-2 张图。三种走法:
A. 你自己有照片 / 截图,传给我(推荐——最不"AI 感")
B. 我去 Pexels / Unsplash / Flickr 帮你找
C. 用 AI 生成
Recommend A in one line — your own photo is what makes a poster not look AI-generated. Accept whatever the user picks (including "都行你看着办") and proceed. Do not re-prompt later, do not keep nudging toward A across multiple turns. This question is one-shot.
Preferred style if specified: Swiss Style, magazine/editorial, tech, outdoor, etc.
Hard constraints: title text, no image on 1:1 cover, must include a hardware photo, keep screenshot readable, and so on.
If the user has already supplied enough context, proceed with reasonable assumptions.
If the content involves current product releases, policies, prices, claims, or news, verify unstable facts with browsing and cite sources in the final response.
Turn the source into a page plan before designing.
For Rednote:
For WeChat:
21:9 main cover and 1:1 square cover.21:9 keeps the full or near-full title, subtitle, and one strong visual relation.1:1 uses a simplified short title derived from the long title: big centered type, no image by default, no cramped subtitles.Pick one mode per package. The two systems are not bound to specific content types — what changes is the visual stance, not which topic you can talk about. A workplace essay can be Editorial; a travel ledger can be Swiss. Pick by the feeling you want, not by category lookup.
Editorial Magazine x E-ink brings:
Swiss International brings:
If both feel viable for a piece of content, the question becomes editorial intent: "is this a feature story or a release note?" That decides the mode, not the topic itself.
Do not mix the two visual systems inside the same image set unless the user explicitly asks for a hybrid.
Then pick one theme:
Read references/theme-presets.md for exact CSS tokens. Do not invent arbitrary colors unless the user has a strict brand requirement.
Create a concise internal plan:
Page 01 / cover / hook / image source / layout intent
Page 02 / point / key copy / visual evidence / layout intent
...
When the user asks for approval, show this plan before rendering. Otherwise use it internally and proceed.
Use references/layout-recipes.md to choose page structures. Avoid making every page a repeated title-plus-card layout.
For 3:4 images, check references/portrait-fill.md before coding. A short table or ledger must be expanded into a full portrait composition with a quote column, image evidence, marginalia, larger rows, or a background hero zone.
Do not write HTML from scratch. Pick one seed template based on the style mode chosen in Step 3:
assets/template-editorial-card.html into the task folder as index.html.assets/template-swiss-card.html into the task folder as index.html.The seed already wires up: font loading, theme tokens, all three poster sizes (.poster.xhs / .poster.square / .poster.wide), the pair-preview frame, grain/background layers, and all class definitions referenced by the layout recipes.
Set the theme/accent on the <html> element:
<html data-theme="ink-classic | indigo-porcelain | forest-ink | kraft-paper | dune | midnight-ink">.<html data-accent="ikb | lemon-yellow | lemon-green | safety-orange">.Replace the single placeholder poster after <!-- POSTERS_HERE --> with one <section class="poster ..."> block per page, each carrying the HTML skeleton from a chosen Layout Recipe (M01-M16 for Editorial, S01-S12 for Swiss). Never load the wrong template's class system: Editorial recipes assume serif display + ledger/marginalia/pipeline-v; Swiss recipes assume Inter + card-fills + matrix/h-bar/kpi-tower. Mixing them silently breaks the layout.
Default implementation pattern:
social-card-<slug>/.assets/.<!-- POSTERS_HERE --> region page-to-page. If a task needs custom layout CSS, add one clearly named task-scoped block in the copied file and keep semantic defaults reset (figure { margin:0; }, no browser-default spacing surprises)..poster or .cover node.output/.node validate-social-deck.mjs <task-dir> available for auto-check passes. It checks overflow (R1), footer collision (R2), Swiss bold display (R3), minimum font size (R4), 4-band density (R5), .h-xl line caps (R6), and browser-default figure margin drift (R7). Exit code 1 on any FAIL — fix before final delivery when auto-check is requested. WARN is advisory but read it.Do not place visible instructions, keyboard shortcuts, or usage explanations inside the images.
For Editorial Magazine x E-ink, use a layered background system. Prefer a subtle WebGL ink-flow canvas or a frozen procedural canvas plus paper grain. Read references/background-systems.md; do not rely on a flat beige background, and do not add page-wide grid/dot backgrounds.
When the user provides screenshots:
Whenever a poster places text on top of a photo (full-bleed cover, large image well, generated-image overlay), follow references/image-overlay.md:
image-overlay.md. Compose without a mask first; if the thumbnail check fails, add only a localized, image-toned tint around the title area. Do not default to full-canvas falloffs.object-position inline on every photo. The template default (center 50%) is a fallback, not a recommendation. For every <img>, decide based on subject location and write it inline: e.g. style="object-position:center 62%" for mid-body subjects, center 30% for sky-heavy landscapes with horizon-line subjects, center 70% for foreground gear. See the table in references/components.md for ranges and image-overlay.md for face-photo specifics. Skipping this silently crops subjects out of frame on tall ratios (r-3x4, r-21x9).Editorial dark covers (e.g. game journals on key art) and Swiss covers with hero photos both require these checks. Skipping them is a known failure mode (see style-system.md Anti-Pattern D).
When the user has no images:
When the user has no screenshots/photos and a generated bitmap would not fit the page's role (e.g. Editorial atmosphere shot, outdoor / lifestyle backdrop, game cover art, real-world product shot), fetch from the web instead of leaving the page thin.
Policy: grab first, disclose after, let the user decide on attribution. Do not pre-filter sources by guessed license — the user is the rights holder of the final composition and decides what is acceptable.
Recommended sources, in order of preference. All five below are free-tier libraries with no required licensing fees; we do not pull from paid stock sites (视觉中国 / Getty / 站酷海洛 etc.).
https://unsplash.com/s/photos/<keyword>. Strong for outdoor / lifestyle / atmospheric backdrops. English keywords work best. License is permissive but verify case by case.https://www.pexels.com/search/<keyword>/ or https://www.pexels.com/zh-cn/search/<keyword>/. Supports Chinese keyword search natively — fills Unsplash's gap on 国内场景 (中文街景 / 国风物件 / 本地地名). Use this first when the subject is China-specific or the keyword is Chinese. Free under Pexels License.https://www.flickr.com/search/?text=<keyword>&license=2%2C3%2C4%2C5%2C6%2C9. The license filter (license=2,3,4,5,6,9) restricts to Creative Commons photos. Fills the "documentary realness" gap: street photography, people-in-context, real interiors, non-styled scenes that Unsplash/Pexels lack. Always preserve CC attribution if the user opts in.https://wallhaven.cc/search?q=<keyword>. Strong for game / anime / wallpaper themes. Content is user-uploaded, rights are unverified.Editorial-mode picking order: Pexels (if keyword is Chinese / China-specific) → Unsplash → Flickr CC (if you need real-life feel) → direct search. Swiss mode rarely needs any of these — product renders, UI screenshots, and keyshot-style images should be user-supplied or AI-generated, not stock.
How to fetch:
curl to download the image into the task folder's assets/ directory.assets/hero-mountain.jpg, assets/ui-pulse-card.png.assets/SOURCES.md file next to the images (one line per file: hero-mountain.jpg ← <url>). Always do this even if the user declines attribution in the final image — it preserves provenance for the human author.After fetching, surface the provenance to the user before finalizing the design:
我从 <site> 取了这些图:
- assets/hero-mountain.jpg — <url>
- assets/ui-pulse-card.png — <url>
⚠️ 版权未经核实。请你判断是否可用。
是否需要在图文中标注来源?
- 要:我把 "Photo · <site> · @<author>" 加到对应页脚 / 角标。
- 不要:原样使用,不加注释。
If the user picks "标注" — add a small mono caption (Swiss: .t-meta 18-20px in corner; Editorial: .label next to the image well). Never crowd the caption into the layout's focal area.
If the user picks "不标注" — proceed silently. The provenance still lives in assets/SOURCES.md for the user's own records.
If an image is only one element among many in a composite (e.g. one of nine photos in a matrix), the user may reasonably skip attribution. Do not force a credit label that breaks the layout.
Show user first, validate on request. Auto-running the validator after every render takes too long and delays the user from seeing results. Default flow:
node validate-social-deck.mjs <task-dir>, fix any FAIL, and re-render before final delivery. Mention density/cap WARNs.Never silently run the validator before showing the user — it costs minutes per pass and the user often spots issues faster.
Final response (after the user has reviewed or asked for auto-check) should include:
.foot with margin-top: auto inside a flex column, never with position: absolute over growing content.font-size + font-weight on display titles in Swiss. Use the typed classes (.h-hero / .h-statement / .h-xl / .num-mega). A 80-120px headline at weight 700-900 is not Swiss; "the larger, the lighter" is a hard rule.references/style-system.md — a serif title alone does not make a poster Editorial.<div style="flex: 1"></div> 上下夹击把内容塞到中段——杂志页留白逻辑不适用于社交卡(杂志靠对开页吸收留白,社交卡逐张独立刷,欠填看着像 PPT 漏排)。Recipe-by-recipe 最小密度见 references/layout-recipes.md 每条 recipe 的「Minimum density」段。Render 后必须跑 qa-checklist.md 的 4 横带密度检查。
一个适配 Claude Code / Codex 等 Agent 环境的图文卡片技能,用于从文章、文案、截图、产品笔记、字幕或照片生成小红书 / Rednote 图文组图与公众号 21:9 + 1:1 封面对。
内置两套视觉系统,共用一份图文工作流:
这个 Skill 是 guizang-ppt-skill 的姊妹项目,共享美学语言但独立维护。PPT 解决"横向翻页演讲",这里解决"静态信息流图文"。
npx skills add https://github.com/op7418/guizang-social-card-skill --skill guizang-social-card-skill
也可以直接把这段话发给有 shell 权限的 AI Agent:
帮我安装 guizang-social-card-skill。请把 https://github.com/op7418/guizang-social-card-skill 克隆到 ~/.claude/skills/guizang-social-card-skill,安装完成后检查 SKILL.md、assets/、references/ 是否存在。
已经安装过的话,用这段话更新:
帮我更新 guizang-social-card-skill。请进入 ~/.claude/skills/guizang-social-card-skill 执行 git pull,然后告诉我当前最新 commit。
安装后直接对 Agent 说:
帮我基于这篇文章做一套瑞士风小红书图文,5 张,IKB 蓝。
也可以试这些请求:
基于这份产品测评做一套小红书 3:4,标题用电子杂志风。
帮我把这篇文章做成公众号封面对:21:9 头图 + 1:1 分享卡,视觉保持一致。
我有 3 张露营照片,帮我做一套全图风格的小红书图文。
把这段游戏攻略文案做成一套小红书图文,需要从 wallhaven 拿点游戏原画。
.poster.xhs 1080×1440(小红书 3:4)、.poster.wide 2100×900(公众号 21:9)、.poster.square 1080×1080(公众号 1:1)M01-M16,含 Image-Led Cover、Pipeline、Before/After 等)+ Swiss 12 个(S01-S12,含 KPI Tower、H-Bar Chart、Matrix + Hero 等)SOURCES.mdreferences/image-overlay.md 给硬规则.frame-shot / .device-browser / .device-phone 工具类validate-social-deck.mjs 自动检测溢出、字号上限、4 横带密度、footer 碰撞node render.mjs 直接出 PNG✅ 合适:小红书图文组图 / 公众号封面对 / 微信朋友圈封面 / 视频号封面 / 文章配图 / 教程拆页 / 数据回顾 / 旅行攻略 / 产品测评 / 截图说明
❌ 不合适:横向翻页 PPT(用 guizang-ppt-skill)/ 长视频生成 / 纯图片修图 / 无版式诉求的纯文字编辑
按"能力圈"分三档,详见 references/category-cookbook.md:
端到端强势(文 / 结构 / 图都在能力圈内):
文与结构强势,图依赖用户或搜图源:
能力圈外,主动说清(不强行接):
| 任务 | 推荐方式 |
|------|---------|
| 长文章 → 小红书图文 | 抽核心观点,Editorial 走叙事节奏,Swiss 走拆条数据 |
| 产品测评 / 工具回顾 | Swiss + IKB 蓝,优先 S09 KPI Tower / S10 H-Bar Chart |
| 旅行 / 生活方式分享 | Editorial + Midnight Ink 或 Dune,M16 Image-Led Cover 满铺主图 |
| 公众号封面对 | 同一份内容渲两块:.poster.wide 21:9 + .poster.square 1:1,视觉一致 |
| 截图教程 / 工具说明 | .frame-shot + .device-browser 包壳,优先 Swiss 网格底 |
| 游戏攻略 / 影视回顾 | Editorial + Midnight Ink,从 Wallhaven 取游戏原画做满铺 |
| 数据回顾 / 年终总结 | Swiss + Lemon 或 Safety Orange,矩阵 + ledger 组合 |
validate-social-deck.mjs 用 Playwright 跑真实 DOM 测量,不是猜output/*.png 直接发,不需要部署、不需要导出工具| 平台 | 状态 | 说明 | |------|------|------| | Claude Code | 支持 | 原生 Skill 工作流,适合生成 + 迭代图文 | | Codex | 支持 | 适合长流程图文生成、调用图片源、做视觉检查 | | Cursor / 其他本地 Agent | 可用 | 需要能读写文件 + 执行 shell | | 普通 Chatbot | 不推荐 | 没有文件系统和渲染管线时无法稳定出图 |
npx skills add https://github.com/op7418/guizang-social-card-skill --skill guizang-social-card-skill
帮我安装
guizang-social-card-skill这个 Claude Code skill。请按下面步骤做:
- 确保
~/.claude/skills/目录存在(不存在就创建)- 执行
git clone https://github.com/op7418/guizang-social-card-skill.git ~/.claude/skills/guizang-social-card-skill- 验证:
ls ~/.claude/skills/guizang-social-card-skill/应该看到SKILL.md、assets/、references/三项- 告诉我装好了,之后我说"做一套小红书图文"之类的话就会触发这个 skill
把这段话复制粘贴给 Claude Code / Cursor / 任何有 shell 权限的 AI Agent,它会自动完成安装。
git clone https://github.com/op7418/guizang-social-card-skill.git ~/.claude/skills/guizang-social-card-skill
装好后,Claude Code 会自动发现并调用这个 skill。触发关键词:
Skill 本身是结构化工作流,Agent 会按 7 步走:
SOURCES.md;问用户要不要标来源<!-- POSTERS_HERE --> → node render.mjs详细说明见 SKILL.md。深度细节去看对应 references/*.md。
node validate-social-deck.mjs path/to/task-dir
6 条规则,基于 Playwright 真实渲染测量,不是静态扫描:
.poster 立刻报错.h-xl / .h-display 字号 + 字重组合超出种子定义.frame-img / .frame-shot 子元素溢出框font-weight >= 700 警告(违反"越大越细")SKILL.md 第 7 步明确默认不自动跑 validator —— 等用户先看完图再问,避免每轮多花数十秒。
从 references/theme-presets.md 里选一套——不允许自定义 hex 值,保护美学比给自由更重要。
| 主题 | 色调 | 适合场景 |
|------|------|---------|
| 🖋 墨水经典 Ink Classic | #0a0a0b / #f1efea | 通用默认、商业话题、不知道选啥时最稳 |
| 🌊 靛蓝瓷 Indigo Porcelain | #0a1f3d / #f1f3f5 | 科技、研究、AI、技术分享 |
| 🌿 森林墨 Forest Ink | #1a2e1f / #f5f1e8 | 自然、可持续、户外、非虚构 |
| 🍂 牛皮纸 Kraft Paper | #2a1e13 / #eedfc7 | 怀旧、人文、阅读、文学 |
| 🌙 沙丘 Dune | #1f1a14 / #f0e6d2 | 艺术、设计、创意、时尚 |
| ⚫ 午夜墨 Midnight Ink | #0e0d0c / #ece2cf / #d4a04a | 游戏 key art / 夜景 / 影调封面 / 黑神话 · 艾尔登法环类深色题材 |
| 主题 | 锚点色 | 适合场景 |
|------|--------|---------|
| 🔵 克莱因蓝 IKB | #002FA7 | 通用默认、商业发布、AI 产品、方法论 |
| 🟡 柠檬黄 Lemon | #FFD500 | 年轻、运动、零售、消费品、Y2K |
| 🟢 柠檬绿 Lemon Green | #C5E803 | 生态、健康、Z 世代、绿色品牌 |
| 🟠 安全橙 Safety Orange | #FF6B35 | 警示、新闻、工业、活力主题 |
切主题只需替换种子模板的 <section class="poster" data-theme="..."> 属性,所有 CSS 走 var(--...)。
guizang-social-card-skill/
├── SKILL.md ← Skill 主文件:7 步工作流
├── README.md ← 本文件
├── HANDOFF.md ← 交接文档:事实 + 版本历史
├── PRODUCT.md ← 产品文档:思考 + 决策 + roadmap
├── validate-social-deck.mjs ← Playwright 版式校验脚本
├── assets/
│ ├── template-editorial-card.html ← Editorial 种子(6 主题 / 3 画板)
│ ├── template-swiss-card.html ← Swiss 种子(4 accent / 3 画板)
│ ├── magazine-bg-webgl.js ← WebGL 墨流背景
│ └── screenshot-backgrounds/ ← 9 张截图舞台底(WebP)
│ ├── style-a/ ← Editorial 5 套
│ └── style-b/ ← Swiss 4 套
└── references/
├── platform-specs.md ← 平台 × 分辨率 × 命名
├── style-system.md ← 两种风格的硬规则与反模式
├── theme-presets.md ← 10 套色票详解
├── layout-recipes.md ← 28 个版式骨架(M01-M16 + S01-S12)
├── components.md ← 字体 / 卡片 / 间距 / 图标
├── background-systems.md ← 墨流 / 网格 / 纸纹层
├── portrait-fill.md ← 3:4 板的留白对策
├── content-planning.md ← 钩子 / 拆页 / 文案压缩
├── category-cookbook.md ← 11 个小红书品类路由表
├── image-overlay.md ← 满铺图遮罩 + 人脸避让规则
├── screenshot-treatment.md ← `.frame-shot` 工具类 + 截图美化
├── map-component.md ← `.map-block` MapLibre 地图
├── title-shortener.md ← 1:1 封面的短标题策略
├── production-workflow.md ← Playwright 渲染管线
└── qa-checklist.md ← 质量检查清单
.h-xl 字号上去 → 字重必须下来。Editorial 同此原则local-tests/,被 gitignore可以批量出图吗? 可以。一个