DEV Community

Choco111
Choco111

Posted on

Modeling Product-Image Generation as a Reviewable Gallery


An image-generation feature becomes difficult to operate when it stores only prompts and output URLs. An ecommerce listing needs more context: which real product was referenced, what role an image serves, which facts were confirmed, what changed between variants, and whether anyone has reviewed the output against the item being sold.

This is an interface and QA design memo grounded in public workflow descriptions, not source-code inspection or a statement about any private implementation.

Separate product facts from gallery roles

The public Nextify pages describe related workflows with different emphases. Shopify Product Image Generator describes an image series containing main views, feature graphics, collages, use scenes, and supporting angles. Temu Product Image Generator describes main images, close-ups, relevant scenes, and using up to three reference photos of the same item.

Do not encode those differences in a single free-form prompt. Store product evidence separately from a gallery role:

type ProductReference = {
  assetId: string;
  view: "front" | "back" | "side" | "detail" | "packaging";
  authorized: boolean;
};

type ProductFact = {
  key: "name" | "material" | "color" | "dimensions" | "included" | "sellingPoint";
  value: string;
  confirmed: boolean;
};

type GalleryRole = "main" | "feature" | "multi-angle" | "detail" | "use-scene" | "supporting";
Enter fullscreen mode Exit fullscreen mode

An image can then be assessed by the job it is meant to do. A main image should not be approved by banner criteria, and a close-up should not be expected to explain the entire product.

Preserve the generation request

The generation record should hold the visual direction and revision that produced a candidate:

type GalleryCandidate = {
  id: string;
  marketplace: "shopify" | "temu";
  role: GalleryRole;
  referenceIds: string[];
  factsRevision: number;
  ratio: string;
  changedVariable: "background" | "lighting" | "composition" | "copy" | "scene";
  status: "generated" | "reviewing" | "approved" | "rejected" | "stale";
};
Enter fullscreen mode Exit fullscreen mode

If a merchant changes the package quantity or corrects a material, candidates generated under the old facts should become stale; they should not silently masquerade as current. If a team only changes the background, the UI can display the result as a sibling rather than an unrelated file.

Make approval granular

Generation is not approval. A reviewer needs independent checks for product identity, packaging text, colors, included parts, claim support, translated text, and role-specific framing.

type Review = {
  identity: "pass" | "fail" | "unreviewed";
  details: "pass" | "fail" | "unreviewed";
  copy: "pass" | "fail" | "unreviewed";
  sourceRights: "pass" | "fail" | "unreviewed";
  placement: "pass" | "fail" | "unreviewed";
};
Enter fullscreen mode Exit fullscreen mode

This is especially important for close-ups. A detail image can be visually convincing while adding a seam, fastener, button, or material pattern that the real item does not have. A review note should name the failed check instead of reducing the decision to a thumbs-down.

Test state transitions rather than just components

Scenario Expected behavior
A source photo is replaced dependent candidates become stale
A reference lacks authorization generation is blocked or visibly warned
A product fact changes prior image revision remains traceable
Ratio changes a placement review is required
A main image is reassigned as detail role-specific checks refresh
Generated text is altered copy review becomes unreviewed

Actual selectors and API contracts should come from the implementation, not an illustrative article. The reusable decision is simpler: retain evidence, preserve the image role, and require a human record before an output is treated as listing-ready.

Conclusion

A gallery is a small information system. Main views, feature proof, use scenes, and details may share the same product facts while answering different shopper questions. A model that makes those distinctions explicit lets a team generate faster without losing the ability to explain what was created and why it was approved.

Top comments (0)