The usual advice to just upload a big photo and let Shopify handle it misreads what the Theme Store actually requires and what theme code actually does with an image once it lands in a section.
Most guides answer “what size should my Shopify image be” with a round number pulled from memory, and that number usually has nothing to do with what Shopify’s own Theme Store requirements say or with what the section code in an actual theme does once the image is uploaded. The requirements page names a specific figure, 64 x 64px, as a required size for one image category, and separately documents a required or recommended aspect ratio expressed as numeral to numeral. That is the actual anchor. Everything past that point, how the image gets cropped, overlaid, sized per breakpoint, or gapped from its neighbors, is decided by section settings baked into the theme, not by a universal Shopify limit.
The requirements documentation available here gives 64 x 64px as an example of a required image size specification, alongside a separate line for image size expressed as a numeral to numeral aspect ratio, marked required or recommended depending on the asset. It also carries performance language: themes must hit a minimum average Lighthouse performance score of 60 across the product, collection, and home page, checked on both desktop and mobile. There is a 404 page requirement too, calling for a clear message stating what happened, though that has nothing to do with images directly. What the excerpt does not contain is a single blanket maximum file size for every image slot in every theme, and that absence matters because it means the real limits live in section code, not in one master rule.
Dawn’s sections/image-banner.liquid, registered under the name t:sections.image-banner.name, has 12 settings and 3 block types as measured at commit 258f00f. Two of those settings are image pickers, image and image_2, meaning the section supports a primary image and a secondary one. image_overlay_opacity is a range from 0 to 100 in steps of 10%, so a merchant can darken or lighten an overlay on top of the photo in ten discrete steps, nothing finer. image_height is a select with 4 options and image_behavior is a select with 4 options, covering things like fixed height bands or motion on scroll. desktop_content_position is a select with 9 options, giving nine places to anchor text over the image on desktop. None of these 12 settings touches the uploaded file’s resolution or weight. The section arranges and overlays what you give it, it does not compress or resize the source.
sections/image-with-text.liquid, under t:sections.image-with-text.name, has 13 settings and 4 block types in the same commit. Its image picker sits alongside height as a select with 4 options, desktop_image_width as a select with 3 options, layout as a select with 2 options, image_behavior as a select with 3 options, and content_layout as a select with 2 options. So compared with the banner section, image-with-text trades one fewer overlay-style control for an explicit desktop width choice and a content layout choice, which changes how image and text divide the row rather than how the image itself is processed.
Horizon’s sections/collection-list.liquid, named t:names.collection_list, has 17 settings and 10 block types at commit 8b42ace. It takes a collection_list field directly, plus layout_type as a select with 4 options and a carousel_on_mobile checkbox that toggles whether the list scrolls as a carousel on small screens. columns is a range from 1 to 8 in steps of 1, mobile_columns is a select with 2 options, and mobile_card_size is a select with 2 options. The related sections/main-collection-list.liquid, same registered name, has 15 settings and 10 block types. It shares layout_type, carousel_on_mobile, columns, and mobile_columns, but adds columns_gap as a range from 0 to 100 in steps of 1px and bento_gap as a range from 0 to 100 in steps of 1px, giving pixel-level control over spacing between cards in a bento-style grid.
Horizon also ships two image-focused blocks worth naming directly. blocks/_blog-post-featured-image.liquid, named t:names.featured_image, has 15 settings, including image_ratio as a select with 4 options, width as a select with 3 options, custom_width as a range from 0 to 100 in steps of 1%, width_mobile as a select with 3 options, custom_width_mobile as a range from 0 to 100 in steps of 1%, and height as a select with 2 options. blocks/_blog-post-image.liquid, named t:names.image, is smaller, 6 settings total, covering height as a select with 3 options, border as a select with 2 options, border_width as a range from 0 to 10 in steps of 0.5px, border_opacity as a range from 0 to 100 in steps of 1%, border_color as a color field, and border_radius as a range from 0 to 100 in steps of 1px. Neither block includes any setting that changes the source file’s resolution or its compressed size, both only reshape the frame the image sits in.
| File | Theme | Settings | Block types | Commit |
|---|---|---|---|---|
| sections/image-banner.liquid | Dawn | 12 | 3 | 258f00f |
| sections/image-with-text.liquid | Dawn | 13 | 4 | 258f00f |
| sections/collection-list.liquid | Horizon | 17 | 10 | 8b42ace |
| sections/main-collection-list.liquid | Horizon | 15 | 10 | 8b42ace |
| blocks/_blog-post-featured-image.liquid | Horizon | 15 | 0 named here | 8b42ace |
| blocks/_blog-post-image.liquid | Horizon | 6 | 0 named here | 8b42ace |
The method here is simple and worth stating plainly: each row comes from reading the section or block schema in the theme’s own repository at the named commit, counting the settings block entries and the block type entries as they appear in the file, nothing inferred.
Since none of the 12 tracked storefront categories, Art, Auto, Bags, Beauty, Clothing, Electronics, Food and drink, Home, Jewelry & Access., Kids, Pets, Sports, Toys, has a category matching this article’s own topic, the image-handling question sits outside category comparison and inside theme code comparison instead. What is comparable is performance. CrUX data from July 2026, drawn from real visitor sessions rather than a lab tool, shows mobile Core Web Vitals pass rates with a median of 85.5% across 247 themes with sufficient data, ranging from a best of 98.6% down to a worst of 46.1%. Desktop numbers run slightly higher, a median of 86.2% across 199 themes, best at 99.2%, worst at 30.3%. Since none of the settings named above resize or compress a file, a theme’s position in that spread has more to do with how its templates request and serve images than with any number a merchant types into an upload dialog.
Check the Theme Store requirements page for the exact size and ratio a given asset slot demands before uploading anything, and then open the specific section or block file for the theme in question to see which of its settings actually shape how that image displays rather than assuming a resize happens automatically.
The Theme Store requirements page documents a required format of image size in numeral by numeral pixels, with 64 x 64px given as an example of a required size for one asset category. It also documents an image size given as a numeral to numeral aspect ratio for required or recommended cases. Beyond that specific 64 x 64px figure, the page does not hand merchants a single universal maximum file size in the excerpt available here, so the honest answer is that the requirement is asset-specific rather than one blanket number.
Dawn's sections/image-banner.liquid has 12 settings and 3 block types as of commit 258f00f. It includes image and image_2 as image_picker fields, image_overlay_opacity as a range from 0 to 100 in steps of 10%, image_height as a select with 4 options, image_behavior as a select with 4 options, and desktop_content_position as a select with 9 options. None of those settings changes the pixel dimensions or file weight of the source upload, they only control opacity, container height, motion behavior, and text placement over the image.
sections/image-with-text.liquid has 13 settings and 4 block types in the same Dawn commit, 258f00f. It has its own image picker plus height as a select with 4 options, desktop_image_width as a select with 3 options, layout as a select with 2 options, image_behavior as a select with 3 options, and content_layout as a select with 2 options. So the two sections overlap in intent but differ in setting count and in how many layout choices each one exposes.
Horizon's sections/collection-list.liquid has 17 settings and 10 block types, including layout_type as a select with 4 options, a columns range from 1 to 8 in steps of 1, and mobile_card_size as a select with 2 options, all from commit 8b42ace. The related main-collection-list.liquid has 15 settings and 10 block types, with its own columns_gap and bento_gap ranges from 0 to 100 in steps of 1px. Neither section's settings list includes any control that changes the resolution or compression of the collection images themselves, only their arrangement on the page.
Not directly, and the market numbers make that clear. The median theme price across 329 themes tracked is $300 within a $100 to $500 range, and the average rating is 4.53 out of 5 across 308 rated themes with a median of 23 reviews, none of which is a performance metric. Core Web Vitals data from July 2026, based on real visitor traffic rather than lab runs, shows the desktop median passing rate at 86.2% against a best of 99.2% and a worst of 30.3%, which is a separate measurement from price or star rating entirely.