DISCORD PROFILE PICTURE
Discord profile picture size.
Discord’s profile Help pages do not publish a pixel size for a main profile avatar or a server avatar. The Per-Server Profiles page does publish an 8 MB maximum for a server avatar.
The main Custom Profiles page lists PNG and GIF and says an animated GIF avatar requires Nitro. The Per-Server Profiles page lists JPG, PNG and GIF and gives the 8 MB server-avatar maximum. The pages were read on 2026-11-02 UTC. Their avatar sections do not state a minimum, maximum, aspect ratio or displayed pixel size. The 680 × 240 and 600 × 240 values and the under-10 MB banner limit belong to banners, not avatars.
This is an independent tool, not affiliated with Discord.
Discord avatar size: what the official pages say — and do not say
The two profile Help pages answer different questions. Custom Profiles describes a main profile avatar. Per-Server Profiles describes an avatar for one server. The tables below keep those surfaces apart and copy “Not stated” where the page read did not publish a value.
| Surface or rule | Published pixels | Formats and Nitro | File limit | Official page | Read (UTC) |
|---|---|---|---|---|---|
| Main profile avatar | Not stated | PNG and GIF; animated GIF requires Nitro | Not stated | Custom Profiles | 2026-11-02 13:41:36 |
| Server profile avatar | Not stated | JPG, PNG and GIF; custom server avatar and GIF require Nitro | 8 MB maximum | Per-Server Profiles | 2026-11-02 13:41:49 |
| Avatar minimum | Not stated on either avatar section | — | — | Custom Profiles; Per-Server Profiles | 2026-11-02 |
| Avatar maximum | Not stated on either avatar section | — | — | Custom Profiles; Per-Server Profiles | 2026-11-02 |
| Avatar aspect ratio | Not stated | — | — | Custom Profiles; Per-Server Profiles | 2026-11-02 |
| Displayed pixels or circle crop | Not stated | — | — | Custom Profiles; Per-Server Profiles | 2026-11-02 |
| Main profile banner, for scope only | Minimum 680 × 240 px | PNG, JPG or animated GIF; Nitro required | Under 10 MB | Custom Profiles | 2026-11-02 |
| Per-server profile banner, for scope only | Recommended minimum 600 × 240 px | PNG, JPG or animated GIF; Nitro required | Under 10 MB | Per-Server Profiles | 2026-11-02 |
Keep the scopes apart. The 8 MB maximum is written for a server avatar. The 10 MB limit and the 680 × 240 and 600 × 240 values are banner values. Neither avatar section publishes a pixel size, a file limit for the main avatar, an aspect ratio or a circle-crop rectangle. The format lists also differ, so this page does not combine them into one universal Discord rule.
The 128 × 128, 256 × 256 and 512 × 512 options in the tool are local test canvases. They are not Discord recommendations, minimums, maximums or display sizes. A site can measure its own output at one of those sizes without knowing how Discord will show the same image.
Discord also has server banners, profile banners and other image surfaces. Those can have their own values. Use the Discord banner guide for those layouts; its 960 × 540, 680 × 240, 600 × 240 and profile-banner formats do not certify an avatar.
The Discord avatar upload check
Start with the surface, not a guessed number. A main profile avatar and a custom server avatar are different surfaces. The first has a format list and Nitro condition on Custom Profiles; the second has the 8 MB maximum on Per-Server Profiles.
- Name the surface. Main profile avatar, server avatar or banner. A value from the banner section cannot answer an avatar question.
- Write Not stated for pixels. The avatar sections do not publish a minimum, maximum, ratio or display size. A 128, 256 or 512 square is a test canvas on this page, not a Discord value.
- Keep the format lists separate. Custom Profiles lists PNG and GIF; an animated GIF requires Nitro. Per-Server Profiles lists JPG, PNG and GIF; a custom server avatar and GIF require Nitro. This page does not invent a common list.
- Attach the file limit to the right surface. The Per-Server Profiles FAQ gives 8 MB for a server avatar. It does not publish a byte definition or move that number to the main avatar. Custom Profiles does not publish an avatar file limit on the page read.
- Inspect the local crop. Fill covers the square and removes source area; Fit keeps the whole source and adds padding. The circle toggle changes the local view only. Discord does not publish a circle-crop rule on either page read.
- Read the encoded file. Check width, height, MIME type and bytes after encoding. A local check can describe this file. It cannot prove upload acceptance, Nitro access or the pixels Discord shows in a chat, member list or profile card.
The tool below reads the selected file’s signature before decoding. It accepts static PNG or JPG. A GIF89a renamed as PNG is still rejected, and the tool rejects GIF before decoding because it cannot preserve animation. That rejection is a tool limit, not a statement that Discord rejects every GIF. A user can choose another PNG or JPG after the error and start a fresh result.
What the two official source rows mean
Custom Profiles is the source for the main profile avatar. Its avatar line lists PNG and GIF, and its Nitro sentence is about an animated GIF avatar. The same article also contains banner values. The banner values stay in their own rows because the page does not say that a banner size is also an avatar size.
Per-Server Profiles is the source for a server avatar. Its FAQ gives the 8 MB maximum and the page lists JPG, PNG and GIF. It also says a custom server avatar and GIF require Nitro. That is a server-avatar condition. It does not turn 8 MB into a main-avatar ceiling, and it does not give a byte definition for MB.
The two pages use different format wording. One lists PNG and GIF; the other lists JPG, PNG and GIF. Their Nitro sentences also cover different features. A table that merges the rows would invent a single format list and a single scope. This page keeps the source names attached to each claim so a reader can check the exact surface.
A local file can have a supported MIME type and still be unsuitable after cropping. It can also be small enough for a server avatar and still look soft at a small preview. The checks here therefore report the encoded file and the local geometry, not a platform verdict.
Make a local square test file
Choose PNG or JPG, then choose one of three square test canvases. The file stays in this browser. The download is always square; the circle button only changes the local preview. The size is a test setting, not a Discord recommendation.
Actual encoded file, then a local shape check
Choose an image to begin.
No image loaded.
Square is the encoded output. Discord does not publish an avatar circle rule on the two pages read.
See it at 128, 64 and 32 CSS px
These are local observation sizes chosen by this site. They are not official Discord display sizes. The selected circle is a CSS clip on this page only.
What the encoded file shows
- Choose a static PNG or JPG to read back the encoded file.
Tool limits, the square and the circle
Accepted inputs are static PNG and JPG. The 25 MiB input cap and 40,000,000-pixel cap are this tool’s limits. The 8 MB server-avatar maximum is not used as a pass badge because the official page does not define its byte arithmetic or make it a main-avatar rule.
The circle button changes only the browser preview. The square export remains the selected 128, 256 or 512 canvas. No local file is sent to Discord or to another server.
What our repeatable square test measured
We made one deterministic 900 × 1200 source image from code: a dark grid, four exact-colour corner markers, a simple portrait subject, the large line “DISCORD” and a 7-pixel-high “SMALL 7 PX” line. The source, six PNG exports, six JPG exports, 32 px square previews, 96 px circular previews, readbacks and two negative controls are in discord-avatar-samples/results.json.
Run make_samples.py with Python 3, cjpeg and djpeg to rebuild every file. The script has no clock, randomness or network access. It uses nearest-neighbour sampling so the output is byte-stable; the browser uses its own resampler, so these byte counts describe the generated files rather than a browser download.
The square source is 3:4. For Fill, scale = max(S / 900, S / 1200) = S / 900, so the generator keeps the central 900 × 900 pixels and removes 270,000 px², or 25% of the source. For Fit, scale = min(S / 900, S / 1200) = S / 1200; the drawing is 0.75S × S and the geometric padding is 25% of the square. The integer raster may differ by one row or column.
The three Fill scales are 128 / 900 = 0.142222, 256 / 900 = 0.284444 and 512 / 900 = 0.568889. The three Fit scales are 128 / 1200 = 0.106667, 256 / 1200 = 0.213333 and 512 / 1200 = 0.426667. Fill keeps the same source rectangle at all three sizes, so its removed area and source coordinates do not change. Fit keeps the whole source but changes the drawn width and the transparent columns around it.
The source area is 900 × 1200 = 1,080,000 px². The kept Fill rectangle is 900 × 900 = 810,000 px², so Fill removes 270,000 px². Fit keeps the full source and makes a 96 × 128 drawing at 128, a 192 × 256 drawing at 256, and a 384 × 512 drawing at 512. The transparent padding is the square area minus those drawn rectangles: 16,384 − 12,288 = 4,096, 65,536 − 49,152 = 16,384, and 262,144 − 196,608 = 65,536 px². Each is exactly one quarter of the canvas in this source ratio.
| Canvas / mode | Source region | Removed or padded | PNG bytes | JPG bytes | Marker mask · text mask |
|---|---|---|---|---|---|
| 128 · Fill | 900 × 900 at x = 0, y = 150 | 270,000 px² · 25.00% | 622 | 5,132 | 0 · 0 |
| 128 · Fit | 96 × 128 at x = 16, y = 0 | 4,096 px² · 25.00% | 706 | 4,519 | 64 · 1 |
| 256 · Fill | 900 × 900 at x = 0, y = 150 | 270,000 px² · 25.00% | 1,804 | 11,713 | 0 · 0 |
| 256 · Fit | 192 × 256 at x = 32, y = 0 | 16,384 px² · 25.00% | 1,917 | 10,946 | 256 · 8 |
| 512 · Fill | 900 × 900 at x = 0, y = 150 | 270,000 px² · 25.00% | 5,997 | 31,200 | 0 · 0 |
| 512 · Fit | 384 × 512 at x = 64, y = 0 | 65,536 px² · 25.00% | 6,310 | 28,640 | 900 · 26 |
The source has 5,184 exact marker pixels in four 36 × 36 px squares. Fill keeps the central square, so every corner marker and the small line below the retained window are removed: both mask counts are zero at every Fill size. Fit keeps the markers and the line, but the output scale changes how many source mask pixels map into the square. The counts are 64 markers and 1 small-text pixel at 128; 256 and 8 at 256; 900 and 26 at 512.
The small-text row is seven source pixels high. One export pixel at 128 is not evidence that the text is readable; it is evidence that one masked source pixel maps into the output. The measurement deliberately stops there. It does not run OCR, judge typography, or claim that Discord will preserve that row.
The mask count is not the number of visible text characters. The source mask contains 112 exact-colour pixels in the seven-row label band. At 128, the nearest-neighbour sample maps one of those pixels into the square; at 256 it maps eight; at 512 it maps 26. The count rises with canvas size, but the output text is still a tiny pixel pattern. A person should inspect the preview rather than treat a larger mask count as a readability result.
Fill has no marker or small-text mask pixels because the four markers sit near the outer corners and the small line sits below the central 900 px window. The subject remains inside the window; the bottom label is cropped out. That is a property of this source, not a general rule for every portrait. A different source with a central text or a close-up face can produce different visible content.
The PNG and JPG byte counts are file properties, not Discord limits. PNG keeps the Fit padding transparent. JPG flattens transparency onto white before cjpeg -quality 92, so its bytes differ even when the visible geometry is the same. The encoded PNG readback checks the signature, every chunk CRC and every decoded RGBA row. The JPG record comes from djpeg, which decodes the file independently of the marker parser used for the dimensions.
The browser receives a different resampler and a different encoder. A browser JPG can have different bytes from this generator’s JPG even at the same quality setting. The comparison is useful because both cases use the same geometry and the same source; it is not a test of browser or Discord output.
What the 32 px and 96 px previews add
The 32 px square preview is a local small-size check. The 96 px circular preview applies a fixed geometric circle and counts only mask pixels whose sampled source coordinate falls inside the circle. It is not a model of a Discord chat avatar, member list or profile card.
| Canvas / mode | 32 px square · markers | 32 px square · text | 96 px circle · markers | 96 px circle · text |
|---|---|---|---|---|
| 128 · Fill | 0 | 0 | 0 | 0 |
| 128 · Fit | 4 | 0 | 0 | 0 |
| 256 · Fill | 0 | 0 | 0 | 0 |
| 256 · Fit | 4 | 0 | 0 | 3 |
| 512 · Fill | 0 | 0 | 0 | 0 |
| 512 · Fit | 4 | 0 | 0 | 2 |
The 96 px circle has 7,232 counted interior pixels and about 1,978 corner pixels excluded by the continuous circle. The outside of each circular preview is transparent. The marker count falls from 900 at the 512 Fit export to 0 in the 96 circle because the four corner markers are outside the circle; the small-text count falls from 26 to 2. Those are sampled mask pixels, not a claim that the subject or text is usable at that display size.
The 32 px square preview has only 1,024 canvas pixels. It samples the export at a fixed nearest-neighbour coordinate, so the four corner markers become four mask pixels in every Fit row while the one-row text can disappear. The 96 px circle then samples a different grid and clips the outside. These are two local observation sizes chosen by the page, not a reconstruction of Discord’s avatar widget.
Two negative controls show the test has failure cases. wrong-canvas-255x256.png fails the 256 × 256 width and height criterion. shifted-fill-256.png is a valid 256 square but fails the decoded RGBA identity check against the correct 256 Fill export; it moves the source window by 24 px and differs in 5,484 of 65,536 pixels. Both are recorded in the results JSON as rejected controls.
The generator verifies every PNG signature, chunk CRC and decoded RGBA row. The JPG records come from a separate djpeg decode, not from the JPEG marker parser alone. The results JSON contains 19 PNG readback records across the source, six exports, six square previews and six circle previews. The browser flow separately decodes the actual downloaded PNG or JPG and reports its file type and bytes. Neither experiment proves a real Discord upload, a real Discord resize, a circular display rule or a platform compression method.
To repeat the comparison, rebuild the source and exports with the links above, then open results.json and compare the geometry, bytes, mask counts and readbacks with this table. If a file is regenerated with another resampler, the byte count and mask count may change while the source geometry remains the same. Keep those distinctions when reviewing a new result.
Why a profile picture looks soft in a small circle
Blur can come from the source image, the crop, the export scale and the small preview. Start by checking those local facts before changing the artwork. A small pixel count is not a readability score; it tells you that the mask survived the geometry.
- Open the source at its real size. Check whether the face or text already has soft edges before this tool sees it.
- Compare Fill and Fit. Fill may remove the top and bottom of a portrait; Fit may make the subject smaller and add transparent or background padding.
- Try the three local sizes. At 128, 256 and 512, read the encoded file again. The download size is the test size, not a Discord display size.
- Use the circle as a composition check. It shows what a local circular crop would hide. The download remains square because Discord publishes no circle-crop rule on the pages read.
- Do not infer platform compression from a third-party post. A coach-supplied “blurry” thread is a research lead, not a measured Discord result. This page did not read the original post or measure Discord’s displayed pixels; keep personal-avatar and server-avatar claims separate.
- State what remains untested. A local file can have the pixels, format and bytes you chose and still fail or look different after a real upload. That final check requires a Discord account and the relevant Nitro access.
Discord profile picture questions
What size should a Discord profile picture be?
Discord does not publish an avatar pixel size on the two profile Help pages read here. There is no official 128 × 128, 256 × 256 or 512 × 512 recommendation on those sections. Use a source with enough detail for your chosen crop, then inspect the local square and small previews. The three sizes in this tool are test canvases, not platform answers.
Is 8 MB the limit for every Discord avatar?
No. The 8 MB maximum appears in the Per-Server Profiles FAQ for a server avatar. The main Custom Profiles page reviewed here does not give an avatar file limit. This page does not apply 8 MB to the main avatar, and it does not define MB as a byte count beyond the official wording.
Can I upload a GIF profile picture?
Custom Profiles lists PNG and GIF and says an animated GIF avatar requires Nitro. Per-Server Profiles lists JPG, PNG and GIF; its custom server avatar and GIF require Nitro. The wording differs by page. This local tool rejects GIF before decoding so it cannot silently flatten one frame, then accepts another PNG or JPG for a fresh output.
Does Discord crop every avatar to a circle?
The two pages read here do not publish a circle-crop rule or a displayed pixel size. The circle in this tool is a local geometry preview. It does not change the download, and it is not evidence of Discord’s interface.
Why does the tool let me choose 512 × 512 if Discord does not recommend it?
512 × 512 is a larger local test canvas for checking the encoded file and a small preview. It is not a recommendation, minimum or maximum. On the same source, Fit preserves the whole 3:4 image and Fill removes 25% of the source area; the test shows how those choices change marker and text masks.
What is the difference between a main profile picture and a server avatar?
A main profile picture is the avatar on your Custom Profile. A server avatar is the avatar for one server profile. The first page read here lists PNG and GIF and gives no avatar file limit. The second lists JPG, PNG and GIF, gives an 8 MB server-avatar maximum, and describes Nitro for custom server avatars and GIF. The page keeps the two rows visible because a server result is not a universal avatar result.
Can I reuse one file for both avatar surfaces?
You can keep one source image and make two local test files, but this page cannot promise that one encoded file fits every surface. A server avatar has the published 8 MB maximum; the main avatar page does not publish a corresponding byte ceiling. The format lists also differ. Make a separate download for the surface you are testing and read back its pixels, MIME type and bytes.
Why does Fit add transparent padding while JPG adds a background?
Fit preserves the whole 3:4 source inside a square. A 900 × 1200 source becomes a 0.75S × S drawing, with the remaining quarter of the square empty. PNG can keep that empty area transparent. JPG has no alpha channel, so the browser fills the padding with the selected JPG background colour before encoding. Neither behaviour is a Discord recommendation.
Does the 8 MB server-avatar limit define an exact byte count?
The Per-Server Profiles page says “maximum file size is 8 MB.” It does not define whether that means 8,000,000 bytes or another byte threshold on the page read. This tool reports the actual encoded byte count instead of showing a pass badge. For a server avatar, compare the file to the official wording and your own upload result; do not move the same label to a main avatar.
Why does the result not show a green 8 MB pass?
The 8 MB value is scoped to a server avatar and the page does not define its byte arithmetic. The tool also has no verified main-avatar limit to compare against. A green pass would imply a platform rule that the source does not publish. The result therefore reports the encoded bytes and keeps the source scoped wording beside the file facts.
Why does my small text disappear at 32 px?
The 32 px preview reduces the export again. A 7-pixel-high source line can map to no sampled pixels or only a few pixels after that reduction. That result does not prove that every Discord surface will lose the line. It does show that a local small preview is useful before relying on fine text in an avatar.
What do the banner sizes have to do with an avatar?
Nothing on these avatar pages. The 680 × 240 main-profile banner, the 600 × 240 per-server banner and the under-10 MB banner limit are separate banner rows. The banner guide keeps those values and their Nitro conditions together. Do not use them to answer a profile-picture pixel question.
Does a local pass prove that Discord will accept the file?
No. The tool reads the encoded pixels, MIME type and bytes in the browser. It does not know your Nitro status, the server’s settings, Discord’s internal processing or the displayed result. Use the local check to prepare a file, then test the relevant upload surface with your account.
Why is a mask count not a readability score?
A mask count only says how many sampled pixels correspond to the declared source marker or small-text colour. It does not know letter shapes, contrast, anti-aliasing, viewing distance or the display size used by Discord. A higher count can help show that a crop removed the mask, but it cannot certify that a person will read the text. Inspect the actual small preview as well.
Is 128 × 128 an official Discord avatar size?
No. The two Help pages read here do not publish an avatar pixel value. The 128 × 128 option is the smallest local test canvas on this page. It is useful for seeing a compact square and the 32 px local preview, but it is not a Discord minimum, recommendation or rendered size.
What was not tested?
This page did not upload a file to Discord, did not use a logged-in account, and did not measure a chat, member list, profile card or mobile display. It did not read the original post behind a coach-supplied blurry-avatar lead, so that lead is not treated as a finding. The experiment covers local canvas geometry, two fixed preview sizes, encoded-file readbacks and controlled negative cases only.
Sources and limits
Official pages read in Chrome without a Discord login on 2026-11-02 UTC: Custom Profiles at 13:41:36 UTC and Per-Server Profiles at 13:41:49 UTC. The first lists PNG and GIF for the main avatar and says animated GIF avatars require Nitro; the second lists JPG, PNG and GIF, says custom server avatars and GIF require Nitro, and gives the 8 MB server-avatar maximum. Both state no avatar pixel dimensions.
The banner rows are included only to keep scopes separate. See the Discord banner size page for that surface. For the Twitch profile-picture case, compare the Twitch profile picture tool and its 256 maximum without importing that value into Discord.
Local evidence: results.json, make_samples.py, the six PNG exports and their JPG counterparts, 32 px square and 96 px circle previews, and the two negative controls. The test’s mask counts are geometry observations, not readability predictions, and the page does not claim a real Discord compression, upload or display result.