Short Video Scripter
aaron-he-zhu/aaron-marketing-skills
A skill your agent uses when the user asks to "script this short video", "write a TikTok / Reels / Shorts script", "给这条抖音或视频号视频写脚本", or "fix the hook — viewers drop off in the first seconds"…
Generate audio narration of blog posts using Google Gemini TTS.
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-audio --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/blog-audio .claude/skills/blog-audio && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .claude/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audioType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-audio --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/blog-audio .agents/skills/blog-audio && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .agents/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-audio --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/blog-audio .cursor/skills/blog-audio && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .cursor/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/AgriciDaniel/claude-blog.git --path skills/blog-audio--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-audio --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/blog-audio .gemini/skills/blog-audio && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .gemini/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install AgriciDaniel/claude-blog blog-audioInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/blog-audio .github/skills/blog-audio && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .github/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add AgriciDaniel/claude-blog --skill blog-audio -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AgriciDaniel/claude-blog blog-audio --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/blog-audio .opencode/skills/blog-audio && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "blog-audio" agent skill from https://github.com/AgriciDaniel/claude-blog/tree/main/skills/blog-audio into .opencode/skills/blog-audio/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "blog-audio", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
blog-audioGenerate audio narration of blog posts using Google Gemini TTS.
Blog Audio is an agent skill from AgriciDaniel/claude-blog. Generate audio narration of blog posts using Google Gemini TTS. Supports summary narration, full article read-aloud, and two-speaker podcast/dialogue mode with 30 voice options. Outputs MP3 with HTML5 audio embed code. Works standalone via /blog audio or internally from blog-write. Falls back gracefully when API key is not configured. Use when user says "blog audio", "narrate blog", "audio version", "text to speech", "tts", "podcast mode", "read aloud", "audio narration", "voice", "narration", "generate audio".
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `references/voices.md`, `scripts/__init__.py` and `scripts/generate_audio.py`).
It sits in Media & Creative, covering Text to speech and voice and Blog and article writing. It works with Google Gemini. The repository describes itself as: Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at… The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2500d4c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 6 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3aptFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
aistudio.google.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
GOOGLE_AI_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Blog Audio loads about 2.2k tokens when it runs, and up to ~3.5k if it reads all its reference files. Until then it costs about 132 tokens; SKILL.md has 895 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
| FFmpeg not found | Install: `sudo apt install ffmpeg`. Falls back to WAV output. |Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from AgriciDaniel/claude-blog at commit 2500d4c, republished under its MIT licence (© AgriciDaniel). 895 words, ~2,198 tokens.
.claude/skills/blog-audio/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Generate professional audio narration of blog content using Google's Gemini TTS. Three modes: summary (200-300 word spoken overview), full article read-aloud, or two-speaker podcast dialogue. 30 voices, 80+ languages, HTML5 embed output.
| Command | What it does |
|---|---|
/blog audio generate <file> | Generate audio narration of a blog post |
/blog audio voices | Show available voices with characteristics |
/blog audio setup | Check/configure API key for Gemini TTS |
run.py)GOOGLE_AI_API_KEY environment variable (same key used by blog-image)# CORRECT:
python3 scripts/run.py generate_audio.py --text "..." --voice Charon --json
# WRONG:
python3 scripts/generate_audio.py --text "..." # Fails without venvBefore generating audio, check for the API key:
test -n "${GOOGLE_AI_API_KEY:-}" && echo "GOOGLE_AI_API_KEY is set" || echo "GOOGLE_AI_API_KEY is not set"export GOOGLE_AI_API_KEY=your-key
This can be the same key used by /blog image, but it must be exported in the shell."For /blog audio setup:
GOOGLE_AI_API_KEY is set in environment.mcp.json, confirm the referenced env var is exportedpython3 scripts/run.py generate_audio.py --text "Test" --dry-run --jsonFor /blog audio voices:
Load references/voices.md and present the voice catalog to the user.
Ask the user which voice they prefer, or recommend based on content type:
For /blog audio generate <file>:
Read the file and extract:
Ask the user (or auto-select if they specified --mode):
| Mode | When to use | Output |
|---|---|---|
| Summary | Quick audio overview (1-2 min) | 200-300 word spoken summary |
| Full | Complete read-aloud (5-15 min) | Full article as natural speech |
| Dialogue | Podcast-style (3-8 min) | Two-person conversation about the article |
Claude prepares the text; the script does TTS only.
Summary mode: Write a 200-300 word spoken summary of the article. Rules:
Full mode: Strip the markdown content to clean spoken text:
Dialogue mode: Write a 2-person conversation script about the article:
Speaker1: What's the key takeaway here?If the user chose a voice, use it. Otherwise, recommend based on mode:
Write the prepared text to a file under the working directory, then call:
# Single voice (summary or full mode)
python3 scripts/run.py generate_audio.py \
--text-file blog_audio_prepared.txt \
--voice Charon \
--model flash \
--output audio/post-slug.mp3 \
--json
# Two voices (dialogue mode)
python3 scripts/run.py generate_audio.py \
--text-file blog_audio_dialogue.txt \
--voice Puck \
--voice2 Kore \
--model pro \
--output audio/post-slug-dialogue.mp3 \
--jsonModel selection:
flash (default): maps to gemini-3.1-flash-tts-preview, good for summaries and standard narration.flash31: explicit alias for gemini-3.1-flash-tts-preview.legacy-flash25: retained only for older compatibility.pro or legacy-pro25: maps to gemini-2.5-pro-preview-tts, use only when needed.Present the result to the user:
<audio controls preload="metadata">
<source src="audio/post-slug.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio><audio controls preload="metadata">
<source src="/audio/post-slug.mp3" type="audio/mpeg" />
</audio>[audio src="audio/post-slug.mp3"]Insert the audio player after the introduction (below the first H2) or at the very top of the article with a label: "Listen to this article" or "Audio version".
When invoked internally from blog-write:
Input:
text: Prepared text (already cleaned by Claude)voice: Voice name (default: Charon)voice2: Second voice for dialogue (optional)model: flash or prooutput_path: Where to save the fileOutput:
### Audio Narration
- **Path:** /path/to/audio/post-slug.mp3
- **Duration:** 3:42
- **Voice:** Charon
- **Embed:** `<audio controls preload="metadata"><source src="audio/post-slug.mp3" type="audio/mpeg"></audio>`Graceful fallback: If GOOGLE_AI_API_KEY is not set, return immediately
with no error. The writing workflow continues without audio. Never block
blog-write because audio generation is unavailable.
| Error | Resolution |
|---|---|
| GOOGLE_AI_API_KEY not set | Get key at https://aistudio.google.com/apikey |
| FFmpeg not found | Install: sudo apt install ffmpeg. Falls back to WAV output. |
| Rate limited | Wait and retry. Check limits at https://aistudio.google.com/rate-limit |
| Text too long (>8,192 input tokens) | Split into sections around 7,800 tokens; the script chunks and stitches prepared text |
| Unknown voice name | Run /blog audio voices to see valid options |
| API error | Check key validity and model availability |
| API key missing (internal call) | Return silently: writing workflow continues |
Load on-demand: do NOT load all at startup:
references/voices.md: Full 30-voice catalog, recommendations by content type, dialogue pairings© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts, references) in skills/blog-audio of AgriciDaniel/claude-blog.
Open the folder on GitHubat commit 2500d4c
We found 4 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in AgriciDaniel/claude-blog, which our catalogue first saw on October 7, 2026.
Blog Audio next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Blog Audio this skillAgriciDaniel/claude-blog | 2.3k | 1 repos | ~2.2k | Automated safety check: Notes | MIT | |
| Short Video Scripteraaron-he-zhu/aaron-marketing-skills | 2.9k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Gemini Ttsiurysza/module-graph | 420 | — | ~968 | Automated safety check: Pass | MIT | |
| Gemini Audioeinverne/dotfiles | 121 | — | ~2k | Automated safety check: Notes | MIT | |
| WeChat Article Publisherjiji262/wechat-publisher | 274 | — | ~4.4k | Automated safety check: Pass | None | |
| Video Analyzermikefutia/claude-vision | 101 | — | ~747 | Automated safety check: Notes | None |
aaron-he-zhu/aaron-marketing-skills
A skill your agent uses when the user asks to "script this short video", "write a TikTok / Reels / Shorts script", "给这条抖音或视频号视频写脚本", or "fix the hook — viewers drop off in the first seconds"…
iurysza/module-graph
Generates spoken MP3 audio from text or Markdown with Gemini TTS.
einverne/dotfiles
Guide for implementing Google Gemini API audio capabilities - analyze audio with transcription, summarization, and understanding (up to 9.5 hours), plus generate speech with controllable TTS.
jiji262/wechat-publisher
Researches a topic, writes an illustrated WeChat Official Account article in a chosen author voice and sends it to the account's draft box.
mikefutia/claude-vision
Analyzes a video file with Google Gemini and returns a structured markdown report covering top-level summary, scene-by-scene breakdown, audio transcript (or honest "silent" note), visual details…
mikeOnBreeze/cc-crossbeam
This skill enables AI video generation from images AND text-to-speech voiceover generation using Fal.ai's API.
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
AgriciDaniel/claude-blog
FLOW framework integration for bloggers. An agent skill from AgriciDaniel/claude-blog.
AgriciDaniel/claude-blog
Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.
AgriciDaniel/claude-blog
AI image generation and editing for blog content powered by Gemini via MCP.
AgriciDaniel/claude-blog
Semantic topic cluster planning and automated execution engine for claude-blog.
AgriciDaniel/claude-blog
Research what people are actually saying about a topic in the last 30 days across Reddit, X / Twitter, YouTube, Hacker News, dev.to, Medium, and other public discourse platforms.
Works with
Categories
Generate audio narration of blog posts using Google Gemini TTS. Blog Audio is an agent skill from AgriciDaniel/claude-blog. Generate audio narration of blog posts using Google Gemini TTS.
Blog Audio fits situations like: user says blog audio; audio narration.
Run `npx skills add AgriciDaniel/claude-blog --skill blog-audio -a claude-code`. Or copy the skill folder (skills/blog-audio in AgriciDaniel/claude-blog) into .claude/skills/blog-audio in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AgriciDaniel/claude-blog --skill blog-audio -a codex`. Or copy the skill folder (skills/blog-audio in AgriciDaniel/claude-blog) into .agents/skills/blog-audio in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-blog --skill blog-audio -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blog-audio, .gemini/skills/blog-audio, .github/skills/blog-audio and .opencode/skills/blog-audio in your project.
Going by SKILL.md and its folder, Blog Audio needs Python for the scripts in its folder, the command-line tools its instructions call (python3 and apt) and credentials named GOOGLE_AI_API_KEY. Our summary lists: Python 3; A credential in GOOGLE_AI_API_KEY.
SKILL.md names 1 domain. As links in the text: aistudio.google.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Blog Audio is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Blog Audio: Short Video Scripter (aaron-he-zhu/aaron-marketing-skills, 2.9k stars), Gemini Tts (iurysza/module-graph, 420 stars), Gemini Audio (einverne/dotfiles, 121 stars) and WeChat Article Publisher (jiji262/wechat-publisher, 274 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-blog, which has 2,348 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.
Source: AgriciDaniel/claude-blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.