name: pixel description: Create a pixel/vintage blog header from a source image and update the matching blog post image URL.
Pixel
Use this skill when the user gives a source image path/URL and wants the blog's pixel/vintage header style.
Style
Create a progressive JPEG with:
- warm black-and-white / sepia tone
- film grain
- soft vignette
- subtle pixelation that preserves detail
Workflow
- Resolve the source image.
- For a site URL like
/images/blog/global/foo.jpeg, usestatic/images/blog/global/foo.jpeg. - For a bare filename, check the current directory, then
~/Downloads/.
- For a site URL like
- Pick a new output path under
static/images/blog/global/, usuallySOURCE_STEM-pixel.jpg. Never overwrite the source. - Ensure Pillow exists:
python3 -c "from PIL import Image; print('ok')"
If missing, ask before installing anything.
- Generate the image:
python3 .pi/skills/pixel/scripts/vintage_header.py \
"SOURCE_PATH" \
"static/images/blog/global/OUTPUT.jpg"
- Find the post that references the source image before asking the user:
grep -RIn "SOURCE_FILENAME\|/images/blog/global/SOURCE_FILENAME" content public --include='*.md' --include='*.markdown' --include='*.html'
If only public/.../index.md or public/.../index.html matches, infer the source post from the slug and find the matching file under content/posts/.
- Replace the matching image reference in the content post with:

If no matching post can be found, ask which post to update.
Tuning
Default script settings are already tuned. For adjustments:
python3 .pi/skills/pixel/scripts/vintage_header.py input.jpg output.jpg \
--pixel-scale 0.6 \
--grain 10 \
--vignette 0.6
- More detail: increase
--pixel-scaletoward0.6or0.7. - More visible blocks: decrease
--pixel-scaletoward0.35or0.25. - Less dirty: reduce
--grainto8or10. - Lighter edges: reduce
--vignetteto0.5or0.6.