← All skills
article2media
65 / 100 · Review before installing
Check before installing. Some of what it can do is expected: a media skill usually calls an AI service over the internet.
By threerocks/article2media (GitHub) · media · 54 stars · scanned at commit 5e752be
把文章或视频一键做成中文视觉内容的总入口:按推荐组合把 10 个可单独使用的能力串起来——文章抓取、视频转文字、改写(总结)、全文翻译、长图、卡片(小红书 3:4 / 4:5 / 1:1 / 9:16)、公众号排版、口播视频、白板论证、漫画。常用组合:原文→改写→长图(默认)、原文→改写→小红书卡片、原文→公众号排版、原文→总结→公众号、外文→翻译→公众号、原文长图 / 原文卡片(一字不改)、视频→逐字稿→改写→长图或卡片、一稿多发(长图 + 小红书 + 公众号)、文章→口播视频。输入:X/Twitter 长文与线程、网页、微信公众号、本地 Markdown、粘贴的正文;抖音、YouTube、B 站链接、本地视频/音频、.srt/.vtt。21 套主题,不指定时按内容选。Use when the user gives an article, URL, long post, video link or file and wants it turned into 总结图, 长图, 知识卡片, 小红书图文, 公众号排版, 口播视频, 原文排版, 白板, 漫画 — or wants seve…
Works with any agent that supports SKILL.md skills.
What this skill can do
Sends data to these websites: fonts.googleapis.com, generativelanguage.googleapis.com, api.openai.com, docs.astral.sh, astral.sh
The author does not mention this. Expected for a media skill.
Found in 11 places.
Show 8 more
- skills/article2media/engine/scripts/lib/chrome.mjs, line 170
const ws = new WebSocket(wsUrl); - skills/article2media/engine/scripts/lib/imagegen.mjs, line 74
const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${m}:generateContent`, { - skills/article2media/engine/scripts/lib/imagegen.mjs, line 91
const res = await fetch('https://api.openai.com/v1/images/generations', { - skills/article2media/engine/scripts/lib/layout-full.mjs, line 330
const res = await fetch(b.src, { signal: AbortSignal.timeout(30000) }); - skills/article2media/engine/scripts/lib/media/source.mjs, line 75
const res = await fetch(u, { headers, redirect: 'follow', signal: AbortSignal.timeout(600000) }); - skills/article2media/engine/scripts/lib/media/source.mjs, line 96
const res = await fetch(src.url, { headers: { 'User-Agent': MOBILE_UA }, redirect: 'follow', signal: AbortSignal.timeout(30000) }); - skills/article2media/engine/scripts/lib/media/source.mjs, line 104
const res = await fetch(share, { headers, signal: AbortSignal.timeout(30000) }); - skills/article2media/engine/scripts/video.mjs, line 71
if (!v.edge) console.log(' - 装 uv(https://docs.astral.sh/uv/)后可免费用 edge-tts 神经语音:curl -LsSf https://astral.sh/uv/install.sh | sh');
Downloads and installs other software
The author does not mention this.
Found in 9 places.
Show 6 more
Runs commands on your computer
The author does not mention this.
Found in 25 places.
Show 17 more
- skills/article2media/engine/scripts/lib/media/source.mjs, line 10
import { spawnSync } from 'node:child_process'; - skills/article2media/engine/scripts/lib/media/source.mjs, line 25
const run = (cmd, args, opts = {}) => spawnSync(cmd, args, { encoding: 'utf8', maxBuffer: 256 << 20, timeout: 1800000, ...opts }); - skills/article2media/engine/scripts/lib/video/render.mjs, line 3
import { spawn, spawnSync } from 'node:child_process'; - skills/article2media/engine/scripts/lib/video/render.mjs, line 236
const r = spawnSync('ffmpeg', ['-v', 'error', '-i', mp4, '-vf', `crop=876:128:60:1352,scale=${W}:${H},format=gray`, '-f', 'rawvideo', '-'], { maxBuffer: 1 << 28 - skills/article2media/engine/scripts/lib/video/render.mjs, line 258
const r = spawnSync('ffmpeg', ['-hide_banner', '-v', 'error', '-y', ...args], { encoding: 'utf8', maxBuffer: 64 << 20, ...opts }); - skills/article2media/engine/scripts/lib/video/render.mjs, line 266
const m = spawnSync('ffmpeg', ['-hide_banner', '-nostats', ...extraInputs, '-i', input, '-filter_complex', `${pre}loudnorm=I=-14:TP=-1:LRA=11:print_format=json` - skills/article2media/engine/scripts/lib/video/voice.mjs, line 9
import { spawnSync, spawn } from 'node:child_process'; - skills/article2media/engine/scripts/lib/video/voice.mjs, line 71
try { return spawnSync(cmd, args, { encoding: 'utf8', timeout: 20000, ...opts }).status === 0; } catch { return false; } - skills/article2media/engine/scripts/lib/video/voice.mjs, line 170
const r = spawnSync(det.voxcpm.python, [path.join(PY, 'voxcpm_batch.py'), jobFile], { encoding: 'utf8', timeout: 3600000, maxBuffer: 64 << 20 }); - skills/article2media/engine/scripts/lib/video/voice.mjs, line 176
const r = spawnSync('ffmpeg', ['-v', 'error', '-y', '-i', src, '-ac', '1', '-ar', String(SR), '-c:a', 'pcm_s16le', out], { encoding: 'utf8' }); - skills/article2media/engine/scripts/lib/video/voice.mjs, line 197
const r = spawnSync('uv', ['run', '--no-project', '--quiet', '--with', 'edge-tts', 'python', '-c', code, it.text, voiceName, rate, mp3, words], { encoding: 'utf - skills/article2media/engine/scripts/lib/video/voice.mjs, line 208
const r = spawnSync('say', ['-v', 'Tingting', '-o', aiff, it.text], { encoding: 'utf8' }); - skills/article2media/engine/scripts/lib/video/voice.mjs, line 226
const r = spawnSync(det.whisper.python, [path.join(PY, 'asr_words.py'), det.whisper.model, ...todo], { - skills/article2media/engine/scripts/lib/video/voice.mjs, line 411
const st = spawnSync('ffmpeg', ['-v', 'error', '-y', '-i', r.file, '-af', `atempo=${factor.toFixed(3)}`, '-ar', String(SR), '-ac', '1', '-c:a', 'pcm_s16le', out - skills/article2media/engine/scripts/lib/video/voice.mjs, line 450
const ln = spawnSync('ffmpeg', ['-v', 'error', '-y', '-i', masterRaw, '-af', 'highpass=f=70,loudnorm=I=-16:TP=-1.5:LRA=9', '-ar', String(SR), '-ac', '1', '-c:a' - skills/article2media/engine/scripts/lib/video/voicelib.mjs, line 8
import { spawnSync } from 'node:child_process'; - skills/article2media/engine/scripts/lib/video/voicelib.mjs, line 24
const ff = (args) => spawnSync('ffmpeg', ['-hide_banner', '-v', 'error', '-y', ...args], { encoding: 'utf8' });
and 5 more places
Can call paid AI services billed to you
The author does not mention this. Expected for a media skill.
Found in 2 places.
Install
Paste this into your terminal. It downloads exactly the version we scanned, not whatever is newest.
if [ -e ~/.agents/skills/'article2media' ] || [ -L ~/.agents/skills/'article2media' ]; then echo 'A skill folder named article2media already exists — not replacing it' >&2; false; else d=$(mktemp -d) && git clone --quiet --filter=blob:none --no-checkout 'https://github.com/threerocks/article2media' "$d" && git -C "$d" checkout --quiet '5e752beaa7cd396804b732032ada482da6851e43' -- 'skills/article2media' && mkdir -p ~/.agents/skills && cp -R "$d"/'skills/article2media' ~/.agents/skills/'article2media' && rm -rf "$d"; fi
Codex reads ~/.agents/skills directly. For Claude Code, Cursor, Copilot, Gemini CLI, Antigravity or OpenCode, also link it. For Claude Code: ln -s ~/.agents/skills/'article2media' ~/.claude/skills/'article2media' (other agents: ~/.cursor/skills, ~/.copilot/skills, ~/.gemini/skills, ~/.gemini/config/skills, ~/.config/opencode/skills). Or install through the finder skill, which does both.
Badge for your README
The badge for threerocks/article2media shows the score of its lowest-scoring skill.

[](https://zalavijaysinh.github.io/skilltrust/repos/threerocks/article2media/)
Score history
| Date | Version | Score |
|---|
| 2026-11-10 | 5e752be | 65 |