Getting started with DALL-E 3 on Azure OpenAI

Most people associate generative AI with ChatGPT, since it feels conversational and immediately useful. DALL-E, the image generation model from OpenAI, gets a lot less attention even though Bing has been using DALL-E 3 to generate images for months now. Azure OpenAI recently added DALL-E 3 as a deployable model, so I spent an evening provisioning it and pushing prompts through the playground to see how it actually behaves.

This post walks through the real provisioning steps, the pricing confusion I ran into along the way, and how the content safety filters behaved when I pushed a few prompts that were a bit cheeky.

A quick refresher on Azure OpenAI

Azure OpenAI is Microsoft’s hosted version of OpenAI’s models, running on GPT-3.5 Turbo and GPT-4 under the hood. The real difference from calling OpenAI directly is control: you choose the Azure region, you manage authentication through Entra ID or API keys, and you get the usual Azure telemetry, monitoring, and compliance story around the service.

For anyone building business applications around generative AI, Azure OpenAI is close to the only sensible option if the model needs to sit inside an existing Azure tenant with proper governance. That holds true for DALL-E 3 as well, now that Microsoft has made it available as a deployable model.

Provisioning DALL-E 3, and where to actually find it

The provisioning story right now is a bit inconsistent. Azure has two separate portals for OpenAI: the older Azure OpenAI Studio, which lets you deploy DALL-E 3, and the newer Azure AI Studio, which for some reason does not support it yet. If you go looking for DALL-E 3 inside Azure AI Studio, you will not find it there, and it is easy to assume the model simply is not available until you realize you are in the wrong portal.

Start in the Azure Portal and create a new Azure OpenAI resource the same way you would for any other Azure OpenAI deployment.

Searching for Azure OpenAI in the Azure Portal marketplace.
Searching for Azure OpenAI in the Azure Portal marketplace.

Region choice matters more than usual here. At the time of writing, DALL-E 3 is only available in Sweden Central, so European users should pick that region specifically. GPU capacity there also tends to be better than in other Azure OpenAI regions, which is worth keeping in mind if you regularly hit capacity errors on other deployments.

Instance details during resource creation, with Sweden Central selected as the region.
Instance details during resource creation, with Sweden Central selected as the region.

Once the resource is created, which usually takes only a few seconds, open Model deployments and then Manage deployments. This takes you out of the Azure Portal entirely and into the older Azure OpenAI Studio at oai.azure.com, which is where the actual deployment configuration lives.

From Azure OpenAI Studio, click Create new deployment and select dall-e-3 from the list of base models.

Selecting the dall-e-3 base model when creating a new deployment.
Selecting the dall-e-3 base model when creating a new deployment.

Name the deployment after the base model itself, something like dall-e-3, rather than something creative. That makes it far easier to reference correctly in your code and configuration later, especially once you end up with multiple deployments across different environments.

Trying it out in the playground

Azure OpenAI Studio lets you test DALL-E 3 directly without writing any code, which is the fastest way to get a feel for the model. It is worth remembering upfront that this is not free: at the pricing listed on the Azure page, generating 100 images cost about 1.8 euros, so each image works out to under two cents.

Click DALL-E (Preview) in the Studio navigation and type a prompt. I gave it a mix of odd prompts just for fun, and the results were consistently better than I expected from a first attempt with no real prompt engineering behind it.

One prompt was a consultant sitting in a meeting room with laptops, a rack full of servers and network cables, in LEGO style. The output held up well overall, though the server rack details were a bit off, which seems to be where DALL-E 3 struggles most, dense mechanical detail with lots of repeated small parts.

DALL-E 3 output for the prompt: a consultant in a meeting room with a server rack, in LEGO style.
DALL-E 3 output for the prompt: a consultant in a meeting room with a server rack, in LEGO style.

A typical 1024×1024 image took roughly 15 to 20 seconds to generate. Turning up the detail settings in the playground pushed generation time closer to 40 seconds, and the extra detail was noticeable but not dramatic. Compared with other text-to-image tools I have used, DALL-E 3 needed far less prompt tweaking to get a usable result on the very first try.

The pricing does not fully add up

