Skip to content

Delivery#

How a finished image actually reaches your Discord client, and the limits that shape it. Read this if a result came back softer than you expected, arrived with a 📥 button, or did not arrive at all.


Output format#

Your format and quality come from /settings.

Setting Options Effect
Format WebP or PNG WebP is used only if the encoded file is actually smaller than the original bytes. If PNG happens to be smaller, you get the PNG.
Quality up to 95 This is a maximum, not a promise. It is the starting point the bot searches down from when the file is too big for your server.

Two things happen to every file regardless of settings:

  • Filenames are anonymised. Every output is renamed to a random 16-character hex string. Nothing about the model, prompt, or seed leaks through the filename.
  • Transparency is flattened. Alpha is preserved only for background-removal jobs. Everything else is composited onto white.

Note

WebP cannot encode an image larger than 16,383 pixels on a side. Anything bigger is resized down before encoding, because the encoder would otherwise fail outright.


Fitting your server's upload limit#

The bot does not target a fixed 25 MB. It targets your server's own upload limit times 0.95, read live from the channel you invoked the command in.

Where you are Target
Unboosted server (10 MB limit) ~9.5 MB
Boosted server (50 MB or 100 MB limit) ~47.5 MB or ~95 MB
DMs, or when no server limit can be read 25 MB assumed, so ~23.75 MB

Practically: a boosted server gets you visibly better images. The same 4K upscale that has to be squeezed to fit 10 MB will come through at or near your full quality setting on a boosted server, because the bot never compresses harder than it has to.

The quality ladder#

The bot works down this list and stops at the first rung that fits.

# Step What it costs you
1 Already under target Nothing. The file is sent untouched, with no re-encode and no quality loss.
2 Encode at your maximum quality Nothing, if it fits.
3 Estimate the needed quality from the image's complexity, then binary-search a narrow window around that estimate Some quality. The search finds the highest quality that fits, never a fixed low number.
4 If the narrow window missed, retry the full 20 to 95 range More quality, but still full resolution.
5 Progressive resize: up to 10 passes at 0.9x, then up to 10 more at 0.75x, encoded at quality 20 Resolution. This is the last resort.

Two deliberate choices are worth knowing:

  • Full resolution beats high quality. The bot exhausts the entire quality range before it will shrink your image by a single pixel.
  • There is a floor. Resizing stops at 256 pixels on either side. Nothing is ever shrunk past that.

The Details panel tells you exactly what happened: the image data section shows the format and the quality that was actually used, e.g. WebP q64. If that number is below your setting, rung 3 or 4 ran. If size is smaller than you asked for, rung 5 ran.

Tip

If your results keep coming back soft, the fix is usually the channel, not the settings. Run the same job in a boosted server, or generate at a smaller resolution and use /upscale afterwards.


Very large upscales#

Discord will not render an inline preview for an image past 4096 pixels on the longest side or 89 megapixels total. Past either ceiling the attachment shows as a broken, hard-to-open blob, which is especially painful when the result is ephemeral.

So for an 8x upgrade, or any output over those ceilings, you get two things:

  1. A downscaled preview that fits both ceilings, re-encoded as WebP quality 90 so it always displays.
  2. A 📥 Download button on the result card, which appears only when a preview downscale happened.

Clicking 📥 re-serves the untouched full-resolution original:

Situation What you get
Original fits your channel's limit The full-resolution file, ephemerally, with a full-res 8192×8192 · download link. The link always downloads even when the preview will not render.
Original is too big The original at full resolution, compressed with your own WebP settings. Resolution is preserved -- only bytes shrink.
Still too big after compression A message telling you the compressed size and the cap, e.g. Even compressed the full-res is 34.2MB, over the 25MB cap here. Try a channel or server with a higher upload limit.
Original no longer on disk A refreshed link to the copy that was originally sent.

Note

The preview you see in the channel is not the file you get from 📥. Judge fine detail from the download, not from the inline preview.


Multi-image batches#

All images from one job go into a single gallery, and Discord arranges them into a grid automatically. There is no combined collage.

Limit Value
Images per message 10
Numbered selection buttons 1️⃣ through 9️⃣

Picking one image out of a batch#

When a job produced more than one image, the single ⬆️ Upgrade button is replaced by numbered buttons 1️⃣ to 9️⃣, one per image, in the same order they appear in the grid. Clicking 3️⃣ upgrades the third image and nothing else.

When you launch an upgrade this way, the numbered button you clicked briefly turns into a green ✅ and then resets after about three seconds. That is confirmation the right image was picked, not an error.

🎨 Edit, ✨ Detailer, and 🎲 Remix handle batches differently: instead of numbered buttons they open a picker where you choose the image, since those actions need more input from you anyway.


Video#

A /render clip goes through a computed ladder rather than repeated guesswork.

# Situation Result
1 Clip fits the server's upload limit Delivered inline as a playable video.
2 Clip is over the limit One re-encode at a bitrate computed to land inside the limit, using 92% of the budget for safety and reserving 64 kbps for audio. You get a slightly softer but complete clip.
3 The computed video bitrate would fall below 120 kbps The clip is too long to look watchable at that bitrate, so it is not sent.

On rung 3 you still get the normal card with working buttons, but with no video attached and a note line:

⚠️ clip is 34.2MB, over this server's 25MB upload limit. try a shorter duration or smaller resolution.

The fix is a shorter duration or a lower resolution, or running the command somewhere with a higher upload limit.


Audio#

/compose results are sent as a classic message with the mp3 as a real attachment rather than as a card component, because that is the only way Discord gives you an inline audio player instead of a download-only file. The format follows what the workflow produced: MP3, Opus, or FLAC.


NSFW output is not blurred#

The nsfw flag does not spoiler your image

Setting nsfw on a generation is a prompt-handling tag only. It changes how your prompt is built. It does not blur, spoiler, or otherwise hide the resulting image, and no generation path in the bot marks output as a spoiler.

If you need a result hidden behind a click, do not rely on the flag. Generate it ephemerally, or post it yourself with Discord's own spoiler control.

The only place the bot applies spoilering is the Civitai model browser inside the admin panel, which is not something a normal user sees.


When delivery fails#

If the bot cannot post to the channel, it does not give up -- it works down a fallback chain, so a result can arrive somewhere you did not expect.

Order Where the result goes
1 The channel you used
2 A public follow-up on your command
3 An ephemeral follow-up, visible only to you
4 A direct message

Ephemeral results carry a 📤 Post visibly button instead of 🗑️ Delete, so you can push them into the channel afterwards. Only the person who ran the job, or an admin, can use it.

If ComfyUI produced the file but Discord refused it entirely, the file is still recorded, so /history can find it later.