Every site needs a favicon. Every blog post needs a hero image. Every social share needs an OG card. Every app store listing needs an icon. That is a lot of images before you write a single line of content.
Hiring a designer for each one runs $50 to $200 per image. If you are building a portfolio of sites or publishing multiple blog posts per week, the cost adds up fast. A site with 100 blog posts and 5 brand assets is $5,000 to $20,000 in design fees before you factor in revisions.
AI image generation gets you 80% of the way in about 60 seconds per image. The remaining 20% is post-processing: converting to WebP, resizing for different contexts, and occasionally regenerating because the model decided to render text despite being told not to. That last part is the catch. AI image models love to put words on things. You have to explicitly, aggressively block it.
I generate all 450+ hero images on jwatte.com through Ideogram's API. This post walks through both Midjourney and Ideogram, from the web UI to the API, with the exact prompt formulas and code I use.
Midjourney: the web and Discord workflow
How to access it
Midjourney started as a Discord bot and still runs there. You can also use the web UI at midjourney.com, which requires a paid subscription.
Discord path: Join the Midjourney server at discord.gg/midjourney, or invite the Midjourney bot to your own server. Go to a #newbies channel (or your private server channel) and type /imagine prompt: [your prompt]. The bot generates a 4-image grid in about 60 seconds. Click U1 through U4 to upscale a specific image. Click V1 through V4 to generate variations of a specific image.
Web UI path: Log in at midjourney.com. Click Create. Type your prompt, select an aspect ratio, pick the model version, choose a style, and generate. The web UI is cleaner than Discord for iterative work because you can see your history, organize images into folders, and adjust parameters without memorizing slash commands.
Key parameters
These go at the end of your prompt, after the descriptive text:
--ar 1:1for square images like icons and favicons--ar 16:9for landscape hero images--ar 191:100for OG social cards (the 1.91:1 ratio that Facebook and Twitter expect)--style rawfor less Midjourney stylization. The default style leans heavily into dramatic lighting and saturated color. Raw mode pulls back toward something more neutral, which is better for brand assets that need to sit inside your site's design language.--v 7for the latest model version--no text, words, letters, typographyto suppress text rendering (more on this in the text-suppression section below)--q 2for higher quality output. Costs more credits per generation.
Pricing
Basic is $10 per month for roughly 200 images. Standard is $30 per month for roughly 900 images. Pro is $60 per month for roughly 1,800 images. If you are generating brand assets for a handful of sites, Basic covers it. If you are generating hero images at scale, Standard or Pro makes sense.
No public API
Midjourney does not offer a documented public REST API. Third-party wrappers exist (they automate the Discord bot or reverse-engineer internal endpoints) but they violate the Midjourney Terms of Service and can get your account banned. If you need programmatic generation, skip Midjourney and use Ideogram.
Best for
Photorealistic brand photos, stylized illustrations, hero imagery with complex compositions. Midjourney's aesthetic quality is consistently high. If you want a single hero image and you are willing to iterate manually in the web UI or Discord, Midjourney produces excellent results.
Ideogram: web UI workflow
How to access it
Go to ideogram.ai. A free account gives you a limited number of generations per day. Paid plans increase the daily limit and add priority processing.
Web UI process
Log in at ideogram.ai and click Create. Type your prompt. Select a Style Type: DESIGN works well for flat editorial images, REALISTIC for photographic looks, 3D for dimensional renders, and Anime for that aesthetic. Select an Aspect Ratio. Toggle Magic Prompt on (recommended, it lets Ideogram enhance your prompt with additional detail). Click Generate.
Key settings
Style Type: DESIGN is the best default for brand assets. It produces clean, flat, vector-style compositions that sit well next to text and inside card layouts. REALISTIC works if you need a photographic look for a hero image.
Magic Prompt: Leave it ON. It adds compositional detail that improves the output without changing the subject. If you find it drifting too far from your intent, turn it off and write a more detailed prompt yourself.
Aspect Ratio: 1:1 for favicons and app icons. 16:9 for hero images.
Best for
Flat design, editorial illustration, and any image where text suppression matters. Ideogram is measurably better at respecting "no text" instructions than Midjourney. For the kind of clean, minimal brand images that need to tile across a blog index without visual clutter, Ideogram is the stronger choice.
Ideogram: the API workflow
This is how I generate every blog hero image on jwatte.com. The site has 450+ images and they all come through the same pipeline: Ideogram v3 API call, download the PNG, convert to WebP with ImageMagick, delete the PNG. The entire process is scripted.
Getting your API key
Go to ideogram.ai, open account settings, navigate to the API section, and generate a key.
Store it as an environment variable. Never put it in source code, never commit it to a repo, never paste it into a config file that ships with your project.
export IDEOGRAM_API_KEY="your-key"
v3 API call (current)
curl -X POST "https://api.ideogram.ai/v1/ideogram-v3/generate" \
-H "Api-Key: $IDEOGRAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "a clean editorial composition of a glowing favicon silhouette centered on a dark workspace, warm amber highlights, deep navy backdrop, flat minimal vector-style, no text, no words, no letters, no typography, no labels, no watermark",
"aspect_ratio": "1x1",
"rendering_speed": "DEFAULT",
"magic_prompt": "ON",
"num_images": 1,
"style_type": "DESIGN"
}'
The response comes back as JSON with an image URL:
{ "data": [{ "url": "https://ideogram.ai/api/images/ephemeral/..." }] }
Download the URL to get your PNG. The URL is ephemeral, so download it promptly. Do not rely on it being available hours later.
v2 fallback API
If v3 returns an error (it happens occasionally during high-traffic periods), the v2 endpoint uses a slightly different request shape:
curl -X POST "https://api.ideogram.ai/generate" \
-H "Api-Key: $IDEOGRAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image_request": {
"prompt": "your prompt here, no text, no words, no letters, no typography, no labels, no watermark",
"aspect_ratio": "ASPECT_1_1",
"model": "V_2",
"magic_prompt_option": "AUTO",
"style_type": "DESIGN"
}
}'
Node.js automation example
This is the core of the script I use on jwatte.com. It calls the v3 API, extracts the image URL, and downloads the PNG:
const response = await fetch('https://api.ideogram.ai/v1/ideogram-v3/generate', {
method: 'POST',
headers: {
'Api-Key': process.env.IDEOGRAM_API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
prompt: 'your prompt here, no text, no words, no letters',
aspect_ratio: '16x9',
rendering_speed: 'DEFAULT',
magic_prompt: 'ON',
num_images: 1,
style_type: 'DESIGN'
})
});
const { data } = await response.json();
const imageUrl = data[0].url;
From there, download the image, convert it with ImageMagick (magick input.png -resize 1600x900 -quality 82 output.webp), and delete the source PNG.
Aspect ratio values differ between v3 and v2
The API versions use different string formats for the same ratios. This trips people up when switching between versions.
| Shape | v3 value | v2 value |
|---|---|---|
| Square | 1x1 |
ASPECT_1_1 |
| Landscape 16:9 | 16x9 |
ASPECT_16_9 |
| Portrait 9:16 | 9x16 |
ASPECT_9_16 |
| Landscape 4:3 | 4x3 |
ASPECT_4_3 |
The "no text" problem and how to solve it
AI image models want to render words. They were trained on millions of images that contain text, so text is a natural part of their output distribution. Even with "no text" in the prompt, you get leaked glyphs roughly 10 to 20 percent of the time. Sometimes it is a readable word. Sometimes it is a glyph that looks like it might be a letter but is not quite. Both are unacceptable in brand assets.
The fix is a multi-layer approach.
In the prompt itself, append a long negative phrase at the end: no text, no words, no letters, no typography, no labels, no watermark. Redundancy is deliberate. Each term catches slightly different model behaviors.
For Midjourney specifically, also use the --no parameter: --no text, words, letters, typography. This is a hard negative, separate from the prompt text, and it is more reliably enforced than prompt-only negation.
Reinforce in the subject description. Instead of just relying on the suffix, weave it into the body of the prompt: "abstract shapes with no glyphs that read as typography." This gives the model additional context about what you do not want.
If text still leaks through, regenerate. Do not accept images with readable text in brand assets. It looks like a mistake, it undermines the professional appearance of the site, and downstream tools (social card validators, favicon generators) do not crop or mask text for you. The 60-second regeneration cost is always worth it.
My prompt formula for brand assets
Every hero image on jwatte.com uses a variation of this formula:
a clean editorial composition of [SUBJECT DESCRIPTION],
[COLOR PALETTE GUIDANCE],
flat minimal editorial illustration, soft gradients,
clean vector-style composition, subtle depth, centered focal point,
[ASPECT RATIO] aspect,
no text, no words, no letters, no typography, no labels, no watermark
Replace [SUBJECT DESCRIPTION] with what the image depicts. Be specific but not over-prescriptive. "A glowing favicon silhouette centered on a dark workspace" works. "A favicon that is exactly 32 pixels rendered in a browser tab" does not, because the model tries to render a literal browser tab.
Replace [COLOR PALETTE GUIDANCE] with 2 to 3 color references. "Warm amber highlights, deep navy backdrop" gives the model a palette without locking it to specific hex values.
The rest of the formula stays constant. The "flat minimal editorial illustration" phrase produces the visual consistency that makes 450+ images look like they belong to the same site even though each one depicts a different subject.
What to do with the image after generation
The raw PNG from Ideogram or Midjourney is a starting point, not a finished asset. You need to convert it, resize it, and in the case of favicons, generate a multi-size .ico file.
The companion post ImageMagick for Favicon and Brand Image Processing covers the full pipeline: PNG to WebP conversion, resize for different contexts (hero banner, thumbnail, social card), multi-size favicon.ico generation, and AVIF output where your ImageMagick build supports it.
If you want to skip writing prompts by hand, the Image Prompt Gen tool on jwatte.com generates platform-ready prompts for both Midjourney and Ideogram. Enter your subject, pick a style, and it outputs a copy-pasteable prompt with all the text-suppression guardrails already baked in.
Putting it together
The workflow I use for every new blog post on jwatte.com:
- Write the post
- Run the Image Prompt Gen tool to get a prompt for the hero image
- Call the Ideogram v3 API with that prompt
- Download the PNG
- Convert to WebP at 1600x900 with ImageMagick
- Delete the PNG
- Deploy
Steps 2 through 6 take about 90 seconds total when scripted. If you are building your first site and need brand assets on a zero budget, The $97 Launch covers the full stack from domain to deployed site, including the image pipeline.
Related reading
- Your Site Has No Favicon and It's Costing You Trust
- ImageMagick for Favicon and Brand Image Processing
- Why the Migration Analyzer Exists
- Cross-Validation Layers: Abandoned Tech, YMYL, Vendor Detection
Fact-check notes and sources
- Midjourney pricing and plan details: midjourney.com/plans
- Ideogram API documentation: developer.ideogram.ai
- Midjourney parameter reference: docs.midjourney.com
This post is informational, not design advice. Mentions of Midjourney and Ideogram are nominative fair use. No affiliation is implied.