AI Thumbnail Generator - Faces + Hook Headlines
Pricing
from $150.00 / 1,000 thumbnail generateds
AI Thumbnail Generator - Faces + Hook Headlines
Make a video thumbnail with AI. Give it a title or a story. It reads the emotion and writes a short all-caps hook. Then it draws a close-up face with gpt-image-1. The headline is burned on with a real font, so it stays sharp. Sizes: 9:16, 16:9 and 1:1. Bring your own OpenAI key.
Pricing
from $150.00 / 1,000 thumbnail generateds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
20 hours ago
Last modified
Categories
Share
AI Thumbnail Generator: a close-up face and a hook headline, from your title
Give it a video title, or the whole story. It works out the emotion, writes a short all-caps hook, draws a close-up face with that expression, then burns the headline on with a real font so the words stay sharp. You get a PNG in 9:16, 16:9 or 1:1.
The image is drawn on your own OpenAI key, which you paste into the input. The $0.15 below is what this actor charges per thumbnail; the image generation itself is billed to you by OpenAI. Leave the key out and the run writes a free sample record showing the exact output shape, with no image and no thumbnail charged.
| Input | A title, or a title plus the story text |
| Output | One thumbnail PNG in the key-value store per run |
| Ceiling | One thumbnail per run |
| Account needed | Your own OpenAI key |
| Price | $0.15 per thumbnail, flat on every plan |
🖼️ What AI Thumbnail Generator does
Three steps, and the middle one is the one people get wrong on their own.
It reads your title or story and picks an emotion: betrayal, rage, shock, disgust, heartbreak, fear, guilt or defiance. That emotion becomes an explicit facial description in the image prompt, which is why the face reads at phone size instead of looking mildly concerned. You can override it.
It then pulls a short hook out of your text, in all caps, and keeps the bottom quarter of the image deliberately plain so the words have somewhere to sit.
Finally the headline is drawn on afterwards with Montserrat ExtraBold, not asked for inside the image prompt. Image models are famously bad at letters. Burning the text on with a real font is the difference between a headline and a smear of glyph-shaped noise.
Sizes follow the ratio: 9:16 gives 1024x1536, 16:9 gives 1536x1024, 1:1 gives 1024x1024.
📥 What you give it
{"title": "AITA for refusing to pay for my sister's wedding?","aspectRatio": "9:16","openaiApiKey": "sk-...","burnText": true}
| Field | What the run uses if you leave it | What it is |
|---|---|---|
title | box starts with an example | The video title or story headline. This drives both the emotion and the hook. |
story | empty | The full story or script. Longer text gives the emotion detection more to work with. |
subreddit | empty | Informs the hook style. amitheasshole fixes the hook to AM I THE A-HOLE ?. |
aspectRatio | 9:16 | 9:16 for Shorts, Reels and TikTok, 16:9 for YouTube, 1:1 for square. |
emotion | auto-detected | Force one of the eight instead of letting it read the text. |
hookText | derived from your text | Force the burned-in headline word for word. |
gender | the model's own default | Bias the face, for example feminine or masculine. |
burnText | true | Turn it off to get the raw face with no headline on it. |
openaiApiKey | none | Your OpenAI key, stored as a secret. Without it you get the sample record. |
imageModel | gpt-image-1 | The image model name. |
imageQuality | high | low, medium or high. This changes what OpenAI bills you, not what this charges. |
imageBaseUrl | OpenAI's own | An OpenAI-compatible images endpoint of your own, if you use one. |
📤 What you get back
One dataset row per thumbnail, with the PNG itself in the run's key-value store under
thumbnail-<timestamp>.png.
Below is the real record a keyless run wrote, cut short where the note and the prompt run long. A
real run returns the same fields with output.imageKey and output.imageUrl filled in:
{"ok": true,"_sample": true,"sampleData": true,"note": "SAMPLE OUTPUT ...","title": "AITA for refusing to pay for my sister's wedding?","subreddit": null,"emotion": "shock","hookText": "REFUSING TO PAY","aspectRatio": "9:16","size": "1024x1536","imagePrompt": "Generate one ultra-high-quality viral YouTube thumbnail image. VERTICAL 9:16 portrait (1024x1536). ...","output": { "imageKey": null, "imageUrl": null },"processingSeconds": 0}
| Field | What it is |
|---|---|
output.imageKey, output.imageUrl | The finished PNG in the key-value store, and a link to it. |
emotion | Which of the eight it read out of your text, or the one you forced. |
hookText | The headline as it was burned on, already uppercased. |
imagePrompt | The whole prompt that was sent. Worth reading once: it is how you learn what to change. |
size | The pixel size that matches your ratio. |
subreddit | Echoed back as null when you left it empty. |
processingSeconds | How long the run took end to end. |
🧾 Reading the output
Only a delivered thumbnail is written to the dataset. Everything else goes somewhere it cannot bill.
| Row | Where it lands | Charged |
|---|---|---|
| A thumbnail | the dataset, one row | yes |
| The sample record | the key-value store, under SAMPLE_AND_NOTICES | no |
| A notice or a failure record | the same key | no |
That split is deliberate. This actor is billed per dataset row, so a sample, a notice or a failure
must never be written there, and it is not. If you start a run with no key, your dataset stays empty
and the sample sits in SAMPLE_AND_NOTICES for you to read.
If the headline overlay fails for any reason, the run still hands you the image without the text rather than failing, and says so in the log.
▶️ How to run it
- Open AI Thumbnail Generator and click Try for free.
- Put your video title into Title / headline. Paste the story into Story if you have one.
- Pick an Aspect ratio.
- Paste your key into OpenAI API key. It is stored as a secret.
- Click Start, then open the Storage tab and download
thumbnail-*.png.
💰 How much does it cost?
$0.15 per thumbnail. Flat on every Apify plan, no volume tiers. One run makes one thumbnail, so a run is one charge.
A keyless run is not charged for a thumbnail, because no thumbnail is made and nothing is written to
the dataset. Image generation is billed to you by OpenAI on your own key and does not appear here.
imageQuality changes that side of the bill, not this one.
💡 What people use it for
- Covers for Reddit story channels, where the hook and the face are the whole click.
- Testing three emotions on the same title to see which one gets the click, by forcing
emotion. - Making the 16:9 and the 9:16 version of one cover so a long video and its short match.
- Getting the raw face with
burnTextoff, then setting your own type in an editor. - Batching through a task with different titles, one run each.
🚧 What it does not do
- One thumbnail per run. There is no batch mode.
- It needs your own OpenAI key. There is no shared key on this actor.
- It draws a face, not your face. No photo upload, no likeness of a real person, no face swap.
- No logos, no brand assets, no product shots. The prompt asks for a clean image with no text, no watermark and no UI.
- The model still decides what it draws. Two runs on the same title give you two different faces, which is useful for testing and annoying if you wanted the same one twice.
- No editing after the fact. To change the headline, set
hookTextand run it again. - The headline is one line in one typeface. Montserrat ExtraBold, lower third, uppercase.
- No A/B testing or analytics. It makes the image, what happens after is yours.
🧭 Which creator tool do you need?
| If you want | Use |
|---|---|
| A thumbnail with a face and a hook | This one |
| Captions burned into the video | Auto Caption Burner |
| A whole faceless short built from a script | AI Faceless Short Generator |
| A long video cut into short clips | AI Viral Clip Cutter |
| A hook scored before you shoot it | Hook Virality Scorer |
❓ Questions people ask
Why do I need my own OpenAI key? The image is generated on your key, so the usage and the cost of generation stay on your account.
Can I use my own face? No. It generates a person, it does not edit a photo you upload.
Why is the headline added afterwards instead of inside the image? Because image models garble text. Drawing it on afterwards with a real typeface is the only way to get letters that read.
Can I force the exact headline? Yes, put it in hookText and it is used word for word,
uppercased.
What does the emotion actually change? It swaps in a specific facial description, like a dropped
jaw and raised eyebrows for shock. That is the bit that makes a thumbnail readable at phone size.
What happens if I run it without a key? You get the sample record in the key-value store under
SAMPLE_AND_NOTICES, no image, and no thumbnail charge.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the title you used. Read
imagePrompt on the row first: most surprises are the prompt doing exactly what the title asked
for.


