# How to make better AI art with current models

AI image-generation models I’ve tried
=====================================

**Midjourney** is best at producing a diverse and aesthetically pleasing range of styles and doesn’t refuse “in the style of…” requests. However, it is worst at text-in-images, avoiding uncanny AI artifacts (like extra fingers or unrealistic postures), and precise instruction-following (it messes up the specifics). Another major downside is that they don’t offer an API.

**GPT-5** produces less artistic outputs but is better at following precise instructions on text and composition details.

**Gemini “Nano Banana”** is somewhere in the middle where it is ok-ish at everything—better at style than GPT-5 but worse than Midjourney, better at instruction-following than Midjourney but worse than GPT-5.

![](https://substackcdn.com/image/fetch/$s_!HeJG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee0679d9-ab22-4e2d-bbce-2c66e5a7faf1_2528x934.png)

Midjourney v7 messing up instruction-following (basically none of these are images of a robot pushing a computer up a hill)

![Generated image](https://substackcdn.com/image/fetch/$s_!m6l4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f58fafe-5b89-4818-ae99-4efb827ec4bd_1024x1024.png)

GPT-5 with the same prompt. It followed the instruction, but the style isn’t as nice, and it messed up the colors (GPT is obsessed with yellowish tones and backgrounds, read on to find out how to solve this).

![](https://substackcdn.com/image/fetch/$s_!G3jC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7b9cb55-5f20-42e8-ac44-820c29856a78_1024x1024.png)

A version from Gemini

![](https://substackcdn.com/image/fetch/$s_!HWTo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0507c444-eb82-4225-b5ee-e368dffc0adc_1404x364.png)

Follow the tips in this article and Gwern won’t hate your AI images :D

Styles that look good
=====================

Image-generation models are better at making some styles look good than others. Key characteristics of styles that look good are:

*   Minimalist / without a huge level of detail
*   Non-realist enough to avoid accidental uncanny-valley effects

I find asking for aquarelle/watercolor paintings particularly effective, [inspired by the LessWrong team](https://www.lesswrong.com/posts/riau8SeDCDwbxdntu/how-does-the-lesswrong-team-generate-the-website).

![](https://39669.cdn.cke-cs.com/rQvD3VnunXZu34m86e5f/images/a4732c83bc52560aa384c82abff5d3405da7bb64785d000b.png)

Me trying the LessWrong team's recommended "Thomas Schaller" prompt. Unfortunately GPT-5 refuses "in the style of" requests. It works pretty well with Midjourney though.

Think about the resolution at which the image will be displayed. Though models sometimes produce good-looking images with detail, they often look worse when you zoom in.

Compositions that look good
===========================

Avoid anything where getting the detail exactly right makes or breaks the image (e.g. careful hand positioning).

Hopefully, this will no longer be necessary as models improve, but for now I still find being conservative with the composition necessary to avoid weird alien elements.

Correcting artifacts with programmatic post-processing
======================================================

Post-processing images in Python is a useful hack to remove annoying LLM color artifacts. It often helps to automatically set all pixels of a certain color to white / your background color of choice [(example code)](https://github.com/nrimsky/city-cards/blob/23a0686cb6358b4fe6d11f4cbf21ecfea9c8a7bb/generate_images.py#L17-L45). For example, I used this trick to generate [this stylistically-consistent set of city illustrations on white backgrounds](https://github.com/nrimsky/city-cards/tree/23a0686/images).

Here is an example Gemini output. Note the off-white background:

![](https://substackcdn.com/image/fetch/$s_!6A0_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf6b473e-86ef-4414-a276-9af72564fc20_1024x1024.png)

“Robot sisyphus pushing an immense computer up a hill, aquarelle, plain white background.”

Here it is after the programmatic correction:

![](https://substackcdn.com/image/fetch/$s_!wfVx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac230bed-7dca-456f-bfd3-6a9072701a7e_1024x1024.png)

Now it blends nicely into white pages.

Unless you're doing this in bulk, you don't need to write code to do this, just ask ChatGPT to process your image using Python ([thank you Chris for the reminder](https://blog.ninapanickssery.com/p/how-to-make-ai-art-look-good/comment/152049284)).