
We recently added product images to this linen dress store, which offers 14 colours and 3 styles with short, regular and long sleeves. The standard Shopify editor allows you to upload one featured image for each variant. Sounds simple enough until you consider all the possible photo angles and views you might want to include for one style of dress, say 6 different views including a close-up of the fabric details, a shot of a model wearing the dress, a flat lay with some trendy items laid out in addition to the dress. Multiply this out by 14 different colours and you start to see the complexity of the problem that we were trying to solve.
A lot of Shopify merchants who sell products in multiple colors feel a lot of frustration because Shopify’s variant system was never built to handle multiple images per variant. But there are work-arounds to make this issue less painful. And there are ways to solve the problem properly. Both methods are outlined below.
Just a heads up before I start, Shopify has a cap of 2048 variants per product with Combined Listings enabled, as well as a cap of 3 option types. Neither of these affect the image question, but I figure I should mention them since you asked and were worried about why I wasn’t addressing them.
In this post
- Why Shopify only allows one image per variant
- Method 1: the native workaround
- Method 2: variant image filtering with an app
- Method 3: separate products + combined listings
- Comparison table
- Step-by-step: the clean setup
- FAQ
Why Shopify only allows one image per variant
Shopify’s variant data model includes only a single variant-specific image_id field. There is no support for multiple images per variant. The theme swaps the gallery/hero image when the customer clicks on a swatch, but that’s it. Additional functionality must be achieved via theme customization or an app that uses metafields to tag multiple images to a variant.
This default limitation is in place because, at one point, most Shopify merchants required it. These merchants initially setup and ran a simple product catalog of mugs printing with one color of ink. As their business expanded into fashion (apparel), furniture, cosmetics and other types of products, they were reached by limitation lightning. Never fully addressed by Shopify, the matter has instead been tackled by numerous shopping cart apps for Shopify.
Method 1: the native workaround
There is a simple way to half-solve this inside the Shopify admin without needing an app. Upload all images for every color to the product, and then set the primary image for each variant to the hero shot for that color. This will cause the shopper to see the hero shot for the chosen color at the top of the product page, and then see all images for every color in the product gallery – not filtered as in the above example, but reordered with the chosen variant’s images first.GF
Pros: free, native, no app. Cons: a customer shopping the navy dress will still see the red, cream and olive options two rows down. This causes an increase in return rates because the customer’s expectations aren’t met when they see the dress in real life. I’ve read about multiple fashion retailers who have seen a measurable increase in returns due to this exact issue.
Method 2: variant image filtering with an app
Variant image filtering is needed for this. I don’t want to have to remake all the descriptions when I change to the navy version, for example. Proper variant image filtering would allow this. There are apps that do this, like Rubik Variant Images, and then you assign a group of images to each variant, the app stores that in the metafields and then your theme can filter based on click. So it would look something like this:

No external API calls. Metafield-based variant. It loads with the page and is good for Core Web Vitals. See notes on variant images and Core Web Vitals.
Method 3: separate products + combined listings
Another method for achieving the separate product results (while opposite in strategy to method 9) is to create one product and publish it in 14 different color variants, each with its own description, title tag, meta description, and image(s) , in fact a completely separate product. You would then link together the 14 individual products (one per color) on the collection page so that customers can view the swatches and then jump to the associated individual product for that color. This method is addressed by the Rubik Combined Listings extension.
This is overkill for a 3 color t-shirt. Not overkill for a 20 color dress with search traffic to the dress and to each color. Each color gets its own URL, its own product cards in search, and variant limits are removed. See this post for combined listings conversion numbers.
Comparison table
| Method | Cost | Images per variant | SEO per color | Setup time |
|---|---|---|---|---|
| Native workaround | Free | 1 (others visible) | No | 5 min/product |
| Variant image filter app | $0 to $75/mo flat | Unlimited per variant | No (single URL) | Seconds/product with AI |
| Separate products + combined listings | $0 to $50/mo flat | Unlimited (full gallery) | Yes (URL per color) | Longer (per product setup) |
Step-by-step: the clean setup with variant image filtering
- Open your Shopify product. Upload every image for every color into the main gallery. Order them by color: all navy first, then all olive, then all cream.
- Set the “featured image” on each variant to the first shot of that color. This is Shopify’s native pointer.
- Install Rubik Variant Images from the Shopify App Store. Open the app, pick the product.
- Use AI auto-assign (one product at a time) or manually drag-select the image range for each variant. AI reads the filename, alt text, and variant name to match.
- For large catalogs, use bulk assign. It groups images by gallery order using featured image boundaries. No AI, no filename matching, just clean image-order slicing across hundreds of products in the background.
- Preview the product page. Click each swatch. Confirm the gallery filters correctly.
- Done. Ship it.
We’ve outlined our preferred steps for adding variant images. Merchants with 1000+ products typically complete the bulk pass within a coffee break. For instructions on how to update bulk variant images in a CSV file, read our guide here.
First, all of my photos needed to be image reduced in size in order to keep the page load time down after uploading the photos. I also needed to rename the files by SKU before uploading, which I did in bulk with the bulk file renamer.
Watch it
Want the demo, the full video walkthrough, and the docs? They’re all available in the demo store, the tutorial video above, and in the documentation, found from the app listing. Installation takes less than a minute.
FAQ
Can I add multiple images to a Shopify variant without an app?
Partially. Shopify stores one featured image per variant in their native editor. You can upload all the images for the gallery, but they cannot be filtered by variant without additional theme code or an app.
How many images can a Shopify product have?
250 images per product. That is a Shopify platform cap, not an app cap.
Does variant image filtering slow down the product page?
It depends on the app. Metafield-based apps will load within the page itself with no external requests, while API-based apps can add 200ms or more. So choose wisely.
Will this work on my theme?
Rubik Variant Images is currently verified to work with more than 304+ Themes including Dawn, Impulse, Prestige, Motion, Broadcast, page builder themes (Beae, EComposer, Foxify, GemPages, Instant, PageFly and Replo) and many more.
What about separate products for each color?
Combined Listings. Each color can be a separate product with full gallery and separate URL (and separate SEO) and swatches link them on the collection page.
Does AI auto-assign work in bulk?
No. AI auto-assign is per-product only. Instead of a bulk assign feature, there is a separate method for assigning products to categories and it uses a left to right image order grouping.
What is the Shopify variant limit?
2048 variants per product with Combined Listings enabled, 3 option types max.





