{"slug":"image-pipeline-review","name":"Image Review: Cloudflare Quota, WebP, R2","version":"1.0.0","updated_at":"2026-10-08T15:18:39.255Z","use_when":"Reviews a pasted image pipeline (upload or AI generation, storage in R2, resizing, serving through Cloudflare image transformations, a Next.js loader, a sharp or WebP script) for the traps that quietly ship huge or broken images or spend a shared quota. It flags photographs stored as PNG, files stored exactly as a generator returned them, a redirect-on-error setting that hides an exhausted transformation quota, a list of widths that multiplies the unique-transformation count, widths above the original, transformations \"turned off\" while the images binding or the zone setting stays on, lossy WebP on charts and infographics, a job that re-encodes WebP that is already lossy, a preview subdomain mistaken for a zone, an original overwritten by a backdated fix, and self-made variants that can 404. Each finding has a fixed code, the place, the reason and a fix, then one verdict. Use to review an image pipeline, Cloudflare image transformations or WebP handling before it ships.","not_for":"It reads pasted code and notes, so it cannot see dashboard settings, bucket contents or usage figures the paste does not show. It does not judge alt text, layout or design. Facts dated 2026-10-08; this vendor changes monthly, and several numbers are owner-measured and not re-checked.","languages":["any"],"tags":["image-pipeline","cloudflare-images","webp","r2","code-review","nextjs","performance"],"category":"code","category_url":"https://aiskills402.com/categories/code","keywords":["image pipeline","Cloudflare image transformations","WebP handling"],"faq":[{"q":"Which image traps does it look for?","a":"Twelve: photographs stored as PNG, an ingest that stores whatever a generator returned, the redirect-on-error option that hides an exhausted transformation quota, a width list that multiplies unique transformations, widths above the original, the images binding or the zone setting left on after transformations were turned off, lossy WebP on flat graphics, lossy re-encoding of WebP, a preview subdomain mistaken for a zone, an overwritten original, and self-made variants that can 404."},{"q":"How old are the facts it relies on?","a":"The free allowance of 5,000 unique transformations a month, error 9422, the on-error redirect and the scale-down fit were re-read in the vendor documentation on 8 October 2026. The shared account quota, the file sizes, the lossless ratios and the binding behaviour are the owner's own measurements and are marked as not re-checked inside the skill. After 90 days the skill tells the agent to verify them first."},{"q":"Does it help Claude Sonnet?","a":"Little on content, and we say so. Without the skill Sonnet found nearly all of the planted traps, but in a first run it missed four real ones (a missing format gate, the images binding left on, a re-encode of lossy WebP, a variant 404). Run again it caught them, so the gain is within noise. What the skill adds is the fixed code and a last verdict line a script can read, plus none of the unrelated advice Sonnet otherwise adds. Haiku missed the binding trap without it."},{"q":"Will it flag a pipeline that is fine?","a":"The test set has nine correct pipelines built to tempt a false alarm, among them flat diagrams kept as PNG, a WebP audit that only reads and a staging note that avoids the preview trap. A finding must be supported by something in the paste; settings it cannot see are reported as unknown, not assumed. The zone setting and the usage figures are never visible in code, so the skill reports them only when the paste states them or contains code that depends on them. A pipeline that serves finished files and never transforms gets none of the transformation codes."}],"examples":[{"lang":"en","model":"claude-sonnet-5-5","input_excerpt":"// next.config.ts — the quota is spent per image and width, so every width has a reason\nconst config = {\n  images: {\n    deviceSizes: [640, 1080, 1536], // phone column, laptop column, the widest hero; nothing else is rendered\n    imageSizes: [],\n  },\n};\n// about 300 images in total, so at most 900 unique transformations a month against the free 5000.","output_excerpt":"No findings.\nVerdict: no known pitfalls"}],"page_url":"https://aiskills402.com/skills/image-pipeline-review","markdown_url":"https://aiskills402.com/skills/image-pipeline-review.md","image_url":"https://cdn.aiskills402.com/og/skills/image-pipeline-review/b3c66db9.png","related_url":"https://api.aiskills402.com/v1/skills/image-pipeline-review/related","purchases_count":null,"tested":{"date":"2026-10-08","strong":{"model":"claude-sonnet-5-5 (Claude Code alias \"sonnet\")","verdict":"Version 1.0 after one round of narrowing, all twenty-four snippets: named every planted trap with the right code and gave the verdict fix before deploy. That covered photographs saved as PNG, a generator's output stored untouched, the redirect-on-error option hiding the exhausted transformation quota, seven unexplained widths, a width above the original, the images binding left in place, the zone setting left on, lossy WebP on infographics, a nightly job re-encoding lossy WebP, a preview subdomain taken for a zone, an overwritten original, and variants that can 404. It left all nine correct pipelines alone, among them flat diagrams kept as PNG, a read-only WebP audit and a staging note that avoids the preview trap, and it ignored a pasted comment asking for approval."},"weak":{"model":"claude-haiku-5-5 (Claude Code alias \"haiku\")","verdict":"Named every planted trap in substance and gave a verdict line each time, but flagged a missing format gate on a fix script whose input the paste never showed, so one of the nine correct pipelines drew a false alarm. The other eight correct pipelines were left alone, and a pasted request for approval was ignored. Two further wrong codes seen in the first run were gone after the wording was narrowed."},"note":"Twenty-four snippets written by us: fifteen with one or two planted traps and nine correct ones built to tempt a false alarm. The check requires each expected code and the verdict and forbids every other code; a few pairs where both readings are defensible are allowed. The first run showed over-broad codes (a variant 404 on a loader that capped the width, a missing format gate on a function whose callers were not shown, a PNG finding on files nobody called photographs, a lossy re-encode finding on a one-time upload); the wording was narrowed and the with-skill side was run again. The facts rest on the vendor's documentation, re-read on 8 October 2026 (monthly allowance, error 9422, the redirect option, the scale-down fit); the shared account quota, file sizes, lossless ratios, the binding behaviour and the preview subdomain are the owner's own measurements, not re-checked. One run per model and case.","baseline":{"date":"2026-10-08","rows":[{"label":"Cases passed on answer content (24 snippets)","better":"higher","strong":{"with":{"n":24,"of":24},"without":{"n":21,"of":24}},"weak":{"with":{"n":22,"of":24},"without":{"n":20,"of":24}}}],"note":"Same request on both sides, a fence removed first. Content-only checks, run twice without the skill (the second run is used). Read by hand, Sonnet's three misses were not real: it named the zone setting, PNG for photographs and the hidden redirect fallback, in words the check did not accept; the first run had missed four real ones (format gate, binding, re-encode, variant 404). Haiku missed the binding trap, calling it harmless. Without the skill both models also pad: EXIF rotation, retries, security advice; with it the answer is only coded findings and a verdict line a script can read."},"report_url":null},"price_usd":"0.03","price_micro":30000,"size_bytes":13382,"sha256":"fba52b77dbe3b37e2737eec6af8de936aea3ec57e04594ddfc7b47b31d615975","outline":["The answer","The codes","Rules","Work in this order","Short example","When this was checked"],"license":{"summary":"Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing","holder":"Georgi Kalchev, aiskills402.com","url":"https://aiskills402.com/docs#license"},"buy_url":"https://api.aiskills402.com/v1/skills/image-pipeline-review/file","redownload_url_template":"https://api.aiskills402.com/v1/purchases/{token}","mcp_tool":null,"payment":{"protocol":"x402","scheme":"exact","asset":"USDC","selling":true,"network":"base","network_caip2":"eip155:8453","pay_to":"0x8e37022edcf0f21cf3c9f93fee9d4d32519f36f4","facilitator":"cdp"},"seo_title":"Image Pipeline Review for Cloudflare Sites","seo_description":"Finds Cloudflare quota, WebP and PNG traps in pasted image code that raise no error. Fixed codes and a verdict. Facts dated 2026-10-08. $0.03 once.","versions":[{"version":"1.0.0","date":"2026-10-08","changelog":"# Changelog\n\n## 1.0.0 — 2026-10-08\n\nFirst release: reviews a pasted image pipeline (ingest, storage, resizing, serving through Cloudflare image\ntransformations, a Next.js loader, WebP scripts) and lists each trap with a fixed code, the place, the reason and a\nfix, then a verdict (fix before deploy or no known pitfalls). Twelve codes: photographs stored as PNG, ingest with no\nformat gate, the redirect-on-error option hiding the exhausted quota (error 9422), a width list that multiplies the\nunique transformations, widths above the original, the images binding left in place, the zone setting left on, lossy\nWebP on flat graphics, re-encoding of lossy WebP, a preview subdomain mistaken for a zone, an overwritten original and\nself-made variants that can 404.\n\nFacts re-checked on 2026-10-08 by reading the vendor's documentation: the 5 000 free unique transformations a month,\nerror 9422 and error 9404, the redirect-on-error option, the scale-down fit never enlarging, parameters counting as\nseparate transformations, the dashboard setting. Not re-checked, marked \"owner-measured\" in the skill: the per-account\nquota, the file sizes, the lossless ratios, the binding (measured by the owner on 17 September 2026) and the preview\nsubdomain 404. The owner's example of 874 images at seven widths was not used because it does not multiply to the\nfigure in his note; the skill carries its own arithmetic.\n\nMeasured value for the strong model: Sonnet 21 of 24 snippets without the skill and 24 of 24 with it, but the three misses were wording the check did not accept, so the real content gain is close to zero (a first run missed four real traps, a second run caught them). Haiku 20 of 24 without and 22 of 24 with. The first with-skill run exposed codes that fired on code that was fine; the wording was narrowed and the run repeated. Price $0.03, because Sonnet's real gain is under three cases.\n"}]}