Snug Gallery / Guides

The customer photo form: what shoppers see, field by field

Every field, limit and message in the Snug Gallery customer photo form on your Shopify storefront, what gets validated where, and what happens after Send.

Most guides about customer photos talk about the merchant side: the moderation queue, the approve button, the plan limits. This one walks the other way round the counter. It is the form a shopper actually meets on your storefront when they press Share your photo in a Snug Gallery block, taken one control at a time, with the exact limits and the exact messages they will see. If you have ever wondered why a customer said the upload did not work, or wanted to tell them in advance what will and will not go through, this is the reference.

When the button appears at all

The Share your photo button is rendered by the gallery block only when two things are true: the gallery has customer submissions switched on in the app, and the store is on a paid plan. If either is false the storefront simply has no button, so visitors never see a form that would be refused later. In the theme editor on a free plan you will see a small notice instead, Customer submissions are available on paid plans, so you know why the button is missing while you are styling the section.

The button text is a block setting in the theme editor, so you can change Share your photo to anything that fits the page, Show us yours or Add your photo to the wall. A second block setting, Show submitter names on customer photos, decides whether the name a shopper types later appears under their image once it is approved.

The photo

Pressing the button unfolds a short form under the gallery. The first and only required field is the photo itself. The file picker accepts JPG, PNG, WebP and HEIC, and says so in a hint line underneath: JPG, PNG, WebP or HEIC, up to 10 MB. HEIC is on the list deliberately, because it is what an iPhone produces by default, and a form that rejected it would turn away the people most likely to have just taken the photo.

As soon as a file is chosen the form shows a preview so the shopper can check they picked the right image. HEIC is the one exception: browsers cannot draw it, so the form shows the file name instead of a thumbnail. Three checks run in the browser before anything is sent. No file selected gives Please choose a photo first. A file over 10 MB gives That photo is over 10 MB, please choose a smaller one. A file of the wrong type gives Please choose a JPG, PNG, WebP or HEIC photo. All three happen instantly, without a round trip, so a shopper on a slow connection does not wait for an upload only to be told no.

The same checks run again on the server, and the server decides the type by reading the first bytes of the file rather than trusting the extension. A text file renamed to .jpg is refused with Please upload a JPG, PNG, WebP or HEIC photo. The original file name is thrown away: the stored image is renamed to a neutral customer-photo name with a timestamp, so a shopper's camera roll naming, or anything they typed into the file name, never reaches your gallery.

Name and caption, both optional

Below the photo are two text fields, Your name (optional) and Caption (optional). The name is capped at 80 characters and the caption at 500. Both are trimmed, stripped of control characters and cut to those lengths on the server as well, so the limits hold even if someone bypasses the form.

The name is what shows under the photo when Show submitter names is on, so first name and city is the usual shape: Marta, Lisbon. The caption becomes the image caption in the gallery, and its first line also becomes the alt text for the image, which is what screen readers announce and what Google reads. Where captions appear on the storefront, and how to switch them between overlay and below the image, is covered in captions, title text and alt. You can edit both name and caption in the moderation queue before approving, so a typo from the shopper does not have to go live.

The consent box

The last visible control is a checkbox labelled I allow this store to display my photo, and it is required. Leave it unticked and Send photo does nothing except move focus to the box and show Please confirm that the store may display your photo. There is no way to submit without it, which is the point: when a photo is approved and shows up on your product page, you have a recorded yes from the person who sent it, stored with the submission and visible in the queue.

There is also a field the shopper never sees. A hidden Website input sits in the form as a honeypot. Real browsers leave it empty; bots that fill every field they find fill it, and the server answers those with the normal thank-you message while saving nothing. It costs nothing and removes most of the automated junk before it reaches your queue.

What happens after Send

Pressing Send photo disables the form, shows Sending your photo, and posts the file to the app through Shopify's app proxy, so the request stays on your own domain and is signed by Shopify on the way through. A status line under the form announces the result, and it is marked as a live region, so a screen reader reads it out without the shopper having to hunt for it.

The usual outcome is Thanks, your photo is awaiting review. The photo lands in your moderation queue as pending, and nothing is public until you approve it; the approve, reject and delete flow is in the moderation queue guide. If you have turned on auto-approval for the gallery and it has room, the message is Thanks, your photo has been added to the gallery, and it is live immediately. When auto-approval is on but the gallery has reached its image limit, the submission falls back to pending rather than being lost.

The errors a shopper can see at this stage are few and plain. The size and type messages come back again if the server disagrees with the browser. You've sent a few photos already, please try again later is the rate limit, which stops one person flooding the queue in a sitting. This gallery doesn't accept customer photos right now appears if submissions were switched off, or the plan lapsed, between the page loading and the shopper pressing Send. A storage hiccup gives We couldn't save your photo right now, please try again in a moment, and a dropped connection gives a similar line asking them to retry. After a successful send the form closes; pressing the button again opens a fresh, empty form.

What to tell your customers

If you are asking for photos in a post-purchase email or on a card in the parcel, the three facts worth passing on are: JPG, PNG, WebP or HEIC, under 10 MB, and photos go live after a quick review. Shoppers who know the review step exists are far less likely to write in asking why their photo is not up yet. If you have auto-approval on, say that instead, and keep an eye on the queue for anything you want to pull.

The form is short on purpose. A photo, an optional name, an optional caption, a yes. Every extra field we tested cost submissions, and a gallery of real customer photos is worth more than a form that collects their shoe size.

Frequently asked questions

Why does a customer say their iPhone photo was refused?

Almost always size. Recent iPhones produce HEIC files that are fine, but a Live Photo exported as a large JPG, or a photo edited in another app and saved at full resolution, can pass 10 MB. The form says That photo is over 10 MB before uploading anything. Asking them to send it from the Photos app, which shares a smaller version, usually fixes it.

Can I make the name or caption required?

No. The photo and the consent box are the only required fields, and the form keeps name and caption optional so that fewer shoppers give up halfway. You can add a name or caption yourself in the moderation queue before approving, and you can hide names on the storefront entirely with the block setting.

Does the shopper's file name or location data end up on my site?

The file name is discarded and replaced with a neutral name, so nothing the shopper typed or their phone generated is exposed. The image is processed through Shopify's file storage like any other gallery image. Only the name and caption they typed, and only after you approve, appear on the storefront.

Where do I see the consent the shopper gave?

Each submission in the moderation queue records that the consent box was ticked, together with when the photo was sent. It is stored with the submission, so if a shopper later asks you to take the photo down you can find it, remove it, and have a clear record of what was agreed in the first place.

More guides