Feature Request: Enforce Persistent Brand Rules Across Image Generation, Assets, QA, and Delivery

Summary

I am sharing this as a product/feature request based on a long-term, real-world attempt to use ChatGPT for consistent branded content production.

Over dozens of production and revision cycles, I tried to build a workflow where a user could simply say something like:

“Create this in the brand version.”

and ChatGPT would automatically follow previously approved rules for characters, visual identity, assets, layout, text quality, and production workflow.

To achieve this, I created increasingly detailed brand guidelines, character bibles, character IDs, locked assets, prohibited actions, production SOPs, runtime specifications, and multi-stage QA rules.

However, the same types of failures continued to occur.

The core issue was not a lack of instructions.

ChatGPT could understand and explain the rules, but those rules were not reliably enforced during subsequent tool execution.

I think this represents an important gap between:

Declarative Memory — knowing what rules should be followed

and

Procedural Enforcement — ensuring those rules actually constrain tool selection, generation, asset retrieval, QA, and delivery.


What I was trying to achieve

The desired workflow was simple from the user’s perspective.

The user should be able to say:

“Create educational content about X in the brand version.”

ChatGPT should then internally retrieve and enforce:

  • approved visual identity

  • approved characters

  • character identities

  • official assets

  • logos

  • layout rules

  • writing standards

  • prohibited modifications

  • production procedures

  • QA requirements

  • previously approved designs

  • previously rejected designs

The goal was not a single successful image.

The goal was a persistent production system.


Problems repeatedly observed

1. Approved characters changed identity between generations

Even after a character had been approved, later image generations could reinterpret it.

Its face, proportions, clothing, shape, colors, or overall visual identity could change.

Explicit instructions such as:

“Do not regenerate this character.”

or:

“Use only the approved official asset.”

could be understood correctly in conversation, yet the character could still be regenerated during a later tool call.


2. “Do not generate” was not an enforceable constraint

I explicitly defined certain assets as:

  • do not regenerate

  • do not redraw

  • do not replace with a similar version

  • use the original asset only

ChatGPT could explain these restrictions correctly.

But this did not necessarily prevent the image-generation workflow from generating those elements again.

This revealed an important distinction:

A rule existing in context is not the same as a rule constraining execution.


3. Using original assets solved identity consistency but created a different problem

To prevent character drift, I tried using the approved character images directly.

This preserved identity.

However, it often produced a pasted or collage-like appearance instead of a naturally integrated illustration.

This created a fundamental tradeoff:

Generate the character → new poses are possible, but identity may drift.

Use the original asset → identity is preserved, but new poses, expressions, viewpoints, and natural scene integration become difficult.


4. Character Bibles and Character IDs were not enough

I created detailed Character Bibles describing attributes such as:

  • facial appearance

  • hairstyle

  • clothing

  • age

  • proportions

  • personality and visual tone

I also introduced Character IDs.

The problem was not that these specifications lacked detail.

The problem was that there was no reliable guarantee that the required character specification would be retrieved and applied before the next generation.

What seems to be missing is a dependency check before execution.

If a production request depends on Character ID A, Asset B, and Brand Profile C, the system should verify that all three have been loaded before generation begins.


5. QA rules did not prevent failed outputs from being shown

I also created QA rules covering issues such as:

  • spelling and typographical errors

  • language quality

  • text overlapping illustrations

  • margins and spacing

  • logo placement

  • layout consistency

  • character identity

  • brand compliance

  • factual/content accuracy

However, defining a QA checklist did not guarantee that QA would actually occur before delivery.

Outputs that would clearly fail the defined QA rules could still be presented to the user.

The requirement is therefore not simply:

“Remember this QA checklist.”

It is:

“If QA fails, this output must not be delivered.”


6. More rules created larger SOPs, not necessarily better outputs

Every time something failed, I added another rule.

Over time I created increasingly detailed:

  • guidelines

  • prohibited actions

  • Character Bible entries

  • runtime specifications

  • production procedures

  • QA gates

