| name | content-blog |
| description | Generate a blog post from source materials (text, PDFs, images, transcripts). Use when user wants to create a blog post or article. |
/content-blog
Generate a blog post using the gemini-3 skill for multimodal content.
Usage
/content-blog
Before Running
If source/*.mp4 exists but content/transcript.md doesn't, run /content-transcribe first.
Working Directory
Run from the monorepo root. The script finds the linked post in posts/ automatically based on the project directory name.
Source Materials
Accepts any combination from the project directory:
source/*.txt or source/*.md (text files)
source/*.pdf (PDFs)
source/*.png, source/*.jpg (images)
content/transcript.md (video transcript)
content/description.md (video description/chapters)
screenshots/ (video screenshots, extracted on-demand)
Run
uv run .claude/skills/content-blog/scripts/generate_blog.py posts/<id>
uv run .claude/skills/content-blog/scripts/generate_blog.py posts/<id> --model gemini-2.5-pro
How It Works
The script:
- Gathers all source materials from the project directory
- Builds a comprehensive prompt using Jinja2 templates
- Calls the
/gemini-3 skill with the prompt and all multimodal files
- Saves the generated blog post to
posts/<slug>/blog.md with draft: true
Screenshots
Screenshots must be extracted separately using /content-screenshot before or after blog generation.
- Identify timestamps from the transcript/chapters that need visual illustration
- Run
/content-screenshot with those timestamps
- Reference in the blog:

Output
Saves to posts/<slug>/blog.md (as a draft).
Post-Generation Editing
After the blog is generated, run two Zinsser editing passes using gemini-3 to tighten the prose.
Read writing-with-zinsser.md from the wiki directory for the full style guide, then run two passes:
POST="posts/YYYY-MM-DD-slug/blog.md"
STYLE="writing-with-zinsser.md"
uv run .claude/skills/gemini-3/scripts/query.py \
"Review this blog post and apply Zinsser's writing principles. Return only the improved post, no commentary." \
--context "$STYLE" \
--context "$POST" \
--model gemini-2.5-pro > "${POST}.tmp"
mv "${POST}.tmp" "$POST"
uv run .claude/skills/gemini-3/scripts/query.py \
"Review this blog post and apply Zinsser's writing principles. Return only the improved post, no commentary." \
--context "$STYLE" \
--context "$POST" \
--model gemini-2.5-pro > "${POST}.tmp"
mv "${POST}.tmp" "$POST"
agentkb users: Search for richer results: agentkb search -s wiki "Zinsser writing style principles"
Customizing Style
writing-with-zinsser.md in the wiki directory — Full Zinsser guide
.claude/skills/content-blog/references/prompts/blog-generation.md — Blog formatting instructions