TikTok effect music cover 800x800: generate 1024x1024, then resize
TikTok wants an 800x800 music cover with the brand in a 260px centre circle. 800x800 is below Sume's GPT pixel minimum, so render 1024 and resize.

Ask Sume for a 1024 x 1024 image and resize it to 800 x 800 yourself. TikTok's Branded Effect page asks for an official music cover of 800 x 800 px, 10 MB or less, with the brand placed in a 260 px diameter centre circle (read 2026-10-03). Sume's Image API says custom pixel sizes on the ChatGPT Image 2.5 models need both edges to be multiples of 16 and a total between 655,360 and 8,294,400 pixels. 800 x 800 is 640,000 pixels, just under that floor, so the exact size is refused for that family.
The workaround takes one extra line of Pillow, and it keeps the artwork sharp because you scale down instead of up.
The numbers behind the rule
800 is a multiple of 16 (16 x 50), so the edge test passes, but 800 x 800 = 640,000 falls below 655,360. The smallest square that passes is 816 x 816, which is 665,856 pixels, and 1024 x 1024 is 1,048,576, comfortably inside the range and a common size. Other models in the catalog publish their own size rules in the capability descriptors from GET /v1/images/models, so read those if you prefer a different model.
| Size | Pixels | Passes GPT custom range (655,360 to 8,294,400)? |
|---|---|---|
| 800 x 800 (TikTok's cover size) | 640,000 | No, below the minimum |
| 816 x 816 | 665,856 | Yes |
| 1024 x 1024 | 1,048,576 | Yes |
| Brand circle on the cover | 260 px diameter | Not an image parameter |
Generate big, resize down, check the circle
The script requests a 1024 x 1024 cover from openai/gpt-image-2.5 with image_size set as custom pixels, polls the job, downloads the first Sume-hosted image it finds and saves an 800 x 800 PNG with Pillow. The Image API page does not show the response shape on the page this post was written from, so the script searches the result for the first media.sume.com URL instead of assuming a field name.
After saving, look at the centre 260 px circle. TikTok places the brand in that area, so the logo or wordmark must sit inside it with margin. Models draw text unevenly, so check any lettering at full size, and prefer to add the logo yourself over the generated art.
import os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def run(path, body, key):
r = requests.post(BASE + path, headers={**H, "Idempotency-Key": key}, json=body)
r.raise_for_status()
job = r.json()["request_id"]
while True:
s = requests.get(f"{BASE}/v1/jobs/{job}/status", headers=H).json()["status"]
if s in ("completed", "failed", "canceled"):
break
time.sleep(3)
return s, (requests.get(f"{BASE}/v1/jobs/{job}/result", headers=H).json() if s == "completed" else None)
import io, json, re
from PIL import Image
status, res = run("/v1/images", {
"model": "openai/gpt-image-2.5",
"prompt": "Square album-style cover, bold abstract shapes in teal and orange, large empty centre circle, no text",
"image_size": "1024x1024"}, "effect-cover-001")
url = re.search(r"https://media\.sume\.com/[^\"\s]+", json.dumps(res) if res else "")
if url:
im = Image.open(io.BytesIO(requests.get(url.group(0)).content)).convert("RGB")
im.resize((800, 800), Image.LANCZOS).save("music-cover-800.png")
print("saved", im.size, "-> 800x800")
else:
print(status, res)
Designing for the 260 px circle
TikTok's page puts brand placement in a centre circle 260 px across on an 800 px cover. That is about a third of the width, or roughly 33 percent, so the cover is mostly background and the logo is small. A good layout leaves the centre quiet and spends the rest of the canvas on colour and texture that frames it.
Write the prompt with that in mind: ask for an empty centre, soft or simple edges around it, and no text, then add the logo as a separate layer in your design tool. Image models are better at atmosphere than at exact brand marks, and a logo that is regenerated every time will drift from your real one. If you must generate a mark, pass your logo as a reference image using the input_references or image_urls fields the model supports, and read the result closely against the original.
Test the finished cover at small sizes too. Shrink it to about 100 px and check the circle still reads as the focal point. If it vanishes, the contrast is too low, and a darker ring or a flatter background will help.
What stays on your side
Sume does not know the 260 px circle, the 10 MB limit or TikTok's review. The PNG you save is nearly always well under 10 MB at 800 x 800, but check the byte size before you upload. Keep the 1024 version in case a later request asks for a larger cover.
If a model gives you an off-centre composition, ask again with a clearer description of the empty centre rather than shifting the art by hand, and keep the prompt in your notes so the next cover in the series stays consistent.
Keep the prompt, the seed or reference images you used, and the final 800 x 800 file together in the campaign folder. If TikTok asks for a revision, you can regenerate at 1024 with a small change instead of starting the artwork from scratch, and the new cover will still match the earlier one.
Sources
Related posts
More in Media tools
- TikTok comment voice note, 60 seconds: avatar script to mp3 for $11.05
TikTok comments take voice notes up to 60 seconds, as reported. Make one from a script: a 60 s avatar job on standard ($11.04) plus an mp3 detach ($0.01).
- Pitch sizzle reel: trim three episodes and join them for $0.19
Cut a 60 second pitch reel from three finished episodes: three video-trim jobs, three audio detaches and one timeline render. Total $0.19, with the request.
- TikTok photo carousel comments take 9 photos: make the set in Sume
TikTok now lets a comment carry up to 9 photos. What the announcement leaves out, and how to build a matching set with Sume's Image API.
- TikTok Pulse Core ad creative: what the video needs to book
What a TikTok Pulse Core ad needs: Reach and Frequency creative specs, booking windows, Spark option, and how to conform a clip with Sume Video trim.
Written by Sume