skit-thumbnail
Skill2 starsChanged 2 months agoMITView on GitHub
Generate YouTube thumbnails for skit videos. Extracts a frame (random or specific timestamp), crops it into a rounded-rect polaroid with drop shadow, SKIT label bar above, title+subtitle on the right, channel logo below. Everything auto-fits within margins.
In this repository58 other files it gives its agents.
- ad-hoc-script-verificationSkill
- architecture-diagramSkill
- blocked-page-recoverySkill
- cadquery-enclosure-designSkill
- canonical-thumbnailSkill
- circuit-designSkill
- competitor-news-monitorSkill
- component-alternativesSkill
- debugging-hermes-tui-commandsSkill
- docker-container-update-checkSkill
- document-to-action-itemsSkill
- docxSkill
- email-inbox-triageSkill
- embedded-porting-patternsSkill
- ephemeral-file-sharingSkill
- excalidrawSkill
- flash-game-researchSkill
- flutter-android-buildSkill
- flutter-content-renderingSkill
- github-code-reviewSkill
- githubSkill
- goatcounter-analyticsSkill
- google-oauth-file-pollSkill
- grounded-citationsSkill
- hermes-agent-skill-authoringSkill
- hermes-gateway-slash-commandSkill
- hermes-gateway-supervisionSkill
- jellyseerr-watch-suggestionsSkill
- maintained-fork-publishingSkill
- meeting-action-itemsSkill
- native-mcpSkill
- obsidian-mapsSkill
- pdf-flattenSkill
- pdfSkill
- pdf-surgical-editsSkill
- planSkill
- product-price-monitorSkill
- psp-developmentSkill
- psp-homebrew-testingSkill
- psp-prx-plugin-maintenanceSkill
- python-debugpySkill
- python-webapp-patternsSkill
- reddit-readingSkill
- retro-fansiteSkill
- reverse-proxy-websocket-debuggingSkill
- rss-feedsSkill
- simplify-codeSkill
- sketchSkill
- spikeSkill
- subagent-driven-developmentSkill
- test-driven-developmentSkill
- usb-device-enumerationSkill
- weekly-review-planningSkill
- wiki-media-asset-pipelineSkill
- windows-c-build-toolchainSkill
- windows-crash-forensicsSkill
- writing-plansSkill
- yt-dlp-anti-botSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 59
After the user picks a thumbnail, upload the video to the channel:
- Very specific: line 84
Check video duration: ffprobe -v error -show_entries format=duration -of csv=p=0 clip.mp4
- Distinctive: line 93
If none works, iterate with 3 more timestamps
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Skit Thumbnail Generator
Location
Script: /path/to/scripts/skit_thumbnail.py
Usage
cd "/path/to/project"
python scripts/skit_thumbnail.py path/to/clip.mp4 --title "Title Text" --subtitle "Subtitle Text"Arguments
| Arg | Description |
video | Path to the skit video clip (positional, required) |
--title | Title text in red (auto-sized to fit column) |
--subtitle | Subtitle text in white, same font size as title |
--frame-time | Timestamp in seconds for frame extraction (default: random). Use 0 for the very first frame. |
--output | Custom output path (default: auto-named in skit_thumbnails/) |
Design
- Left stack: Red SKIT bar (rounded pill, left-aligned text) → 4px gap → Photo (rounded-rect, white border, drop shadow)
- Right column: Title (red) + Subtitle (white) at same font size (determined by longer string) → accent line → channel logo (scaled to fill)
- Background: Dark slate with diagonal stripe accents, red top/bottom bars
- Margins: 50px left, 25px all other sides, 28px gap between frame and text
Pitfalls (learned the hard way)
- ❌ Don't use full-bleed blurred frame as background — user rejected it, prefers clean dark slate with diagonal stripes
- ❌ Don't put SKIT label inside the photo — it goes ABOVE in a separate red bar (pill shape, left-aligned text)
- ❌ Don't add a second SKIT badge in the right zone — one is enough (the bar above the photo)
- ❌ Don't under-size text to leave empty space — title + subtitle should be the same large font, auto-determined by the longer string
- ❌ Don't use tiny corner logos — logo must be large (200-440px) and centered in remaining space
- ❌ Don't redesign from scratch — user prefers iterative refinement of the existing polaroid layout
- ❌ Don't guess the title/subtitle — ask the user what text they want, or if they already told you, use exactly what they said (subtitle is often just "Overwatch" for Overwatch skits)
- ❌ Don't extract from a random frame without asking — always ask the user which frame they want, then use
--frame-timeto pin it (0 = first frame, or a specific second) - ✅ SKIT bar text at 45px (1.5x of initial try), left-aligned with 15px padding
- ✅ Title & subtitle share ONE font size via calc_font_size (binary search on longer string)
- ✅ Everything auto-fits within margins: 50px left, 25px elsewhere
YouTube upload after thumbnail
After the user picks a thumbnail, upload the video to the channel:
cd "/path/to/scripts-upload/scripts"
python yt_upload.py "path/to/video.mp4" \
--title "SkitName In Overwatch | My Channel" \
--thumbnail "path/to/thumb.png" \
--private --schedule "YYYY-MM-DDT14:00:00Z"Title convention (channel skits): "[Skit Name] In Overwatch | My Channel" — always this format for skit videos. The subtitle (e.g. "Overwatch") goes in the thumbnail only, not the YouTube title.
Schedule: User's timezone is IDT (UTC+3). 5pm IDT = 14:00 UTC. Ask the user what time to publish.
Workflow patterns
Quick single thumbnail:
python scripts/skit_thumbnail.py clip.mp4 --title "Title" --subtitle "Subtitle"Picks a random mid-clip frame. Re-run if user doesn't like the result.
Batch comparison (user-picky workflow): Generate 3 thumbnails at different timestamps, show them inline, let the user pick.
- Check video duration:
ffprobe -v error -show_entries format=duration -of csv=p=0 clip.mp4 - Pick 3 spread-out timestamps (e.g. early/mid/late thirds minus margins)
- Generate each:
python scripts/skit_thumbnail.py clip.mp4 --title "T" --subtitle "S" --frame-time 3 --output "skit_thumbnails/clip_t1.png" python scripts/skit_thumbnail.py clip.mp4 --title "T" --subtitle "S" --frame-time 12 --output "skit_thumbnails/clip_t2.png" python scripts/skit_thumbnail.py clip.mp4 --title "T" --subtitle "S" --frame-time 22 --output "skit_thumbnails/clip_t3.png" - Present all 3 inline via
MEDIA:paths - If none works, iterate with 3 more timestamps
- Once picked, that PNG is the final thumbnail for the upload step
Script maintenance notes
--frame-timewas added retrospectively (original script only had random extraction). If you patch the script, the function to modify isextract_frame(video_path, timestamp=None)— it replaces the oldextract_random_frame(). Argparse entry inmain()needs both the new flag in the parser and passing it through tomake_skit_thumbnail().
Output
1280×720 PNG, saved to skit_thumbnails/<clipname>_skit_thumb.png.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

