Models in the current catalog
The catalog checked on October 4, 2026 returned these image IDs:
| Model ID | First test | Record in the result |
|---|---|---|
gpt-image-2 | A general generation and edit set | Prompt, dimensions, format and response time |
gpt-image-2-5 | A quality or revision comparison | Differences from the same seed or reference |
nano-banana | A baseline for the Nano Banana family | Layout, text rendering and failure cases |
nano-banana-2 | A newer route in the family | Fidelity to the brief and edit consistency |
nano-banana-pro | A candidate where quality comes first | Detail, latency and rejection rate |
The table leaves out resolution limits, prices and benchmark scores on purpose, because we would have to invent them. Take the current contract from the models documentation and from the API response.
Scenarios for the first test
| Scenario | Candidate to test | Acceptance criterion |
|---|---|---|
| Quick concepts for the team | nano-banana-2 | The composition matches the brief |
| Ad banner with constraints | nano-banana-pro | Sizes, margins and style are respected |
| Image generation inside a product | gpt-image-2 | The result passes automatic and manual moderation |
| Comparing a new revision | gpt-image-2-5 | It solves a known problem better than the base model |
A model's name guarantees neither typography nor brand details. Take 15 real tasks and make sure some are hard ones: small text, a person in frame, a product on a light background, an image with a logo. Record the share of results you can use without manual rework.
Write the image contract first
"Make it look good" is not a test. Write down the subject, aspect ratio, file type, the text that must appear, prohibited elements and what counts as a failure. For a Telegram bot, add the maximum file size and how long a user will wait.
If the image is an edit, keep the original asset next to the test case. A model can be strong at generating and weak at preserving a product logo or a person's pose. Those are different tasks.
A comparison matrix
| Scenario | What to keep fixed | Pass condition |
|---|---|---|
| Product card | Prompt, source packshot, canvas size | Product shape and required text stay correct |
| Social post | Prompt, aspect ratio, brand colors | The layout fits the channel without manual cropping |
| Background edit | Source image and edit instruction | Subject edges stay usable |
| Text in image | Exact text and font direction | No missing words or unreadable glyphs |
| Bot thumbnail | Input prompt and file-size limit | The output arrives inside the bot's timeout |
Generate each case more than once. Save the raw response beside the rendered image, so a failed request can be reproduced and traced.
Keep the API boundary small
Keep the model ID in configuration and make the application's contract independent of it. Your image service should return a URL or binary result, a model ID, dimensions, a MIME type and an error the caller can understand.
const imageModel = process.env.IMAGE_MODEL ?? "gpt-image-2";
const result = await client.images.generate({
model: imageModel,
prompt: request.prompt,
size: request.size,
});
return {
model: imageModel,
image: result.data?.[0],
};
The exact method and fields depend on the SDK and route you use. Validate the response before it goes to a user or into a CMS.
Image generation in a Telegram bot
Send a short progress message, set a request timeout and make retries idempotent. If generation fails, tell the user what happened and keep the prompt for another attempt. Never charge a balance twice because a webhook or a network retry repeated the same request.
Moderation needs test cases of its own. An image can be unsuitable even when the prompt looks harmless, and a rejected request is a normal product state that your bot has to handle.
Fitting the image API into your process
Create a separate key, or at least a separate limit, for image generation. In the product interface, store the source prompt, the model ID and the template version. If layouts got worse after a model change, you can repeat the request and see exactly what changed.
For user-generated content, add a moderation policy, and send ad materials to a person for review. The API speeds up production, but the team answers for what gets published.
A practical rollout
Start with one model and a small slice of traffic. Log the model ID, request duration, response size and whether a person accepted the result. Collect the same fields for a second model. Only then change the default.
Keep a fallback ready for outages. It needs either a prompt format the second model accepts or an adapter that translates it. Do not assume that a parameter one family accepts will be accepted by another.
FAQ
Which image model should I use first?
Start with gpt-image-2 as a baseline and compare it with gpt-image-2-5 or a Nano Banana ID on your real prompts. The live catalog and your acceptance checks decide the final route.
Is Nano Banana Pro always better in quality?
The name does not replace an evaluation. Test detail, text rendering, edit fidelity, response time and rejection behavior on the images you actually need.
Can I switch models without rewriting the whole application?
Yes, if your image service keeps model-specific fields behind an adapter and validates the output. Keep the model ID in configuration rather than scattering it through UI code.
Do I need a separate provider for images?
No, if a suitable image model is already available in codexkey. A single key simplifies accounting and limits, but you still have to check quality on your own tasks.
Should I store generated images forever?
Set retention from the product requirement. Images can contain user data, references or personal information. Store only what you need and restrict access to the originals.
Where do I check current image model IDs?
Compare against the models page or GET /v1/models before launch, and do not copy an ID from an old tutorial unchecked.