The Azure pricing page lists the figure mentioned above, roughly 1.8 euros per 100 images. What it does not explain clearly is why the playground lets you choose between small, medium, and large image sizes, or why cranking up the detail setting roughly doubles generation time without any obvious matching change in price.

Comparing this against OpenAI’s own published DALL-E 3 pricing tells a different story. Standard images run about 4 cents each, and HD images go up to 12 cents each, which is roughly six times what the Azure pricing page suggests for the same model.

OpenAI's published DALL-E 3 and DALL-E 2 pricing, for comparison against the Azure pricing page.
OpenAI’s published DALL-E 3 and DALL-E 2 pricing, for comparison against the Azure pricing page.

My guess is that the Azure pricing page was still reflecting older DALL-E 2 rates at the time and had not caught up with the DALL-E 3 numbers Microsoft announced at Ignite 2023. If you are budgeting for a production feature built on this, do not trust the headline Azure price on faith. Test your actual usage pattern and check the current pricing page before committing any numbers to a business case.

Content safety filters are stricter than you expect

I hit the built-in content safety filters almost immediately once I stopped playing it safe with prompts. A prompt involving a well known battle royale game character and a comic book villain shooting at each other got blocked outright, which was expected given how tightly Microsoft controls trademarked characters and depictions of violence in prompts.

A more interesting case came from a friend who wanted a logo of a fox strangling someone. That prompt got blocked too, but rewording it to a fox that is playfully strangling someone, for a logo, went through without issue, and the result still reads clearly as a friendly mascot rather than anything unsettling.

The logo generated after rewording the prompt to pass the content safety filter.
The logo generated after rewording the prompt to pass the content safety filter.

You can configure your own content filters on top of the built-in ones, but they build on Microsoft’s baseline safety system rather than replacing it. If your use case depends on prompts that sit anywhere near flagged territory, test extensively before committing to this for a customer facing feature, since blocking behavior is not always predictable from the prompt wording alone.

Calling DALL-E 3 from your own code

Once you move past the playground, DALL-E 3 works exactly like any other Azure OpenAI model: you call it through a REST API, and the request body is minimal.

{
  "prompt": "USER_PROMPT_GOES_HERE",
  "n": 1,
  "size": "1024x1024"
}

You post this to https://{your-instance}.openai.azure.com/openai/deployments/dall-e-3/images/generations?api-version=2023-12-01-preview, replacing your-instance with your Azure OpenAI resource name and dall-e-3 with whatever you named your deployment. The response comes back pointing to the generated image, and it is entirely up to your application code to fetch it, store it somewhere durable, and handle failures gracefully.

A production integration needs more than this minimal call. You will want retry handling for capacity errors, given the region is currently limited to Sweden Central, along with explicit handling for content filter rejections, since those come back as errors rather than images and need a sensible fallback message for end users rather than a raw error screen.

A few more results, and where this leaves us

Prompt styling works reasonably well beyond simple photorealistic requests. Watercolor and pixel art styles both rendered cleanly in my tests, and a pixel art render of someone playing a retro console had the right amount of 8-bit charm without needing multiple attempts to get right.

Pixel art style render for the prompt: playing Nintendo at home.
Pixel art style render for the prompt: playing Nintendo at home.

If cost or data residency turns out to be a bigger concern than convenience, this is where teams usually start looking at self-hosted open models as an alternative. You give up the managed billing, the portal tooling, and the bundled content safety layer, but you gain control over where the model runs and how prompts are logged, which matters for some regulated workloads.

For teams evaluating this today, the honest summary is that DALL-E 3 on Azure OpenAI is genuinely capable and noticeably better than DALL-E 2 at following instructions, but it is still rough around the edges operationally. The split between Azure AI Studio and Azure OpenAI Studio is confusing, the region is limited to Sweden Central, the pricing page needs independent verification against your own usage, and content safety behavior needs testing against your actual prompt patterns before you rely on it for a customer facing feature. None of that is a reason to avoid it, but plan for these rough edges rather than assuming a smooth preview experience, and recheck the current documentation before you build on any of the specifics here, since preview features like this move fast.

Leave a Reply

Discover more from Behind the Stack

Subscribe now to keep reading and get access to the full archive.

Continue reading