Shopify rejects file names ending in thumb, icon or large
Shopify file uploads reject names ending in pico, icon, thumb, testing, small, compact, medium, large or grande. A Python rename step for batch outputs.
Shopify's file upload rules say a file name cannot end in pico, icon, thumb, testing, small, compact, medium, large or grande. A batch that names outputs after a prompt or a size, such as chair-large.jpg, can hit that, so add a rename step before upload.
The rule
The Shopify Help Center page on file uploads, read on 2026-10-03, lists these suffixes among its image rules.
| Suffix | Example name that would trip it |
|---|---|
| pico | lamp-pico.jpg |
| icon | lamp-icon.png |
| thumb | lamp-thumb.jpg |
| testing | lamp-testing.jpg |
| small | lamp-small.jpg |
| compact | lamp-compact.jpg |
| medium | lamp-medium.jpg |
| large | lamp-large.jpg |
| grande | lamp-grande.jpg |
Why batches trip on it
Names like large, small and thumb are natural labels for size variants, and a script that writes one file per ratio or per scale will reach for them. The page does not say whether the check looks at the name before or after the extension, so the safe approach is to avoid both.
Name the file when you download it
The name you upload under is the name you give the file when you save it. Pick it from your own SKU and variant, then check it against the list.
import re
BLOCKED = ("pico", "icon", "thumb", "testing", "small", "compact", "medium", "large", "grande")
def safe_name(stem, ext):
stem = re.sub(r"[^a-z0-9]+", "-", stem.lower()).strip("-")
name = f"{stem}.{ext}"
# Check the stem and the full name, since the page does not say which is tested.
while stem.endswith(BLOCKED) or name.endswith(BLOCKED):
stem = f"{stem}-v1"
name = f"{stem}.{ext}"
return name
for stem in ["Lamp Large", "lamp-thumb", "lamp-front", "lamp icon"]:
print(stem, "->", safe_name(stem, "jpg"))A naming scheme that avoids the problem
Build names from fields that cannot collide with the list:
- SKU first, then a view word such as front, side or detail.
- A two-digit index at the end, for example
sku-1042-front-01.jpg. - Keep the ratio or scale in metadata, not in the file name.
- Run the check on every name in a batch.
Generating the images
The Image API returns Sume-hosted URLs in data[].url. Download each one, save it under the checked name, and keep the Sume job id in your own records so a rename does not break traceability.
Sources
Related posts
More in Developers
- Shopify image limits: 20 MB, 25 megapixels vs Sume image outputs
Shopify accepts product images up to 20 MB and 25 megapixels in JPEG, PNG, WEBP, HEIC or GIF. How that lines up with Sume image model sizes and formats.
- Sign MCP requestState for paid render approvals: user, TTL, digest
MCP says requestState is attacker-controlled. For a paid render approval, bind it to the user, an expiry and an argument digest with an HMAC. Python included.
- Snap a requested video length to supported durations in Python
Veo 3.1 accepts only 4, 6 or 8 seconds. A short Python helper snaps any requested length to a model's supported_durations list from GET /v1/videos/models.
- Sora ended in two steps: app in April, API on September 24
OpenAI's docs say the Sora API shut down Sep 24, 2026 with no direct replacement. A help-center snippet dates the app and web end at Apr 26. What to inventory.
Written by Sume