ads-audit
Full multi-platform paid advertising audit with parallel subagent delegation. Analyzes Google Ads, Meta Ads, LinkedIn Ads, TikTok…
Generate on-brand YouTube thumbnails for Ben van Sprundel using Higgsfield in one shot. Use when the user says create a thumbnail, make a YT thumbnail, thumbnail for video, generate ben thumbnail, variation of last thumbnail, or shares a video concept and asks for a thumbnail.
Claude Code
$ npx -y skills add naveedharri/benai-skills --skill youtube-thumbnail --agent claude-code
Codex
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a codex -y
Cursor
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a cursor -y
Gemini CLI
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a gemini-cli -y
GitHub Copilot
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a github-copilot -y
OpenCode
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a opencode -y
Windsurf
$ npx skills add naveedharri/benai-skills --skill youtube-thumbnail -a windsurf -y
name: youtube-thumbnail description: "Generate on-brand YouTube thumbnails for Ben van Sprundel using Higgsfield in one shot. Use when the user says create a thumbnail, make a YT thumbnail, thumbnail for video, generate ben thumbnail, variation of last thumbnail, or shares a video concept and asks for a thumbnail. Auto-infers mode from the inputs (variation, new-with-ben, ben-plus-other, no-face), defaults to 3 variants, asks at most one question. On topic-driven runs it first researches what is working in the niche (VidIQ preferred, else Apify or the youtube connector), distills the winning patterns, and lets the user pick or mix before generating. Uses reference images as the identity anchor and anchors on the 10 most recent shipped thumbnails in references/brand-examples/. No Soul training required. Reads the locked style spec at Context/youtube-thumbnail-style.md if present. Real logos are never rendered; the thumbnail fills the frame edge-to-edge and the user composites the logo in post." disable-model-invocation: true
One-shot thumbnail generation. Takes a concept (plus optional reference image and count), infers everything else, ships 3 variants and a manifest.
Two things, ideally both in the user's first message:
1. **Concept**: what the thumbnail should show. A sentence or phrase. ("Claude Code Skills, why it changes everything for solo founders") 2. **Reference image(s)** (optional but recommended, may be multiple): a past thumbnail, a photo of Ben, a second subject, a style anchor, a real logo PNG, or any combination. Determines the mode AND all of them must be passed into the generation. Never silently drop a user-supplied reference; if they gave you one, it must end up in `medias[]`. If they gave you a LIST, read EVERY image in the list, then pass every relevant one (don't pre-select just one). Every reference image MUST be visually read with the `Read` tool before the prompt is built (see rule 2).
**If the user mentions a reference image but does not provide a path or attachment, ASK for the path BEFORE doing anything else.** Examples that require asking: "use my previous thumbnail as a ref" (which file?), "include the Anthropic logo" (where is the PNG?), "match this style" (which image?). Ask in one short line: *"Got it, what's the file path for the reference image?"* Do not guess, do not proceed, do not generate without seeing the path.
Optional third: **variant count**. Defaults to 3. Max 4.
If the concept is missing or genuinely unclear, ask ONE combined question:
> "What should the thumbnail show, and how many variations do you want? (default 3)"
Do not split into multiple questions. Do not ask about mode, model, or palette; all of that is inferred or read from the style spec.
Every `new-with-ben` thumbnail uses a reference photo of Ben as the identity anchor, passed as `medias[0]`. The photo lives at `Projects/youtube/thumbnails/refs/ben_reference_{YYYY-QQ}.jpg`.
If the user did NOT attach a photo of Ben and there is no `ben_reference_*.jpg` in `refs/`, ask once for a photo. Without it, `new-with-ben` cannot produce a faithful Ben rendering.
If multiple `ben_reference_*.jpg` files exist, pick the most recent (highest `YYYY-QQ` suffix). Note which one was used in the manifest.
| User attached | Concept hints | Mode | Model | Reference flow | |---|---|---|---|---| | 16:9 image that looks like a past thumbnail | "vary this", "tweak this", "redo with X" | `variation` | `nano_banana_2` | past thumbnail as `medias[0]` | | A portrait of Ben | Ben centered in the concept | `new-with-ben` | `nano_banana_2` | user-supplied photo as `medias[0]` | | Two images (Ben + something) | "Ben plus X" | `ben-plus-other` | `nano_banana_2` (multi-ref) | Ben as `medias[0]`, second subject as `medias[1]` | | No image | Object or abstract concept, no Ben | `no-face` | `nano_banana_2` (or `gpt_image_2` if concept centers on rendered text) | optional style anchor as `medias[0]` | | No image | Concept mentions Ben | `new-with-ben` | `nano_banana_2` | most recent `ben_reference_*.jpg` from `refs/` as `medias[0]`. If none, ask. |
`nano_banana_2` is the default model for every mode. Switch to `gpt_image_2` only when text rendering is the hero element of a no-face thumbnail.
Read `Context/youtube-thumbnail-style.md` if it exists; pull palette, framing library, expression library, lighting, prohibited list, and anchor refs. If it is missing or has `[FILL]` blocks, do not refuse: fall back to the locked Ben AI visual language in `references/visual-language.md` (the source of truth for palette, layout, framing, wardrobe, lighting, banned colors, prohibited elements, and logo handling). Surface a one-line note at the end (not before generation): "Style spec missing or incomplete; used the locked Ben AI thumbnail visual language."
1. **One question max per run, and only if a required input is missing.** Default everything else. 2. **No raw IDs in chat.** Save `job_id`s to the manifest. Show the user file paths and a one-line summary. 3. **No internal jargon.** Don't narrate "inferring mode...", "loading style spec...", "calling generate_image...". Just do it. 4. **Detect language and respond in it.** Technical args (hex codes, model names) stay English. 5. **Don't preview the prompt** unless the user asks. The 4-block prompt is internal. 6. **Don't suggest mode switches** unless generation fails. Trust the inference.
The whole loop is one chat turn. No intermediate confirmations.
1. Parse user message: extract concept, attached images, count. 2. Infer mode. For new-with-ben without an attached photo, pull the most recent ben_reference_*.jpg from refs/. If missing, ask once. 3. NICHE RESEARCH (topic-driven runs only). When the input is a video idea/topic and mode is new-with-ben, ben-plus-other, or no-face, run the research pass i
Full multi-platform paid advertising audit with parallel subagent delegation. Analyzes Google Ads, Meta Ads, LinkedIn Ads, TikTok…
Budget allocation and bidding strategy review across all ad platforms. Evaluates spend distribution, bidding strategy…
Competitor ad intelligence analysis across Google, Meta, LinkedIn, TikTok, and Microsoft. Analyzes competitor ad copy, creative…
Cross-platform creative quality audit covering ad copy, video, image, and format diversity across all platforms. Detects creative…
Google Ads deep analysis covering Search, Performance Max, Display, YouTube, and Demand Gen campaigns. Evaluates 74 checks across…
Landing page quality assessment for paid advertising campaigns. Evaluates message match, page speed, mobile experience, trust…
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…