.claude/skills/image-cleanup/SKILL.md
Clean up unreferenced images in Obsidian vault folders. Deletes unused images, renames excalidraw files with descriptive names based on image content (using vision), and moves everything to vault root images/ folder. Use after picking favorites from excalidraw-gen batches. Triggers on "clean up images", "delete unused images", "tidy up images", "image cleanup", or "/image-cleanup".
npx skillsauth add theramjad/ray-os image-cleanupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
After excalidraw-gen creates 10 images per section and the user picks their favorite(s), this skill:
.md files for ![[...]] embeds, cross-references against actual image files, removes anything not referencedimages/ at the vault root (/Users/ray/Desktop/ray-os/images/), organized as images/{note-slug}/descriptive-name.png![[...]] embeds to match the new pathsimages/ foldersBefore (in socials/youtube/videos/):
images/two-room-office/excalidraw_1.png ← unreferenced
images/two-room-office/excalidraw_2.png ← unreferenced
images/two-room-office/excalidraw_6.png ← referenced
images/thin-waist/excalidraw_9.png ← referenced
After (at vault root):
images/my-video-name/two-room-office-analogy.png
images/my-video-name/thin-waist-architecture.png
Markdown updates:
![[images/two-room-office/excalidraw_6.png]] → ![[images/my-video-name/two-room-office-analogy.png]]
python3 /Users/ray/Desktop/ray-os/.claude/skills/image-cleanup/scripts/cleanup.py "/path/to/target/folder" --no-flatten
python3 /Users/ray/Desktop/ray-os/.claude/skills/image-cleanup/scripts/cleanup.py "/path/to/target/folder" --no-flatten --execute
images/{note-slug}/ at vault root if it doesn't exist![[...]] references in the markdown filesimages/ directoryAll images live at the vault root: /Users/ray/Desktop/ray-os/images/
images/{note-slug}/descriptive-name.png
images/anthropic-skills-playbook/skill-shifts-distribution.pngimages/{note-slug}/descriptive-name.png (same pattern)
images/using-cc-in-wsl/claude-code-in-wsl.pngAnthropic Skills Playbook → anthropic-skills-playbook1M Context Window → 1m-context-windowNever create local images/ folders inside project subdirectories. Everything goes to vault root.
Use vision, not folder names. Read each image with the Read tool and name it based on what it actually shows:
skill-shifts-distribution.png)prescriptive-vs-flexible-prompt.png)Do NOT use the excalidraw number, the subfolder name alone, or generic names.
images/ at /Users/ray/Desktop/ray-os/images/ is the single source of truth for all images.Always use with --no-flatten. Only use this for deleting unreferenced images.
# Dry run
python3 /Users/ray/Desktop/ray-os/.claude/skills/image-cleanup/scripts/cleanup.py "/path/to/folder" --no-flatten
# Execute
python3 /Users/ray/Desktop/ray-os/.claude/skills/image-cleanup/scripts/cleanup.py "/path/to/folder" --no-flatten --execute
Only use if you cannot read images with vision. Renames excalidraw files using subfolder names or surrounding markdown context.
python3 /Users/ray/Desktop/ray-os/.claude/skills/image-cleanup/scripts/rename-by-context.py "/path/to/folder"
content-media
Edit raw screen recording videos with synced audio. Removes repeated takes, false starts, silence, filler, and [MUSIC] tags to produce a clean final cut. Use when the user provides a raw/unedited MP4 video file and wants it edited down. Triggers on: "edit this video", "cut this video", providing a raw MP4 for editing, or any request to remove bad takes from a recording.
tools
Monitor Twitter/X for trending AI and developer tool discussions, score them, and deliver pre-digested content briefs. Use this skill whenever the user wants to find trending topics on Twitter, check what people are talking about in AI/tech, scout for video ideas from Twitter, or says things like "what's trending", "anything new on Twitter", "find me something to talk about", "scout Twitter", or "what are people saying about X". Also triggers on "monitor layer", "input layer", or "fountainhead" when Twitter is relevant.
development
# /triage — Inbox Triage ## Description Scan all connected communication channels, prioritize items by urgency, and draft responses in your voice. Clear your inbox in minutes. ## Arguments - `quick` — Tier 1 items only, no drafts (fastest) - `digest` — Full scan with summaries, drafts for Tier 1-2 - (no argument) — Full scan with drafts for everything actionable ## Instructions You are running inbox triage for {{YOUR_NAME}}. The goal is to process all incoming messages quickly and surface wh
tools
YouTube data utility — fetch transcripts, metadata, thumbnails, and search for videos. Wraps the Supadata API and yt-dlp into a single CLI tool. Use whenever you need YouTube data like transcripts, video metadata, thumbnail images, or need to search YouTube for videos matching a query. Triggers on any YouTube data fetching need from other skills or direct user requests.