But the fundamental problem remained.

The existence of a rule and the enforcement of a rule are different things.

As a result, the documentation became increasingly complex while output reliability improved much more slowly.


7. ChatGPT could promise a workflow change without actually enforcing it later

This was especially important from a trust perspective.

After a failure, ChatGPT could correctly explain the cause and say things such as:

“I understand the problem.”

“I will not use this workflow again.”

“This rule is now fixed.”

“From now on, I will always use the approved asset.”

But on a later request, the same production path could be selected again.

From the user’s perspective, this feels like the AI is making the same promise and then repeating the same mistake.

This is not only an output-quality issue.

It is a trust and reliability issue.

If the system cannot actually guarantee that a future tool call will obey a rule, it would be better to clearly distinguish between:

“I can remember this preference.”

and

“This is now an enforced execution constraint.”


The core problem: Declarative Memory vs. Procedural Enforcement

After many iterations, I believe this is the central issue.

ChatGPT can often correctly understand:

  • what the rule is

  • why the rule exists

  • what failed previously

  • how the failure should theoretically be prevented

But that understanding does not automatically control:

  • tool selection

  • asset retrieval

  • character retrieval

  • image-generation prompts

  • generation behavior

  • layout

  • typography

  • QA

  • repair

  • delivery eligibility

In other words:

Declarative Memory ≠ Procedural Enforcement

For persistent production workflows, both are necessary.


Why more prompt engineering does not solve this

When AI output fails, the common solution is to make the prompt or guidelines more detailed.

I tried that extensively.

After dozens of production and correction cycles, it became clear that additional prompt detail reaches diminishing returns if those instructions are not converted into execution constraints.

When a user has already spent significant time teaching the system:

“Never regenerate this asset.”

“Always use this approved character.”

“This layout was rejected.”

“This version was approved.”

“Never deliver an output that fails this QA rule.”

the solution should not simply be to ask the user to write an even longer prompt.

The system needs a way to recognize:

“This is not merely reference information. This is a persistent production constraint.”


Character Reference / Character Identity Lock

A particularly important feature would be a true Character Reference / Character Identity Lock system.

The system should allow an approved character identity to remain fixed while still allowing new:

  • poses

  • expressions

  • viewpoints

  • camera angles

  • interactions

  • scenes

Identity-locked attributes could include:

  • face

  • body proportions

  • unique shape

  • clothing

  • colors

  • accessories

  • brand-specific elements

  • character-specific design language

The model should then change the character’s performance, not reinterpret the character’s identity.

In other words, the goal is not:

“Generate a character similar to this reference.”

It is:

“This is the character. Now let this same character perform a new action.”

This would be significantly more useful than storing dozens or hundreds of fixed character poses.


Features that would help

Based on this experience, I would find the following capabilities valuable:

  • Project-level Brand / Production Profiles

  • User-defined commands linked to those profiles

  • Approved Asset Libraries

  • Asset-level Do Not Modify attributes

  • Asset-level Do Not Regenerate attributes

  • Negative Asset Locks

  • Character Reference

  • Character Identity Lock

  • New poses and expressions while maintaining the same character identity

  • Protection against automatic reinterpretation of brand characters

  • Approval State for approved vs. rejected outputs

  • Prevention of reuse of previously rejected character/design variants

  • Persistent production-state feedback such as “this layout is approved” or “this character version is rejected”

  • Guidelines that can operate as tool-execution constraints, not only reference documents

  • Pre-generation Dependency Checks

  • QA rules that control whether an output is eligible for delivery


What is really needed: a production pipeline

The most important improvement may not be another generation feature by itself.

It may be a production orchestration layer.

Ideally, one user request could internally trigger something like:

Retrieve Brand / Production Profile

Retrieve execution constraints

Dependency Check

Retrieve approved Characters / Assets

Plan content

Generate only what needs to be generated

Character Identity Check

Place official assets

Typography / layout

Brand QA

Content QA

Layout QA

FAIL → internally repair

Run QA again

ALL PASS

