AI CEO Lab← All free guides
On this page
Content · YouTube

YouTube Thumbnails With ChatGPT: The Prompt I Use

My face, one object, three words. The exact prompt I give ChatGPT's image model, the face photo rule that stops it drawing a stranger, and why I put the headline on with a real font afterwards instead of letting the model spell.

YouTube Thumbnails With ChatGPT: The Prompt I Use

For a long time my thumbnails were the last thing I did and the first thing people judged. I would finish a video, open a design tool at eleven at night, and produce something that looked like a doctor made it. Which is what I am, and which is the problem.

The thumbnail is not decoration. On YouTube the thumbnail and the title are the ad for the video. If the ad is weak, the video does not get the click, and a video nobody clicks may as well not exist.

What changed is that the image model behind ChatGPT got good enough to draw me. Not a generic bearded man. Me. The catch is that it only does that if you feed it enough of your face and tell it, in plain words, not to generalise. And it still cannot spell reliably, so I stopped asking it to.

This guide is the system I run now. A chat window version you can do today with five photos, and the script version that renders a 1280 by 720 file with the headline set in a real font. Same prompt underneath both.

The three levels

Level 1 · Manual

You finish the video, open a design tool late at night, drag your face onto a coloured background, and hope.

Level 2 · AI + connections

You have a folder of five face photos and one prompt. You describe the video in one line, pick an expression, pick three words, and get four options in a few minutes. You put the words on with a real font.

Level 3 · Agents on cadence

The script runs from a job file. New video title in, four finished 1280 by 720 thumbnails out, headline already set, opened in Preview for you to pick. An agent drafts the three words from the title and you only choose.

Connections for this guide: ChatGPT with image generation, or the image API behind it with a key in an environment variable. A folder with at least five photos of your face from different angles. Optional: the fonts Anton, Archivo Black or Bebas Neue for the headline pass.

The mental model

Wrong

Describe yourself in words and ask the model for a thumbnail with the title on it.

Right

Feed it five photos of your face, one expression, one object and a tight crop. Let it draw the picture. You put the words on afterwards.

RoleTalks to youJob
The faceAlwaysFive or more reference photos on disk, named in the prompt as the exact same person
The expressionOne per thumbnailOne specific phrase from the list, never 'happy' or 'excited'
The objectOneThe thing the video is about, beside the face at chest height
The headlineAfter the imageThree words or fewer, ALL CAPS, real font, readable at phone width

Five photos, one prompt, three words

1. Build the face folder

Save at least five photos of yourself into one folder: a straight headshot, a three quarter angle, two close ups, and one with a strong expression. Files on disk, not pasted into a chat. With one or two photos the model averages you into a generic face. With five or more from different angles it locks on. This is the single biggest difference between 'a bearded guy' and me.

2. Write the three words

