AI Thumbnail Generator - Faces + Hook Headlines avatar

AI Thumbnail Generator - Faces + Hook Headlines

Pricing

Pay per event

Go to Apify Store
AI Thumbnail Generator - Faces + Hook Headlines

AI Thumbnail Generator - Faces + Hook Headlines

Make a video thumbnail from your title or story: an AI close-up face showing the story's emotion, with a short all-caps hook burned on in a real font so it stays sharp. PNG in 9:16, 16:9 or 1:1. Runs on your own OpenAI key. $150.00 per 1,000 thumbnails ($0.15 each).

Pricing

Pay per event

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Make an AI video thumbnail from your title, with a close-up face and a hook headline: 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.

InputA title, or a title plus the story text
OutputOne thumbnail PNG per run, and a row with its link, the emotion drawn and the hook burned on
CeilingOne thumbnail per run
Account neededYour own OpenAI key
Price$150.00 per 1,000 thumbnails, so $0.15 a thumbnail on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 33. OpenAI bills your key separately

🔍 What AI Thumbnail Generator does

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. The pick comes from English keyword rules, so 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 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 data you get from each thumbnail

What you getField
The finished PNG in the run's key-value store, and a link to itoutput.imageKey, output.imageUrl
The emotion it drew, read from your text or forced by youemotion
The headline as burned on, uppercasedhookText
The shape and pixel sizeaspectRatio, size
Your title and subreddit, echoed backtitle, subreddit
How long the run tookprocessingSeconds

▶️ How to make a thumbnail from a video title

  1. Open AI Thumbnail Generator and click Try for free.
  2. Put your video title into Title / headline. Paste the story into Story / script if you have one.
  3. Pick an Aspect ratio.
  4. Paste your key into OpenAI API key (BYO). It is stored as a secret.
  5. Click Start, then open the Storage tab and download thumbnail-*.png.

Start it with no key and you get the free sample record, with the emotion, hook and prompt it would have used.

💰 How much does it cost to make a thumbnail?

$0.15 per thumbnail on the Free plan. Paid plans pay a little less: $0.148 on Starter, $0.146 on Scale and $0.144 on Business. One run makes one thumbnail, so a run is one charge, and on the free plan the $5 Apify gives you each month covers about 33.

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 you give it

{
"title": "AITA for refusing to pay for my sister's wedding?",
"aspectRatio": "9:16",
"openaiApiKey": "sk-...",
"burnText": true
}
FieldDefaultWhat it is
titlenoneThe video title or story headline. This drives both the emotion and the hook. The box starts with an example, which is a prefill.
storynoneThe full story or script. Longer text gives the emotion detection more to work with.
subredditnoneInforms the hook style. amitheasshole fixes the hook to AM I THE A-HOLE ?.
aspectRatio9:169:16 for Shorts, Reels and TikTok, 16:9 for YouTube, 1:1 for square.
emotionnone, detectedForce one of the eight instead of letting it read the text.
hookTextnone, derivedForce the burned-in headline word for word.
gendernoneBias the face, for example feminine or masculine.
burnTexttrueTurn it off to get the raw face with no headline on it.
openaiApiKeynoneYour OpenAI key, stored as a secret. Without it you get the sample record.
imageModelgpt-image-2.5-flareThe image model name.
imageQualityhighlow, medium or high. This changes what OpenAI bills you, not what this charges.
imageBaseUrlnoneAn OpenAI-compatible images endpoint of your own, if you use one. Empty means OpenAI's own.

Leave both Title / headline and Story / script empty and the run fails straight away, key or no key, because there is nothing to read.

📤 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, and no _sample, sampleData or note:

{
"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
}
FieldHow to read it
imagePromptThe whole prompt that was sent, on the sample record. Worth reading once: it is how you learn what to change.
hookTextThe headline as it was burned on, already uppercased.
emotionWhich of the eight it read out of your text, or the one you forced.
subredditEchoed back as null when you left it empty.

🧾 Reading the output

Only a delivered thumbnail is written to the dataset. Everything else goes somewhere it cannot bill.

RowWhere it landsCharged
A thumbnailthe dataset, one rowyes
The sample recordthe key-value store, under SAMPLE_AND_NOTICESno
A TIME_LIMIT record, when the run's time limit came before the image was made (the run is then marked failed)the key-value store, under SAMPLE_AND_NOTICESno

That split is deliberate: this actor is billed per dataset row, so a sample is never written there. A keyless run leaves your dataset empty and the sample in SAMPLE_AND_NOTICES.

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. That image is charged like any other.

If the image itself cannot be made, a refused key or a rate limit for example, the run fails with the reason in the log and no thumbnail is charged.

💡 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 burnText off, then setting your own type in an editor.

From a story to a cover, in three runs:

  1. Rewrite the story with Story to Script Rewriter. Each row has a title, a hook and two altHooks.
  2. Paste those lines into Texts / variants on Hook & Virality Scorer and take the top-ranked one.
  3. Put that line into Title / headline here, with the story in Story / script.

🚧 What it does not do

  • One thumbnail per run. There is no batch mode.
  • 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 hookText and run it again.
  • The headline is one line in one typeface, Montserrat ExtraBold, lower third, uppercase, with no wrapping. A derived hook stays short, but a long hookText of your own runs off the edges.
  • Emotion detection is English word lists. On other languages, or when it guesses wrong, set emotion yourself.
  • It is not an official tool of any platform or company named on this page. Dami's Studio is independent and is not affiliated with or endorsed by any of them.

🧭 Which creator tool do you need?

If you wantUse
A thumbnail with a face and a hookThis one
Titles, descriptions and hashtags for the postSocial Metadata Generator
A hook scored before you shoot itHook & Virality Scorer
Captions burned into the videoAuto Caption Burner
A whole faceless short built from a scriptAI Faceless Video Generator
A long video cut into short clipsAI Viral Clip Cutter

❓ Questions people ask

Why do I need my own OpenAI key for thumbnails?

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 on the thumbnail?

No. It generates a person, it does not edit a photo you upload.

Can I force the exact headline?

Yes, put it in hookText and it is used word for word, uppercased. Keep it short, since there is no wrapping.

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.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/viral-thumbnail-generator. Either way the run happens on your Apify account at the same price, and OpenAI bills your key as usual.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the title you used. Read imagePrompt on the sample record first: most surprises are the prompt doing exactly what the title asked for.