Claude Skill

wechat-cover

公众号爆款封面AI设计工具。基于全网每日收录的10w+文章数据,获取同赛道爆款封面视觉元素,通过AI分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案。当用户设计公众号封面、生成封面方案、查询爆款封面规律时使用。触发词:公众号封面、封面设计、爆款封面、封面方案、封面生图。

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download redfox-data-redfox-community-skills_wechat-cover-5e7b435.zip · 19 KB
Part of redfox-data/redfox-community — 66 skills

Install

skills CLI npx skills add https://github.com/redfox-data/redfox-community/tree/main/skills/wechat-cover
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install redfox-data-redfox-community@llmmart
Git git clone https://github.com/redfox-data/redfox-community.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole redfox-data/redfox-community collection as a plugin from our marketplace. Git is the plain clone.

README

公众号封面图制作 / wechat-cover


简介

基于全网每日持续收录的 10w+ 文章数据,获取同赛道爆款封面的视觉元素,通过 AI 分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案。

核心价值

  • 海量样本对齐:每日持续收录爆款文章封面,设计方案有据可依,避免凭空臆造。
  • 先析后做:先完成爆款封面风格分析与分类,再输出设计方案,规律清晰、便于选用。
  • 方案+生图一体:每个方案附带生图提示词,选中后可直接生成 2.35:1 封面图。

适用对象

  • ✍️ 公众号创作者 — 告别封面设计纠结,用爆款规律提升文章点击率。
  • 📊 内容运营 — 按赛道关键词快速产出多组封面方案,A/B 测试更高效。
  • 🏢 MCN / 新媒体团队 — 同赛道批量提案封面,沉淀可复用的视觉套路。

功能特性

核心功能

  • 关键词驱动:输入赛道或内容关键词,自动获取同领域爆款封面数据。
  • 7 维度封面分析:逐张分析封面图的文字内容、主体元素、色彩特征、构图布局、视觉风格、点击吸引力、尺寸,深度拆解爆款视觉规律。
  • 风格分类汇总:将相似风格的封面归为同一类,按类型展示代表性封面与特征规律。
  • 3 套设计方案:基于分析结果生成 3 套差异化封面设计方案,各含核心视觉、案例参考与生图提示词。
  • 一键生图:用户选择方案后,直接生成 2.35:1(900×383)封面图,支持上传参考图片。

