> For the complete documentation index, see [llms.txt](https://help.pixfizz.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.pixfizz.com/personalization/bulk-photo-prints.md).

# Bulk Photo Prints

## Overview

The Photo Prints workflow is Pixfizz's dedicated bulk ordering interface for cut print products, standard photo prints, enlargements, wallet prints, and package prints. It lets your customers upload photos, select sizes, set per-photo quantities, crop images, and add everything to the cart in a single session.

This section covers how to set up and manage the Photo Prints experience on your store.

***

### How it works

The Photo Prints workflow differs from standard Pixfizz products in several important ways:

* **Bulk upload interface** — Customers upload one or more photos and assign quantities per size, per photo. This is separate from the standard product editor used for photo books, canvas prints, etc.
* **Quantity is managed in the Photo Prints UI, not the cart** — Once items are added to the cart, the quantity column is not editable. Customers must return to the Photo Prints interface to adjust quantities.
* **One orderline per size** — Each print size typically becomes a single orderline in the cart, regardless of how many photos are ordered at that size.
* **Cropping and options** — Customers can crop each photo and select finishing options (e.g. matte vs glossy) before adding to cart.

***

### The `cut_print_quantity` pricing variable

Every product that goes through the Photo Prints workflow **must** use `cut_print_quantity` in its pricing formula. This is a hard platform rule — no exceptions.

`cut_print_quantity` is a derived count that represents the total number of prints ordered for a given size across all photos in the session. Because the Photo Prints UI manages quantities outside the cart, the standard `quantity` or `units` variables do not reflect the correct count. Using the wrong variable will result in incorrect pricing.

#### Pricing formula examples

**Flat rate per print:**

```
0.79 * cut_print_quantity
```

**Tiered pricing (volume discount):**

```
{1..10=>0.59, 11..49=>0.49, 50..249=>0.44, 250..499=>0.39, 500..2000=>0.35}.find { |range,unit_price| range.include?(cut_print_quantity) }.last * cut_print_quantity
```

#### Rules

* `cut_print_quantity` is **only** valid for Photo Print products. Never use it on non-cut-print products.
* `quantity` and `units` are **never** valid for Photo Print products. Always use `cut_print_quantity`.
* The pricing formula is set on the **Product Attribute** when you publish the product to a collection.

***

### Template XML structure

All Photo Print templates share a common XML definition pattern:

```xml
<definition pages="1" unit="inch" add="1" max="1500" dpi="300" minimum-dpi="200" output="jpeg">
    <set count="true" grow="true">
        <page type="print" bleed="0" width="6" height="4" />
    </set>
</definition>
```

Key attributes:

* `pages="1"` — required for all cut print products.
* `output="jpeg"` — photo prints produce JPEG files, not PDF.
* `add="1"` — one print added at a time.
* `max="1500"` — supports high-volume orders.
* `count="true"` and `grow="true"` on the set — every print added is counted and uses the grow mechanism.
* `bleed="0"` — photo prints typically have no bleed.

For package prints (multiple images on a single sheet), the XML structure is different — see Setting Up Package Prints.

***

### Product setup summary

| Step                                  | Where                                 | What to do                                                                                  |
| ------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------- |
| 1. Create or duplicate a template     | **Admin > Templates**                 | Set the XML definition with correct dimensions, `pages="1"`, and cut print settings enabled |
| 2. Create a design                    | Template > Designs                    | Add image placeholders with element name `photo-print`                                      |
| 3. Publish as a product               | **Admin > Collections > Add Product** | Set the product name, price, and pricing formula using `cut_print_quantity`                 |
| 4. Add to the Photo Prints collection | Collection > Products                 | Drag to set the display order                                                               |

***

### Organizing your print sizes

You can organize print sizes in two ways:

* **Flat list** — All sizes in a single Photo Prints collection, ordered by dragging within the collection.
* **Grouped into sub-collections** — Create sub-collections under the Photo Prints parent (e.g. "Popular Prints" and "Package Prints") to visually separate standard prints from specialty products.

Sub-collections display in alphabetical order based on their **path**, not their name. You can control the order by prefixing the path (e.g. `1-popular-prints`, `2-package-prints`).

See Grouping Photo Prints for detailed setup instructions.

***

### Related articles

* Add a New Photo Print Size
* Grouping Photo Prints
* Setting Up Package Prints
* Add a Description Modal to Photo Prints
