Best for
- "make me a YouTube thumbnail"
- "create a thumbnail for this video"
- "I need thumbnail variations / A/B tests"
novoads/agent-skills/skills/generate-youtube-thumbnail/SKILL.md
Generate high-CTR YouTube thumbnails using Nano Banana Pro via the Novoads API. Handles reference image upload, character likeness alignment, proven CTR-tested prompt formulas, and bounded batch generation. Use when the user asks to create a YouTube thumbnail, video thumbnail, A/B test thumbnail variations, or refers to thumbnail design with their face, brand assets, or product photos.
Decision brief
A reusable workflow for creating YouTube thumbnails via Novoads' POST /v1/images with nano-banana-pro, with proper character likeness and proven CTR formulas.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/novoads/agent-skills --skill "skills/generate-youtube-thumbnail"Inspect the Agent Skill "generate-youtube-thumbnail" from https://github.com/novoads/agent-skills/blob/2f5e03f9c625fd719a1bc5cddaf7f7fe1a6f9e44/skills/generate-youtube-thumbnail/SKILL.md at commit 2f5e03f9c625fd719a1bc5cddaf7f7fe1a6f9e44. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Ask the user for any missing context, but only what you actually need:
After all generations complete, read each thumbnail with the Read tool and present:
Trigger on phrases like: - "make me a YouTube thumbnail" - "create a thumbnail for this video" - "I need thumbnail variations / A/B tests" - "remake this thumbnail with my face" - "generate 10 thumbnail concepts" - "thumbnail with [me / my product / my brand]"
Paths below are relative to this skill's own folder, and every file they name ships inside it. That holds wherever the folder lands: the repo, the .claude/skills/ and .cursor/skills/ copies sync-skill.sh makes, or a standalone install of just this skill.
REST key required. A Novoads MCP connector is not a substitute. If NOVOADSAPIKEY is missing or still the placeholder, stop before any generation work and tell the user: "Before continuing, create an API key at and paste it into .env." That holds even when mcpnovoads tools are co…
Permission review
The documentation includes sending, uploading, or posting data to a remote service.
curl -sS -X POST "$NOVOADS_BASE_URL/v1/estimates" \The documentation includes network, browsing, or remote request actions.
curl -sS -X POST "$NOVOADS_BASE_URL/v1/estimates" \Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 9 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
A reusable workflow for creating YouTube thumbnails via Novoads' POST /v1/images with
nano-banana-pro, with proper character likeness and proven CTR formulas.
Trigger on phrases like:
Paths below are relative to this skill's own folder, and every file they name ships inside
it. That holds wherever the folder lands: the repo, the .claude/skills/ and .cursor/skills/
copies sync-skill.sh makes, or a standalone install of just this skill.
prompting/guide.md — likeness alignment, expressions cheat sheet, prompt structureprompting/formulas.md — 5 proven thumbnail formulas with templatesscripts/generate-batch.sh — the batch script (upload once → generate → download)For the API contract itself — error codes, rate limits, the upload flow — the novoads-api
skill's reference.md is the authority.
.env with NOVOADS_API_KEY (novo_ + 64 hex). Verify with ./scripts/check-novoads-env.sh.PRODUCT_ID. Omit it and jobs land in your default product; productId is organizational only and does not influence what is generated.face/ — several photos of the subject (headshot + 3/4 angles + close-ups + expressions)logos/ — brand logos as filesproducts/ — clean product shotsexamples/ — real ad screenshots, comparison materialstyle/ — example thumbnails the user wants to match aestheticallyREST key required. A Novoads MCP connector is not a substitute. If
NOVOADS_API_KEYis missing or still the placeholder, stop before any generation work and tell the user: "Before continuing, create an API key at https://novoads.ai/dashboard/settings?tab=api and paste it into.env." That holds even whenmcp__novoads__*tools are connected and authenticated in the session. Never callmcp__novoads__*tools from this repo's workflows: they are a different surface with different behavior, including the units they quote costs in. Repo installs verify with./scripts/check-novoads-env.sh; a solo install checksNOVOADS_API_KEYin the environment.
Pack version. Every /v1 response carries X-Novoads-Pack-Version; mention a newer pack at https://github.com/novoads/agent-skills only when that header names a version NEWER than this file's metadata.packVersion — equal or older is nothing to say, and it is never a reason to stop.
If references are missing or the user pastes images in chat instead of saving them, stop and
ask the user to drop the actual files into a project folder (e.g. references/youtube thumbnail/).
Chat paste ≠ file on disk.
nano-banana-pro accepts up to 14 referenceAssetIds per generation, which is fal's own
published ceiling for the /edit arm this workflow calls, confirmed by probe on 2026-08-03. This
skill runs on nano-banana-pro, so the fork's original advice applies here unchanged.
For a while this pack said the cap was 4 on every image model and that "always use 5+ face references" was void. That was our own held number, carried from a shared constant and never tested against the transport we serve this model from. It has been corrected.
Two facts still shape how you spend them:
assetId is durable and reusable. Upload once, reference forever, across runs and across
sessions. Uploading is free and unlimited — only generations are charged. So keep a library of
uploaded face angles and brand assets and pick from it.reve-2.1 takes 8; gpt-image-2 takes 4, and that 4 is
measured, not assumed — a 5-reference body was refused on the same 2026-08-04 probe run. If you
route a likeness run to gpt-image-2, the 5+ advice does not survive the trip; say so rather
than silently citing four.Always use 5+ face references for character work. With 1-2 the model generalizes to a generic face; with 5+ from different angles it locks in the specific person. Spend them: headshot, 3/4 angle, studio close-up, one smiling, one neutral, plus any brand asset that must be pixel-accurate.
Rolling window for a series (ported from the character-sheet workflow): when generating
variation N, pass [hero, N-1, N-2, N-3, N-4] — the approved hero shot as the anchor plus the
four most recent good outputs. Drop any variation that drifted rather than feeding it
forward; a bad reference propagates.
If the user insists on more coverage, the answer is more prompt specificity, not more refs.
Ask the user for any missing context, but only what you actually need:
ls "references/youtube thumbnail/"
If references are missing, ask the user to drop them. Do not proceed with text-only descriptions for brand-specific items (logos, branded products, branded apparel) — you'll get generic AI approximations that don't match the brand. Generic descriptions are OK for backgrounds, expressions, and clothing.
Then pick the ones that will be cited — 5+ face angles for character work, up to 14 in all (see the cap section above).
curl -sS -X POST "$NOVOADS_BASE_URL/v1/estimates" \
-H "Authorization: Bearer $NOVOADS_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"kind":"image","model":"nano-banana-pro","prompt":"<one composed prompt>","numImages":1}'
Free, and the only legitimate source of a price. Multiply by the number of variations and
show the user the total against their balance before firing anything. Wait for an explicit
yes.
Never quote a credit figure from memory, from logs/novoads-api.jsonl, or from
MASTER_CONTEXT.md — there are no credit numbers written down anywhere in this repo, on
purpose. Name the model in the estimate body: the image models' schedules differ by more
than 3×, and an estimate that omits model prices gpt-image-2, understating a
nano-banana-pro batch.
The call says nothing about the prompt — no endpoint on this API reads one for quality. Re-read the prompt against the formula yourself before pricing: a batch runs the same shape N times, so a flaw in it is paid for N times.
See prompting/formulas.md for the 5 proven formulas.
Match the user's intent:
| User says... | Use formula |
|---|---|
| "Just me with my brand" / "branding thumbnail" | Peace-sign / branding |
| "Real vs AI" / "compare" / "before/after" | Real vs AI comparison |
| "Show the process" / "with the terminal" | Terminal flow |
| "Surprised face" / "shocked reaction" | Reaction shock |
| "Replace" / "alternative" / "swap out" | Before/after split |
Follow the template in prompting/guide.md:
YouTube thumbnail, 16:9 landscape.
[SUBJECT — likeness block + clothing + framing + "no hands" if applicable]
Expression: [specific expression from expressions cheat sheet]
[LEFT visual element + reference]
[RIGHT visual element + reference]
Across the top in massive bold yellow block letters with thick black outline reads [TITLE].
Background: [color + glow]
Style: [aesthetic notes]
Avoid: distorted face, extra fingers, hands visible, blurry logos, generic face
Always include the CRITICAL CHARACTER LIKENESS block when the subject is a real person. It and the references do different jobs: the refs fix what the face IS, the block fixes what the prompt must not let drift. Neither substitutes for the other, so write both.
Prompts are capped per generation; the API names the limit if you exceed it. Reference the uploaded images positionally ("the face in the first reference image") — order is preserved.
Copy scripts/generate-batch.sh to a new versioned script (scripts/generate-thumbnails-vN.sh)
and modify:
REF_BASE and COMMON_REFS (max 14 — the script's REF_CAP) with your reference file pathsPROMPTS array entries with your composed promptsbash scripts/generate-thumbnails-vN.sh > output/run.log 2>&1 &tail -F output/run.log | grep -E "DONE|FAILED|charged"The script handles:
creditsChargedAfter all generations complete, read each thumbnail with the Read tool and present:
This is the opposite of how the previous backend worked, where a reused reference caused
HTTP 500 UNKNOWN_ERROR and every generation needed a fresh upload. On Novoads,
POST /v1/uploads returns an assetId that keeps working across calls and across sessions.
Upload once per batch — or once per campaign — and reuse. Re-uploading the same face photo
produces a different id and quietly loses the anchor that was holding likeness steady.
The presigned uploadUrl does expire (expiresInSeconds in the response), but that only
affects the PUT window, not the assetId.
POST /v1/uploads returns a headers object. The PUT must send those headers byte for byte —
Content-Type and Content-Length are both part of the URL signature, so storage answers 403 if
either differs, including an added ; charset=…. Don't let an HTTP client infer the type.
The old "images smaller than 1080px longest side return 422 — image too small" rule was
specific to the previous backend and has not been verified against Novoads. The batch script
still upscales, because small references genuinely produce worse likeness — but do not report
the 422 claim to a user as an API rule. (Flagged for confirmation in the Phase 4 live smoke.)
referenceAssetIds is an array of plain stringsNot objects, and not file paths — the assetId values returned by POST /v1/uploads.
Maximum 14 on nano-banana-pro, which is the model this skill runs on. The other image
models are lower and the number does not travel: reve-2.1 takes 8, gpt-image-2 takes 4.
If the user pastes an image directly in chat, you cannot pass it to the API. Ask them to save the actual file into a project folder.
With 1-2 face references the AI generalizes to "generic bearded man with glasses." With 5+ face references from different angles it locks in the specific person. Always use 5+ face references for character work. For a series, use the rolling window described above.
The API allows 5 concurrent generations per organization. A 6th in flight returns 429 with
details.reason: concurrency_limit — and unlike the other 429 causes, slowing your request
rate does not help; only a finishing job frees a slot. The batch script caps itself at 4 in
flight for headroom.
There are no idempotency keys on this API, so resubmitting after a timeout or a 500 can
render and charge twice. Check GET /v1/generations for a job that already landed before
resubmitting. The batch script deliberately does not auto-retry.
Default macOS bash doesn't support declare -A (associative arrays). The batch script uses
indexed arrays instead.
Text descriptions of brand-specific items (logos, branded apparel, custom merchandise) produce generic approximations. For pixel-accurate brand reproduction, save the actual brand asset to disk and cite it as one of your references.
There is no cost table in this file, deliberately. Every price comes from a live
POST /v1/estimates in the current session, shown to the user and approved before anything is
generated (see step 3). Report the real total from creditsCharged when the run finishes.
nano-banana-pro costs more per image than gpt-image-2. If a batch is exploratory and the
concept doesn't depend on photoreal likeness, pricing both is worth the two free calls.
prompting/guide.md — likeness alignment, expressions, prompt structureprompting/formulas.md — 5 proven CTR formulas with prompt templatesscripts/generate-batch.sh — the batch generatornovoads-api skill — endpoint, upload flow, error codes, rate limitsnano-banana-image-ad skill — the same model, pointed at Meta ad creativesFrequently asked questions
A reusable workflow for creating YouTube thumbnails via Novoads' POST /v1/images with nano-banana-pro, with proper character likeness and proven CTR formulas.
The source record exposes this install command: npx skills add https://github.com/novoads/agent-skills --skill "skills/generate-youtube-thumbnail". Inspect the command and pinned source before running it.
Static rules flagged send-data, network in the source; the page lists the matching lines and excerpts.
Alternatives
rampstackco/claude-skills
Run QA testing on a page, feature, or full site at one of three depth tiers (smoke, standard, full). Use this skill whenever the user asks to QA a page or site, run a smoke test after a deploy, verify a page before launch, or run a regression sweep. Triggers on QA, QA sweep, smoke test, regression test, post-deploy check, pre-launch check, verify the deploy, test this page, does the page render, broken link, 404, image not loading. Also triggers proactively after a deploy or a new page launch wh
bestdeejay-design/agent-skills
Audit and polish frontend (static HTML/CSS/JS or built SPA) to measurable perfection: real-Chrome Lighthouse >=13 runs (mobile+desktop, no Playwright internals), SEO meta layer, WCAG contrast by computed luminance, heading order, a11y checks (axe-core subset: img-alt/button-name/link-name/label/aria-valid/landmark-unique), back-to-top navigation check, design tokens (zero raw hex outside tokens), adaptive checks, and OG-image generation with a crop-safe layout. Front-End Checklist-inspired check
minhnv0807/ai-business-skills
Use when a price has to be set or changed — value-based pricing, anchoring, charm pricing, decoy tiers, good-better-best packaging, discount policy, and margin math, with currency psychology for US, EU, SEA, and LATAM plus dropshipping markup and BE-ROAS. Trigger on 'pricing strategy', 'how much should I charge', 'should I raise prices', 'price tiers', 'customers say it is too expensive', 'dropshipping markup'. Also use when the product is not selling and the user suspects price is the reason. N
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist