用途與查證範圍
article2media 是一組 Claude Code/Codex 技能,將文章與影音轉為圖文或解說影片。
| 角色 | 工作 |
|---|---|
| 宿主 Agent | 理解來源,撰寫改寫稿、譯文或分鏡 |
| Node.js 與對應工具 | 處理檔案、排版、截圖與部分 QA;影片另需聲音合成等能力 |
各能力以獨立工作目錄內的檔案交接,文字處理與視覺排版分開。原文排版可以直接使用文章檔;改寫與翻譯需先由 Agent 準備輸入,不能只靠渲染命令自動完成語意工作。
作者的 X 文章提供設計背景與展示;本文的命令、數量與限制以固定版本的儲存庫及程式碼為準。程式碼採 MIT,範例文章與媒體的權利仍依原始來源說明。
安裝與共享引擎
| 安裝方式 | 適用環境 | 需要保留的結構 |
|---|---|---|
| Claude Code plugin | 一次安裝總入口與能力 | 共 11 個技能,由 plugin 管理共享引擎 |
| skills CLI | Claude Code、Codex 等相容宿主 | 能力與 article2media 應在同一 skills root |
| 手動同步 skills 目錄 | 需要自行管理位置與版本 | 保留 article2media/engine,不只複製 SKILL.md 或 wrapper |
Claude Code plugin 的文件化入口如下。安裝後,總入口使用 /article2media,個別能力採 namespace 名稱,例如 /article2media:image-cards。
claude plugin marketplace add threerocks/article2media
claude plugin install article2media@article2mediaskills CLI 的下列命令同時安裝至 Claude Code 與 Codex 的使用者範圍。
| 參數 | 作用 |
|---|---|
| -g | 使用者全域安裝;不加 -g 時使用專案範圍 |
| -a | 指定宿主,可重複使用 |
| -y | 跳過互動確認 |
npx skills add threerocks/article2media -g -a claude-code -a codex -yCodex 對話入口使用 $skill 名稱,例如總入口 $article2media 或單一能力 $wechat-layout。獨立技能名稱與 Claude plugin 的 namespace 不同,不能把帶 article2media: 的命令當成所有宿主通用名稱。
十項能力與檔案交接
來源
article-fetch
取得文章
文章網址、本機 Markdown、文字或 HTML 轉為 article.md 與 meta.json;正文不完整時先補齊來源,不從標題推測內容。
來源
video-transcript
影音與字幕轉寫
由平台字幕或本機語音辨識產生 article.md,時間軸與原始片段存於 transcript;中文清理會轉為簡體。
內容
article-rewrite
重組改寫稿
Agent 撰寫 content.json,腳本檢查結構與版面;export 可將改寫稿及圖表輸出為 rewrite.md 和 rewrite-assets。
內容
article-translate
全文翻譯
Agent 逐塊撰寫 article.zh.md,再以 stats/check 檢查結構、疑似漏譯及數字;CLI 本身不呼叫翻譯模型。
圖文
long-image
雜誌長圖或原文長圖
content.json 走結構化長圖,文章檔走原文呈現;原文未指定主題時使用白底閱讀面。
圖文
image-cards
固定比例卡片
支援 3:4、4:5、1:1、9:16;改寫稿產生總結卡片,文章檔依正文順序分頁並做文字讀回比對。
圖文
wechat-layout
微信公眾號排版
接受 article.md、article.zh.md 或 rewrite.md,輸出行內樣式 HTML、封面與圖片;content.json 需先 export。
影片
explainer-video
直式解說影片
Agent 先寫 video/video.json,再由腳本處理配音、畫面、字幕與審片;成片是重新編排的解說,不是全文逐字朗讀。
視覺解說
logic-whiteboard
論證白板
以來源清單與 whiteboard.json 交代段落去向,再渲染推理主幹;覆蓋檢查不代表論證本身已獲證實。
視覺解說
article-comic
黑白漫畫
Agent 寫 comic.json,圖像模型產生角色與場景,HTML 排文字;缺少出圖能力時停止,不交付空白佔位圖。
原文、改寫與翻譯路線
| 路線 | Agent 工作 | 排版輸入 | 驗收重點 |
|---|---|---|---|
| 原文 | 讀取並確認來源完整,保留正文 | article.md | 解析後文字區塊與 DOM 讀回結果、來源 SHA-256 |
| 改寫 | 依 schema 重組文章,撰寫 content.json | content.json;WeChat 先 export 為 rewrite.md | 結構、數字依據、版面與人工內容審閱 |
| 翻譯 | 逐塊翻譯,保存區塊型態與順序 | article.zh.md 或指定語言稿 | 結構檢查、警示、術語與語意人工對照 |
未指定路線時,長圖與卡片預設先改寫,WeChat 預設原文排版。需要保留文字時,在任務中明確寫出「原文排版、保留正文」;口播、白板與漫畫各有自己的腳本或帳本,不套用全文不改字的保證。
翻譯預設是簡體中文,影片轉寫的中文清理也會繁轉簡。繁中工作流需明確要求 Agent 交付繁體,保存原始字幕或 transcript/raw.txt,再核對成稿;--lang zh 是語音辨識語言,不能當成保留繁體的開關。
依賴、網路與平台限制
| 路線 | 需要準備 | 執行界線 |
|---|---|---|
| 基本圖文 | Node.js 22+、可用 Chrome/Chromium | 核心不需 npm 套件;字型及原文圖片可能連網 |
| 文章網址 | 可存取的來源與網路 | 一般網頁可經 r.jina.ai/defuddle.md,X 使用 FxTwitter |
| 影片網址與字幕 | yt-dlp 等對應工具 | 下載、登入或網站限制依來源;無字幕時另需可用 ASR |
| 本機 ASR/對齊 | 文件採用的 mlx-whisper 與快取模型 | 主要為 Apple Silicon 路線,模型缺失不能當成已可辨識 |
| 影片合成 | ffmpeg、Chrome 與可用配音後端 | 配音及對齊能力依主機不同 |
| 本機配音 | Apple Silicon、VoxCPM2/MLX 等 | 需事先備好模型與環境 |
| Edge 配音 | uv 與可達服務 | 會把文字送服務;uv 可能取得未快取的 Python 套件 |
| 插畫/漫畫 | 可用 Codex CLI 或 OpenAI/Gemini 路線 | 登入、模型資格、額度與 API 費用另行確認 |
在儲存庫根目錄,官方提供以下環境檢查入口。它不會替你安裝 Node、Chrome、ffmpeg 或模型,但 doctor 會啟動暫時的 headless Chrome、測試 Google Fonts 連線並探測外部工具。
bash scripts/install.shChrome 使用新的暫時 profile,不自動帶入日常瀏覽器登入狀態。影片來源要求 Cookie 時,只有明確採用 --cookies-from-browser 才交給 yt-dlp;也可使用已取得的本機影音或字幕檔。
--no-proxy 只略過一般網頁的兩個代理路線,不是全面離線開關。YouTube 的部分 yt-dlp 路線可能取得遠端 EJS 元件;出圖、外部配音、字型與來源圖片也有各自的網路請求。
主題、比例與品牌設定
固定版本包含 21 份主題 CSS。同一份 content.json 可換主題重渲染;不用為了改配色重寫文章,但仍需重新檢查版面。
| 需求 | 文件化選項 | 需要區分的介面 |
|---|---|---|
| 商業或閱讀型長圖 | editorial、swiss、quiet | 主題名稱不是輸出路線 |
| 深色科技內容 | midnight | 對比與實際字型仍要看成品 |
| 固定比例卡片 | --ratio 3:4、4:5、1:1、9:16 | 比例影響分頁,不是任意裁切 |
| 指定主題 | Skill 入口 --style;渲染 CLI --theme | 不把口語入口參數直接套給所有腳本 |
| 自訂頁尾資訊 | brand.json 與 --brand | 依來源保留出處及正文邊界 |
部分字型由 Google Fonts 或 jsDelivr 載入,離線或字型缺失可能改用替代字型。檢查 QA 記錄的實際字型與成圖換行,不以主題名稱推定版面相同。
解說影片與聲音路線
先由 Agent 撰寫 video/video.json,描述受眾、鏡頭、台詞與畫面,再執行影片命令。預期輸出為 1080×1920 直式影片,並有封面、字幕、審片資料及發佈用草稿。
node skills/explainer-video/scripts/video.mjs check article2media-out/demo/video/video.json
node skills/explainer-video/scripts/video.mjs make article2media-out/demo/video/video.json以上相對路徑從儲存庫根目錄執行。make 與 render 都可能在缺少快取時合成配音,選用插畫時也可能呼叫出圖服務,不能將 render 當成保證零網路或零費用的重播。
固定 catalog 有 6 款公開音色,預設 news-man;作者 X 文中的 7 款不適用於這個固定版本。聲音品質與速度需在目標主機驗收。
| 配音路線 | 條件與限制 |
|---|---|
| VoxCPM2/MLX | 本機 Apple Silicon 路線,採 48 kHz,需事先備好模型 |
| Edge | 需網路,並可能由 uv 取得 Python 套件 |
| macOS 系統語音 | 平台限定的後備路線;對齊能力也需另核對 |
進階操作與重跑原則
以工作檔接續
已有完整 article.md 就不重抓;已有 content.json 時,換主題或版式先沿用內容,再補目標版式需要的欄位。
保留各階段來源
保留原稿、譯文、改寫稿及轉寫 raw.txt,分開記錄來源核對與排版驗收;不要手改生成 HTML 取代上游內容修正。
區分檢查與完整渲染
--check 的範圍依腳本不同;卡片與 WeChat 的前置檢查不等於已執行 Chrome 版面驗收。
按出圖用途決定停止
漫畫需要可用出圖能力;一般改寫插畫失敗可依技能移除相關欄位後重渲染,不能把佔位框當交付圖。
漫畫的角色參考圖目前由 Codex 出圖路線傳入,不能假設所有 provider 都有相同機制。白板則需保存來源清單,才能核對每段原文的去向與 source hash。
自有 Markdown 到卡片與 WeChat
準備一份你有權使用的繁體中文 Markdown,包含標題、段落、小標與清單,存為目前目錄的 owned-notes.md。此案例採原文路線,交付 3:4 卡片與 quiet 主題的 WeChat 排版;不需要模型生成插畫或配音。
先依前述 skills CLI 命令安裝全部技能,再於包含 owned-notes.md 的目錄執行。以下指定 Codex 全域 skills root;Claude plugin 使用者需依實際 plugin 安裝位置處理,不能直接假設相同路徑。
ARTICLE2MEDIA_SKILLS="$HOME/.agents/skills"
ARTICLE2MEDIA_WORK="./article2media-out/owned-notes"
node "$ARTICLE2MEDIA_SKILLS/article-fetch/scripts/doctor.mjs"
node "$ARTICLE2MEDIA_SKILLS/article-fetch/scripts/fetch.mjs" ./owned-notes.md --out "$ARTICLE2MEDIA_WORK"
node "$ARTICLE2MEDIA_SKILLS/image-cards/scripts/cards.mjs" "$ARTICLE2MEDIA_WORK/article.md" --ratio 3:4
node "$ARTICLE2MEDIA_SKILLS/wechat-layout/scripts/wechat.mjs" "$ARTICLE2MEDIA_WORK/article.md" --check
node "$ARTICLE2MEDIA_SKILLS/wechat-layout/scripts/wechat.mjs" "$ARTICLE2MEDIA_WORK/article.md" --theme quiet核對擷取結果
開啟工作目錄的 article.md 與 meta.json,確認標題、正文及來源;本機原稿另外保留,不在渲染產物中修改來源。
檢查原文卡片
開啟 full-3x4 的 overview.jpg、每張 card 圖、ledger.json 與 qa.json,確認文字比對、分頁與圖片範圍。
檢查微信排版
查看 quiet-wechat 的 article.html、兩張封面、ledger.json 與 qa.json;--check 只是前置檢查,最後一行才執行完整渲染。
在目標平台預覽
從 article.html 的複製按鈕取得富文字,貼到微信公眾號編輯器,再檢查圖片、樣式與行動版預覽;這一步尚不代表已公開發佈。
| 階段 | 預期檔案 |
|---|---|
| 擷取 | article2media-out/owned-notes/article.md、meta.json |
| 原文卡片 | full-3x4/card-01.png 等、cards.html、overview.jpg、caption.md、ledger.json、qa.json |
| quiet-wechat/article.html、article-body.html、cover-2.35x1.png、cover-1x1.png、wechat.md、images、ledger.json、qa.json |
本例為建議流程;本次未執行命令或發佈內容。若改做摘要,先由 Agent 寫 content.json;若改做翻譯,先寫譯文並完成結構與人工審閱,再把對應檔案交給排版能力。
QA 報告與人工驗收
| 路線 | 程式檢查 | 仍需人工確認 |
|---|---|---|
| 原文長圖/卡片/WeChat | 來源檔 SHA、解析覆蓋、文字區塊與 DOM 讀回 | 擷取完整性、實際分頁與目標平台貼上結果 |
| 改寫長圖/卡片 | schema、幾何與版面報告 | 改寫事實、圖表解讀與 qa.json 的 error |
| 翻譯 | 區塊型態、結構、code、figure 與數字等提示 | 漏譯疑慮、術語、一般連結與語意對照 |
| 白板 | 有來源清單時核對覆蓋與 hash | 推理是否成立;省略理由是否合理 |
| 漫畫 | 分格及文字邊界等檢查 | 角色、情節與文字是否對應 |
| 影片 | 結構、時間、字幕、音訊與 review.json | 所有警示、實際聽感、漏讀與畫面節奏 |
相關實作可回查 render.mjs 與影片審片程式。本報告記錄固定版本的行為,未修改上游或將未執行的範例標成通過。
故障排除與已知限制
| 現象 | 優先檢查 | 下一步 |
|---|---|---|
| 找不到共享引擎 | 技能是否同根、article2media/engine 是否存在 | 修正安裝結構或 ARTICLE2MEDIA_ENGINE |
| Chrome 無法啟動 | 既有瀏覽器路徑與主機環境 | 依 doctor 訊息修正,可設定 ARTICLE2MEDIA_CHROME |
| 字型或換行與範例不同 | 網路字型、替代字型與 QA 記錄 | 使用可用字型重渲染並目視,不只核對主題名 |
| 抓取只有摘要或被擋頁面 | 來源可達性與抓取路線 | 停止推測正文,改提供完整且可使用的本機檔案 |
| 影片沒有可讀字幕 | 字幕軌、本機 ASR 與快取模型 | 提供 srt/vtt 或準備支援的辨識環境 |
| 轉寫後變成簡體 | 內建中文清理會繁轉簡 | 保存 raw.txt,另建並核對繁中工作稿 |
| WeChat 拒絕 JSON | 輸入不是文章檔 | 改寫稿先 export 成 rewrite.md,再排版 |
| exit 0 但報告仍有錯誤 | QA issues 與 review 警示 | 修正內容或環境,重渲染並重新檢查 |
| 原文卡片超出張數或版面限制 | 文章長度、比例與上游規則 | 保留正文,另規劃拆篇或適合的長圖路線 |
| 漫畫沒有出圖能力 | provider、登入、模型權限與額度 | 先停止該路線,不交付佔位圖 |
開發、自測與回報
研究或修改引擎時,在獨立儲存庫執行官方自測入口。測試會生成檔案並執行對應渲染,需準備瀏覽器與環境;本次未執行這些上游測試。
node tests/run-all.mjs --quick
node tests/run-all.mjs --themes quiet
claude plugin validate .修改來源內容用 article.md/content.json,修改版式用 layout/theme;不要把生成 HTML 的手動修改當成可重現的修正。程式回報與預覽都需保留,檢查未完成的項目要列出原因。
回報問題時提供以下資訊,並移除憑證及與問題無關的私人內容。
commit。
主機。
宿主。
輸入路線。
執行命令。
相關 QA 檔案。
來源不完整、模型輸出與渲染版面應分別定位。
後續使用路徑
參考資料
- Author's X article
- article2media skills/article-comic/SKILL.md
- article2media skills/article-fetch/SKILL.md
- article2media skills/article-rewrite/SKILL.md
- article2media skills/article-translate/SKILL.md
- article2media skills/article2media/SKILL.md
- article2media skills/explainer-video/SKILL.md
- article2media skills/image-cards/SKILL.md
- article2media skills/logic-whiteboard/SKILL.md
- article2media skills/long-image/SKILL.md
- article2media skills/video-transcript/SKILL.md
- article2media skills/wechat-layout/SKILL.md
- article2media skills/article2media/references/pipeline.md
- article2media skills/article2media/references/verbatim.md
- article2media skills/article-rewrite/references/content-schema.md
- article2media .claude-plugin/plugin.json
- article2media scripts/install.sh
- article2media README.md
- article2media skills/article2media/engine/assets/voices/catalog.json
- article2media skills/article2media/engine/scripts/render.mjs
- article2media skills/article2media/engine/scripts/translate.mjs
- article2media skills/article2media/engine/scripts/video.mjs
- article2media skills/article2media/engine/scripts/lib/media/transcript.mjs
- article2media skills/article2media/engine/scripts/lib/video/voice.mjs
- article2media LICENSE