Twitter Profile Picture Size: Recommended Dimensions and Tips
Use a 400×400 px square image under 2 MB for your X profile photo. Learn formats, cropping, resizing, upload steps, and fixes for failed uploads.
Use a 400 × 400 pixel square image for your Twitter (X) profile picture. X accepts JPEG, GIF, or PNG files up to 2 MB. Animated GIFs are not supported for profile images. Upload on x.com or an official iOS or Android app, then click Apply or Save to finish.
These are X Help Center requirements: upload troubleshooting and profile customization.
Recommended Twitter profile picture dimensions
| Setting | Recommendation |
|---|---|
| Canvas | 400 × 400 pixels (square) |
| Formats | JPEG, GIF, or PNG |
| Maximum file size | 2 MB |
| Animation | Animated GIFs are not supported |
| Upload location | x.com or the official iOS/Android app |
X may display the image as a circle in some surfaces. The 400 × 400 requirement describes the source canvas; keep the important subject inside the center area so circular masking does not cut it off. This centered-safe-area advice is a design recommendation, not an additional X specification.
How to prepare the image
- Start with a square crop. Crop the original photo to 1:1 before resizing. A face, logo, or other key subject should sit near the center with some breathing room.
- Resize to 400 × 400. Export at exactly 400 pixels wide and 400 pixels high. Enlarging a very small source can make it soft; use the largest clean original you have.
- Choose a still format. JPEG is practical for photographs; PNG preserves sharp graphics and transparency; a non-animated GIF is accepted. X does not rank these formats, so choose based on your source and export workflow.
- Keep the file at or below 2 MB. If it is too large, reduce JPEG quality modestly, remove unnecessary metadata, or export a PNG with an appropriate color mode. Check the final file size after export.
- Preview the circular crop. Place the image in a circle-shaped preview and check hair, text, or logo edges before uploading. Avoid tiny text that becomes unreadable at profile-icon sizes.
Example: resize with Python
The following script uses Pillow. Install it with python -m pip install Pillow, then run it against a source image.
from PIL import Image
source = Image.open("source.jpg").convert("RGB")
side = min(source.width, source.height)
left = (source.width - side) // 2
top = (source.height - side) // 2
square = source.crop((left, top, left + side, top + side))
profile = square.resize((400, 400), Image.Resampling.LANCZOS)
profile.save("twitter-profile.jpg", format="JPEG", quality=88, optimize=True)
print("saved twitter-profile.jpg")
For a transparent logo, keep the source in RGBA and save as PNG instead of converting to RGB. Check that the resulting PNG is still no larger than 2 MB.
Upload a Twitter profile picture
- Open x.com or the official X app and sign in.
- Open your profile and choose the profile customization or edit option.
- Select the profile photo control and choose your 400 × 400 image.
- Adjust the crop if X presents one. Keep the subject inside the circular safe area.
- Click Apply, then save the profile changes. X warns that the image will not be saved until the final Apply/Save action is completed.
Common upload problems and fixes
| Problem | Likely cause | Fix |
|---|---|---|
| File is rejected | Unsupported format, animated GIF, or file over 2 MB | Export a still JPEG, GIF, or PNG at 2 MB or less. |
| Photo uploads but disappears | Apply/Save was not completed | Repeat the edit flow and finish the final Apply or Save action. |
| Upload control fails | Browser or computer issue | Try an updated or different browser, then retry from x.com or the official app. |
| Image looks blurry | Low-resolution source enlarged too far or heavy compression | Start from a larger, sharp original and export at 400 × 400 with moderate JPEG quality. |
| Face or logo is clipped | Circle masking trims the outer edges | Re-crop with more margin around the subject and preview it as a circle. |
| Changes do not appear | Save did not complete or an old cached view is open | Confirm the profile shows the new image after saving, then refresh or reopen the profile. |
Header image is a different size
Do not use the header-art dimensions for the profile photo. X lists 1500 × 500 pixels as the recommended header dimensions; that specification applies to the header, while the profile photo recommendation is 400 × 400.
Or skip the browser setup
If you need to check how a public X profile page renders after changing the image, ScreenshotNeo can capture the page with one request. It removes cookie or consent banners, newsletter popups, and chat widgets before the capture; bot checks, blank pages, timeouts, failed loads, and cache hits are not billed. Responses identify the result with X-Page-Verdict and X-Billed headers. Its MCP server also lets Claude, Cursor, or another MCP client call take_screenshot, get_page_info, or capture_pdf.
See the ScreenshotNeo API docs for options. This example captures a public profile page as a WebP file:
curl -G "https://api.screenshotneo.com/v1/shot" \
-d access_key=YOUR_API_KEY \
--data-urlencode url=https://x.com/USERNAME \
-o profile.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={"access_key": "YOUR_API_KEY", "url": "https://x.com/USERNAME"},
timeout=90,
)
r.raise_for_status()
open("profile.webp", "wb").write(r.content)
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://x.com/USERNAME'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
require('fs').writeFileSync('profile.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo includes 1,000 screenshots per month free with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account.
Performance, reliability, and cost notes
- A 400 × 400 source is small enough for quick uploads while retaining the dimensions X recommends.
- Keeping the file under 2 MB avoids an avoidable rejection; quality and file size depend on the image content and chosen format.
- Save the original high-resolution file separately so you can re-export at 400 × 400 without repeated quality loss.
- For automated visual checks, cache a capture when the page is unchanged and inspect ScreenshotNeo’s verdict and billing headers before storing results.
FAQ
Can I upload a 500 × 500 image?
Resize or crop it to 400 × 400 to follow X’s recommended dimensions.
Is a GIF allowed?
A still GIF is listed as an accepted format. Animated GIFs are not supported for profile images.
What if my image is exactly 2 MB?
Keep it at or below X’s 2 MB maximum. If an upload still fails, export a slightly smaller file and retry.
Can I upload from a third-party client?
X’s troubleshooting guidance says to upload on the web or through an official application, so use x.com or the official iOS/Android app.


