AI Character Reference Bank — Consistent Characters avatar

AI Character Reference Bank — Consistent Characters

Pricing

Pay per event

Go to Apify Store
AI Character Reference Bank — Consistent Characters

AI Character Reference Bank — Consistent Characters

Describe a character and get a matching set of reference images: portrait, three-quarter, full body, side and four expressions, in one art style. Plus a character-bible prompt to reuse, so the character stays recognisable. Runs on your own OpenAI key. $150.00 per 1,000 characters ($0.15 each).

Pricing

Pay per event

Rating

5.0

(2)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

3 days ago

Last modified

Share

Describe a character once and get a matching set of AI reference images: portrait, three-quarter, full body, side profile and four expressions, all in one art style. You also get a characterBible string, a block of prompt text you paste into later prompts so the same face, hair and outfit keep turning up.

Two things up front. It runs on your own OpenAI key, so the renders land on your OpenAI bill on top of the charge here. And the consistency is written, not locked: there is no reference image behind it, so a character stays recognisable rather than identical.

InputOne or more character descriptions
OutputOne image per view, and a row per character with the image links and the character bible
CeilingEight views per character, and no cap on how many characters
Account neededYour own OpenAI API key
Price$150.00 per 1,000 characters, so $0.15 a character 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 Character Reference Bank does

You give it a character. It sets your description and your style line into a character bible, then renders that bible once per view you asked for. The bible comes from a fixed template, not from a model, so it is the same text every time for the same input.

Eight views exist: portrait, threequarter, fullbody, side, happy, angry, sad and surprised. Ask for a name that is not on that list and it is dropped without complaint. Ask for nothing but names that are not on it and you get portrait alone.

Characters run in order and views run in order inside them, so a run of five characters at five views each is 25 images made one after another. Expect a wait.

aspectRatio sets the shape: 1:1 is 1024x1024, 9:16 is 1024x1536, 16:9 is 1536x1024.

📋 What data you get from each character

What you getField
One image per view, saved in the run's key-value store, with a direct linkreferences[].imageKey, references[].imageUrl
The reusable prompt text that carries the look forwardcharacterBible
Which view each image isreferences[].view
Why a view failed, when one didreferences[].error
The name you gave, and the tidied version used in file namesname, slug
Your description, unchangeddescription

▶️ How to make a character reference sheet

  1. Open AI Character Reference Bank and click Try for free.
  2. Paste your key into OpenAI API key (BYO).
  3. Write your character into Characters. Be specific about age, hair, clothing and colours: that sentence is doing all the work.
  4. Tick the views you want in Reference views.
  5. Click Start, then take the images from the run's Storage tab and copy characterBible out of the row.

Start it with no key and you get the free demo record in the key-value store instead.

💰 How much does it cost to make a character reference sheet?

$0.15 per character on the Free plan, less on paid plans. The number of views does not change it: three views or eight, the character is one charge. On the free plan, the $5 Apify gives you each month covers about 33 characters.

You pay per character that produced at least one image. The keyless demo and a character whose views all failed are not charged. OpenAI bills your own key separately for each render, and that side does scale with the number of views, so a long view list is the expensive choice on your bill rather than on this one.

📥 What you give it

{
"characters": [
{ "name": "Milo", "description": "a small brave fox cub with a red scarf and bright green eyes, cartoon style" }
],
"views": ["portrait", "threequarter", "fullbody", "happy", "angry"],
"aspectRatio": "1:1",
"quality": "high"
}
FieldDefaultWhat it is
charactersnonePlain strings, or objects with name and description. The form opens with a fox cub filled in as an example, which is a starting point rather than a default.
viewsportrait, threequarter, fullbodyWhich of the eight to render. The form suggests five, which is a prefill, not the default: leave the field alone in the API and you get three.
styleconsistent character design, clean studio background, highly detailed, soft even lightingThe art direction folded into every prompt. Change this and the whole set changes together.
aspectRatio1:11:1, 9:16 or 16:9.
qualityhighlow, medium or high. This moves your own OpenAI bill, not the charge here.
openaiApiKeynoneYour own OpenAI key. Marked secret.
baseUrlnoneAdvanced. Any OpenAI-compatible host. Empty means https://api.openai.com/v1.

Give each character a different name. The image keys are built from it, so two characters called the same thing write to the same key and the second one overwrites the first.

Run it with a key but no usable character and the run stops with an error, because there is nothing to draw.

📤 What you get back

One dataset row per character, with the images themselves in the run's key-value store under keys like milo-portrait-1786411663909.png.