Before any image, brainstorm five to eight headlines of one to three words, all caps. Two words is ideal. The angle is one of: curiosity gap, controversy, result, shock, authority. Numbers, money and negatives ('DON'T', 'STOP', 'NEVER') pull hardest. Test each one at phone size in your head. If it needs four words it is a title, not a thumbnail.

3. Pick one expression

Vague expressions underperform specific ones. I choose one phrase and paste it verbatim: 'wide excited open mouth smile showing teeth, eyebrows raised' for reveals; 'mouth slightly open in surprise, eyes wide' for curiosity; 'smug confident smirk with one eyebrow raised' for secrets; 'confident closed mouth smile, eyes warm' for authority. If I do not want hands in the shot I say 'NO HANDS VISIBLE, head and upper shoulders only', because otherwise the model invents fingers.

4. Compose the prompt

The prompt below has a fixed order: format, the likeness block, clothing and crop, expression, the object beside me, background, style, and an avoid list. The likeness block names my actual features and says 'this is a specific real person, do not generalise'. A tight head and shoulders crop with the face filling about half the frame gives the model the most face data to work with. Wide shots drift.

5. Generate a small batch

Four images, not one. In the chat window that is four separate asks with the same prompt and the photos attached each time. In the script it is four prompts in one job file. Then look at them at the size a phone shows them. Likeness first, readability second, emotion third.

6. Put the headline on with a real font

I stopped asking the model to spell. The finished image gets the three words laid on in Anton or Archivo Black, white with a thin dark outline, top or bottom anchored, at most 92 percent of the width. That one step is what makes it look designed instead of generated. In the chat window version you do this in any editor. In the script it is a headline spec in the job file.

7. Export at 1280 by 720

YouTube wants 16 by 9. The image model I use renders 3 by 2, so the script letterboxes the reference first and trims the render back to 16 by 9, biased to keep the top where the headline sits. If you are doing it by hand, crop to 1280 by 720 and check nothing important was cut off the sides.

Starter prompts

Paste these as written. They are short on purpose, because the long ones drift.

The prompt: generate the thumbnail

YouTube thumbnail, 16:9 landscape. CRITICAL CHARACTER LIKENESS: the subject is the exact same person shown in ALL the attached face reference photos. Match his face EXACTLY: [describe skin tone, hair, beard or no beard, glasses, face shape]. Keep the same facial proportions, eye shape and skin tone as the references. Do not generalise. This is a specific real person and his exact likeness must be preserved. He is wearing [clothing]. Tight head and shoulders crop, face filling the central half of the frame, facing camera. NO HANDS VISIBLE. Expression: [paste one expression phrase]. To his [left or right] at chest level is [one object the video is about], large and clearly readable. Background: [dark navy gradient with a soft blue glow]. Style: clean high impact YouTube thumbnail, saturated colour, dramatic rim lighting, no text anywhere in the image. Avoid: distorted face, generic face, hands visible, extra fingers, any text or letters, blurry logos.

The three words prompt

My video title is "[title]". Give me eight thumbnail headlines of one to three words, ALL CAPS, each tagged with its angle (curiosity gap, controversy, result, shock, authority). Prefer numbers, money and negatives. Reject anything that needs a fourth word or that would not be readable at 320 pixels wide. Then pick your top two and say why in one line each.

The review prompt

Here are four thumbnails for "[title]". For each one score likeness to the reference photos, readability at phone size, and whether the expression matches the angle [angle]. Rank them and tell me the one thing to change on the top pick. Do not suggest adding more elements.

Layer 2

From the chat window to the script

The chat window is fine for one thumbnail. The moment you want four per video and a headline in a real font, the same prompt runs better as a script against the image API. Three things change.

References become file paths

Instead of attaching photos to a message, the script sends them with the prompt through the image edits endpoint with input fidelity set high. The face folder stays on disk and is reused for every video.

The headline becomes a spec

A small JSON block: the lines, a font (anton, archivo or bebas), an anchor (top, center or bottom), a stroke colour, and a maximum width fraction. The script renders it onto the finished image. The model never sees the words.

Output is fixed at 1280 by 720

The script pads the reference to the model's 3 by 2 frame so nothing is sliced off the sides, then trims back to 16 by 9 keeping the top. You get a JPEG named by slug and number, opened in Preview.

Give it to your agent, three ways

Same skill, three worlds. Pick the one you actually use. The skill file at the bottom of this page is the instructions in every case.

An agent with connectors (Claude Desktop, Claude Code, Grok Bot)

Claude does not generate images itself, but Claude Code can run the script and review the results. Give it the skill below and the face folder path.

  1. Put the face photos in one folder and export the image API key in your shell as OPENAI_API_KEY (or an OpenRouter key as OPENROUTER_API_KEY, which the script prefers if both exist).
  2. Save the skill file from the bottom of this page as a skill. Say "make my thumbnail for [title]".
  3. The agent drafts the three words, composes the prompt, writes a job file, runs the generator, and opens the results. It then reads each output and ranks them.
  4. Grok Bot and Hermes: same skill, same script. They need a shell and the same environment variable.
# job.json
{
  "slug": "grok-bot",
  "refs": ["references/face/1.jpg", "references/face/2.jpg", "references/face/3.jpg", "references/face/4.jpg", "references/face/5.jpg"],
  "prompts": ["<the prompt, expression 1>", "<the prompt, expression 2>"],
  "headline": {"lines": [[{"t": "I FIRED", "fill": "white"}], [{"t": "MY EDITOR", "fill": "yellow"}]], "font": "anton", "anchor": "top", "stroke": "#101010"}
}
# run
python3 scripts/generate.py --job job.json --out ./thumbs --fit preserve --open

ChatGPT (a project or a custom GPT)

This is the native world. ChatGPT's image generation is the same model family the script calls, so the chat window works on its own with one discipline: attach the photos every time.

  1. Create a ChatGPT Project called Thumbnails and paste the skill below as its instructions.
  2. Start a new chat inside it, attach all five face photos, and paste the prompt with your details filled in. Ask for one image. Repeat in a fresh message for each expression so it does not blend them.
  3. Download the images and set the three words in any editor with Anton or Archivo Black, white with a thin dark outline. Do not ask the model to add text.
  4. Crop to 1280 by 720. Check the sides, the model's frame is narrower than YouTube's.

Anything with an API (a token and a curl call)

If your agent only speaks HTTP, the image edits endpoint takes the prompt plus the reference files as multipart form data. Key in an environment variable, never in the prompt.

  1. Export OPENAI_API_KEY in your shell.
  2. Send the prompt and the face files to the edits endpoint with input_fidelity high and a 16 by 9 or 3 by 2 size, quality high, n=1. Repeat per expression.
  3. Decode the base64 image in the response, lay the headline on with a real font, resize to 1280 by 720.
  4. Everything else in the skill is unchanged. The prompt is model agnostic.
export OPENAI_API_KEY=...   # never in the prompt
curl -s https://api.openai.com/v1/images/edits \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F model=gpt-image-2 -F quality=high -F n=1 -F size=2048x1152 -F input_fidelity=high \
  -F "prompt=$(cat prompt.txt)" \
  -F image[]=@references/face/1.jpg -F image[]=@references/face/2.jpg \
  -F image[]=@references/face/3.jpg -F image[]=@references/face/4.jpg -F image[]=@references/face/5.jpg \
  | jq -r '.data[0].b64_json' | base64 -d > raw.png

Failure modes

Every one of these has happened to me or to someone I set this up for.

FailureFix
Looks like a generic man with my beardAdd face references until you have five from different angles, and strengthen the likeness block
Model spelled the headline wrong or bent itRemove all text from the prompt and set the words in a real font afterwards
Six fingers on the hand holding the phoneSay NO HANDS VISIBLE or accept a higher reject rate on pointing shots
Headline cut off at the edgeLetterbox the reference before generating, keep the words inside 92 percent of the width
Four words looked fine on the desktop, mush on the phoneThree words maximum, two is ideal, judge at 320 pixels
Three objects, a logo and a chart in one frameOne object. The face and the words carry the rest
Pasted photos into the chat and the script said no references foundReferences must be files on disk, a chat paste is not a file

The tools I use for this

ToolWhat it is for here
ChatGPTThe image model that draws me. Chat window for one, API for a batch.no link, just use it
ClaudeDrafts the three words, writes the job file, runs the script and ranks the output.Open
Anton, Archivo Black, Bebas NeueFree fonts for the headline pass. The model never spells.no link, just use it
TellaWhere the video itself gets recorded; the thumbnail exists before this is done.Get it
Some links are affiliate links. I only recommend tools I run in my own accounts.

The free skill

It is the thumbnail workflow I run before every upload, written as instructions for an agent. It checks the face folder exists on disk, brainstorms headlines of three words or fewer, picks one expression from a short list, composes the prompt with the likeness block, generates a small batch, then lays the headline on with a real font and reviews the results for likeness, readability at phone size and emotional match.

How to use it: copy the whole thing, paste it into your bot (or save it as a skill file if you use Claude Code), and say “make my thumbnail”. It walks you through the rest. Works with any agent that can read your files.
youtube-thumbnail-chatgpt.md
---
name: chatgpt-thumbnails
description: Makes a YouTube thumbnail the way I make mine: five face reference photos on disk, a likeness block that stops the model drawing a stranger, one precise expression, one object, a headline of three words or fewer set afterwards in a real font, exported at 1280x720. Trigger on "make my thumbnail", "thumbnail for this video", "thumbnail variations", "redo this thumbnail with my face".
---

# Thumbnail With ChatGPT

You are producing the ad for a video. The thumbnail and the title are what gets the click.
You make the picture with the image model and you set the words separately. You never ask
the model to spell.

## Before you start

1. Ask for the video title and the angle if not given. Angles: curiosity gap, controversy,
   result, shock, authority.
2. Check the face folder exists ON DISK and holds at least five photos from different angles
   (headshot, three quarter, two close ups, one strong expression). If fewer than five, stop
   and ask for more. If the user pasted photos into the chat, stop: a chat paste is not a
   file. Ask them to drop the files into a folder.
3. If the video is about a tool, product or logo, ask for that asset as a file too. A text
   description of a logo produces a generic approximation.

## Step 1: The three words

Brainstorm eight headlines, one to three words, ALL CAPS. Two words is ideal. Tag each with
its angle. Prefer numbers, money and negatives (DON'T, STOP, NEVER). Reject anything that
needs a fourth word or would not be readable at 320 pixels wide. Present the top two and
let the user pick.

## Step 2: One expression

Pick ONE and use the full phrase in the prompt, never a single adjective:
- reveal or "this is amazing": wide excited open mouth smile showing teeth, eyebrows raised
- curiosity or "wait, what": mouth slightly open in surprise, eyes wide, eyebrows raised
- secret or "I know something": smug confident smirk with one eyebrow raised, slight head tilt
- authority or tutorial: confident closed mouth smile, looking directly at camera, eyes warm

Unless the shot needs hands, add "NO HANDS VISIBLE, head and upper shoulders only".

## Step 3: Compose the prompt

Fixed order. Fill every bracket with a real specific.

```
YouTube thumbnail, 16:9 landscape.
CRITICAL CHARACTER LIKENESS: the subject is the exact same person shown in ALL the
attached face reference photos. Match his face EXACTLY: [skin tone, hair, beard or
none, glasses, face shape]. Keep the same facial proportions, eye shape and skin tone
as the references. Do not generalise. This is a specific real person and his exact
likeness must be preserved.
He is wearing [clothing]. Tight head and shoulders crop, face filling the central half
of the frame, facing camera. NO HANDS VISIBLE.
Expression: [the full phrase].
To his [left/right] at chest level is [one object the video is about], large and clear.
[If a logo file exists: use the [name] reference exactly.]
Background: [dark colour gradient with a soft glow].
Style: clean high impact YouTube thumbnail, saturated colour, dramatic rim lighting,
no text anywhere in the image.
Avoid: distorted face, generic face, hands visible, extra fingers, any text or
letters, blurry logos.
```

One object. Never a collage. No text in the image, ever.

## Step 4: Generate a batch

Four images per video, one expression or one background per image. Chat window: a fresh
message per image with all five photos attached each time. Script: one job file with four
prompts and the refs array, run `generate.py --job job.json --fit preserve --open`.

## Step 5: Headline in a real font

Lay the chosen words on the finished image with Anton, Archivo Black or Bebas Neue. White
(or one accent colour on the second line), thin dark outline, anchored top or bottom, no
wider than 92 percent of the frame. In the script this is the `headline` spec in the job
file. In a chat workflow, do it in any image editor.

## Step 6: Export and review

Output is 1280x720. The image model renders 3:2, so check nothing important was cut off
the sides; the script letterboxes the reference and trims back to 16:9 keeping the top.

Review each result at phone size and report, per image:
1. Likeness: does it look like the reference person, or a generic version?
2. Readability: are the words legible at 320 pixels wide?
3. Emotion: does the expression match the angle?

Rank them. Give one change for the top pick. Never suggest adding more elements.

## Fixes

- Likeness off: more face references, name the features that drifted, tighter crop.
- Wrong text: remove every mention of text from the prompt; set it with a font.
- Bad hands: NO HANDS VISIBLE, or accept a higher reject rate on pointing shots.
- Logo wrong: pass the actual file and say "use the [name] reference exactly".
- Headline clipped: keep it inside 92 percent of the width, letterbox before generating.

What done looks like at thirty days

  • A face folder with five or more photos exists and every thumbnail uses it
  • Every thumbnail this month was generated before the video was uploaded
  • Headlines are three words or fewer and set in a real font
  • You picked from a batch of four at least three times
  • Nobody had to ask who the person in the thumbnail was
  • The prompt lives in a file you can hand to an agent

Want the whole YouTube packaging system, not just the picture?

Inside the AI CEO Lab the Content Engine module covers the title, the thumbnail and the first line together, with the research that tells you which of the three is actually broken.

Pick a side.

Most people read this and forget it by Friday.

The other kind builds the thing that week. They stop needing free guides, because they are too busy running actual systems.

Free guides stay free. The room is where the builds happen.