Midjourney not loading is one of those failures most often lumped under a vague 'network problem'. Broken down, it involves at least three different network paths: page loads for the web app, the long connection for Discord, and downloads from the image CDN. Each path uses different servers and different protocols, so the troubleshooting differs too — trying them all at once just wastes time.
First, narrow it down: where the web app and the Discord client stall
Midjourney currently has two entry points: the web app at midjourney.com, and submitting jobs through the bot inside Discord. Both share the same account, but the network paths are completely different — which is why the same account can open the web app yet fail to connect in the client.
The web app is a standard HTTPS page sitting behind Cloudflare's verification layer. When your exit IP belongs to a heavily shared data-centre range, those checks fire more often — the verification page spins and the image wall never loads. Changing encryption protocol won't help here; switching to a different exit region usually does, immediately.
The Discord client, by contrast, runs on a long connection: after login it keeps a WebSocket open to the gateway, and messages, commands and bot replies all travel over it. When the route jitters or drops packets, the connection is cut and re-established — the UI sits on 'Connecting', or messages arrive in delayed batches.
The images themselves don't live in Discord. Results are hosted on Midjourney's CDN, so previewing, upscaling and downloading are a third network request, unrelated to the two paths above. 'Not loading' therefore covers at least three cases: the page won't load, the connection won't hold, or the images won't download. Work out which one you have before touching your route.
| Entry point | Main connection type | Typical symptom | Check first |
|---|---|---|---|
| midjourney.com web app | HTTPS + Cloudflare checks | Verification page spins, image wall stays blank | Whether the exit IP is heavily shared |
| Discord desktop / mobile client | WebSocket long connection | Stuck on 'Connecting', delayed messages | Route jitter and packet loss |
| Image viewing and downloads | HTTPS requests to the CDN | Previews load, original downloads fail | DNS resolution and downstream bandwidth |
Three stages: task submission, image delivery and queueing
Split a single generation into three stages and troubleshooting gets much clearer: task submission, image delivery and queueing. Each stage asks something different of your network.
Task submission. Whether you type a command in Discord or hit submit in the web app, the request goes to the server first. The payload is tiny, but this step is sensitive to latency and connection stability — every time the long connection drops, the command has to be sent again. If you attach a reference image, the file goes through Discord's upload channel, and that's when upstream bandwidth starts to matter. Submitting a job in Discord is a single command with a fixed format:
/imagine prompt: paper-cut style mountain range, warm paper palette --ar 3:2
Image delivery. Results sit on the CDN. The 2×2 preview grid is small; upscaled and downloaded originals are far larger. When you save a batch of images, downstream bandwidth and DNS resolution quality decide how it feels. If DNS queries don't go through the tunnel, the CDN may resolve to a nearby but unsuitable node — the classic symptom being 'images appear, downloads crawl'.
Queueing. Fast mode gets priority, while Relax mode queues according to server load. Queue time is decided server-side and has nothing to do with your route — switching nodes or protocols won't shorten the queue.
Queueing is server-side behaviour, not a network fault. Mistaking it for a slow connection and repeatedly switching nodes or protocols only makes your login environment change constantly, which is more likely to trigger re-verification.
Each stage maps to a few typical symptoms — match yours first:
- ✅ The bot starts processing shortly after you send the command → the submission path is fine, so upstream isn't the problem
- ✅ The 2×2 grid appears but opening the original is slow → check DNS resolution and downstream first; leave your route alone
- ❌ It sits in the queue with no progress at all → most likely your account mode and server load, not your route
- ❌ The client keeps prompting to reconnect and messages arrive in batches → the WebSocket is being cut; look at route stability first
How to choose an exit region: six common locations compared
Your exit region affects three things: how often Cloudflare checks fire, how risk controls judge the account, and which CDN node you resolve to. Heavily shared data-centre exits get picked out by verification more easily, while locations closer to the servers give long connections shorter round trips and less jitter.
For image generation, these six directions come up most often. Don't agonise over which is fastest — start from where the service you need actually sits.
| Exit location | Best for | Keep in mind |
|---|---|---|
| Singapore | Asia-Pacific; short round trips for long connections | Good default location for long-term use |
| Japan | Asia-Pacific; for services hosted in Japan | Shared data-centre exits trigger verification more easily |
| Hong Kong | Closest physically, lowest latency | First location to swap when exit capacity is tight |
| United States | For US-based services and CDNs | Higher latency than Asia-Pacific locations |
| United Kingdom | Primary choice for Europe | More hops to US data centres |
| Italy | Backup for Europe | Also far away |
Two rules of thumb. First, stick with one location for a while: most services factor login-environment consistency into their risk scoring, and hopping regions frequently makes re-verification more likely, not less. Second, when the web app is stuck on verification, switch to another location in the same region rather than jumping to the other side of the planet — a cross-region jump won't fix verification, and it forces the long connection to shake hands all over again.
Route types and protocols: where dedicated lines, relays and direct connections come into play
Route type and protocol are often lumped together, but they're two different dimensions: the route decides which path your data takes, the protocol decides how that path is encrypted and disguised.
Direct connection. The client connects straight to an overseas data centre over public international transit. It's the cheapest option, but jitter on public transit passes straight through to long connections — the kind Discord keeps open for hours is hit hardest.
Relay. You connect first to an entry point in mainland China, and a relay server forwards traffic to the overseas exit. The entry leg is usually better quality; the trade-off is an extra hop, and a busy relay node adds its own fluctuation.
IEPL dedicated line. Traffic runs on a dedicated line between entry and exit instead of public international transit, so the latency curve is flatter. It suits always-on connections like Discord, plus stability-sensitive work such as uploading reference images and downloading originals. It costs more, so it's usually tiered by data volume.
At the protocol level, the common options each trade off differently: Shadowsocks is lightweight with low overhead; VMess supports multiplexing within the V2Ray family; Trojan and VLESS both use TLS disguise, so traffic looks like ordinary HTTPS; Hysteria2 and TUIC are built on QUIC (UDP) and hold up better against jitter on lossy networks — though some networks throttle UDP, in which case a TLS-based protocol is actually steadier. A common mistake is treating 'this protocol is faster' as a conclusion: protocols only decide how traffic is wrapped, while route stability and exit region are what really shape your image-generation experience.
Bottom line: if Discord keeps reconnecting and commands need resending, changing route type (direct → relay → IEPL dedicated line) helps more than adding bandwidth; if only original downloads are slow, check DNS and downstream first and leave the route alone.
Five-step check: is the problem the route or the account?
When something 'won't load', run through these five steps and you'll usually pin down the exact stage. No speed-test tools needed — you're comparing the full time from submission to finished image, and you can reproduce it yourself:
- ✅ Step 1, identify the entry point: if the web app won't load, look at the verification page; if the client won't connect, look at the long connection — the two point in different directions
- ✅ Step 2, check the exit IP: once connected, open any IP lookup page and confirm the exit region matches what you expect — and see whether that IP range is heavily shared
- ✅ Step 3, check for DNS leaks: confirm domain lookups also go through the tunnel; when they don't, the CDN resolves to a nearby but unsuitable node
- ✅ Step 4, retest with another location: submit the same prompt once in each of two regions and compare the full time from submission to finished image, not just download speed
- ✅ Step 5, retest with another protocol: try a UDP-based protocol (Hysteria2 / TUIC) and a TLS-based one (Trojan / VLESS), then keep whichever is steadier
Split-routing rules are the change that pays off fastest here. Listing the image-generation domains separately is easier to troubleshoot than a global proxy, and it doesn't slow down your other apps:
# Domains that need to go through international routes (grouped by domain, easy to add or remove)
discord.com
discordapp.com
discordapp.net
discord.gg
midjourney.com
cdn.discordapp.com
cdn.midjourney.com
huggingface.co
civitai.com
How to tell whether DNS is leaking: with the proxy on, look up how a domain resolves. If you get a nearby node from your local ISP rather than one close to your exit region, resolution isn't going through the tunnel. In image generation this usually shows up as previews loading while original downloads crawl.
If it's still unstable after all five steps, consider account-side factors: a login environment that keeps changing, or high server load, can both look like a 'network fault' — but that's no longer something a different route will fix.
Other AI art tools: local installs, online generators and model downloads
Not everyone uses Midjourney. Sorting the common kinds of AI art tool by what they need from a network gives you a clearer sense of which route to pick.
Local installs (Stable Diffusion WebUI, ComfyUI). The software itself doesn't need a network — only downloading models and extensions does. Model files run to several GB, and the worst outcome is a dropped connection that forces a restart; a download tool that supports resuming is far less hassle than reconnecting over and over. Hugging Face and Civitai are the main model sources, and downloads go through their own CDN domains — put those in your split-routing rules and downloads won't interfere with image generation.
Online generators. Most browser-based image generation services sit behind Cloudflare, and how hard the checks hit depends on how clean your exit IP is — judge it the same way as the Midjourney web app.
Chat-based generation. Services that generate images inside a chat app connect much like Discord — a long connection plus an image CDN — so if you hit lag or dropouts, troubleshoot in the same order.
Regional restrictions. A few services block certain regions outright and return a denial page. Changing exit region works faster than changing protocol here, but don't hop regions constantly — for the same reason as before.
Choosing a route for image generation: three conclusions
To pull the above together, choosing a route for image generation comes down to three conclusions.
- For submission and generation, stability beats bandwidth. Discord runs on a long connection, and every drop means starting over — that's where IEPL-class dedicated lines earn their keep.
- For model downloads, downstream speed and resumable transfers matter most. Add the model sites' domains to your split-routing rules and pair them with a download tool that can resume — far less trouble than a global proxy.
- Keep your exit region stable. Stay on one location for a while; when the web app is stuck on verification, switch within the same region instead of jumping halfway around the world.
Bottom line: 'Midjourney won't load' comes down to three causes — an exit IP that triggers verification, a long connection being cut, or DNS resolution that doesn't go through the tunnel. The first two are solved by changing route and location; the third is solved by adjusting your split-routing rules.