No run on record has rendered with a customer's key, so here is the real demo record a keyless run wrote on 2 October 2026, notice cut short. Its characterBible is exactly what a real run returns for this input. A delivered row has no _demo or _notice, and each entry in references carries an imageKey and an imageUrl instead of null.

{
"_demo": true,
"_notice": "SAMPLE OUTPUT ... Supply \"openaiApiKey\" to generate real reference images.",
"ok": true,
"name": "Milo",
"slug": "milo",
"description": "a small brave fox cub with a red scarf and bright green eyes, cartoon style",
"characterBible": "Milo: a small brave fox cub with a red scarf and bright green eyes, cartoon style. Style: consistent character design, clean studio background, highly detailed, soft even lighting. Always render this exact character identically (same face, hair, clothing, colors) in every scene.",
"references": [
{ "view": "portrait", "_demo": true, "imageKey": null },
{ "view": "threequarter", "_demo": true, "imageKey": null },
{ "view": "fullbody", "_demo": true, "imageKey": null },
{ "view": "happy", "_demo": true, "imageKey": null },
{ "view": "angry", "_demo": true, "imageKey": null }
]
}
FieldHow to read it
characterBibleThe reusable prompt text. This is the part worth keeping.
referencesOne entry per view. A rendered view carries view, imageKey and imageUrl. A view that failed carries view and error instead.
nameWhat you called them, or null if you passed a plain string.
slugThe tidied name used in the file keys. Unnamed characters get character-1, character-2.

🧾 Reading the output

A character is in the dataset when at least one of its views came back. Everything else goes to the SAMPLE_AND_NOTICES record in the run's key-value store.

RecordWhere it landsBilled
A character with one or more imagesA dataset rowyes
The keyless demoKey-value store, SAMPLE_AND_NOTICES, _demo: trueno
A character where every view failedKey-value store, SAMPLE_AND_NOTICES, ok: falseno
The time limit: the run stops just before it, a character it cut short keeps the views it has, and the rest are not started. With no image made, the run is marked failedKey-value store, SAMPLE_AND_NOTICES, errorCode: TIME_LIMITno

Read references before you use a row, because a character with one view out of five still counts as one character and is charged as one. The four that failed are sitting in that array with their reason next to them, and image_gen_failed_<status> is the shape those messages take.

If every view of every character fails, the run still ends green with an empty dataset. Look in SAMPLE_AND_NOTICES and at the run log, where each failed view is warned about by name.

The Overview table shows name, slug, description, characterBible and references. The images are not previewed there, since references renders as raw JSON in a table cell. Open the key-value store to actually look at them.

💡 What people use it for

  • Keeping a cast straight across a comic or webtoon, where the same four people appear in every panel.
  • Faceless video series with a recurring narrator or mascot.
  • Game and animation pitches, where a character sheet is the deliverable.
  • Building characterBible strings once and reusing them in other image tools for months.

From one character to a storyboard video, in three runs:

  1. Run this on your lead character and copy characterBible from the row.
  2. Paste it into Character notes on AI Storyboard Generator, with your story in Story / script.
  3. Give the scene imageUrl values to Storyboard Video Generator as Image URLs.

🚧 What it does not do

  • No reference-image locking. Consistency comes from the written bible, not from a locked face, so expect family resemblance rather than a clone.
  • No retries. A view that fails once fails for good in that run, including a rate-limit refusal. Run it again.
  • Every file is saved as PNG, with a PNG content type, whatever came back.
  • No editing, no upscaling, no posing. It renders the eight views it knows and stops.
  • Partial sets bill in full. One view out of five is still a character and still $0.15.
  • Same name, same file key. Two characters with the same name overwrite each other's images.
  • No photos in. It works from text only.
  • 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 AI image actor do you need?

If you wantUse
One character in a set of matching viewsThis one
A run of scene images that tell a storyAI Storyboard Generator
A single thumbnail built to be clickedAI Thumbnail Generator
A finished vertical video, script and voice includedAI Faceless Video Generator
Images you already have turned into a videoStoryboard Video Generator

❓ Questions people ask

Do I need my own OpenAI key for character images?

Yes, for the renders. Without one you get the demo record.

Can I run several characters at once?

Yes. Put them all in characters and each becomes its own row and its own charge.

What do I actually do with the character bible?

Paste it into the prompt of whatever you draw with next. That is the string that carries the look forward.

Why did one of my views come back empty?

Its reason is in that entry of references. Usually the key was refused, or the image model is not available on the host you pointed at.

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/ai-character-reference-bank. 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. Include the run ID and the error text from the references entry that failed, since that message says what the image call actually answered.