Communitygithub.com

jsath/claude-skills

Make a 1280x720 YouTube thumbnail (or a banner/cover) that reads at phone size: a text-free background plate (generated or from a real frame), a real cutout of the person, 1 to 3 words in tight colour blocks, an official logo, composed by a script that checks overlaps and frame edges and renders the 320px and 168px views you must look at. Use when asked for a thumbnail, cover, banner, 'make this clickable', or to fix a thumbnail that looks cluttered or small.

Was ist claude-skills?

claude-skills is a Claude Code agent skill that make a 1280x720 YouTube thumbnail (or a banner/cover) that reads at phone size: a text-free background plate (generated or from a real frame), a real cutout of the person, 1 to 3 words in tight colour blocks, an official logo, composed by a script that checks overlaps and frame edges and renders the 320px and 168px views you must look at. Use when asked for a thumbnail, cover, banner, 'make this clickable', or to fix a thumbnail that looks cluttered or small.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jsath/claude-skills/tree/HEAD/skills/video/thumbnail-generator

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Thumbnail generator

The method: image models make the plate, code makes the words. Generated text comes out misspelled and generated faces come out as somebody else, so text, logos and the person's real face are composited by scripts/compose_thumbnail.py, which then checks the layout.

Sibling skills: longform-edit and edit-style produce the video and its frames; this skill turns a frame into the cover.

Requirements

  • Python 3.9+ with Pillow (pip install pillow). Required.
  • Cutouts: pip install "rembg[cli]" then rembg i photo.jpg cutout.png, or any background remover that outputs a transparent PNG.
  • Plates (optional): any image model you have access to (an image-generation tool in your agent, an image API with an edit endpoint, or none: a blurred, darkened real frame is a fine plate).
  • Claude.ai works for planning and prompts; composing needs Claude Code (a shell).

