关于 creator
creator 是用于制作平台定制内容包的技能,可从主题、网址、文本或媒体素材生成内容。它协调写作与媒体生成流程,支持微信公众号、小红书和口播,并提供风格配置与执行前确认。
主要功能
- 01支持微信公众号、小红书和口播模板
- 02从主题、网址、文本或媒体生成内容
- 03协调写作与媒体生成流程
- 04提取参考风格并保存偏好
- 05执行流程前要求确认
适用场景
- 01将主题改写为带插图的公众号文章
- 02把素材转为小红书内容
- 03根据文本或媒体制作口播稿
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ marswaveai/ skills --skill creator安装后在 Claude Code 中输入/creator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
templates/narration/methodology.mdscript-prototypes.mdstyle.mdtemplate.mdtemplates/narration/references/style-examples.mdtemplates/wechat/article-prototypes.mdmethodology.mdstyle.mdtemplate.mdtemplates/wechat/presets/flat.mdphoto-realistic.mdwatercolor.mdtemplates/wechat/references/style-examples.mdtemplates/xiaohongshu/content-prototypes.mdmethodology.mdstyle.mdtemplate.mdtemplates/xiaohongshu/presets/bold.mdchalkboard.mdcute.mdfresh.mdminimal.mdnotion.mdpop.mdretro.mdstudy-notes.mdwarm.mdtemplates/xiaohongshu/references/style-examples.mdwriting-engine/ai-human-boundary.mdforbidden-words.md详细介绍
适用场景
- 用户想要为特定平台制作完整的内容包(微信公众号文章、小红书笔记、口播稿)
- 用户说“帮我写篇公众号”“小红书图文”“口播稿”或“创作内容”
- 用户提供 URL、文本或主题,并希望将其整理成配有图片、适合发布到平台的内容
不适用场景
- 用户只想要一张图片,不需要内容工作流 → 直接使用 image-gen
- 用户只想要一段 TTS 音频 → 直接使用 tts
- 用户想要转录音频 → 直接使用 asr
- 用户想要制作播客单集 → 直接使用 podcast
- 用户想从 URL 提取内容,不需要进一步处理 → 直接使用 content-parser
Creator 用于多步骤内容制作,将写作与媒体生成结合起来,产出适合发布到平台的内容包。
目的
通过编排现有技能,生成针对不同平台的内容包。输入:主题、URL、文本或音频/视频文件。输出:包含文章/脚本、图片和元数据的文件夹,可直接发布。
硬性约束
- 使用
listenhubCLI 命令进行 image-gen 和 TTS。使用 curl 调用 content-parser(参见content-parser/SKILL.md§ API Reference)。 - 每次交互前,始终按照
shared/config-pattern.md读取配置 - 按照
shared/cli-patterns.md处理轮询、错误和交互模式 - 切勿将文件保存到
~/Downloads/或.listenhub/;将内容包保存到当前工作目录 - 解析 JSON:只能使用
jq(不能使用 python3、awk)
步骤 -1:API 密钥检查
暂缓检查。仅当工作流需要远程 API 调用时,才在确认环节(步骤 4)检查 API 密钥。参见上文的硬性约束。
步骤 0:配置设置
按照 shared/config-pattern.md 步骤 0(零提问启动)。
如果文件不存在——静默使用默认值创建文件并继续:
mkdir -p ".listenhub/creator" ".listenhub/creator/styles"
cat > ".listenhub/creator/config.json" << 'EOF'
{"outputMode":"download","language":null,"preferences":{"wechat":{"history":[]},"xiaohongshu":{"mode":"both","history":[]},"narration":{"defaultSpeaker":null,"history":[]}}}
EOF
CONFIG_PATH=".listenhub/creator/config.json"
CONFIG=$(cat "$CONFIG_PATH")
用户风格偏好以 Markdown 文件的形式存储在 .listenhub/creator/styles/ 中:
.listenhub/creator/styles/wechat.md.listenhub/creator/styles/xiaohongshu.md.listenhub/creator/styles/narration.md
这些文件是纯 Markdown,每行一条指示。如果文件不存在,则不应用自定义风格。用户可以直接编辑这些文件。
注意:outputMode 默认为 "download"(而非通常使用的 "inline"),因为 creator 始终会生成必须保存到磁盘的多文件输出文件夹。
如果文件存在——静默读取配置并继续:
CONFIG_PATH=".listenhub/creator/config.json"
[ ! -f "$CONFIG_PATH" ] && CONFIG_PATH="$HOME/.listenhub/creator/config.json"
CONFIG=$(cat "$CONFIG_PATH")
设置流程(仅限用户主动要求重新配置)
仅当用户明确要求重新配置时才执行。显示当前设置:
当前配置 (creator):
输出方式:{outputMode}
小红书模式:{both / cards / long-text}
询问:
- outputMode:遵循
shared/output-mode.md§ Setup Flow Question。 - xiaohongshu.mode:“小红书默认模式?”
- “图文 + 长文(both)”
- “仅图文卡片(cards)”
- “仅长文(long-text)”
交互流程
步骤 1:理解输入
用户会连同请求一起提供输入。请对输入进行分类:
| 输入类型 | 检测方式 | 自动操作 |
|---|---|---|
| URL(网页/文章) | 以 http(s):// 开头,且不是音频/视频 URL | 将调用 content-parser(需要 API 密钥) |
| URL(音频/视频) | 扩展名为 .mp3/.mp4/.wav/.m4a/.webm,或域名为 youtube.com/bilibili.com/douyin.com | 将下载文件并调用 coli asr 转录 |
| 本地音频文件 | 文件路径存在,且扩展名为音频/视频格式 | 将直接调用 coli asr |
| 本地文本文件 | 文件路径存在,且扩展名为 .txt/.md/.json | 读取文件内容 |
| 原始文本 | 多行或超过 50 个字符,且不是 URL/路径 | 直接用作素材 |
| 主题/关键词 | 短文本(少于 50 个字符),且不符合 URL/路径格式 | AI 从头创作 |
风格参考检测:如果用户的提示词包含“参考”“风格”“照着…写”“style”“reference”等关键词,则应将相关输入(文件路径/URL/粘贴的文本)归类为风格参考,而非内容素材。单个请求可以同时包含素材和风格参考,请分别分类。如果只提供了风格参考,没有素材或主题,则属于独立的风格学习请求(参见步骤 2.5)。
对于 URL(音频/视频)输入:
- 使用
curl -L -o下载到/tmp/creator-{slug}.{ext} - 检查是否有
coli:which coli 2>/dev/null && echo yes || echo no - 如果缺少
coli:告知用户安装(npm install -g @marswave/coli),并请用户改为粘贴文本 - 转录:
coli asr -j --model sensevoice "/tmp/creator-{slug}.{ext}" - 从 JSON 结果中提取文本
- 清理文件:
rm "/tmp/creator-{slug}.{ext}"
对于 URL(网页/文章)输入: 将在工作流执行期间(确认后)调用 Content-parser。
步骤 2:匹配模板
如果用户在提示词中指定了平台,请直接匹配:
- “公众号”“wechat”“微信” → wechat
- “小红书”“xiaohongshu”“xhs” → xiaohongshu
- “口播”“narration”“脚本” → narration
如果未指定平台,请通过 AskUserQuestion 提问:
问题:“Which content template?” / “用哪个创作模板?” 选项(根据用户的输入调整语言):
- “WeChat article (公众号长文)” — 带 AI 插图的长篇文章
- “Xiaohongshu (小红书)” — 图片卡片 + 长文帖子
- “Narration script (口播稿)” — 可选配音的口播稿
步骤 2.5:主题辅助
仅当用户的输入是主题或关键词(少于 50 个字符的短文本)时才执行此步骤。如果用户提供了 URL、文件或较长的文本,则跳过。
-
阅读所选平台的
methodology.md:- WeChat:
creator/templates/wechat/methodology.md - Xiaohongshu:
creator/templates/xiaohongshu/methodology.md - Narration:
creator/templates/narration/methodology.md
- WeChat:
-
使用三圈维恩模型评估主题:
- 用户的专业领域(创作者的专长)
- 读者的普遍兴趣(读者兴趣)
- 当下的时间节点(当前时机/相关性)
-
运行 HKR 质量筛选:
- H(Happy):足够有趣、有悬念?
- K(Knowledge):有信息量?看完能学到新东西?
- R(Resonance):能戳中情绪?让人觉得“对对对,我也这么想”?
-
如果主题符合 3 项 HKR 标准中的至少 2 项:继续使用该主题。
-
如果主题符合的标准少于 2 项:通过 AskUserQuestion 主动向用户建议 2-3 个替代角度。
-
如果主题比较模糊:请用户补充具体信息——关键要点、个人经历,以及让他们感到兴奋或沮丧的事情。
第 3 步:风格提取(如果提供了风格参考)
仅当用户在第 1 步提供了风格参考时,才运行此步骤。如果未检测到风格参考,则跳至第 3b 步。
阅读参考内容:
- 本地文件 → Read 工具
- URL → content-parser API(需要 API key)
- 粘贴的文本 → 直接使用
分析并提取风格指引:
AI 阅读参考内容并提取 3-5 条具体的风格指引。重点关注可观察到的特征:
- 句子长度和段落结构
- 语气和语域(正式/随意、第一/第三人称)
- 修辞手法的使用(提问、列表、加粗、引语)
- 词汇难度和领域术语
- 格式习惯(标题风格、表情符号使用、空白)
呈现给用户确认:
从参考文章中提炼了以下风格特征:
1. {directive 1}
2. {directive 2}
3. {directive 3}
...
你可以修改或删除其中的条目。确认后本次生成会应用这些规则。
等待用户确认。确认后的指引将成为 sessionStyle,仅应用于本次生成。
用户确认风格指引后,主动询问是否要保存:
要将这些风格规则保存吗?(保存后每次生成{platform}内容都会应用)
如果是 → 写入 .listenhub/creator/styles/{platform}.md。如果否 → 仅应用于本次生成。
独立风格学习:如果用户只提供了风格参考,没有提供素材/主题(例如“学习一下这篇文章的风格”),则运行上述提取流程,然后直接保存到 .listenhub/creator/styles/{platform}.md,无需询问——用户已明确表示要保存。用简短消息确认:“已保存到 styles/{platform}.md”。不要继续生成内容。
第 3a 步:原型分类
读取所选平台的原型文件:
- WeChat:
creator/templates/wechat/article-prototypes.md - Xiaohongshu:
creator/templates/xiaohongshu/content-prototypes.md - Narration:
creator/templates/narration/script-prototypes.md
根据用户提供的素材/主题,使用原型文件中的匹配规则表,自动匹配最合适的原型。
通过 AskUserQuestion 向用户展示推荐:
问题:“这篇内容最适合哪种写法?” / “Which content prototype fits best?” 选项:[列出该平台的所有原型,将推荐项置于首位,并添加“(Recommended)”后缀]
所选原型决定写作时采用的叙事结构和 L3-5 审阅标准。
第 3b 步:预设选择(如适用)
如果所选模板使用插图或卡片预设,且模式需要图片,则必须在确认关卡之前选好预设,以便在摘要中展示。
以下情况完全跳过此步骤:
- Narration 模板(没有视觉预设)
preferences.xiaohongshu.mode为"long-text"的 Xiaohongshu(不会生成卡片或图片)
否则:
- 阅读模板的预设部分,获取可用预设和主题匹配表。
- 如果用户已在提示中指定预设(例如“用水彩风格”):直接使用该预设。
- 如果未指定:通过 AskUserQuestion 询问用户。先输出一行提示:“配图风格可以随时换,先选一个开始吧”。列出所有可用预设及其中文标签(来自 frontmatter 的
label字段)。使用主题匹配表,将最相关的选项置于首位(标记为“Recommended”),但始终让用户自行选择。
第 4 步:确认关卡
如果流程需要远程 API,则检查 API key:
- WeChat 模板始终需要 image-gen → 需要 API key
- Xiaohongshu 卡片模式需要 image-gen → 需要 API key
- 仅 Xiaohongshu 长文本 → 无需 API key
- 不使用 TTS 的 Narration → 无需 API key
- 网页/文章 URL 输入 → 需要 content-parser → 需要 API key(音频/视频 URL 使用本地
coli asr,无需 API key)
如果需要 API key 但尚未配置:对于基于 CLI 的调用,运行 listenhub auth login。对于 content-parser 调用,配置 LISTENHUB_API_KEY(参见 content-parser/SKILL.md § Authentication)。
展示确认摘要:
准备生成内容:
模板:{WeChat article / Xiaohongshu / Narration}
输入:{topic description / URL / text excerpt...}
输出目录:{slug}-{platform}/
需要 API 调用:{content-parser, image-gen, ...}
风格偏好:{styles/{platform}.md 已配置 / 使用默认风格}
配图/卡片预设:{preset label / 不适用}
文章/内容原型:{selected prototype name}
本次风格参考:{M条来自参考文章 / 无}
确认开始?
等待用户明确回复“是”或确认后再继续。
第 5 步:执行工作流
读取选定的模板文件并执行:
# The template file path
TEMPLATE="creator/templates/$PLATFORM/template.md"
STYLE="creator/templates/$PLATFORM/style.md"
对于 URL 输入——先提取内容:
# Submit content extraction
RESPONSE=$(curl -sS -X POST "https://api.marswave.ai/openapi/v1/content/extract" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Source: skills" \
-d "{\"source\":{\"type\":\"url\",\"uri\":\"$INPUT_URL\"}}")
TASK_ID=$(echo "$RESPONSE" | jq -r '.data.taskId')
然后在后台轮询。将其作为单独的 Bash 调用运行,并设置 run_in_background: true 和 timeout: 600000(参见 shared/cli-patterns.md)。轮询循环本身最长运行 300 秒(轮询 60 次,每次间隔 5 秒);工具级别的 timeout: 600000 设置得更长,为 Bash 进程留出超出轮询时限的缓冲时间:
# Run with: run_in_background: true, timeout: 600000
TASK_ID="<id>"
for i in $(seq 1 60); do
RESULT=$(curl -sS "https://api.marswave.ai/openapi/v1/content/extract/$TASK_ID" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "X-Source: skills" 2>/dev/null)
STATUS=$(echo "$RESULT" | tr -d '\000-\037\177' | jq -r '.data.status // "processing"')
case "$STATUS" in
completed) echo "$RESULT"; exit 0 ;;
failed) echo "FAILED: $RESULT" >&2; exit 1 ;;
*) sleep 5 ;;
esac
done
echo "TIMEOUT" >&2; exit 2
提取内容:MATERIAL=$(echo "$RESULT" | jq -r '.data.data.content')
如果提取失败:告知用户“URL 解析失败,你可以直接粘贴文字内容给我”,然后停止。
然后遵循平台模板——读取 template.md 并执行其中的每个步骤。模板会指定准确的写作说明和 API 调用。模板内容见 creator/templates/{platform}/template.md。
写作引擎集成: 现在,每个平台的 template.md 都包含写作引擎参考和自我审查循环。模板负责加载 writing-engine/ 文件、应用所选原型的叙事结构,并在写作后执行 L1-L4 质量审查。详情请参见各平台的 template.md。
风格应用: 写作时,按以下优先级顺序应用风格指令(优先级高的覆盖优先级低的):
sessionStyle——当前风格参考(第 3 步)中的指令(如果有).listenhub/creator/styles/{platform}.md——已保存的用户风格指令(如果文件存在)templates/{platform}/style.md——平台的基准风格
对于图像生成(由 wechat 和 xiaohongshu 模板调用):
RESPONSE=$(listenhub image create \
--prompt "<generated prompt>" \
--aspect-ratio "<ratio>" \
--json)
BASE64_DATA=$(echo "$RESPONSE" | jq -r '.candidates[0].content.parts[0].inlineData.data // .data')
# macOS uses -D, Linux uses -d (detect platform)
if [[ "$(uname)" == "Darwin" ]]; then
echo "$BASE64_DATA" | base64 -D > "{output-path}/{filename}.jpg"
else
echo "$BASE64_DATA" | base64 -d > "{output-path}/{filename}.jpg"
fi
遇到 429 时:采用指数退避(等待 15 秒 → 30 秒 → 60 秒),最多重试 3 次。重试后仍失败:跳过这张图,并在输出摘要中注明。
按顺序生成图像(不要并行生成),以遵守速率限制。
对于 TTS(当用户需要音频时,由 narration 模板调用):
listenhub tts create --text "$(cat /tmp/lh-content.txt)" --speaker "$SPEAKER_ID" --json \
| jq -r '.data' | base64 -D > "{slug}-narration/audio.mp3"
第 6 步:整理输出
创建输出文件夹并写入所有文件:
SLUG="{topic-slug}"
OUTPUT_DIR="${SLUG}-{platform}"
# Dedup folder name
i=2; while [ -d "$OUTPUT_DIR" ]; do OUTPUT_DIR="${SLUG}-{platform}-${i}"; i=$((i+1)); done
mkdir -p "$OUTPUT_DIR"
按模板规范写入内容文件。然后写入 meta.json:
{
"title": "...",
"slug": "...",
"platform": "wechat|xiaohongshu|narration",
"date": "YYYY-MM-DD",
"tags": ["...", "..."],
"summary": "..."
}
第 7 步:呈现结果
✅ 内容已生成!保存在 {OUTPUT_DIR}/
📄 {main files list}
🖼️ images/ — N 张配图(如有)
📋 meta.json — 标题、标签、摘要
(根据硬性约束,将语言调整为与用户输入语言一致。)
第 8 步:更新偏好设置
将本次生成记录到历史记录中:
NEW_CONFIG=$(echo "$CONFIG" | jq \
--arg platform "$PLATFORM" \
--arg date "$(date +%Y-%m-%d)" \
--arg topic "$TOPIC" \
'.preferences[$platform].history = (.preferences[$platform].history + [{"date": $date, "topic": $topic}])[-5:]')
echo "$NEW_CONFIG" > "$CONFIG_PATH"
每个平台仅保留最近 5 条历史记录。
注意:规范中的 cardStyle 暂不处理——V1 配置中尚未实现。之后如需自定义卡片样式,可再添加。
手动调整风格
添加风格指令:
如果用户说“记住:{style directive}”或“remember: {style directive}”:
- 判断适用的平台(根据上下文判断,或询问用户)
- 将该指令作为新的一行追加到
.listenhub/creator/styles/{platform}.md(如果文件不存在,则创建)
第 3 步(风格提取)后也适用此规则:如果用户查看提取出的指令后说“记住这个风格”,则将所有已确认的指令写入 .listenhub/creator/styles/{platform}.md。
重置风格:
如果用户说“重置风格偏好”或“reset style”:
- 询问适用的平台(或询问是否重置所有平台)
- 删除
.listenhub/creator/styles/{platform}.md
API 参考
- 身份验证:
shared/cli-authentication.md - 图像生成:CLI:
listenhub image create(参见shared/cli-patterns.md) - 内容提取:
content-parser/SKILL.md§ API 参考(内联) - TTS(文本转语音):CLI:
listenhub tts create(参见shared/cli-patterns.md) - 说话人选择:
shared/speaker-selection.md - 配置模式:
shared/config-pattern.md - 常见模式(轮询、错误):
shared/cli-patterns.md - 输出模式:
shared/output-mode.md
组合性
- 调用:content-parser(URL 提取)、image-gen(插图/卡片)、tts(旁白音频)、asr(通过
coli转录音频/视频) - 由其调用:独立使用 — 用户直接触发
- 模板:
creator/templates/{wechat,xiaohongshu,narration}/template.md定义各平台的工作流 - 风格指南:
creator/templates/{wechat,xiaohongshu,narration}/style.md定义各平台的写作风格