Repository navigation
Releases
article2media 2.3.1:README 同步 2.3.0
只改文档:README 补齐 2.3.0 的内容。
- 核心特性加了"改写稿和原文比对",新增"换模型也心里有数"一行,附实测结果(规则层面 Haiku 追平 Opus,读者效果约为 Opus 的 88%)。
- 自动验收表列全了改写稿的各项检查;目录结构、路线图、英文简介同步更新。
- 安装部分说明了在 Codex 默认沙箱里启动不了 Chrome 时怎么办。
article2media 2.3.0:改写稿和原文比对、换模型回归测试
主题是"换一个模型来驱动,效果还稳不稳"。用 Haiku 和 Opus 各做同样 3 篇文章,对比、找差距,把能写成规则的要求都变成了脚本提示。
改写稿和原文比对(check.mjs / 出图时自动做,article.md 和 content.json 放在一起即可)
- 原文里找不到的数字逐个列出(会认四舍五入、换单位、英文月份、中文数字;note 写了"编者换算""示意"的放过)。
- 别人的文章,标题和封面写成"我"会提示;原文就是你写的,写
"voice": "self"。 - 原文写到的具体数字、反复出现的人名工具名,用上得太少会列出还没用的那些。
- 原文有配图却一张没用会提示,并说明怎么看图、选不准就别放。
- 中文里夹了没必要的英文普通词(transcript、playbook)会提示。
写作的厚度和节奏
- 正文太薄(每节不足 100 字、卡片正文不足 55 字)、数据面板太少(每两节一个)、整页卡太少、大数字和标题对不上、同一句话在两张卡上重复,都会提示。
- 清单"该避开什么"里写成了该做的事(✕ 后面意思就反了)会提示。
- 页脚和收束句里写了制作过程(没抓到什么、删了推广)会提示。
- 出卡片时没写备选标题会提示。
卡片引擎
- 一节里有原文配图时,卡片上默认放它。
- 整页卡可以和 split 合用:第一张是整页金句或大数字,第二张是这一节正常的卡,不再互相重复;整页卡会吞掉这一节的面板时给提示。
- 图表的注释紧跟内容,图框收紧到实际画出来的部分,空出来的位置自动补要点;渲染后内容只占一小半的卡会提示。
- 大字封面先缩小标题,再考虑省略导语和要点。
- 卡片张数预估会把清单分页可能多出的一张算进去,超过 18 张时提前提示。
- 只省略了图注不再算提示;出图阶段最多 2 轮,剩下的提示写进交付,不为了归零删内容。
- 页脚只在用了 AI 插画时才写"插图仅作示意";两行标题拼成一行时,中英文之间保留空格。
口播视频
- 没有改写稿时,
post.md的来源署名从原文 front matter 读取(以前是空的)。 - 时长估算按实际渲染校准,超过 80 秒提示;指南写明了画面安全区的范围。
在别的宿主上跑
- 每个 SKILL.md 说明了
${CLAUDE_SKILL_DIR}没被替换时指哪里(实测 Codex 能据此自己找到脚本)。 - 在沙箱里启动不了 Chrome、网络图片加载超时,报错会说明原因和办法。
文档
- 文档里的示例不再取自评测用的文章;补了中文文章的分页标准、不确定作者性别时怎么转述、清单不能挤掉原文的节、对比图只用于"对 vs 错"、每段 60–90 字。
评测工具与结果
- 新增
tests/eval-score.mjs(给一次"改写 → 卡片"的产出打客观分)和tests/model-eval.md(换模型回归的流程:同样的提示、3 篇文章、客观分加盲评)。 - 结果(3 篇:英文技术、中文教程、中文经验):
- 客观分:Haiku 从 Opus 的 70%–95% 提到 100% 以上,规则层面都能守住。
- 盲评(另一个模型不知道哪组是谁做的,三轮、换位):Haiku 是 Opus 的 85%–91%,平均约 88%。剩下的差距在理解:漏掉原文核心方法、混淆相近的数字、配图放错节、卡片标题和正文各说一件事。这部分规则补不上,重要内容建议用更强的模型。
article2media 2.2.0:封面多版本、品牌包、批量与效果闭环、视频片段与配乐、本地字体
这一版包含未单独发布的 2.1.0。升级后请留意两处默认行为的变化:长图默认是 1080 宽的手机单栏版(原来的 1200 双栏杂志版用 --wide);卡片封面默认是大字钩子版式(原来的目录封面用 "style": "toc")。
2.2.0
重心从"出图"移到"发出去并且有效果":封面可以比、品牌认得出、内容能批量做、数据能记下来;同时补齐视频的画面和声音,以及字体、出图服务这些底座。
封面、品牌与轻量形态
- 封面多版本:
cards.mjs content.json --covers只出封面,每个版本一张。不写cover.alts时按能用的版式各出一张;写了就按备选逐个出(不同的标题钩子、不同的版式),供挑选或分开发布比效果。 - 品牌包:
brand.json新增avatar(头像)、accent(品牌色)、issue(期号,content.json的issue或--issue覆盖)、tagline、follow。封面左上角显示头像、名字和期号,末张多一个品牌栏,长图页眉带期号、页脚带头像;品牌色替换主题的第一个主色。作者就是品牌本人时,页脚不再重复署名。 - 三种轻量形态(
--form):onepage一页看完(标题加最多 9 条要点)、quotes金句图(每句一张)、qa问答卡(对话气泡,自动分张)。都从同一份 content.json 切出来。 - 中文和英文、数字之间自动留出细缝(
text-autospace),不用在文字里手打空格。
批量与效果闭环
- 新增批量流水线:
batch.mjs init <links.txt | 链接…> --spec "cards:3:4,long,wechat"一次抓取多篇,生成队列queue.json和看板queue.md;next给出下一条内容和确切的下一步,status每次从磁盘重新计算状态;已抓过的链接自动跳过,视频链接记为待转写,抓取失败、正文偏短或疑似付费墙的条目单独列出等用户确认。 - 新增发布清单:
batch.mjs checklist <批次 | 工作目录>为每篇写publish.md——各平台的上传顺序、封面、标题候选、正文、标签,并检查平台硬性限制(小红书标题 ≤ 20、正文 ≤ 1000、图 ≤ 18;公众号标题 ≤ 64、摘要 ≤ 120)。 - content.json 新增可选字段
publish.titles(每个平台 3 个备选标题),发布清单里列出供挑选。 - 新增效果闭环:
stats.mjs add把每次发布(平台、链接、形式、主题、封面版式、张数、标题自动识别)和历次数据快照记进工作目录的publish.json;stats.mjs report跨所有内容按平台对比主题、封面版式、形式的中位数、最高值、收藏率和互动率,写出stats-report.md,样本不足 5 条的组明确标注「仅供参考」。 - 主题选择指南新增第 4 步:某主题或封面版式在目标平台有 ≥ 5 条数据时,只用于在两个同样合适的选项之间做裁决,并在交付时说明;不覆盖用户明确的偏好。
- 入口 skill 新增「批量」组合和「发布之后」说明;交付时提示"发布后把数据告诉我"。
口播视频
- 镜头可以放原视频片段(
clip:top/bottom/full三个位置,默认静音,audio: true时原声轻垫在旁白下);片段先切成帧再逐帧合成,比镜头短时停在最后一帧。 - 支持用户提供的背景音乐(
music):自动循环或截断、淡入淡出,旁白说话时压低;音乐在旁白定好响度之后才加入,旁白响度不变。不自带、不生成、不下载音乐。 - 新增转场
transition(cut/fade/slide/push,可全片或单镜设置);不写仍是原来的上移淡出,时间轴和字幕不变。 check会校验片段、配乐、转场(未知取值、文件不存在、end ≤ start);片段写成 meta.json 里的视频地址但未下载时给出下载命令,不自动下载。- 修复:首次渲染(字体缓存为空)时新出现的字幕可能空白几帧、导致「字幕丢帧」报错。
- 审片与 post.md:报告配乐响度和加配乐后的成片响度,提醒确认片段和音乐的使用权。
字体与出图
- 新增
fonts.mjs:一条命令把全部主题和版式用到的网络字体(Google Fonts、jsDelivr,约 65 MB)下载到本地缓存,支持--theme、--mirror镜像、--list、--clean;之后出图不再依赖网络,出图过程本身从不下载。 - 所有版式在加载页面时自动改用本地字体;没有装的字体仍按原来的方式联网加载。装了本地字体后每次出图使用独立的浏览器缓存,可以同时跑多个出图任务。
- 字体检查按字体家族报告:哪个字体没加载、哪个只加载了一部分都会提示,不再静默回退。
- 出图模型和服务可配置:
ARTICLE2MEDIA_IMAGE_MODEL_CODEX|OPENAI|GEMINI、ARTICLE2MEDIA_IMAGE_PROVIDER、~/.config/article2media/config.json;默认值只保留一处。 - 出图自动换服务:选中的服务因登录、额度或不可用失败时改用下一个可用的并说明;内容被拒绝时直接报告,不换服务。没登录的 Codex CLI 不再挡住可用的 OpenAI / Gemini key。
- 漫画的角色参考图在 OpenAI(images/edits)和 Gemini(内联图片)上也生效。
- 出图比例按服务取最接近的尺寸(9:16、3:4、4:5、16:9 等),提示裁切量并让模型把主体留在保留区域内;Codex 竖图以前实际出的是横图:现在把画幅写进提示词第一行,并检查返回图片的方向,不对就报错重试。
doctor显示本地字体安装情况,以及当前生效的出图服务和模型。
修复与测试
- 目录版封面(
toc)的卡片类名和目录面板撞名,导致封面多了圆角和内边距:已改名。 - brutal 封面的荧光块不再压住上一行标题;手机长图里大数字图表的面板不再留空。
- 新增
tests/visual.mjs视觉回归(像素对比、差异图、--update更新基线)和tests/unit.mjs离线单元检查;run-all.mjs新增封面多版本、轻量形态、品牌包、批量、发布清单、发布记录、视频片段与配乐校验。
2.1.0
一次整体检查之后的升级:先把"第一眼"做好(封面、卡片节奏、手机上的可读性),再清掉实测里攒下的问题。
封面与卡片
- 6 种封面版式(
cover.style):hook大字钩子(默认,标题放到最大,底部主色带里放导语和要点)、number大数字、versus左右对比、quote一句论断、image插画通栏、toc目录(原来的样子)。小红书首图和公众号头图共用。 - 3 种整页卡型(
card.style):quote整张主色底的一句金句、number一个大数字加解释、image图占满整张卡。十几张卡不再张张同一个结构;内容卡达到 6 张而没有整页卡时,校验会提示。 - 卡片自己把空间用满:图按实际画出来的内容放大,短的对比图不再悬在一个空框中间;还有余量时先放大字号,再补进这一节的要点,剩下的均匀分到各块之间。
- 清单卡不再半空:分页按略宽的预算打包,实测溢出再回退;有余量的清单卡、要点卡同样放大字号。
- 公众号头图右侧不再留白:每套主题有自己的装饰。
长图
- 默认改为手机版:单栏、1080 px 宽,正文在手机上不用放大就能读;图表一行一张、按内容收紧高度。原来的 1200 px 双栏杂志版用
--wide(或--layout magazine)。页面超过 16000 px 时自动降低输出倍数并提示拆页。
主题
- 主推 12 套:
editorial、swiss、quiet、bento、brutal、dopamine、midnight、film、guochao、shanshui、notebook、y2k。每套有自己的封面装饰、导语区和金句卡画法,缩略图里就能分辨。 - 9 套转为经典主题(
cloud、earth、memo、glass、collage、pop、pixel、prosperity、riso):文件保留,--theme <名称>照常能用,--theme legacy一次出全部;--list、--theme all、测试矩阵和选主题指南只包含主推的 12 套(engine/themes/catalog.json)。 - 选主题指南按 12 套重写;自媒体运营、涨粉、副业这类题材首选
brutal,生活方式与健康养生首选dopamine。
口播视频
- 镜头插画进入画面:
illustration生成的图以前只用在封面,现在显示在镜头里,illustration_place选top(内容上方)或bottom(字幕下方通栏)。 - 旁白语速按"字"计:英文单词按音节算,缩写按字母算,含英文的句子不再被误判过快而拉伸;配音质检比对英文不分大小写。
- 字幕断行按显示宽度切,不再切开英文单词和数字;
1,935、10:30保持完整。 - 字幕丢帧现在让
video.mjs以非零码退出;其余审片项仍是提示。 number镜头的角标按badge_cue出现,可以早于数字;计数器支持小数(0 → 4.5)。
修复
- 白板加主题后主干、圆点、标签消失:修复变量自引用;单强调色主题(quiet、swiss)的三种角色色不再重合,深色主题的节点底色和标签文字可读。
content.json的theme接受wechat键,和文档一致。- 长漫画超长时在分格之间分成多张(
comic-01.png…)。 - 不再隐式下载:edge-tts 只在已装好时启用,否则给出安装命令;yt-dlp 的远程 JS 组件改为显式开启(
ARTICLE2MEDIA_YTDLP_REMOTE_EJS=1)。 - 修复 edge-tts 音色名为空、Gemini 零额度不提前停止;
install.sh输出网络字体检查结果。 - 测试矩阵新增宽版长图、带主题的白板和原文长图。
article2media 2.0.1:修复口播视频字幕闪烁
用一条"内容全在两段视频里"的 X 图解帖实测 2.0 时发现并修好的问题。
- 口播视频的字幕不再闪:成片里有的帧字幕整行消失(一条 70 秒的视频里有 79 帧),看起来就是字幕在闪。时间轴本身没问题,问题出在逐帧截图:截图开了「截取视口以外区域」,跳到新时间点后立刻截图,偶尔会截到还没绘制完的字幕层。视频帧现在只截视口内,同一条视频重截是 0 帧。
- 审片新增「字幕丢帧」:逐帧检查成片的字幕区域,该有字幕却是空的帧会被列出来,不能通过审片。以前的「字幕闪断」只看时间轴,这类问题查不出来。
- 删除公开音色「阳光解说男声」(
sunny-narrator):听感不好,从仓库删除(含试听样音)。默认音色改为「资讯播报男声」(news-man),随包公开音色现在是 6 款。还在 video.json 里写着sunny-narrator的,改成别的音色或本机个人音色。 - 抓取 X 帖子:附带的视频不再被写成图片(
,排版时是一张加载失败的图),改成「封面图 + ▶ 视频链接」;图片和视频混发时两者都保留;去掉正文末尾指向媒体本身的短链,其他 t.co 链接展开成原地址;标题就是首行时,正文不再重复这一行。 - 内容在图 / 视频里时会提示:正文不到 300 字又带图或视频,抓取会提示先看画面,把画面文字整理进
article.md(article-fetch 的 SKILL.md 写了做法)。 - 本地图片路径:改写稿的
image图、白板步骤配图、口播视频的图片,都可以用相对路径(分别相对content.json、whiteboard.json、video.json)。以前只有网络地址可靠,相对路径会悄悄变成一张加载失败的图;文件不存在时现在直接报错。 - 公众号排版提示视频链接:正文里指向视频文件的链接在公众号里点不开,现在会提示,并在
wechat.md的发布步骤里列出视频地址,提醒在编辑器里手动插入视频。 - 配音质检少一类误报:识别把同音词换成常见写法(俯仰 → 抚养、推镜 → 推进)时,不再判成「末字可能没读出」;只有识别结果确实比原文短才报。
安装 / 更新
claude plugin marketplace add threerocks/article2media
claude plugin install article2media@article2media已经装过插件的,更新插件即可。完整更新记录见 CHANGELOG.md。
article2media 2.0.0:10 个独立能力 + 一键组合
拆成 10 个独立能力 + 一键组合。 以前只要输入是文章,所有产出都先经过"改写",排版和总结绑在一起。现在每个能力都是一个独立的 skill,可以单独用,也可以自由组装;总入口 article2media 提供常用组合。
-
10 个能力(各自一个 skill,同一个插件里装好):
skill 能力 article-fetch文章抓取(X、网页、公众号、本地文件 → article.md)video-transcript视频转文字(抖音、YouTube、B 站、本地音视频、字幕 → 逐字稿) article-rewrite改写(总结)→ content.json,可导出成文章rewrite.mdarticle-translate全文翻译 → article.zh.md(新)long-image长图:改写稿 → 杂志长图;文章 → 原文长图 image-cards卡片:改写稿 → 总结卡片;文章 → 原文卡片(新) wechat-layout公众号排版:只接受文章(原文、译文或 rewrite.md)(新)explainer-video口播视频 logic-whiteboard白板论证 article-comic漫画 -
推荐组合(总入口
/article2media):总结长图(默认)、小红书总结、公众号排版、公众号总结、外文搬运、原文长图、原文卡片、视频转图文、视频转文字、一稿多发、文章转口播、白板 / 漫画。表里没有的组合也可以直接说("先翻译,再出原文卡片")。 -
原文还是改写,统一一张默认表(
article2media/references/pipeline.md):说"排版 / 原文 / 一字不改"走原文,说"总结 / 提炼"走改写,都没说时长图和卡片默认改写、公众号默认原文排版,外文走原文路径时先翻译。无论从哪个 skill 进来,判断都一样。 -
新能力:
- 公众号排版(原文):任何 Markdown 文章直接排成可粘贴的公众号图文。正文一字不改,逐块读回校验(换行写成
<br>,代码缩进写成不换行空格,列表写成带标记的段落);原文配图下载后内嵌;文章标题进公众号标题栏,不在正文重复;--title、--digest、--cover-title、--hero控制发布信息和封面。 - 公众号总结:改写稿先用
export.mjs导出成rewrite.md(图表按主题截成 3 倍图,面板变成带标题的列表或引用,金句变成引用),再交给公众号排版。旧的"content.json 直接排公众号"版式去掉了。 - 原文卡片:整篇文章按顺序分页成 3:4 / 4:5 / 1:1 / 9:16 卡片。放不下的段落在行与行之间断开、下一张接上;列表在项间、表格在行间断开(下一张重复表头);小标题不落单;封面是标题、作者和"全文 N 张"。全文校验把跨卡的两截拼起来比对。
- 全文翻译:模型逐块翻译,
translate.mjs check检查块数与结构是否一致、代码和图片是否原样、有没有像是没翻译的段落、比其他段短得多的段落(可能漏译)、丢掉的数字。
- 公众号排版(原文):任何 Markdown 文章直接排成可粘贴的公众号图文。正文一字不改,逐块读回校验(换行写成
-
共享引擎:所有脚本、版式、主题、音色移到
skills/article2media/engine/;各 skill 的scripts/只是指向引擎的薄入口(cards.mjs、wechat.mjs、transcribe.mjs……),用法提示用各自的名字。单独拷走一个 skill、旁边没有 article2media 时会明确提示要一起安装。fetch.mjs --kind article|video让文章抓取和视频转文字各管各的。 -
其他:
- 原文解析支持
####四级标题;front matter 的值按 JSON 字符串解码(\n、引号)。 - 公众号内联样式会保留列表标记的宽度,悬挂缩进对齐。
- 公众号封面标题没有手动断行时,可以折成 3 行(1:1 封面 4 行),不再为挤进一行缩成小字;标题超过 24 字会提示用
--cover-title另写。 - 修复:原文长图用深色主题(如
midnight)时正文是深色字压在深色底上——主题映射把--ink、--muted写成了引用自身。现在从主题继承;浅色主色的主题(brutal、pop、memo)在原文版式里改用主题提供的深色强调色。 - 原文长图、原文卡片新增正文对比度检查(WCAG,低于 4.5:1 报错)。
doctor.mjs的出图能力检查改为和出图脚本一致(Codex CLI → OpenAI → Gemini)。- 自测新增:11 个 skill 的结构与版本一致、所有
${CLAUDE_SKILL_DIR}路径存在、入口脚本都指向引擎、抓取与转写互不越界、导出与公众号总结、公众号原文排版、原文卡片(跨卡断段)、翻译检查;渲染矩阵的公众号一列改为"导出 → 公众号排版"。
- 原文解析支持
-
升级:
- 插件用户更新插件即可。
- 手动安装或用 skills CLI 安装的,要装上全部 11 个 skill(至少
article2media加上要用的能力)。 - 脚本路径变了:以前的
skills/article2media/scripts/render.mjs现在是skills/article2media/engine/scripts/render.mjs,或用各 skill 自己的入口。
安装 / 更新
claude plugin marketplace add threerocks/article2media
claude plugin install article2media@article2media已经装过插件的,更新插件即可。完整更新记录见 CHANGELOG.md。