Vision-model product catalogue QA became a budgeting exercise on August 21, 2026, when DeepSeek released DeepSeek-V4-Flash-Vision-Exp and published the one number that matters for bulk image work: every image costs up to 384 tokens, billed at the same per-token rate as text. No vision surcharge, no separate image tier. Put a price on 384 tokens and you have put a price on looking at a product photo.
That matters because catalogue image QA has always been a job that nobody finishes. A 20,000-SKU store has tens of thousands of hero shots, alternates and lifestyle images, and the rules they must meet are published in detail by Google Merchant Center and Shopify. The rules are not the problem. Reading every image against them is. At a fraction of a cent per image, the reading part stops being the bottleneck, and the checklist and the human sample become the work.
This is a build post from published numbers. Every figure is either a rate DeepSeek printed, a limit Google or Shopify printed, or arithmetic we show on assumptions we state. It covers what the 384-token ceiling actually is, a cost table at three catalogue sizes, a QA checklist derived from the two platforms’ own disapproval rules, a reasoned account of what an 800×800 pixel budget cannot resolve, and a pipeline shape that batches at off-peak with idempotent job keys and a human sample. For the launch itself, read our V4-Flash-Vision-Exp launch and pricing post; this one does not repeat that story.
- 01The ceiling is a resize rule, not a discount.DeepSeek’s Vision guide scales larger images down to roughly an 800×800 pixel budget before tokenizing, which is why a 2000×2000 and a 5000×5000 image cost the same 384 tokens. The cap is documented; what the model can detect at that resolution is not.
- 02One image per SKU across 20,000 SKUs is roughly $4.51 off-peak.Formula: (384 image + 220 prompt tokens) × $0.22 per million, plus 140 output tokens × $0.66 per million, equals about $0.000225 per image. Peak doubles every rate, so $9.01. The 220 and 140 are our assumptions and are shown as such.
- 03The checklist already exists; the platforms wrote it.Google Merchant Center’s image requirements and text-on-image policy, plus Shopify’s photography and file-upload pages, define frame fill, background, overlays, placeholders and file limits. The model’s job is to answer those questions at scale. Accuracy on any specific check is unmeasured here.
- 04Some checks belong in code, not in the model.Because the model sees an 800×800-equivalent image, it cannot tell you the source file’s pixel dimensions, megapixels or byte size. Read those from the file header before the call. Reserve the vision model for questions that need eyes.
- 05Batch off-peak, key every job, sample the output.Peak hours are 01:00–04:00 and 06:00–10:00 UTC; every other hour bills at half. Use a deterministic job key per SKU-image pair so reruns are free of double work, and route a fixed human sample per run because DeepSeek has published no detection-accuracy number for this model, and we ran no evaluation.
01 — The Budget384 tokens is a resize rule, and it is published.
The figure that makes this post possible is not a marketing claim. It comes from the Token Usage section of DeepSeek’s Vision guide, which describes what happens to an image before the model ever sees it. Images with a total pixel count below roughly 384×384 are scaled up, aspect ratio preserved. Larger images are scaled down, aspect ratio preserved, so that the pixel count after resizing is roughly that of an 800×800 image. The consequence is the ceiling: no image costs more than 384 tokens, however large the original.
Two details in the same guide shape everything downstream. Multiple images in one request are each counted independently under the same rule, so there is no multi-image discount or penalty. And a detail parameter exists on image_url inputs: low downscales to 512×512 before inference and is documented as faster and cheaper, while high, original and auto keep the image at its original size ahead of the resize step. The docs do not state how low interacts with the 384-token ceiling, so every number in this post uses the default path. If you try low, measure the token count yourself.
"There is an upper bound of 384 tokens per image: for example, a 2000×2000 image and a 5000×5000 image consume the same number of tokens after resizing."— DeepSeek API Docs, Vision guide, Token Usage section
The rates those tokens are billed at sit on DeepSeek’s pricing page, and a footnote there makes the second structural point: image tokens are ordinary input tokens. There is no vision surcharge. The vision model carries the same table as the text-only V4-Flash: off-peak cache-miss input at $0.22 per million tokens, cache-hit input at $0.007, output at $0.66, with peak exactly double on every line ($0.44, $0.014 and $1.32). Peak hours are 01:00–04:00 and 06:00–10:00 UTC; all other hours bill at half. Seven peak hours a day leaves seventeen at half price, which is the whole scheduling argument for a catalogue job.
Per image, default path
Set by the resize step, not by file size. A 2000×2000 and a 5000×5000 image cost the same. Scoped here to the default (no detail parameter) path the Token Usage section describes.
Cache-miss input tokens
Peak is $0.44. Cache-hit input is $0.007 off-peak and $0.014 at peak. Output is $0.66 off-peak, $1.32 at peak. Every line doubles; nothing else changes.
Published concurrent-request limit
An explicit column on the pricing table, shared with the text-only V4-Flash. It is a ceiling on parallelism, not a throughput figure, and we do not convert it into one.
One framing note before the arithmetic. DeepSeek describes the model as matching DeepSeek-V4-Flash on text capabilities, which is the vendor’s own characterization and is not something a catalogue QA pass depends on. What the pass depends on is the ceiling, the rate table and the limits, all of which are documented. We cite no benchmark in this post because none is needed to price the job.
02 — The ArithmeticCost per image, per catalogue, formula shown.
Three inputs go into the per-image figure. The first is DeepSeek’s: 384 image tokens, the published ceiling, used as the conservative case because a pipeline cannot assume every image resizes to fewer. The other two are ours and we state them plainly. A compact QA instruction enumerating the checks in Section 03 plus minimal per-SKU context, which we set at 220 input tokens. And a structured JSON answer, a handful of boolean and enum fields plus a short notes string, which we set at 140 output tokens. Change either and the table moves; the formula does not.
The formula is (384 + 220) × input rate + 140 × output rate, applied at cache-miss input rates with no caching credited. Every cell below follows from it.
| Line item | Tokens | Off-peak | Peak |
|---|---|---|---|
| Per image · cache-miss input, no caching credited | |||
| Image tokens × input rate | 384 | 384 × $0.22/M = $0.0000845 | 384 × $0.44/M = $0.0001690 |
| Prompt tokens × input rate (assumed) | 220 | 220 × $0.22/M = $0.0000484 | 220 × $0.44/M = $0.0000968 |
| Output tokens × output rate (assumed) | 140 | 140 × $0.66/M = $0.0000924 | 140 × $1.32/M = $0.0001848 |
| Total per image | 604 in · 140 out | ≈ $0.000225 | ≈ $0.000451 |
| Per catalogue · one image reviewed per SKU | |||
| 1,000 SKUs | 604,000 in · 140,000 out | $0.23 | $0.45 |
| 20,000 SKUs | 12.08M in · 2.8M out | $4.51 | $9.01 |
| 100,000 SKUs | 60.4M in · 14M out | $22.53 | $45.06 |
Two things in that table are worth reading twice. First, the answer costs more than the picture. At off-peak rates the 140 output tokens come to $0.0000924 per image against $0.0000845 for the 384 image tokens, which means output is about 41% of the per-image cost and the image itself about 38%. Every extra sentence you let the model write is worth more than the photo it is describing. Keep the schema tight, forbid prose, and the table holds.
Second, coverage depth is your choice, not a platform requirement. Shopify’s photography guidance recommends multiple angles but states no fixed count, and Merchant Center’s image rules are per-image. If a pass reviews three images per SKU (a hero, one alternate angle, one lifestyle shot), multiply the per-catalogue rows by three: 60,000 images at 20,000 SKUs comes to $13.52 off-peak and $27.03 at peak from the unrounded per-image figure rather than from the rounded $4.51 in the row above. The multiplier is linear because each image is counted independently under the same resize rule.
prompt_cache_hit_tokens in your first few responses before you bank it.03 — The ChecklistThe platforms already wrote the questions.
We did not invent a definition of a “good” product image. Google Merchant Center publishes image link requirements and a separate text-on-image policy whose stated disapproval reasons are the checklist. Shopify publishes photography guidance on one page and file-level limits on another; the two should not be conflated, and we cite each for what it says. Merchant Center’s text-on-image page states the principle in one sentence: “All products on ads and free listings require an image with an unobstructed view of the product.” Products that fail it are disapproved until the image is updated, and the page notes diagnostics can take 24 to 72 hours to reflect a fix.
The table below maps each rule to the question a QA prompt would ask. It is a list of what a pass would ask for. DeepSeek publishes no evaluation of this model on any of these checks, and we ran none. Accuracy on every row is unmeasured here.
| Check | Published rule | Source | What the prompt asks |
|---|---|---|---|
| Frame and subject · vision-model questions | |||
| Whole product, filling the frame | Images must accurately display the entire product; the product should occupy roughly 75–90% of the frame. | Merchant Center · image requirements | Is the entire product visible with nothing cropped? Estimate frame fill as a percentage band. |
| Background | Solid white or transparent, or a genuine lifestyle image that clearly shows the product; no ambiguous or busy backgrounds. Shopify recommends a pure white background. | Merchant Center · image requirements; Shopify · photography | Classify the background: white, transparent, lifestyle, or busy. Flag busy. |
| Staging | Minimal or no product staging. | Merchant Center · image requirements | Do props or scenery dominate the product? Yes or no, with a one-line reason. |
| Placeholder or not-the-product | No placeholders, generic graphics or illustrations, logos or icons instead of the product, or single-colour squares (category exceptions apply). | Merchant Center · image requirements | Is this a photograph of a physical product, or a placeholder, graphic, logo or colour swatch? |
| Overlays and content · vision-model questions | |||
| Overlays and text on image | No promotional elements or content covering the product: watermarks, brand logos, barcodes, calls-to-action, price information or any overlay not inherent to the product. Borders discouraged. | Merchant Center · image requirements; text-on-image policy | Is any text, logo, badge, watermark or border laid over the image? Name what you see. |
| Angle coverage | Shopify recommends shooting from multiple angles (eye level, high, low, bird’s-eye); no fixed count is prescribed. | Shopify · photography | Which single angle is this? Tag per image so coverage can be counted per SKU in code. |
| File level · read the header, do not ask the model | |||
| Resolution and size | Merchant Center: at least 500×500 px, 1500×1500 px or larger recommended, cap 64 megapixels and 16 MB. Shopify: max 20 MB, max 20 megapixels, aspect ratio between 100:1 and 1:100. | Merchant Center · image requirements; Shopify · file uploads | Nothing. The model sees an 800×800-equivalent image and cannot report source dimensions. Read width, height and bytes from the file. |
| Format | Shopify accepts JPEG, PNG, WEBP, HEIC and GIF. DeepSeek accepts JPEG, PNG, GIF and WebP, detected from file content. | Shopify · file uploads; DeepSeek · Vision guide | Nothing. Transcode HEIC before the call; it is on Shopify’s list and not on DeepSeek’s. |
The split in that table is the most useful thing in it. Two of the rows need no vision model at all. Pixel dimensions, byte size, aspect ratio and container format are header reads, and running them in code first means the model is only ever asked questions that require eyes. It also means a file that already fails the 500×500 floor never spends its 384 tokens.
One more line from the Merchant Center page is worth a place in the pipeline even though it is not a detection check: Google asks merchants to ensure AI-generated product images carry IPTC metadata identifying them as algorithmically created. That is the catalogue-side mirror of this post. The same rulebook that defines what a QA pass looks for is starting to anticipate images that were themselves generated, and a metadata read belongs beside the header read.
04 — Reasoned, Not ClaimedWhat 384 tokens cannot see.
DeepSeek publishes the resize arithmetic and nothing about detection. So the honest way to talk about limits is to keep the causal chain explicit and label each link. The published fact: a larger image is scaled down so its total pixel count is roughly that of an 800×800 image, about 640,000 pixels. Our arithmetic: a 1500×1500 source, the size Merchant Center recommends as a floor for good listings, keeps about 28% of its pixels; a 3000×3000 source keeps about 7%; a 5000×5000 source keeps under 3%. Our inference: whatever is only visible in the discarded pixels is not available to the model.
Share of source pixels that survive the resize step
Our arithmetic: 640,000 ÷ source pixel count, from the ‘roughly 800×800’ resize budget in DeepSeek’s Vision guide. The guide says ‘roughly’; treat these as approximate.Coarse, whole-frame questions
Background class, frame fill band, whether props dominate, whether a large logo or price badge sits over the product, whether the image is a photo or a placeholder, which angle it shows. These are decided by large regions, which survive a resize to 800×800.
Small, thin or low-contrast detail
Small watermarks in a corner, thin borders, faint text, a barcode in the background. These may or may not survive the resize depending on the source size and where they sit. Treat a clean verdict as weaker than a flagged one and sample these rows harder.
Fine print and subtle colour
Care-label text, hallmark stamps, hairline scratches, and whether two variant images are the same shade. At 7% of a 3000×3000 source, these are resolution-bounded by construction. Route them to a full-resolution crop, a different tool, or a human.
None of those three tiers is a DeepSeek statement. They are our reading of what a coarse pixel budget can and cannot carry, grounded in the one thing DeepSeek does publish. The practical move that follows is cheap: for any row in the marginal or beyond-budget tiers, crop the region of interest at source resolution and send the crop as its own image. A crop is its own 384-token line item, so the arithmetic in Section 02 still holds; you are buying a second look, not a bigger one.
05 — Pipeline ShapeBatch off-peak, key every job, sample the output.
The pipeline is a special case of two patterns we have already written up. The scheduling half is the off-peak LLM pricing playbook: DeepSeek’s windows are UTC-denominated and exact, and a catalogue job has no latency requirement, so there is no reason for any of it to run inside the seven peak hours. The engineering half is the million-row LLM job post: a deterministic job key per unit of work, a results store you can resume from, and a QA sample that is sized and drawn before the run starts. Here the unit of work is one SKU-image pair and the key is a hash of the SKU identifier, the image’s content hash and the prompt version. Rerun after a crash, a prompt tweak or a model update and only the changed keys spend tokens.
The limits that bound request shape are on the Vision guide, not the pricing page, with upload quotas on the separate Files API guide. A request may carry up to 600 images. Each side of an image may be up to 8,192 pixels, dropping to 4,096 once a request contains 15 or more images. Total image payload is 64 MiB without Files API references and up to 200 MiB with them. Images are accepted only in user messages; placing one in a system or assistant message returns an HTTP 400. For idempotency we still prefer one image per request, because one request then maps to one job key, one result row and one retry, and the 2,500 concurrency limit is the parallelism ceiling you scale into. We make no throughput or wall-clock estimate; DeepSeek publishes a concurrency limit, not a rate.
Inline, simplest
Encode the bytes into the request. Counts toward the 64 MiB per-request payload limit. Best for one-image-per-request pipelines pulling from object storage you already control; no upload step, no URL lifetime to manage.
Point at your CDN
URL up to 8,192 characters, image up to 32 MiB, fetched within a 60-second download window. Best when catalogue images are already public and the QA job should not re-upload them; watch signed-URL expiry against the download window.
Upload once, reference many
Up to 64 MiB per upload, 25 GiB storage and 10,000 stored files per user, retention configurable from one hour to 30 days or permanent. Lifts the per-request payload ceiling to 200 MiB. DeepSeek’s launch note describes it as available at no cost; the Files API guide itself does not restate pricing.
Fixed per run, drawn first
Because no detection-accuracy figure is published for this model, every run routes a fixed sample of verdicts, weighted toward the marginal tier in Section 04, to a person. Size it to your tolerance, draw it before the run, and log disagreements as the only accuracy number you own.
deepseek-v4-flash-vision-exp model accepts images at all; pointing the same request at the text-only V4-Flash returns a 400. Pin the model ID explicitly in the job config rather than inheriting a default.06 — Where It FitsThe image-side counterpart to catalogue data agents.
Most of the agentic catalogue work we have covered lives on the text side. Our agentic PIM post is about attribute enrichment and feed quality; the cross-channel feed matrix is about titles, GTINs and attribute rules per channel. Image QA is the column those posts leave blank, and it was blank for a reason: until an image cost about the same as a short paragraph, reading every one was not a job you would schedule nightly. Google’s own Merchant Center AI performance insights pilot is adjacent but distinct: it is a Google-side reporting feature, not a merchant-run check, and it does not tell you which image failed before Google saw it.
The interpretive point is about what becomes scarce. When the marginal cost of looking at an image drops to a fraction of a cent, the constraint moves to the three things the model cannot supply: a checklist grounded in the platforms’ actual disapproval rules, a human sample that produces the only accuracy number you will ever have, and an engineering discipline that keeps a 20,000-SKU rerun from spending twice. Teams that already run text-side feed agents have the second and third. The first is in the rulebooks linked above.
Looking forward, we expect the QA prompt to stop being a separate job and become an ingest step, run on every new or changed image the moment it lands in the PIM, with the nightly batch reserved for prompt-version migrations. The “-Exp” suffix is a reason to build that way rather than a reason to wait: DeepSeek has used the suffix before for models under evaluation ahead of a stable name, which is a reported pattern rather than a formal definition, and the defensive reading is that the model ID, the token ceiling and the rates can all change. Keying jobs on prompt version and model ID, and re-drawing the human sample on every model change, is what makes that a non-event. If you want help scoping that into a catalogue operation, our ecommerce engagements start from exactly this arithmetic.
07 — Honesty LedgerWhat this post does not claim.
A build post is only as good as its stated edges. Here are ours, in one place, so nothing above gets read as more than it is.
- No conversion-lift or defect-rate figure. We looked for a dated primary source tying product image quality to conversion or disapproval rates on either platform and found none. Neither Google’s nor Shopify’s documentation states one. Rather than borrow a plausible-sounding percentage from a secondary blog, this post uses no such figure. The business case here is cost-side only: the pass is cheap enough to run; whether it pays is yours to measure.
- No detection accuracy. DeepSeek publishes no evaluation of this model on watermarks, wrong-product images, missing angles or any row of the Section 03 table, and we ran none. Every check is what a QA pass would ask for; the human sample in Section 05 is how you find out how often the answer is right.
- The 384 figure is scoped to the default path. The
detail: lowoption is documented as a 512×512 downscale, but the docs do not say what it does to the token count. We do not assert a number for it. - Caching is inferred. The $3.57 cache-hit scenario rests on a guide that describes caching as default for all users but does not name this model. It is a plausible optimization, not a documented one.
- “Free” Files API is vendor-stated. The launch note says it is available at no cost; the Files API guide does not restate pricing either way.
- Throughput is not estimated. The published 2,500 figure is a concurrency limit. We do not turn it into images per hour, because DeepSeek does not.
08 — ConclusionCheap enough to look at everything, not yet proven to see it.
The scarce resource is no longer the look. It is the checklist, the key and the sample.
A published 384-token ceiling, a published rate table with no vision surcharge, and a published set of platform image rules add up to something catalogue teams have not had before: a way to read every product image against the actual disapproval criteria for about $4.51 per 20,000 SKUs off-peak on stated assumptions. The formula is three token counts and two rates, and every one of them is on this page.
What the numbers do not buy is certainty. The resize rule that makes the price possible also bounds what the model can resolve, and DeepSeek has published no accuracy figure for any of the checks a merchant cares about. The defensible build is the one in Section 05: header checks in code, coarse questions to the model, crops for the fine ones, a deterministic key per image, off-peak scheduling, and a human sample that produces the only accuracy number you will own.
Run it that way and the “-Exp” in the model name stops being a risk and becomes a line in the job config. When the model, the ceiling or the rates change, you rerun the formula and re-draw the sample. The catalogue does not notice.