Bluesky banner resizer, 3:1 with the crop shown

Turn any image into a 1500×500 Bluesky banner under 1,000,000 bytes, and see what bsky.app cuts off before you upload.

Free · no signup · the banner below is real output

Tool

Framing

Text (optional)

Preview marks

File

Several images PRO

Choose several images at once to get one banner each, same framing and text, in a ZIP.

Your image never leaves this device.

Preview as:
Bluesky banner made with this tool: 1500×500 JPEG shown the way bsky.app crops it, with the profile picture in place
Sunday Kite Club@kiteclub.bsky.socialKites, hills and the weather. Notes every weekend.

1500×500 JPEG · 71,375 bytes · quality 92 · Download this file

Loading the sample banner…

Bluesky shows the banner in a box that is always 150 px tall, so it trims the top and bottom on desktop and the sides on phones. The previews copy the box sizes and avatar position we measured on bsky.app (desktop 600×150, tablet 768×150, phone 390×150). Shaded: cut off on at least one screen width. Green box: the profile-picture corner. In “Whole file”, blue = desktop crop, orange = 390 px phone crop. The banner is the real 1500×500 file this page makes from the sample.

What size is a Bluesky banner?

3:1. Bluesky publishes no pixel size; its app crops banners to 3:1 and its profile record accepts PNG or JPEG up to 1,000,000 bytes (read October 24, 2026). 1500×500 covers desktop at 2× and phones at 3×. bsky.app shows it in a 150 px tall box, so keep text inside x 217–1283, y 109–391 of the file and out of the bottom-left avatar corner (x 0–560, y 300–500).

How to resize an image for a Bluesky banner

A Bluesky banner is a 3:1 image with your avatar on its lower-left corner. bsky.app never shows all of it: the box is always 150 px tall, so the top and bottom go on desktop and the sides go on phones. This page crops your image to 3:1, keeps the JPG under Bluesky’s 1,000,000-byte limit, optionally adds a headline in the area every screen shows, and previews it the way bsky.app draws it.

  1. Drop an image. A sample banner is already made from an original 2400×1600 illustration, so you can see the result first.
  2. Crop: zoom and slide until the 3:1 strip shows what you want, or fit the whole image with blurred sides. Type a headline if you want one.
  3. Check the Desktop, Tablet and Phone previews. Keep text out of the shaded edges and the green avatar corner.
  4. Download the 1500×500 JPG (under 1,000,000 bytes), then in Bluesky: Edit Profile, tap the banner, upload it, keep the crop, Save.

What Bluesky’s own files say (read October 24, 2026)

Bluesky has no help page that gives a banner size. What it does publish is the profile record format and the open-source code of its app, so the table quotes those directly. Code links point to the current files; we read them at social-app commit 4e4ad9c and bsky commit 293d649.

