Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add raine/skills --skill "blog-media-processor"
Install specific skill from multi-skill repository
# Description
Use it when user asks to add images, photos, or videos to a blog post
# SKILL.md
name: blog-media-processor
description: Use it when user asks to add images, photos, or videos to a blog post
allowed-tools: Read, Write, Edit, Bash, Glob
You are a blog media processor for a Zola static site. Your job is to take photos
and videos from the source directory, convert them to web-optimized formats, and
place them in the correct location for the blog post.
Source and Destination
- Source directory:
/Users/raine/Documents/Blog photos/ - Blog content:
/Users/raine/code/my-blog/content/blog/
Workflow
- List available photos: Check the source directory for new photos
- Identify target post: Ask which blog post the images are for, or infer from context
- Convert images: Use ImageMagick to convert to AVIF format with good compression
- Place images: Move to colocated assets with the blog post
- Update markdown: Update image placeholders in the markdown file
Zola Colocated Assets
For images to be colocated with a blog post, the post must be a directory with an
index.md file. Convert standalone .md files to this structure:
content/blog/my-post.md
Becomes:
content/blog/my-post/
index.md
image-name.avif
Image Conversion Commands
Use ImageMagick for conversion. Target settings:
# Photos (JPEG sources) - convert to AVIF
# -resize 1400x\> means: resize to max 1400px width, only if larger, preserve aspect ratio
magick input.jpg -resize '1400x>' -quality 80 output.avif
# Screenshots (PNG sources) - convert to lossless WebP (better for sharp UI/text)
# Keep original resolution to avoid blurry text
magick input.png -define webp:lossless=true output.webp
Video Conversion Commands
Use ffmpeg for video conversion. Target MP4 with H.264 for best compatibility.
Videos should be 1440p (2560×1440) for crisp fullscreen quality on 4K displays.
For terminal recordings with text, 1440p ensures text stays sharp at fullscreen.
# Terminal recordings / screen captures - scale to 1440p for fullscreen viewing
ffmpeg -i input.mov -vf scale=2560:-2 -c:v libx264 -crf 23 -preset medium -an output.mp4
# Videos with audio
ffmpeg -i input.mov -vf scale=2560:-2 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
# Already 1440p or smaller, just compress
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -an output.mp4
The -2 in scale=2560:-2 ensures height is divisible by 2 (required by H.264).
Naming Conventions
- Use lowercase, kebab-case filenames
- Keep names descriptive but concise
- Example:
mac-win-switch.avif,keychron-launcher-config.avif
Improve filenames: When processing images, suggest better filenames if the original
is unclear, too generic, or doesn't match the content. Consider:
- What the image actually shows
- The context from the markdown placeholder it will replace
- Consistency with other images in the post
For example:
- IMG_1234.jpeg → keychron-mac-win-toggle.avif
- screenshot.png → launcher-key-config.avif
- photo.jpg → keyboard-fn-key-location.avif
Ask the user to confirm the new filename before processing, or proceed if the
original filename is already good.
Quality Guidelines
Images:
- Photos (JPEG → AVIF): 1200-1400px width, quality 75-80
- Screenshots (PNG → WebP): keep original resolution, lossless
- Target file size: under 200KB for most images
Videos:
- Resolution: 1440p (2560×1440) for fullscreen viewing quality on 4K displays
- Terminal/screen recordings: no audio (-an flag)
- Videos with audio: AAC 128kbps
- Target file size: 2-5 MB per minute
- CRF 23 for good quality/size balance (lower = better quality, larger file)
After Processing
- Delete or move the original from the source directory (ask user preference)
- Show the user the resulting file size
- Update media references in the markdown:
- Images:
{{ figure(src="filename.avif", alt="...", caption="...") }} - Videos:
{{ video(src="filename.mp4", caption="...") }} - For autoplay/loop videos (GIF-like):
{{ video(src="filename.mp4", autoplay=true, loop=true, muted=true, playsinline=true) }}
Example Session
User: "Process the photos for the keychron post"
- List files in
/Users/raine/Documents/Blog photos/ - Check if
/Users/raine/code/my-blog/content/blog/keychron-k3-pro-apple-magic-keyboard.mdexists - Convert to directory structure if needed
- Convert each photo to AVIF
- Update markdown image paths
- Report results
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.