Deliver final output


“One-shot production” should not mean “one generation”

This distinction is very important.

From the user’s perspective, a successful “one-shot” workflow does not mean that the model must generate the image exactly once.

What the user wants is:

one request → one approved delivery

not:

one request → one generation

Internally, the system could generate, inspect, repair, regenerate, re-layout, and re-check multiple times.

The user does not need to see every failed intermediate output.

Ideally:

FAIL should trigger internal repair, not user-side debugging.

The user should receive the result once it passes the required production checks.


Desired UX

The ideal user experience would be:

User:

“Create educational content about X in the brand version.”

ChatGPT internally:

Brand / Production Profile
→ Constraints
→ Approved Characters / Assets
→ Dependency Check
→ Content Planning
→ Controlled Generation
→ Identity Preservation
→ Official Asset Placement
→ Typography
→ Brand QA
→ Content QA
→ Layout QA
→ Internal Repair if needed
→ ALL PASS

User receives:

One completed, compliant deliverable.


Why I think this matters beyond image generation

Although I encountered these problems while building a branded visual-content workflow, I believe the underlying issue is broader.

The same architecture could apply to:

  • documents

  • presentations

  • videos

  • web content

  • recurring business materials

  • other persistent creative workflows

As ChatGPT becomes capable of using more tools and producing more complex deliverables, persistent production work will increasingly require more than memory.

It will require a reliable connection between:

Memory
→ Constraints
→ Dependencies
→ Tool Execution
→ QA
→ Repair
→ Delivery

That connection is what would allow ChatGPT to move from being a tool that can create individual outputs to something closer to a reliable AI production studio.


Privacy / Intellectual Property Note

This feedback is based on a long period of real-world experimentation and repeated production/revision cycles.

However, I have intentionally anonymized it.

I am not including any actual:

  • brand names

  • organization/company names

  • character names

  • logos

  • character images

  • personal images

  • production assets

  • completed branded materials

What I hope can be useful for product and model improvement is not the underlying brand intellectual property, but the failure patterns, attempted solutions, workflow limitations, and product-design lessons discovered through this long-term use case.

The main takeaway I would like to emphasize is:

The next step for persistent creative workflows is not simply better memory or longer prompts. It is the ability to turn selected remembered rules into enforceable production constraints.

And from the user’s perspective:

“One-shot creation” should mean one request / one approved delivery — not one generation.

I’ve been working on this issue for the past few days, and I believe I have found a solution that is not documented in OpenAI’s documentation (at least I haven’t found it anywhere).

Problem 1: ChatGPT doesn’t know much about itself. OpenAI’s documentation isn’t natively part of ChatGPT. Without searching OpenAI documentation, ChatGPT cannot tell you whether or not it can or can’t do something. Unfortunately, many times this means that ChatGPT will generate a workflow it reasonably believes it has the ability to achieve the desired outcome. Better put, ChatGPT asks ‘Can an AI model do this?’ and does a web search instead of ‘Can ChatGPT do this?’ and searches the OpenAI documentation. This problem will surface again, below.

Problem 2: ChatGPT cannot locate assets in the Library. This is because of a huge flaw. Let’s say you have an image of your logo that is part of your Brand Bible, and that image is uploaded to your Library as “MyLogo.png.” When you upload the image, it is assigned a File ID, and that ID is used as the file name. So, “MyLogo.png” becomes “File_74829743974839.jpg,” for example.

  • Issue 1: If your Brand Bible has a notation to use “MyLogo.png” as the canonical reference image, it has been renamed and cannot be found in your Library.
  • Issue 2: The file type has changed.
  • Issue 3. Even if you did know what the File ID was, and it was properly noted in the Brand Bible as the canonical reference, it still cannot be found in your Library. Enter Problem 3.

Problem 3. ChatGPT searches descriptions and text, not file names. Even if you did know the File ID assigned when you uploaded your image (still using the example name of “File_74829743974839.jpg”), ChatGPT is going to initiate a search for “File_74829743974839” and fail. According to ChatGPT itself, this is because the search is for descriptions and text only.