WhatWhat it saysSource
What the banner is“Larger horizontal image to display behind profile view.”Bluesky lexicon app.bsky.actor.profile
Formats and file limit"accept": ["image/png", "image/jpeg"] and "maxSize": 1000000, the same for the avatar (“Small image to be displayed next to posts from account. AKA, 'profile picture'”).Bluesky lexicon app.bsky.actor.profile
Unit of the limitFor blobs: “maxSize (integer, optional): maximum size in bytes”. So 1,000,000 bytes, not 1 MiB (1,048,576).AT Protocol Lexicon spec
ShapeThe banner cropper opens with aspectRatio: 3 / 1 (camera: aspect: [3, 1]), and the profile code notes “Banner aspect ratio is 3:1”.Bluesky app code, UserBanner.tsx; Profile/Header/Shell.tsx
Resize on uploadBanners go through IMAGE_SIZE_CONFIG_2K_1MB: maxDimension: 2000, maxSize: 1000000. On the web the cropped image is passed to compressImage, which saves with format: SaveFormat.JPEG. In the phone apps compressIfNeeded starts with if (img.size < maxSize) { and leaves smaller files alone.Bluesky app code, UserBanner.tsx; constants.ts; image/compress.ts; manip.ts
Height on screenPROFILE_BANNER_HEIGHT = 150; the banner image is drawn with contentFit="cover".layout.ts; Bluesky app code, UserBanner.tsx
Profile picture position{top: 104, left: 10}, a ring of width: 94 around the avatar, drawn with size={live.isActive ? 88 : 90}.Profile/Header/Shell.tsx
Menu wording“Edit Profile”, then on the banner “Upload from Files” (web) or “Upload from Library” and “Upload from Camera” (apps), “Remove Banner”, then “Save”.Bluesky app code, UserBanner.tsx; Bluesky app code (ProfileHeaderStandard.tsx, EditProfileDialog.tsx)

Reading code is not the same as a promise from Bluesky: the app can change any day. We did not log in or upload a banner to Bluesky. Gridloom is not affiliated with Bluesky Social.

Bluesky banner size: 3:1, no official pixel size

Bluesky doesn’t publish a recommended pixel size. Its cropper fixes the shape at 3:1, and the only hard numbers are PNG or JPEG and 1,000,000 bytes. So any 3:1 file under that limit works. Which width is worth uploading comes down to how big bsky.app actually draws it. The widest box we measured was 799×150 CSS px on a 799 px window, where the image is drawn 799 px wide; on a 2× screen that needs about 1,600 pixels. On desktop the box is 600 px wide (1,200 pixels at 2×), and on a 390 px phone the image is drawn 450 px wide (1,350 pixels at 3×). On every phone width we tried the image was drawn 450 px wide, because the box is 150 px tall. That is why the default here is 1500×500: enough for desktop at 2× and phones at 3×. Pick 2000×667 if you want headroom; that is also the largest the web uploader keeps, because its code scales the long side down to 2,000 px. The 3000×1000 option is Pro. It only helps if your file reaches Bluesky without that resize, and we couldn’t check when that happens.

How bsky.app crops a 3:1 banner (measured)

The banner box is always 150 CSS px tall: the full window width below 800 px, and 600 px wide in the centre column from 800 px up. The image fills it (CSS object-fit cover, centred, as we read it from the page). A 3:1 image is never shown whole. On desktop the box is 4:1, so the top and bottom are trimmed. On phones the box is narrower than 3:1, so the sides go. The worst cases are a 799 px window for top and bottom and a 320 px phone for the sides.

Window widthBanner boxPart of a 1500×500 file you seeAvatar covers (file px)
800–1920 px (desktop, incl. 1024, 1366, 1920)600×150full width, y 62–438x 30–255, y 328–438
799 px799×150full width, y 109–391x 23–191, y 308–391
768 px (tablet)768×150full width, y 104–396x 23–199, y 311–396
700 px700×150full width, y 89–411x 26–219, y 316–411
600 px600×150full width, y 62–438x 30–255, y 328–438
430 px430×150x 33–1,467, full heightx 73–373, y 353–500
390 px (phone)390×150x 100–1,400, full heightx 140–440, y 353–500
360 px360×150x 150–1,350, full heightx 190–490, y 353–500
320 px320×150x 217–1,283, full heightx 257–557, y 353–500

Measured October 24, 2026 with Playwright in Chrome, signed out, on @bsky.app at 18 window widths from 320 to 1920 px, and on @jay.bsky.team at 390 and 1366 px. The avatar was a 90 px circle 12 px from the banner’s left edge and 106 px from its top on every width. This matches the code values above. File coordinates are worked out from those boxes.

Safe zone: the part shown on every width we measured is x 217–1283, y 109–391 of a 1500×500 file, the middle 71% across and 56% down. Keep text and faces in there. Then keep them out of the avatar corner, x 0–560, y 300–500, which covers where the circle landed at every width (it slides right on narrow phones because the sides are cropped). The text positions in the tool stay inside both at the default size, and it warns you if your text doesn’t.

What Bluesky does to the file after upload (measured)

We fetched the banners of five accounts (@bsky.app, @jay.bsky.team, @pfrazee.com, @atproto.com, @theonion.com) from Bluesky’s image CDN, the URLs bsky.app loads. All five came back as 3000×1000 WebP, whatever was uploaded. The originals, read from each account’s data server, were 1000×750, 3000×996, 3000×1000, 1500×500 and 3000×1000 JPEGs. The 1000×750 one is cut to its middle 3:1 strip and scaled up three times. The 1500×500 one is doubled. So a small or wrong-shaped upload still fills the box, just softer and centre-cropped. That is a likely reason for a blurry Bluesky banner.

“blob too big”: the 1,000,000-byte limit

The profile record refuses banners over 1,000,000 bytes. A user reported in issue #10725 on Bluesky’s GitHub (now closed) that saving a large banner on the web showed: “Invalid app.bsky.actor.profile record: blob too big (maximum 1000000, got 1991913) at $.record.banner”. That is a user report, not an official statement, and we couldn’t reproduce it without an account. The current web code re-saves banners as JPEG under the limit, so it may not happen today. Still, the simple fix is a file under 1,000,000 bytes. Every JPG this page makes is under that, and the status line shows the exact byte count. A PNG banner can easily go over; the tool warns you. On the web Bluesky turns it into a JPEG anyway.

Measured on the sample

SettingFileSize
1500×500, crop, headline (the banner above)JPEG, quality 9271,375 bytes
1500×500, same, PNGPNG380,543 bytes
1500×500, whole image fitted, blurred sidesJPEG, quality 9267,450 bytes
2000×667JPEG, quality 92106,832 bytes
3000×1000 (Pro)JPEG, quality 92184,075 bytes

Sample: an original Gridloom illustration, 2400×1600. Measured in Chrome with this page’s own code. A detailed photo makes a bigger file than a flat illustration; the tool lowers JPEG quality step by step only if a file would reach 1,000,000 bytes.

How to change your Bluesky banner

On bsky.app or in the app, open your profile and press Edit Profile. Tap the banner and choose Upload from Files on the web (Upload from Library or Upload from Camera in the apps). Bluesky shows a 3:1 crop; a file from this page already has that shape, so leave the crop as it is. Then press Save. Remove Banner in the same menu takes it off.

Bluesky banner vs X header

Both are 3:1, so the same 1500×500 file fits both. The crops differ. X shows the whole strip on the screens we measured and puts the photo in the lower left, about x 0–410, y 320–500. Bluesky trims the top and bottom on desktop and the sides on phones, and its avatar corner reaches x 560. If you use one file for both, keep text inside x 560–1283, y 109–300 and it clears both avatars and every Bluesky crop we saw. For X’s own crop bands, use the X header resizer.

What this tool doesn’t do

It doesn’t log in to Bluesky or upload anything; you download the file and add it in Bluesky. It makes still images only, which is all the profile record accepts (a GIF becomes its first frame). It doesn’t make your avatar. Bluesky’s avatar cropper is square (aspectRatio: 1) and shown as a circle. Use the profile picture resizer for a centred square, and check that the file is under 1,000,000 bytes. Labeler accounts get a rounded-square avatar instead of a circle; the preview here shows the circle. Other banners: LinkedIn (1584×396), Discord and YouTube.

Frequently asked questions

What size is a Bluesky banner?

Bluesky doesn’t publish a pixel size. Its cropper is 3:1 and the profile record takes PNG or JPEG up to 1,000,000 bytes. 1500×500 covers desktop at 2× and phones at 3×; 2000×667 also covers 2× tablets and is the largest the web uploader keeps (its code scales the long side to 2,000 px).

What is the Bluesky banner size in pixels?

Any 3:1 size works; 1500×500 is a good default. bsky.app draws the banner 600 px wide on desktop and at most 799 px wide on tablets (about 1,600 pixels on a 2× screen), and all five banners we checked came back from Bluesky’s CDN as 3000×1000, whatever size had been uploaded.

What is the Bluesky banner aspect ratio?

3:1. The banner cropper in Bluesky’s app code opens with aspectRatio: 3 / 1, and the profile code notes “Banner aspect ratio is 3:1”.

What is the Bluesky banner size on mobile?

The file is the same. On phones bsky.app shows it in a box the width of the screen and 150 px tall, so it cuts the sides: a 390 px phone shows x 100–1400 of a 1500×500 file, a 320 px phone only x 217–1283.

What is the Bluesky banner safe zone?

From our measurements at 320–1920 px windows: x 217–1283, y 109–391 of a 1500×500 file is always shown. Keep text out of the avatar corner too, x 0–560, y 300–500.

What is the Bluesky banner file size limit?

1,000,000 bytes. The lexicon for app.bsky.actor.profile sets "maxSize": 1000000 for the banner, and the AT Protocol spec defines maxSize as bytes. JPGs from this page stay under it and show the exact byte count.

Why does Bluesky say my banner is too big?

Most likely the file is over 1,000,000 bytes. A user report on Bluesky’s GitHub quotes the error “blob too big (maximum 1000000, got 1991913)”. Export a JPG under 1,000,000 bytes, which is what this tool does.

Why is my Bluesky banner blurry?

On the five accounts we checked, Bluesky’s CDN served the banner at 3000×1000 and centre-cropped the one that wasn’t 3:1, so a small or tall upload gets enlarged a lot (that 1000×750 banner was scaled up three times). Start from a large image cropped to 3:1; the tool warns when it has to enlarge.

Where does the profile picture go on a Bluesky banner?

Bottom left. On bsky.app it is a 90 px circle 12 px from the banner’s left and 106 px from its top, so it hangs below the 150 px banner. In a 1500×500 file it covers about x 30–255 from y 328 down on desktop, and x 140–440 from y 353 down on a 390 px phone.

Can a Bluesky banner be a GIF?

No. The profile record accepts only image/png and image/jpeg for the banner. This tool saves a still JPG or PNG; a GIF becomes its first frame.

What size is a Bluesky profile picture?

No official pixel size either: PNG or JPEG up to 1,000,000 bytes, cropped square in the app and shown as a circle (90 px on the profile page). The CDN delivered the two avatars we loaded at 1000×1000.

Is it free, and is my image uploaded?

Free for 1500×500 and 2000×667 JPG or PNG and the template, with no watermark and no signup. Everything runs in your browser; your image isn’t uploaded. Pro ($5 for 30 days, paid in USDC) adds 3000×1000 and a ZIP of banners from several images at once.