Inputs

  • The video's title and its one-sentence promise.
  • A real photo or video frame of the person, ideally 1500 px tall or more, with the emotion the video needs (pick the frame; do not invent the face).
  • Official logos for any named tool (brand press page or the site's own SVG).
  • Optional: a reference thumbnail the user wants matched. Find and study that exact image first (see references/reference-matching.md).

Steps

  1. Concept in one line: what the viewer sees + the 1 to 3 words. If it needs more than 3 words, the concept is wrong. Show the result, hide the how.
  2. Make the plate (1280x720 or larger, 16:9). Prompt rules for any model:
    • "no people, no faces, no text, no letters, no logos" (always)
    • topic-relevant scene that tells the story, not "dark room with screens"
    • high contrast, one dominant colour, empty space where the text goes
    • avoid the default blue/purple AI gradient look Alternative: a real frame from the video, gblur + darkened 20 to 40%.
  3. Cut out the person from the chosen real frame (rembg). Never generate the person from text. If you use an image model to restyle the person, feed it the real frame as the input image and reject any result that changes the face, teeth, or clothes.
  4. Write layout.json (format in the script's header). Starting values: cutout height 0.85 to 0.95 on one side, flush with the bottom; headline size 110 to 140; second line 60 to 80; logo width 180 to 260.
  5. Compose: python3 scripts/compose_thumbnail.py layout.json --out thumb.png. Fix every FAIL (overlap, out of frame, cutout under 70% height, over 5 words).
  6. Look at thumb.preview.png, the 168 px view first. Run the checklist below. Adjust the layout, not the plate: re-generate only when the concept changes.
  7. Optional single polish pass: if your image model has an edit mode, run the FINISHED composite through it once at low strength (0.3 to 0.5) for lighting and saturation. Then re-check that every word is still spelled right and the face is still the same person. If not, ship the un-polished one.

Rules (from rejected thumbnails)

  • Hierarchy: face > headline > logo > background.
  • Everything is too small. Make elements 30 to 50% bigger than feels right; most people see 168 px wide.
  • Text in solid colour blocks, padding that hugs the letters (about 8 px at 1280 wide), drop shadow. Yellow = attention, green = positive, red = danger (white text), white = neutral. Heavy condensed sans (Impact, Bebas Neue).
  • Nothing covers the face. Text never crosses the face.
  • One plate fills the frame edge to edge: no voids, no visible seams.
  • Duplicated or mirrored elements look cheap: each repeated element is its own image.
  • Each new thumbnail looks different from the channel's last few.
  • Do not upscale a cutout more than about 1.15x (the script warns): find a bigger source.
  • Logos: official, unaltered colours and proportions, never AI-redrawn.

QA checklist (write the answers in your reply)

  • 168 px view: can you read every word and recognise the face?
  • 1 to 3 words (5 max), spelled right
  • face fully visible, not cropped at the chin or forehead, no UI badges from the source frame
  • no overlaps, nothing cut at the frame edge (script PASS)
  • high contrast, one clear focal point, no clutter
  • would you click it next to the channel's other thumbnails?

Output

thumb.png            1280x720 final
thumb.preview.png    full size + 320 px + 168 px side by side
layout.json          so the next tweak is a re-run, not a redo

Example reply:

thumb.png PASS (compose checks). 168px: "IT'S FREE" readable, face clear.
Concept: shocked face + "IT'S FREE" + tool logo; plate = blurred frame at 03:12, darkened 30%.
Kept all versions in thumbs/v1..v3.

Failure handling

problemdo
no image modeluse a blurred, darkened real frame as the plate
no good real photo of the personask for one; never generate a stand-in face
model put text or faces in the plateregenerate with the "no text, no people" line first in the prompt, or crop that area out
cutout has halos or missing hairtry rembg -m isnet-general-use, or pick a frame with a plainer background
font missing (tiny or fallback text)set "font" in layout.json to a real bold .ttf

Keep every version until the user picks one. Depth: references/composition.md (sizes, text, layer order) and references/reference-matching.md (matching a reference image, banners, square ads).

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

jsath/claude-skills

Writes captions for a finished video from its transcript: pulls the line worth repeating, writes first-line options, writes per-platform versions (Instagram, TikTok, YouTube title and description, others on request), keeps the creator's voice using their best past captions, and checks the call to action matches what the video actually says. Use when a creator asks for captions, a caption hook, a YouTube title and description, or a CTA check. Drafts only; never posts or schedules.

jsath/claude-skills

Write CAPTIONS-PLATFORMS.md for one finished short video: a per-platform post caption for Instagram, TikTok, YouTube Shorts (title + description), Facebook, Threads, Bluesky and X, each within that platform's limits, with your comment-keyword CTA on the platforms where it belongs and never on X. Keyword, CTA, platforms, hashtags and limits come from a config file; a checker script fails the file on any miss. Use after an edit is finished, when asked to 'write the captions', 'caption this reel for every platform', or before scheduling.

jsath/claude-skills

Transcribe audio or video on your own machine with Whisper (mlx-whisper, faster-whisper or whisper.cpp) and get word-level timestamps as words.json, a plain .txt and an .srt. No API key, nothing uploaded. This is the transcription step the editing skills (edit-style, longform-edit, reel-captions) depend on. Use when asked to transcribe a take, get word timings, make an SRT, re-transcribe a final render for a caption sync check, or 'run whisper locally'.

jsath/claude-skills

Turns one published long-form video or podcast transcript into up to thirty pieces: 10 clips with new hooks and exact timestamps, 8 X posts, 4 LinkedIn posts, 3 carousels, 2 threads, a newsletter, a community post and a blog post, laid out on a two-week plan, all built only from what was said. In Claude Code it also cuts, reframes and captions the clips with ffmpeg. Use when someone wants to repurpose a long video, find clips, or write social posts from a transcript. Never posts or schedules.

jsath/claude-skills

Turn a raw talking-head take into a dynamically edited 1080x1920 reel: full-face, full-graphic and split layouts that switch every 2 to 5 seconds, real UI and official-logo panels, captions on every word timed by Whisper, voice plus synthesised SFX (no music bed) mastered to -14 LUFS, and hard QA gates (caption sync on the final render, A/V length, loudness, colour, framing, contact sheet, claims). Also covers writing the script so it does not read as AI. Use when asked to 'edit this reel', 'make it look edited', 'add captions / dynamic layout / graphics', or 'write a reel script'.

jsath/claude-skills

Edits a raw long-form YouTube recording (screen recording export, camera file, or either plus a separate mic) into a publish-ready video automatically, like Descript on autopilot: transcribes with word timestamps, removes retakes and keeps the last take, tightens dead space while keeping silent on-screen action (speeding up long waits), masters the voice to -14 LUFS / -1.5 dBTP with no music bed, re-transcribes the FINAL render for an every-word SRT (optional burned-in captions), drafts chapters, titles and a description, and fails loudly on QA gates (words, A/V sync, caption sync per chapter, caption coverage, loudness) plus contact sheets you look at. Use when someone says edit this long-form, clean up my recording, cut the retakes and dead space, process the long-form inbox, or descript this. Needs Claude Code with ffmpeg, whisper.cpp and Python 3.

jsath/claude-skills

Turns one podcast episode transcript into a week of written content: an Episode Prep agent that checks the transcript and speaker names, a Clip Spotter that picks the best short-clip moments with exact timestamps and hooks for an editor to cut, a Show Notes Writer that writes show notes and chapter markers, a Repurpose Writer that turns the big ideas into a newsletter, a LinkedIn post and Instagram captions, and an Episode Planner that spreads it all over the week. Works from a transcript the user supplies or exports from their transcription tool. It does not edit audio or video and does not cut clips. Use when a podcaster asks for show notes, chapters, clip timestamps, or posts from an episode, or says \"repurpose this episode\". Drafts only; never posts.

jsath/claude-skills

Turns one raw talking-head take into a finished 1080x1920 vertical reel in Claude Code with free local tools (ffmpeg, whisper.cpp, headless Playwright): transcribes, keeps the last take of repeated lines, cuts pauses, captions every word, adds real screenshots and official logos, and runs measured QA gates. Use when someone wants a raw phone take edited into a Reel, TikTok or Short, retakes and silences cut, word-by-word captions, or a finished video checked. In Claude.ai it only produces a cut list, shot plan and .srt from a pasted transcript.

jsath/claude-skills

Turns notes, voice-note transcripts and half ideas into Reel, TikTok and YouTube scripts in the creator's own voice: ranks an idea bank, writes ten hooks per idea, writes the script at the right length, rewrites anything that sounds like AI using transcripts of the creator's past videos, and fact-checks every claim with a source and date. Use when someone wants a video script, hooks, a ranked list of what to film, a voice pass, a claims check, or a record sheet to read from while filming.

jsath/claude-skills

Reviews and rewrites a video script (YouTube long-form, a short, or a talking-head reel) so it sounds like one person talking to one friend and holds attention: kills forced analogies and presenter phrases, fixes framing, checks hooks, open loops and re-engagement beats, and suggests titles. Use when someone says fix this script, polish my script, make it sound like me, tighten this before I film, or asks for a hook or title for a video. Returns the rewritten script plus a short change log.

jsath/claude-skills

Runs five agents that keep a YouTube channel's titles and descriptions matched to what people search for now: a Channel Reader that pulls the user's own video list and stats with their YouTube Data API key, YouTube Analytics OAuth or a pasted YouTube Studio export, a Niche Watcher that finds what is working right now for similar-size channels from public search results the API returns or the user provides, a Title Writer that drafts titles, descriptions and chapters for new videos, a Back Catalogue agent that picks old videos worth a refresh and drafts new versions, and a Change Tracker that records every change the user makes and compares before and after on matched windows. Use when a creator asks for YouTube SEO, better titles or descriptions, what is working in their niche, a back catalogue refresh, or says \"seo run\". Never invents search volumes or stats and never changes a video; drafts only.

Verwandte Skills