Problem 4. Problem 1 Revisited and third-party solutions. Go ask ChatGPT if it can connect to Dropbox. It will search OpenAI and tell you no. But if you go to the plugins and search, Dropbox is a usable plugin. Correct ChatGPT, and it will tell you it made a mistake because it does not have access to a list of available plugins.

  • According to ChatGPT’s response, it can see a partial list of plugins, but it cannot see all available plugins because the documentation is abridged.
  • The same applies to OpenAI documentation - it can see some of the documentation, but that documentation is abridged.
  • Essentially, ChatGPT can locate the appropriate documentation, but it can only read a brief overview, not the entire subject. I think of this as Meeting Minutes - having access to the topics discussed but not the verbatim account of the meeting.

This is a major problem. And it isn’t just limited to documentation - the problem exists within ChatGPT itself. As an example, let’s say you ask ChatGPT a detailed question in a chat on Tuesday and ChatGPT gives you a detailed response. If, on Friday, you ask ChatGPT to repeat the answer it gave on Tuesday, it will fail. This is because the conversation is periodically truncated on ChatGPT’s side. So, even though you can scroll up or use "Find in Chat,’ ChatGPT cannot.

  • ChatGPT only has the abridged OpenAI documentation, and that cannot provide a reasonably accurate response.
  • ChatGPT can only access a truncated record of your chat - it can “remember” that you had a conversation about XYZ, but it cannot retrieve what you asked or how it responded.

Problem 5. A combination of Problems 1 and 4. This is actually an important part of why I hate ChatGPT at times. A different issue than you are having, but let me give you a separate example. I wanted to connect ChatGPT to my calendar so, using its voice widget on my phone, I could say, “Add dinner with Bob this Friday at 6 pm.” Eliminates (a) the need to open my calendar, create an event, type the information, set the time, etc… and (b) the need to open ChatGPT and type the information in a chat.

  • I have a Samsung phone, and I do not like the native calendar. My company uses Outlook, and I do not like the Outlook calendar widget. It’s bulky and not nice to look at.
  • I use Google for my calendar and email on my phone. I like the Google Calendar widget, and Gmail allows me to use Outlook Exchange.
  • Stupidly, I asked ChatGPT if it could connect to my Google Calendar, and it said no. In a momentary lack of judgement, I trusted ChatGPT.
  • ChatGPT’s solution was to connect it to my Outlook Calendar, sync Outlook with Samsung, and then sync Samsung with Google. Did it technically work? Yes. But there was a 2-hour sync delay with each step - so not a reliable solution.
  • A quick Google search revealed that I can, in fact, connect ChatGPT directly to Google Calendar via a plugin. After ChatGPT led me down a 30-minute rabbit hole, I solved the problem on my own in under a minute.

Problem 6. Finding a Solution, Act I. You may be asking why this matters. While trying to find a solution to the same issue you’re having, ChatGPT researched the OpenAI documentation and offered two solutions:

  1. Connect ChatGPT on my phone remotely to my laptop and give ChatGPT access to local files. Since I do 90% of my work on my phone, this sounded like a reasonable solution, but it’s a solution filled with problems. In order for this to work, I would have to give ChatGPT access to all the files on my laptop. This may not be an issue for most people, but when you are working with client files and NDAs, this creates a security issue. In order for this to work, my laptop has to be on 24/7/365. If someone accidentally closes my laptop, failure. If my laptop goes to sleep, failure. And keeping my laptop open and awake causes an additional security risk.
  2. Connect ChatGPT to Dropbox. This actually passed the test, at first. ChatGPT can reliably connect to Dropbox, uploading files to Dropbox does not change the filename or type, and Dropbox can locate a file by filename or the description - so, ChatGPT’s search for “MyLogo.png” is successfully found. And, ChatGPT can reliably download the file from Dropbox to your Library… and that’s where we arrive at our next problem.

