AI Character Reference Bank — Consistent Characters
Pricing
from $150.00 / 1,000 character banks
AI Character Reference Bank — Consistent Characters
Describe one character and get a matching reference set. You get a portrait, three-quarter, full body, side profile and expression sheets. It also writes a character-bible prompt you can reuse. That keeps the face, hair, outfit and colors the same in every shot. $0.15 per character, flat.
Pricing
from $150.00 / 1,000 character banks
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
10 days ago
Last modified
Categories
Share
AI Character Reference Bank: one description, a matching set of reference images
Describe a character in a sentence and you get a sheet of them: 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.
| Input | One or more character descriptions |
| Output | One row per character, plus one image per view |
| Ceiling | Eight views per character, and no cap on how many characters |
| Account needed | Your own OpenAI API key |
| Price | $0.15 per character, flat on every plan |
🎭 What AI Character Reference Bank does
You give it a character. It writes a character bible out of your description and your style line,
then renders that bible once per view you asked for.
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 forty 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 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"}
| Field | Default | What it is |
|---|---|---|
characters | none | Plain 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. |
views | portrait, threequarter, fullbody | Which 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. |
style | consistent character design, clean studio background, highly detailed, soft even lighting | The art direction folded into every prompt. Change this and the whole set changes together. |
aspectRatio | 1:1 | 1:1, 9:16 or 16:9. |
quality | high | low, medium or high. This moves your own OpenAI bill, not the charge here. |
openaiApiKey | none | Your own OpenAI key. Marked secret. |
baseUrl | none | Advanced. 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 no key and you get a labelled demo record in the key-value store rather than pictures. 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.
| Field | What it is |
|---|---|
ok | true. Only characters that produced at least one image reach the dataset. |
name | What you called them, or null if you passed a plain string. |
slug | The tidied name used in the file keys. Unnamed characters get character-1, character-2. |
description | Your description, unchanged. |
characterBible | The reusable prompt text. This is the part worth keeping. |
references | One entry per view. A rendered view carries view, imageKey and imageUrl. A view that failed carries view and error instead. |
No example row is printed here. No run on record has produced one with a working customer key, and a plausible row typed out by hand is worse than none.
🧾 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.
| Record | Where it lands | Billed |
|---|---|---|
| A character with one or more images | A dataset row | yes |
| The keyless demo | Key-value store, SAMPLE_AND_NOTICES | no |
| A character where every view failed | Key-value store, SAMPLE_AND_NOTICES, ok: false | no |
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.
▶️ How to run it
- Open AI Character Reference Bank and click Try for free.
- Paste your key into OpenAI API key (BYO).
- Write your character into Characters. Be specific about age, hair, clothing and colours: that sentence is doing all the work.
- Tick the views you want in Reference views.
- Click Start, then take the images from the run's Storage tab and copy
characterBibleout of the row.
💰 How much does it cost?
$0.15 per character. Flat on every Apify plan, no volume tiers. The number of views does not change it: three views or eight, the character is one charge.
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 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
characterBiblestrings once and reusing them in other image tools for months.
🚧 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.
🧭 Which AI image actor do you need?
| If you want | Use |
|---|---|
| One character in a set of matching views | This one |
| A run of scene images that tell a story | AI Storyboard Generator |
| A single thumbnail built to be clicked | Viral Thumbnail Generator |
| A finished vertical video, script and voice included | AI Faceless Video Generator |
| Images you already have turned into a video | Storyboard Video Generator |
❓ Questions people ask
Do I need my own key? 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. They render one after another.
What do I actually do with characterBible? 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 upload a photo of a character instead? No. It works from text only.
Does asking for more views cost more here? No. Views move your own OpenAI bill, not this charge.
🆘 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.