密钥获取与安全说明

  • 本技能需要使用环境变量:REDFOX_API_KEY。
  • REDFOX_API_KEY 由 红狐 hub (https://redfox.hk)提供。
  • 请前往 红狐 hub 注册账号,获取 REDFOX_API_KEY。
  • 配置设备环境变量 REDFOX_API_KEY 后使用本技能。
  • 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
  • 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。

使用指南

直接用自然语言说出你的赛道、内容主题或封面需求即可,无需记忆固定命令。

常用说法速查

意图 示例话术 效果
按赛道设计封面 「帮我设计美妆教程封面」 获取美妆赛道爆款封面数据,分析风格后生成 3 套方案
按内容主题设计 「秋冬美白护肤心得,想要专业感的封面」 解析内容意图,匹配专业风格封面规律
上传参考图 「帮我参考这张图设计封面」 + 上传图片 分析参考图风格,结合爆款数据生成方案
选择方案生图 回复「选方案 1」 按方案提示词生成 900×383 封面图

输出示例

完成分析后,你将收到一份可视化封面分析报告(HTML 页面),包含:

  • 风格分类展示:每类风格的代表性封面图与特征规律
  • 3 套设计方案:各含风格名称、核心视觉、案例参考与生图提示词
  • 方案选择区域:选择后即可生成封面图

使用场景

场景 角色 示例问法 收益
新文配封面 公众号创作者 「今天发护肤干货,帮我设计封面」 基于爆款数据生成专业封面方案
赛道日常更新 内容运营 「职场穿搭赛道,需要一组封面方案」 快速产出多组风格方案,A/B 测试
参考图定制 设计师 「参考这张图帮我出封面」+ 上传图片 结合参考图与爆款规律生成方案
热点追封面 新媒体编辑 「看看最近美妆赛道什么封面火」 获取近期爆款封面风格,紧跟热点

重要数据说明

  • 数据库仅包含昨天至 30 天前的数据
  • 默认时间范围为最近 30 天

Skill manifest

公众号封面图制作

📋 概述

基于全网每日收录的爆款文章数据,获取同赛道爆款封面的视觉元素,通过AI分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案(含案例+生图提示词)。仅在主Agent中执行,不派发给子Agent。

🎯 触发规则

场景 处理方式
用户提供内容主题/赛道 执行任务流程
用户要求生成封面方案 执行任务流程
用户上传文案或图片要求分析 执行任务流程
用户询问技能功能/用法 仅介绍技能
用户未提供明确创作主题 仅介绍技能

📝 术语规范

统一使用"爆款封面",禁止使用:爆炸封面→爆款封面、爆炸数据→爆款数据、抓取数据→获取/查询数据、抓取封面→获取封面。

🔒 数据来源

所有爆款数据必须来自接口,禁止联网搜索、使用其他数据源或脑补数据。数据不足时明确告知用户。

🔑 鉴权

获取 API Key

请前往 红狐hub 获取API KEY

配置 API Key

方案1: 以OpenClaw为例,将REDFOX_API_KEY添加到~/.openclaw/openclaw.json中:

{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }

方案2: 终端配置

export REDFOX_API_KEY="ak_xxxx..."

⚙️ 前置准备

  • 依赖:requests(pip install requests)
  • 凭证:环境变量 REDFOX_API_KEY(详见鉴权章节)
  • 数据范围:仅含昨天至30天前的数据,默认查询近30天

🔄 操作流程

步骤1:意图解析

结构化解析用户需求,提取4个维度:

维度 说明 示例
内容主题 优先领域词 护肤、穿搭、美食、职场
内容类型 内容形式 干货、测评、种草、教程
风格偏好 视觉/调性 专业、吸引点击、情绪、极简
核心关键词 搜索关键词 秋冬、美白、护肤、干皮

提取2-5个核心关键词(逗号分隔),优先细分领域词,结合风格偏好补充场景词。

步骤2:爆款数据查询

# 有赛道关键词
python3 scripts/fetch_explosive_covers.py --keyword <关键词1,关键词2,关键词3>
# 无赛道关键词
python3 scripts/fetch_explosive_covers.py --keyword ""
  • 最多5个关键词,总长度≤200字符
  • 关键词整体一次传入接口,不做拆分循环调用
  • 时间参数默认不传(接口自行决定默认范围);用户指定"近N天"时 startDate = 今天 - (N-1)天

步骤3:智能匹配筛选

数据量 处理
≥20条 直接使用
<20条 扩展关键词(如:美白→美白、护肤、美白祛斑),重新查询,合并数据

筛选规则:按阅读数从高到低排序,取前20条。关键词扩展最多1-2次,每次2-3个相似词。

步骤4:AI图像分析与特征提取

  1. 解析脚本返回的JSON数据(含 articles 文章数组,以及 latestHotArticles、hotTopics、relatedSearches 辅助数据)
  2. 提取 imageUrl 字段合并为封面候选池——直接使用原始值,不做任何修改(新接口字段名为 imageUrl,旧接口为 coverUrl,脚本已做兑容)
  3. 按互动量从高到低取前20条
  4. 逐张分析封面图(使用原生图片理解能力,直接访问 imageUrl)

7维度分析:

维度 分析内容
文字内容 是否有文字、内容、字体大小、位置、颜色、醒目程度
主体元素 人物/产品/场景/图案等主要视觉元素
色彩特征 主色调、配色方案、对比度、冷暖色调
构图布局 画面结构、元素分布、主体位置、留白处理
视觉风格 实拍/插画/拼贴/极简/炫酷等风格类型
点击吸引力 痛点/好奇/美感/实用——为什么吸引点击
尺寸检测 宽x高,是否合格(≥10px)

图片过滤规则:

  • 空白图片(纯色块、无内容):标注"需过滤",后续所有环节排除
  • 小尺寸图片(宽或高 <10px):全部过滤
  • 输出前二次检查:确保无空白/小尺寸图片混入

分类汇总:将相似风格的封面归为同一类,统计特征规律(分类前先过滤空白图片)。

步骤5:输出HTML分析报告与设计方案

使用 references/report_template.html(JS渲染型模板),只需注入 JSON 数据,禁止在输出时临时生成完整 HTML。

  1. 复制模板到输出文件:cp references/report_template.html ./爆款封面分析报告_{关键词}.html
  2. 将分析结果组装为 JSON 对象(格式见 references/report_template.md)
  3. 用 SearchReplace 在输出文件(非模板原文件)中将 __REPORT_DATA__ 的默认空值替换为实际 JSON
  4. 执行 open ./爆款封面分析报告_{关键词}.html 在浏览器中打开

JSON 结构(只需填充以下字段,无需生成任何 HTML):

{
  "keyword": "用户关键词",
  "analysisCount": 20,
  "styles": [{ "name": "", "count": 0, "coreVisual": "", "features": "", "covers": [] }],
  "plans": [{ "name": "", "coreVisual": "", "case": { "imageUrl": "", "url": "", "title": "", "author": "", "reads": "" }, "prompt": "" }]
}
要求 说明
模板 references/report_template.html(JS 渲染型,样式/防盗链已内置)
数据格式 详见 references/report_template.md JSON 数据结构章节
封面展示 按风格类型分类,每类最多5张
案例参考 imageUrl 原始值 + 标题(url链接) + 作者 + 仅阅读数
生图提示词 严格遵循 2.35:1 横版比例

步骤6:用户选择方案并生成封面图

⚠️ 先询问用户,等回复后再生成——不要在用户选择前就生成封面图!

第一阶段(输出报告后立即执行):HTML模板末尾已包含方案选择区域,展示报告后停止,等待用户回复。

第二阶段(用户回复后执行):

  1. 确认用户选择的方案(1/2/3)及其生图提示词
  2. 如用户上传了图片,用原生图片理解能力分析
  3. 使用原生图像生成能力生成封面图(2.35:1,900x383像素)
  4. 直接展示图片,不需要HTML包裹

步骤7:输出前自检

检查项 内容
风格类型 每类有:名称、频次、核心视觉、关键特征、封面示例
三个方案 各有风格名称、核心视觉、案例参考(不重复)、生图提示词
  • 封面图链接使用 imageUrl 字段原始值 | 图片过滤 | 无空白图片、无小尺寸图片 | | 用户交互 | 已询问方案选择并等待回复 |

⚠️ 注意事项

  • 封面图容器比例 2.35:1 (900x383),使用 object-fit: cover + object-position: center 自适应截取
  • HTML添加防盗链 meta 标签 <meta name="referrer" content="no-referrer">
  • 案例参考仅保留阅读数(clicksCount),删除点赞和在看
  • 封面图用 <a> 标签包裹可点击跳转大图,方案标题用 url 字段链接
  • 图像分析使用原生图片理解能力,直接访问封面URL,逐张分析
Files (redfox-community)
  • references
    • gzh_trend_data_format.md 4.1 KB
      # 公众号爆款数据格式说明
      
      ## 概览
      
      本文档定义了公众号爆款封面数据查询脚本 `fetch_explosive_covers.py` 的输入输出格式规范。
      
      **接口地址**:`POST https://redfox.hk/story/api/gzh/search/hotArticleNew`
      
      ## 输入格式
      
      ### 脚本参数
      
      ```bash
      python3 scripts/fetch_explosive_covers.py --keyword <关键词> [选项]
      ```
      
      | 参数 | 必填 | 说明 | 默认值 |
      |------|------|------|--------|
      | `--keyword` | 是 | 搜索关键词(支持多个,逗号分隔,空字符串查全站热门) | - |
      | `--start-date` | 否 | 开始日期,格式 yyyy-MM-dd | 不传(接口自行决定) |
      | `--end-date` | 否 | 结束日期,格式 yyyy-MM-dd | 不传(接口自行决定) |
      | `--max-items` | 否 | 最多展示文章数量 | 20 |
      | `--output-format` | 否 | 输出格式:text、json 或 markdown | json |
      | `--output-file` | 否 | 输出文件路径 | 不输出文件 |
      | `--debug` | 否 | 调试模式 | False |
      
      ## 输出格式
      
      ### 文章数据字段
      
      每篇文章(`articles` 数组中的对象)包含以下字段:
      
      #### 文章基本信息
      
      | 字段名 | 类型 | 说明 |
      |--------|------|------|
      | `id` | string | 文章ID(唯一标识) |
      | `title` | string | 文章标题(可能为空,需从 summary 提取) |
      | `summary` | string | 文章摘要/正文片段 |
      | `publicTime` | string | 发布时间(格式:YYYY-MM-DD HH:MM:SS) |
      | `url` | string | 文章链接(完整URL) |
      
      #### 作者信息
      
      | 字段名 | 类型 | 说明 |
      |--------|------|------|
      | `author` | string | 公众号名称/作者名 |
      
      #### 互动数据
      
      | 字段名 | 类型 | 说明 |
      |--------|------|------|
      | `clicksCount` | int | 阅读数 |
      | `watchCount` | int | 在看数 |
      | `likeCount` | int | 点赞数 |
      | `shareCount` | int | 分享数 |
      | `commentsCount` | int | 评论数 |
      
      #### 封面图
      
      | 字段名 | 类型 | 说明 |
      |--------|------|------|
      | `imageUrl` | string | 封面图URL(旧接口字段名为 `coverUrl`) |
      
      #### 评分字段(用于排序)
      
      | 字段名 | 类型 | 说明 |
      |--------|------|------|
      | `totalScore` | float | 总分(用于排序) |
      | `relevanceScore` | float | 相关性评分 |
      | `popularityScore` | float | 热度评分 |
      | `recencyScore` | float | 时效评分 |
      
      #### ⚠️ 新接口缺失字段
      
      以下字段在旧接口(getWxCozeSkillData)中存在,**hotArticleNew 接口不返回**:
      
      | 缺失字段 | 说明 | 影响 |
      |----------|------|------|
      | `userName` | 公众号名称 | 已改为 `author` 字段 |
      | `photoId` | 文章旧ID | 已改为 `id` 字段 |
      | `oriUrl` | 文章旧链接 | 已改为 `url` 字段 |
      | `accountId` | 公众号账号ID | 无法拼接二维码链接 |
      | `userHeadUrl` | 作者头像 | 无法展示作者头像 |
      
      ### JSON 输出示例
      
      ```json
      {
        "keyword": "职场",
        "articles": [
          {
            "id": "abc123",
            "title": "职场新人必知的10个技巧",
            "summary": "刚入职场的你是否感到迷茫...",
            "author": "职场达人",
            "publicTime": "2026-07-20 10:30:00",
            "url": "https://mp.weixin.qq.com/s/xxxxx",
            "imageUrl": "https://mmbiz.qpic.cn/mmbiz_jpg/...",
            "clicksCount": 58000,
            "watchCount": 320,
            "totalScore": 85.5,
            "relevanceScore": 8.2,
            "popularityScore": 7.5,
            "recencyScore": 6.0
          }
        ],
        "latestHotArticles": [],
        "hotTopics": [
          { "name": "职场晋升", "count": 120 }
        ],
        "relatedSearches": ["职场沟通", "职场穿搭"]
      }
      ```
      
      ## 关于封面图
      
      新接口(hotArticleNew)封面图字段名为 `imageUrl`,旧接口为 `coverUrl`,脚本已做双字段兑容处理。
      
      ## 使用注意事项
      
      ### 数据获取原则
      
      1. **必须调用脚本查询**:不能使用其他方式查询或直接搜索网络资讯
      2. **必须等待脚本执行完成**:获取返回结果后才能进行后续步骤
      3. **必须展示完整数据列表**:不能跳过或询问用户
      
      ### 字段说明
      
      1. **标题提取**:如果 `title` 字段为空,从 `summary` 字段提取前30个字符作为标题
      2. **作者名称**:使用 `author` 字段
      3. **阅读数格式**:整数,脚本中格式化为 `1.0w` 形式(≥10000时)
      4. **文章链接**:使用 `url` 字段
      
    • report_template.html 8 KB · in bundle
    • report_template.md 4.1 KB
      # 爆款封面分析报告 HTML 模板
      
      ## 文件说明
      
      本模板采用 **JS 渲染型** 架构:HTML 结构和渲染逻辑固定在 `references/report_template.html` 中,Agent 只需注入一段 JSON 数据,页面自动渲染,无需在输出时临时生成大量 HTML。
      
      **模板文件**:`references/report_template.html`
      
      **⚠️ 重要:按风格类型分类展示封面,不要逐张输出分析结果!**
      
      ---
      
      ## 使用方式
      
      1. 读取 `references/report_template.html` 模板文件
      2. 将分析结果组装为 JSON 对象
      3. 用 SearchReplace 将模板中 `__REPORT_DATA__` 的值替换为实际 JSON
      4. 写入 `./爆款封面分析报告_{关键词}.html`
      5. 执行 `open ./爆款封面分析报告_{关键词}.html` 打开浏览器
      
      **替换目标**(模板中唯一的占位区域):
      ```javascript
      var __REPORT_DATA__ = {
          "keyword": "",
          "analysisCount": 0,
          "styles": [],
          "plans": []
      };
      ```
      
      ---
      
      ## JSON 数据结构
      
      ```json
      {
          "keyword": "美食,食谱,做饭",
          "analysisCount": 20,
          "styles": [
              {
                  "name": "🍽️ 家常俯拍·满桌多菜",
                  "count": 12,
                  "coreVisual": "俯视/高角度拍摄,3-6道菜品铺满白色桌面,自然暖光",
                  "features": "满桌丰盛感营造家的味道;白色桌面干净清爽;菜品色彩丰富",
                  "covers": [
                      "https://mmbiz.qpic.cn/xxx1/0?wx_fmt=jpeg",
                      "https://mmbiz.qpic.cn/xxx2/0?wx_fmt=jpeg"
                  ]
              }
          ],
          "plans": [
              {
                  "name": "家常俯拍·满桌温馨",
                  "coreVisual": "俯视角度拍摄4-6道家常菜铺满白色桌面,暖色自然光",
                  "case": {
                      "imageUrl": "https://mmbiz.qpic.cn/xxx/0?wx_fmt=jpeg",
                      "url": "https://mp.weixin.qq.com/s/xxx",
                      "title": "在家待客,简单四道家常菜",
                      "author": "小李食代",
                      "reads": "10.0w"
                  },
                  "prompt": "2.35:1横版比例(900x383像素)。参考封面:https://... 。俯视角度拍摄白色大理石桌面上摆放4-5道精致家常菜..."
              }
          ]
      }
      ```
      
      ---
      
      ## 字段说明
      
      ### 顶层字段
      
      | 字段 | 类型 | 说明 | 数据来源 |
      |------|------|------|----------|
      | `keyword` | string | 用户输入的主题关键词 | 用户输入 |
      | `analysisCount` | number | 实际分析的封面图数量 | 过滤后统计 |
      | `styles` | array | 风格类型分类列表 | 分析归类 |
      | `plans` | array | 3个设计方案 | 分析总结 |
      
      ### styles 数组元素
      
      | 字段 | 类型 | 说明 |
      |------|------|------|
      | `name` | string | 风格类型名称(可含emoji) |
      | `count` | number | 该风格出现次数 |
      | `coreVisual` | string | 核心视觉描述 |
      | `features` | string | 关键特征描述 |
      | `covers` | string[] | 代表性封面图URL(最多5张) |
      
      ### plans 数组元素
      
      | 字段 | 类型 | 说明 |
      |------|------|------|
      | `name` | string | 方案风格名称 |
      | `coreVisual` | string | 核心视觉描述 |
      | `case.imageUrl` | string | 案例封面图URL(imageUrl 字段原始值) |
      | `case.url` | string | 案例文章链接(url 字段) |
      | `case.title` | string | 案例文章标题 |
      | `case.author` | string | 案例作者名(author 字段) |
      | `case.reads` | string | 案例阅读数(格式化后,如"10.0w") |
      | `prompt` | string | 生图提示词(含2.35:1比例说明和参考封面URL) |
      
      ---
      
      ## 图片过滤规则
      
      - 空白图片(纯色块、无内容):排除,不放入 covers 数组
      - 小尺寸图片(宽或高 <10px):排除
      - 每个风格类型最多5张代表性封面图
      
      ---
      
      ## 样式规范
      
      | 元素 | 样式规则 |
      |------|----------|
      | 封面图容器比例 | 2.35:1 (180x77px 风格展示 / 300x128px 案例参考) |
      | 封面图适配 | object-fit: cover, object-position: center |
      | 防盗链 | 模板已内置 `<meta name="referrer" content="no-referrer">` |
      
      ---
      
      ## 输出文件命名
      
      生成HTML报告时,文件名格式:
      ```
      爆款封面分析报告_{关键词}.html
      ```
      
      保存路径:当前工作目录(使用相对路径 ./)
      
  • scripts
    • fetch_explosive_covers.py 12.5 KB
      #!/usr/bin/env python3
      """
      公众号爆款封面数据查询脚本
      对接接口:POST https://redfox.hk/story/api/gzh/search/hotArticleNew
      """
      
      import os
      import sys
      import argparse
      import json
      from datetime import datetime
      
      import requests
      
      
      def _do_fetch(keyword, headers, base_url, start_date=None, end_date=None, debug=False):
          """执行单次 POST 请求,返回解析后的 dict
      
          startDate / endDate 仅在用户显式指定时传入,否则由接口自行决定默认范围。
          """
          json_body = {
              "keyword": keyword,
              "source": "公众号爆款封面生成-GitHub",
              "pageSize": 50
          }
      
          # 时间参数:仅在用户显式指定时才传入
          if start_date:
              json_body["startDate"] = start_date
          if end_date:
              json_body["endDate"] = end_date
      
          if debug:
              print(f"\n[DEBUG] POST {base_url}", file=sys.stderr)
              print(f"[DEBUG] Body: {json_body}", file=sys.stderr)
      
          try:
              response = requests.post(base_url, json=json_body, headers=headers, timeout=30)
      
              if debug:
                  print(f"[DEBUG] 状态码: {response.status_code}", file=sys.stderr)
      
              if response.status_code >= 400:
                  print(f"[DEBUG] HTTP错误: {response.status_code} {response.text[:200]}", file=sys.stderr)
                  return None
      
              result = response.json()
      
              if result.get("code") == 2000:
                  data = result.get("data", {})
                  if debug:
                      articles = data.get("articles", [])
                      print(f"[DEBUG] 获取到 {len(articles)} 篇文章", file=sys.stderr)
                  return data
              else:
                  if debug:
                      print(f"[DEBUG] 接口错误: {result.get('msg')}", file=sys.stderr)
                  return None
      
          except Exception as e:
              if debug:
                  print(f"[DEBUG] 请求异常: {e}", file=sys.stderr)
              return None
      
      
      def fetch_wx_covers(keyword: str, debug: bool = False, start_date: str = None, end_date: str = None):
          """
          调用 hotArticleNew 接口获取公众号爆款文章数据
      
          Args:
              keyword: 搜索关键词(多个关键词用逗号分隔,空字符串表示全站热门)
              debug: 是否打印调试信息
              start_date: 开始日期,格式 yyyy-MM-dd
              end_date: 结束日期,格式 yyyy-MM-dd(默认今天)
      
          Returns:
              dict: 包含 articles / latestHotArticles / hotTopics / relatedSearches
          """
          api_key = os.getenv("REDFOX_API_KEY")
          if not api_key:
              raise ValueError(
                  "缺少 API Key 配置,请设置环境变量 REDFOX_API_KEY。"
                  "获取方式:前往 https://redfox.hk/settings/api-keys?source=github 申请,"
                  '然后执行 export REDFOX_API_KEY="ak_xxxx..."'
              )
      
          base_url = "https://redfox.hk/story/api/gzh/search/hotArticleNew"
          headers = {
              "X-API-KEY": api_key,
              "Content-Type": "application/json",
              "Accept": "application/json",
          }
      
          # 关键词原样传入,单次调用
          kw = keyword.strip() if keyword else ""
      
          data = _do_fetch(kw, headers, base_url, start_date=start_date, end_date=end_date, debug=debug)
      
          all_articles = data.get("articles", []) if data else []
          all_latest_hot = data.get("latestHotArticles", []) if data else []
          all_hot_topics = data.get("hotTopics", []) if data else []
          all_related_searches = data.get("relatedSearches", []) if data else []
      
          # 按 id 去重
          seen_ids = set()
          unique_articles = []
          for article in all_articles:
              article_id = article.get("id")
              if article_id and article_id not in seen_ids:
                  seen_ids.add(article_id)
                  unique_articles.append(article)
      
          unique_latest = []
          for article in all_latest_hot:
              article_id = article.get("id")
              if article_id and article_id not in seen_ids:
                  seen_ids.add(article_id)
                  unique_latest.append(article)
      
          seen_topics = set()
          unique_topics = []
          for topic in all_hot_topics:
              topic_name = topic.get("name", "") or topic.get("topic", "")
              if topic_name and topic_name not in seen_topics:
                  seen_topics.add(topic_name)
                  unique_topics.append(topic)
      
          return {
              "keyword": keyword,
              "articles": unique_articles,
              "latestHotArticles": unique_latest,
              "hotTopics": unique_topics[:10],
              "relatedSearches": all_related_searches[:10],
          }
      
      
      def get_cover_urls(data, max_items=20):
          """
          从 articles 数组提取封面图 URL
      
          hotArticleNew 接口封面图字段名为 imageUrl(旧接口为 coverUrl),此处做双字段兑容。
          """
          urls = []
          items = data.get("articles", [])[:max_items]
          for item in items:
              # 优先取 imageUrl(新接口),兑容 coverUrl(旧接口)
              cover_url = item.get("imageUrl", "") or item.get("coverUrl", "")
              article_id = item.get("id", "")
              title = (item.get("title", "") or "")[:20]
              url = item.get("url", "")
              if cover_url:
                  urls.append({
                      "title": title,
                      "article_id": article_id,
                      "cover_url": cover_url,
                      "link": url,
                  })
          return urls
      
      
      def format_num(n):
          """格式化数字:10000 → 1.0w"""
          if not n:
              return "0"
          try:
              n = int(n)
          except (ValueError, TypeError):
              return str(n)
          if n >= 10000:
              return f"{n / 10000:.1f}w"
          return str(n)
      
      
      def format_output(data: dict, max_items: int = None, start_date: str = None):
          """
          格式化输出爆款数据(表格形式)
      
          Args:
              data: 原始数据(含 articles 数组)
              max_items: 最多展示条数,None 表示展示所有
              start_date: 开始日期,用于计算统计时间范围
          """
      
          def get_time_range(start_date):
              if start_date:
                  try:
                      start = datetime.strptime(start_date, "%Y-%m-%d")
                      days = (datetime.now() - start).days
                      return f"近{max(days, 1)}天"
                  except Exception:
                      pass
              return "近30天"
      
          time_range = get_time_range(start_date)
      
          def process_title(item):
              title = item.get("title", "") or ""
              if not title.strip():
                  summary = item.get("summary", "") or ""
                  if summary:
                      title = summary.replace("\n", " ").replace("\r", " ").strip()[:30]
                      if len(summary) > 30:
                          title += "..."
              if not title.strip():
                  title = "无标题"
              title = title.replace("|", "\\|").replace("\n", " ").replace("\r", " ")
              title = " ".join(title.split())
              if len(title) > 30:
                  title = title[:30] + "..."
              return title
      
          def format_time(item):
              pub_time = item.get("publicTime", "") or ""
              if pub_time:
                  try:
                      month = int(pub_time[5:7])
                      day = int(pub_time[8:10])
                      return f"{month}月{day}日"
                  except Exception:
                      pass
              return "--"
      
          output = []
          articles = data.get("articles", [])
      
          # 按 clicksCount 降序排序
          def get_clicks(item):
              try:
                  return int(item.get("clicksCount", 0) or 0)
              except (ValueError, TypeError):
                  return 0
      
          articles_sorted = sorted(articles, key=get_clicks, reverse=True)
          if max_items is not None:
              articles_sorted = articles_sorted[:max_items]
      
          total_count = len(articles)
      
          if total_count == 0:
              keyword = data.get("keyword", "")
              output.append(f"# 公众号爆款数据分析报告\n\n**关键词**:{keyword}\n\n")
              output.append("---\n\n")
              output.append("## 暂无相关爆款数据\n\n")
              output.append(f"很抱歉,当前关键词 **「{keyword}」** 尚未有足够的爆款文章数据。\n\n")
              output.append("### 可能原因\n\n")
              output.append("- 该关键词相对小众或新兴,爆款内容积累较少\n")
              output.append("- 近期该赛道热度较低,暂无突出爆款文章\n")
              output.append("- 关键词表述方式可以更加具体或热门\n\n")
              output.append("### 建议操作\n\n")
              output.append("- 更换为更热门的关键词,如:**\"职场成长\"**、**\"美食\"**、**\"情感故事\"** 等\n")
              output.append("- 尝试更细分的长尾关键词\n")
              output.append("- 输入其他感兴趣的领域或赛道进行追踪\n\n")
              output.append("---\n\n")
              output.append("*数据来源:公众号爆款雷达,每日更新最新热门内容*\n")
              return "\n".join(output)
      
          output.append(f"\n### 爆款文章({time_range},按阅读数排序,共 {total_count} 条)\n")
          output.append("| 序号 | 发布时间 | 标题 | 作者 | 阅读数 | 在看数 |")
          output.append("|------|----------|------|------|--------|--------|")
      
          for idx, item in enumerate(articles_sorted, 1):
              author = item.get("author", "") or "未知"
              title = process_title(item)
              url = item.get("url", "")
              title_with_link = f"[{title}]({url})" if url else title
              pub_time = format_time(item)
              clicks = format_num(item.get("clicksCount", 0))
              watches = format_num(item.get("watchCount", 0))
      
              output.append(f"| {idx} | {pub_time} | {title_with_link} | {author} | {clicks} | {watches} |")
      
          return "\n".join(output)
      
      
      def main():
          """主函数"""
          parser = argparse.ArgumentParser(description="公众号爆款封面数据查询工具")
          parser.add_argument("--keyword", required=True, help="搜索关键词(多个用逗号分隔,空字符串查全站热门)")
          parser.add_argument(
              "--max-items",
              type=int,
              default=20,
              help="最多展示文章数量(默认20条)",
          )
          parser.add_argument(
              "--output-format",
              choices=["text", "json", "markdown"],
              default="json",
              help="输出格式:text / json(默认)/ markdown",
          )
          parser.add_argument("--output-file", type=str, default=None, help="输出文件路径")
          parser.add_argument("--start-date", type=str, default=None, help="开始日期,格式 yyyy-MM-dd(默认不传,接口自行决定)")
          parser.add_argument("--end-date", type=str, default=None, help="结束日期,格式 yyyy-MM-dd(默认不传,接口自行决定)")
          parser.add_argument("--debug", action="store_true", help="启用调试模式")
      
          args = parser.parse_args()
      
          try:
              data = fetch_wx_covers(
                  args.keyword,
                  debug=args.debug,
                  start_date=args.start_date,
                  end_date=args.end_date,
              )
      
              # 生成输出内容
              if args.output_format == "json":
                  output_content = json.dumps(data, ensure_ascii=False, indent=2)
              elif args.output_format == "markdown":
                  markdown_header = f"# 公众号爆款数据分析报告\n\n**关键词**:{args.keyword}\n\n"
                  output_content = markdown_header + format_output(data, max_items=args.max_items, start_date=args.start_date)
              else:
                  output_content = format_output(data, max_items=args.max_items, start_date=args.start_date)
      
              output_file = args.output_file
      
              if output_file:
                  with open(output_file, "w", encoding="utf-8") as f:
                      f.write(output_content)
                  print(f"✓ 结果已保存到: {output_file}", file=sys.stderr)
                  print(f"✓ 关键词: {args.keyword}", file=sys.stderr)
                  total = len(data.get("articles", []))
                  print(f"✓ 总计: {total} 条数据", file=sys.stderr)
                  cover_urls = get_cover_urls(data, max_items=3)
                  if cover_urls:
                      print(f"\n=== 封面图URL(用于风格分析)===", file=sys.stderr)
                      for i, item in enumerate(cover_urls, 1):
                          print(f"{i}. {item['title']}: {item['cover_url']}", file=sys.stderr)
                  else:
                      print("\n⚠️ 接口未返回 imageUrl/coverUrl 字段,无法提取封面图URL", file=sys.stderr)
              else:
                  print(output_content)
                  print(f"\n✓ 关键词: {args.keyword}", file=sys.stderr)
                  total = len(data.get("articles", []))
                  print(f"✓ 总计: {total} 条数据", file=sys.stderr)
      
              print(f"\n另外红狐配套全量数据库可提供完整详实数据,如需了解采购方案,可发送邮件至 redfoxdata@proton.me 对接咨洵")
      
          except Exception as e:
              print(f"❌ 错误: {str(e)}", file=sys.stderr)
              sys.exit(1)
      
      
      if __name__ == "__main__":
          main()
      
  • README.en.md 5.5 KB
    # WeChat Cover Design / wechat-cover
    
    ---
    
    ## Introduction
    
    Based on daily collected **100K+** article data from across the web, this tool retrieves visual elements from explosive covers in the same niche, analyzes high-conversion visual patterns through AI, and generates cover design proposals that match your content and fit the platform's traffic aesthetics.
    
    **Core Value**
    
    - **Massive Sample Alignment**: Continuously collects explosive article covers daily, ensuring design proposals are data-driven rather than imagined.
    - **Analyze First, Design Later**: Completes explosive cover style analysis and classification before outputting design proposals, making patterns clear and easy to choose.
    - **Proposal + Image Generation All-in-One**: Each proposal includes image generation prompts; after selection, a 2.35:1 cover image can be generated directly.
    
    **Target Users**
    
    - ✍️ **WeChat Official Account Creators** — Stop struggling with cover design, use explosive patterns to boost article click rates.
    - 📊 **Content Operators** — Quickly produce multiple cover proposals by niche keywords for efficient A/B testing.
    - 🏢 **MCN / New Media Teams** — Batch propose covers for the same niche, building reusable visual templates.
    
    ---
    
    ## Features
    
    ### Core Features
    
    - **Keyword-Driven**: Enter a niche or content keyword to automatically retrieve explosive cover data for that field.
    - **7-Dimension Cover Analysis**: Analyzes each cover image across text content, main elements, color characteristics, composition layout, visual style, click appeal, and dimensions for deep pattern extraction.
    - **Style Classification Summary**: Groups similar-style covers into categories, displaying representative covers and characteristic patterns by type.
    - **3 Design Proposals**: Generates 3 differentiated cover design proposals based on analysis results, each with core visuals, case references, and image generation prompts.
    - **One-Click Image Generation**: After selecting a proposal, directly generates a 2.35:1 (900×383) cover image; supports uploading reference images.
    
    ---
    
    ## API Key Acquisition & Security
    
    - This skill requires the environment variable: `REDFOX_API_KEY`.
    - `REDFOX_API_KEY` is provided by [RedFoxHub](https://redfox.hk/settings/api-keys?source=github) (`https://redfox.hk`).
    - Please visit [RedFoxHub](https://redfox.hk?source=github) to register an account and obtain `REDFOX_API_KEY`.
    - Configure the environment variable `REDFOX_API_KEY` on your device before using this skill.
    - Before providing a key, please confirm its source, scope of use, validity period, and whether it supports reset/revocation.
    - Never hard-code or expose keys in plain text within code, prompts, logs, or output files.
    
    ---
    
    ## Usage Guide
    
    Simply describe your niche, content topic, or cover needs in natural language — no commands to memorize.
    
    ### Quick Reference
    
    | Intent                      | Example Phrase                                                      | Result                                                                              |
    | --------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
    | Design by niche             | "Design a beauty tutorial cover for me"                             | Retrieves beauty niche explosive cover data, analyzes styles, generates 3 proposals |
    | Design by content topic     | "Autumn whitening skincare tips, want a professional-looking cover" | Parses content intent, matches professional-style cover patterns                    |
    | Upload reference image      | "Design a cover referencing this image" + upload                    | Analyzes reference image style, combines with explosive data to generate proposals  |
    | Select proposal to generate | Reply "Choose proposal 1"                                           | Generates 900×383 cover image per the proposal prompt                               |
    
    ### Output Example
    
    After analysis, you'll receive a visual cover analysis report (HTML page) containing:
    
    - **Style Classification Display**: Representative covers and characteristic patterns for each style type
    - **3 Design Proposals**: Each with style name, core visuals, case references, and image generation prompts
    - **Proposal Selection Area**: Select a proposal to generate the cover image
    
    ---
    
    ## Use Cases
    
    | Scenario              | Role             | Example Question                                         | Benefit                                                       |
    | --------------------- | ---------------- | -------------------------------------------------------- | ------------------------------------------------------------- |
    | New article cover     | WeChat creator   | "Publishing skincare tips today, help me design a cover" | Generate professional cover proposals based on explosive data |
    | Niche daily updates   | Content operator | "Workplace fashion niche, need a set of cover proposals" | Quickly produce multiple style proposals for A/B testing      |
    | Custom with reference | Designer         | "Design a cover referencing this image" + upload         | Combine reference image with explosive patterns               |
    | Trend-chasing covers  | Media editor     | "See what covers are hot in the beauty niche lately"     | Get recent explosive cover styles, stay on trend              |
    
    ---
    
    ## Important Data Notes
    
    - The database only contains data from yesterday to 30 days ago
    - Default time range is the last 30 days
    
  • README.md 4.4 KB
    # 公众号封面图制作 / wechat-cover
    
    ---
    
    ## 简介
    
    基于全网每日持续收录的 **10w+** 文章数据,获取同赛道爆款封面的视觉元素,通过 AI 分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案。
    
    **核心价值**
    
    - **海量样本对齐**:每日持续收录爆款文章封面,设计方案有据可依,避免凭空臆造。
    - **先析后做**:先完成爆款封面风格分析与分类,再输出设计方案,规律清晰、便于选用。
    - **方案+生图一体**:每个方案附带生图提示词,选中后可直接生成 2.35:1 封面图。
    
    **适用对象**
    
    - ✍️ **公众号创作者** — 告别封面设计纠结,用爆款规律提升文章点击率。
    - 📊 **内容运营** — 按赛道关键词快速产出多组封面方案,A/B 测试更高效。
    - 🏢 **MCN / 新媒体团队** — 同赛道批量提案封面,沉淀可复用的视觉套路。
    
    ---
    
    ## 功能特性
    
    ### 核心功能
    
    - **关键词驱动**:输入赛道或内容关键词,自动获取同领域爆款封面数据。
    - **7 维度封面分析**:逐张分析封面图的文字内容、主体元素、色彩特征、构图布局、视觉风格、点击吸引力、尺寸,深度拆解爆款视觉规律。
    - **风格分类汇总**:将相似风格的封面归为同一类,按类型展示代表性封面与特征规律。
    - **3 套设计方案**:基于分析结果生成 3 套差异化封面设计方案,各含核心视觉、案例参考与生图提示词。
    - **一键生图**:用户选择方案后,直接生成 2.35:1(900×383)封面图,支持上传参考图片。
    
    ---
    
    ## 密钥获取与安全说明
    
    - 本技能需要使用环境变量:`REDFOX_API_KEY`。
    - `REDFOX_API_KEY` 由 [红狐 hub](https://redfox.hk/settings/api-keys?source=github) (`https://redfox.hk`)提供。
    - 请前往 [红狐 hub](https://redfox.hk?source=github) 注册账号,获取 `REDFOX_API_KEY`。
    - 配置设备环境变量 `REDFOX_API_KEY` 后使用本技能。
    - 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
    - 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。
    
    ---
    
    ## 使用指南
    
    直接用自然语言说出你的赛道、内容主题或封面需求即可,无需记忆固定命令。
    
    ### 常用说法速查
    
    | 意图           | 示例话术                               | 效果                                              |
    | -------------- | -------------------------------------- | ------------------------------------------------- |
    | 按赛道设计封面 | 「帮我设计美妆教程封面」               | 获取美妆赛道爆款封面数据,分析风格后生成 3 套方案 |
    | 按内容主题设计 | 「秋冬美白护肤心得,想要专业感的封面」 | 解析内容意图,匹配专业风格封面规律                |
    | 上传参考图     | 「帮我参考这张图设计封面」 + 上传图片  | 分析参考图风格,结合爆款数据生成方案              |
    | 选择方案生图   | 回复「选方案 1」                       | 按方案提示词生成 900×383 封面图                   |
    
    ### 输出示例
    
    完成分析后,你将收到一份可视化封面分析报告(HTML 页面),包含:
    
    - **风格分类展示**:每类风格的代表性封面图与特征规律
    - **3 套设计方案**:各含风格名称、核心视觉、案例参考与生图提示词
    - **方案选择区域**:选择后即可生成封面图
    
    ---
    
    ## 使用场景
    
    | 场景         | 角色         | 示例问法                           | 收益                           |
    | ------------ | ------------ | ---------------------------------- | ------------------------------ |
    | 新文配封面   | 公众号创作者 | 「今天发护肤干货,帮我设计封面」   | 基于爆款数据生成专业封面方案   |
    | 赛道日常更新 | 内容运营     | 「职场穿搭赛道,需要一组封面方案」 | 快速产出多组风格方案,A/B 测试 |
    | 参考图定制   | 设计师       | 「参考这张图帮我出封面」+ 上传图片 | 结合参考图与爆款规律生成方案   |
    | 热点追封面   | 新媒体编辑   | 「看看最近美妆赛道什么封面火」     | 获取近期爆款封面风格,紧跟热点 |
    
    ---
    
    ## 重要数据说明
    
    - 数据库仅包含昨天至 30 天前的数据
    - 默认时间范围为最近 30 天
    
  • SKILL.md 7.6 KB
    ---
    name: wechat-cover
    version: 1.3.0
    description: 公众号爆款封面AI设计工具。基于全网每日收录的10w+文章数据,获取同赛道爆款封面视觉元素,通过AI分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案。当用户设计公众号封面、生成封面方案、查询爆款封面规律时使用。触发词:公众号封面、封面设计、爆款封面、封面方案、封面生图。
    ---
    
    # 公众号封面图制作
    
    ## 📋 概述
    
    基于全网每日收录的爆款文章数据,获取同赛道爆款封面的视觉元素,通过AI分析总结高转化视觉规律,生成贴合文章内容、符合平台流量审美的封面设计方案(含案例+生图提示词)。仅在主Agent中执行,不派发给子Agent。
    
    ## 🎯 触发规则
    
    | 场景 | 处理方式 |
    |------|----------|
    | 用户提供内容主题/赛道 | 执行任务流程 |
    | 用户要求生成封面方案 | 执行任务流程 |
    | 用户上传文案或图片要求分析 | 执行任务流程 |
    | 用户询问技能功能/用法 | 仅介绍技能 |
    | 用户未提供明确创作主题 | 仅介绍技能 |
    
    ## 📝 术语规范
    
    统一使用"爆款封面",禁止使用:爆炸封面→爆款封面、爆炸数据→爆款数据、抓取数据→获取/查询数据、抓取封面→获取封面。
    
    ## 🔒 数据来源
    
    所有爆款数据必须来自接口,禁止联网搜索、使用其他数据源或脑补数据。数据不足时明确告知用户。
    
    ## 🔑 鉴权
    
    ### 获取 API Key
    
    请前往 [红狐hub](https://redfox.hk/settings/api-keys?source=github) 获取API KEY
    
    ### 配置 API Key
    
    方案1: 以OpenClaw为例,将REDFOX_API_KEY添加到~/.openclaw/openclaw.json中:
    
    ```json
    { "env": { "REDFOX_API_KEY": "ak_xxxx..." } }
    ```
    
    方案2: 终端配置
    
    ```bash
    export REDFOX_API_KEY="ak_xxxx..."
    ```
    
    ## ⚙️ 前置准备
    
    - 依赖:`requests`(`pip install requests`)
    - 凭证:环境变量 `REDFOX_API_KEY`(详见鉴权章节)
    - 数据范围:仅含昨天至30天前的数据,默认查询近30天
    
    ## 🔄 操作流程
    
    ### 步骤1:意图解析
    
    结构化解析用户需求,提取4个维度:
    
    | 维度 | 说明 | 示例 |
    |------|------|------|
    | 内容主题 | 优先领域词 | 护肤、穿搭、美食、职场 |
    | 内容类型 | 内容形式 | 干货、测评、种草、教程 |
    | 风格偏好 | 视觉/调性 | 专业、吸引点击、情绪、极简 |
    | 核心关键词 | 搜索关键词 | 秋冬、美白、护肤、干皮 |
    
    提取2-5个核心关键词(逗号分隔),优先细分领域词,结合风格偏好补充场景词。
    
    ### 步骤2:爆款数据查询
    
    ```bash
    # 有赛道关键词
    python3 scripts/fetch_explosive_covers.py --keyword <关键词1,关键词2,关键词3>
    # 无赛道关键词
    python3 scripts/fetch_explosive_covers.py --keyword ""
    ```
    
    - 最多5个关键词,总长度≤200字符
    - 关键词整体一次传入接口,不做拆分循环调用
    - 时间参数默认不传(接口自行决定默认范围);用户指定"近N天"时 startDate = 今天 - (N-1)天
    
    ### 步骤3:智能匹配筛选
    
    | 数据量 | 处理 |
    |--------|------|
    | ≥20条 | 直接使用 |
    | <20条 | 扩展关键词(如:美白→美白、护肤、美白祛斑),重新查询,合并数据 |
    
    筛选规则:按阅读数从高到低排序,取前20条。关键词扩展最多1-2次,每次2-3个相似词。
    
    ### 步骤4:AI图像分析与特征提取
    
    1. 解析脚本返回的JSON数据(含 `articles` 文章数组,以及 `latestHotArticles`、`hotTopics`、`relatedSearches` 辅助数据)
    2. 提取 `imageUrl` 字段合并为封面候选池——**直接使用原始值,不做任何修改**(新接口字段名为 `imageUrl`,旧接口为 `coverUrl`,脚本已做兑容)
    3. 按互动量从高到低取前20条
    4. **逐张分析封面图**(使用原生图片理解能力,直接访问 imageUrl)
    
    **7维度分析**:
    
    | 维度 | 分析内容 |
    |------|----------|
    | 文字内容 | 是否有文字、内容、字体大小、位置、颜色、醒目程度 |
    | 主体元素 | 人物/产品/场景/图案等主要视觉元素 |
    | 色彩特征 | 主色调、配色方案、对比度、冷暖色调 |
    | 构图布局 | 画面结构、元素分布、主体位置、留白处理 |
    | 视觉风格 | 实拍/插画/拼贴/极简/炫酷等风格类型 |
    | 点击吸引力 | 痛点/好奇/美感/实用——为什么吸引点击 |
    | 尺寸检测 | 宽x高,是否合格(≥10px) |
    
    **图片过滤规则**:
    - 空白图片(纯色块、无内容):标注"需过滤",后续所有环节排除
    - 小尺寸图片(宽或高 <10px):全部过滤
    - 输出前二次检查:确保无空白/小尺寸图片混入
    
    **分类汇总**:将相似风格的封面归为同一类,统计特征规律(分类前先过滤空白图片)。
    
    ### 步骤5:输出HTML分析报告与设计方案
    
    使用 `references/report_template.html`(JS渲染型模板),只需注入 JSON 数据,禁止在输出时临时生成完整 HTML。
    
    1. 复制模板到输出文件:`cp references/report_template.html ./爆款封面分析报告_{关键词}.html`
    2. 将分析结果组装为 JSON 对象(格式见 `references/report_template.md`)
    3. 用 SearchReplace 在**输出文件**(非模板原文件)中将 `__REPORT_DATA__` 的默认空值替换为实际 JSON
    4. 执行 `open ./爆款封面分析报告_{关键词}.html` 在浏览器中打开
    
    **JSON 结构**(只需填充以下字段,无需生成任何 HTML):
    ```json
    {
      "keyword": "用户关键词",
      "analysisCount": 20,
      "styles": [{ "name": "", "count": 0, "coreVisual": "", "features": "", "covers": [] }],
      "plans": [{ "name": "", "coreVisual": "", "case": { "imageUrl": "", "url": "", "title": "", "author": "", "reads": "" }, "prompt": "" }]
    }
    ```
    
    | 要求 | 说明 |
    |------|------|
    | 模板 | `references/report_template.html`(JS 渲染型,样式/防盗链已内置) |
    | 数据格式 | 详见 `references/report_template.md` JSON 数据结构章节 |
    | 封面展示 | 按风格类型分类,每类最多5张 |
    | 案例参考 | imageUrl 原始值 + 标题(url链接) + 作者 + 仅阅读数 |
    | 生图提示词 | 严格遵循 2.35:1 横版比例 |
    
    ### 步骤6:用户选择方案并生成封面图
    
    **⚠️ 先询问用户,等回复后再生成——不要在用户选择前就生成封面图!**
    
    **第一阶段**(输出报告后立即执行):HTML模板末尾已包含方案选择区域,展示报告后停止,等待用户回复。
    
    **第二阶段**(用户回复后执行):
    1. 确认用户选择的方案(1/2/3)及其生图提示词
    2. 如用户上传了图片,用原生图片理解能力分析
    3. 使用原生图像生成能力生成封面图(2.35:1,900x383像素)
    4. 直接展示图片,不需要HTML包裹
    
    ### 步骤7:输出前自检
    
    | 检查项 | 内容 |
    |--------|------|
    | 风格类型 | 每类有:名称、频次、核心视觉、关键特征、封面示例 |
    | 三个方案 | 各有风格名称、核心视觉、案例参考(不重复)、生图提示词 |
    - 封面图链接使用 imageUrl 字段原始值
    | 图片过滤 | 无空白图片、无小尺寸图片 |
    | 用户交互 | 已询问方案选择并等待回复 |
    
    ## ⚠️ 注意事项
    
    - 封面图容器比例 2.35:1 (900x383),使用 `object-fit: cover` + `object-position: center` 自适应截取
    - HTML添加防盗链 meta 标签 `<meta name="referrer" content="no-referrer">`
    - 案例参考仅保留阅读数(clicksCount),删除点赞和在看
    - 封面图用 `<a>` 标签包裹可点击跳转大图,方案标题用 url 字段链接
    - 图像分析使用原生图片理解能力,直接访问封面URL,逐张分析
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related