Problem 7. ChatGPT cannot insert temporary files from Dropbox into the chat. Now that ChatGPT has located the correct image and created a temporary download from Dropbox, ChatGPT cannot insert the file into the chat. And because the downloaded image as a new File ID, we end up back at Problem 2. There is no way for ChatGPT to hand off the image to the image generator. So the solution fails.

***********

Solution. A solution with a few problems. There is a solution to all of this. However, and this is the first problem, the solution isn’t anywhere in OpenAI’s documentation.

  • ChatGPT cannot find images through a search of your Library. But it can find an image if you create a Source File.
  • Unlike images in your Library that only have a File ID, Source Files have both a File ID and a Description. So, “MyLogo.png” still becomes “File_74829743974839.jpg,” but it also has the description of “MyLogo.png.” And since ChatGPT searches descriptions and text, it cannot locate the image - when it searches for “MyLogo” it locates “MyLogo.png,” sometimes.

The solution requires you to create a new project. Once the project is created, there are two selectable options: Chats and Sources. If you open Sources, you can upload files. The files uploaded will be assigned a new File ID, but the description will be whatever the file name was.

Once the Source file is uploaded, you can use the Chat and create a prompt that says, “Using the Source Files in this project, create a new image of a bird and add mylogo…” Success, most of the time. I ran the test 10 times, and 6 times it worked perfectly.

  • This solution works. But it’s not 100% reliable. The 6 times it worked perfectly, it added the Source files without any issue, without any edits or changes to the source file - it worked perfectly.
  • The 4 times it failed were due to a handoff problem with the image generator. Simply replying in the chat with “Try Again” rendered the originally requested image.

So, the solution does work, but because the process is adding more steps, there is more chance of failure. You are no longer simply adding an image to the chat and typing out a prompt and getting an image. You now type the prompt, ChatGPT locates the image, ChatGPT hands off your prompt and the image to the image generator, and then you get an image. From my small test, that extra step of ChatGPT locating the image fails on the first attempt 40% of the time.

Sure, it’s as simple as typing “Try Again,” but it is an inconvenient flaw in the process.

**********

Problem 8. No cross-chat compatibility. Not just for this solution, but for ChatGPT in general.

  • If you are working in a chat, let’s call it “Chat 1” and you open a new chat, “Chat 2,” even though Chat 1 has memorized the chat at its current state, that memory is not available in Chat 2.
  • If you were working in Chat 1 and wanted to run a few tests in a separate chat (so you’re not muddling Chat 1 with irrelevant information), saying “Create a new graphic based on what we were just discussing” is going to leave ChatGPT very confused because there is no “previous discussion” in Chat 2.
  • If you said, instead, “Create a new graphic based on what we were discussing in Chat 1” we circle back to Problem 3 - from Chat 2, ChatGPT can see you discussed in Chat 1, but it can only see an overview, not what was actually discussed.
  • There is a solution for this too by asking ChatGPT to create a checkpoint in Chat 1 and then uploading that checkpoint into Chat 2. But that is an extra step that “Artificial Intelligence” should be able to do on its own, especially considering it could simply create a checkpoint after every turn and save it to your files, deleting the previous version, to be used across all chats in a matter of nanoseconds.

And, because there is no cross-chat compatibility, the Source file solution only works within the Project. If you open a new chat outside of the project, ChatGPT can search and find the “MyLogo” Source file, but it cannot use that file outside of the established project (according to ChatGPT, “The image is only available to chats operating inside the Project, including the image-generation workflow.”

**********

In short, an imperfect solution due to several problems with ChatGPT itself.

*********

And, I’m going to add one more problem - your post and my response stem from a Brand Bible. This is a PDF file. And, it may include images as canonical references. But I found out the hard way after creating a Brand Bible myself and uploading dozens of images: while ChatGPT can locate the canonical reference images in the PDF, it cannot extract them for the image generator to use. So, that’s a problem, and an even bigger problem is that ChatGPT should have known that before making me do 3 hours worth of work only to tell me the Brand Bible is essentially useless for rendering images.