Skip to content

Releases

article2media 2.3.1:README 同步 2.3.0

Choose a tag to compare

@threerocks threerocks released this 11 Nov 17:05

只改文档:README 补齐 2.3.0 的内容。

  • 核心特性加了"改写稿和原文比对",新增"换模型也心里有数"一行,附实测结果(规则层面 Haiku 追平 Opus,读者效果约为 Opus 的 88%)。
  • 自动验收表列全了改写稿的各项检查;目录结构、路线图、英文简介同步更新。
  • 安装部分说明了在 Codex 默认沙箱里启动不了 Chrome 时怎么办。

article2media 2.3.0:改写稿和原文比对、换模型回归测试

Choose a tag to compare

@threerocks threerocks released this 11 Nov 17:00

主题是"换一个模型来驱动,效果还稳不稳"。用 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:封面多版本、品牌包、批量与效果闭环、视频片段与配乐、本地字体

Choose a tag to compare

@threerocks threerocks released this 11 Nov 08:06

这一版包含未单独发布的 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:修复口播视频字幕闪烁

Choose a tag to compare

@threerocks threerocks released this 09 Nov 15:19

用一条"内容全在两段视频里"的 X 图解帖实测 2.0 时发现并修好的问题。

  • 口播视频的字幕不再闪:成片里有的帧字幕整行消失(一条 70 秒的视频里有 79 帧),看起来就是字幕在闪。时间轴本身没问题,问题出在逐帧截图:截图开了「截取视口以外区域」,跳到新时间点后立刻截图,偶尔会截到还没绘制完的字幕层。视频帧现在只截视口内,同一条视频重截是 0 帧。
  • 审片新增「字幕丢帧」:逐帧检查成片的字幕区域,该有字幕却是空的帧会被列出来,不能通过审片。以前的「字幕闪断」只看时间轴,这类问题查不出来。
  • 删除公开音色「阳光解说男声」(sunny-narrator):听感不好,从仓库删除(含试听样音)。默认音色改为「资讯播报男声」(news-man),随包公开音色现在是 6 款。还在 video.json 里写着 sunny-narrator 的,改成别的音色或本机个人音色。
  • 抓取 X 帖子:附带的视频不再被写成图片(![图](….mp4),排版时是一张加载失败的图),改成「封面图 + ▶ 视频链接」;图片和视频混发时两者都保留;去掉正文末尾指向媒体本身的短链,其他 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 个独立能力 + 一键组合

Choose a tag to compare

@threerocks threerocks released this 09 Nov 15:19

拆成 10 个独立能力 + 一键组合。 以前只要输入是文章,所有产出都先经过"改写",排版和总结绑在一起。现在每个能力都是一个独立的 skill,可以单独用,也可以自由组装;总入口 article2media 提供常用组合。

  • 10 个能力(各自一个 skill,同一个插件里装好):

    skill 能力
    article-fetch 文章抓取(X、网页、公众号、本地文件 → article.md)
    video-transcript 视频转文字(抖音、YouTube、B 站、本地音视频、字幕 → 逐字稿)
    article-rewrite 改写(总结)→ content.json,可导出成文章 rewrite.md
    article-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 检查块数与结构是否一致、代码和图片是否原样、有没有像是没翻译的段落、比其他段短得多的段落(可能漏译)、丢掉的数字。
  • 共享引擎:所有脚本、版式、主题、音色移到 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。