skills/asset-validation-debug/SKILL.md
Diagnose and repair asset-generation failures. Maps tier-0/1/2 validation codes (checkerboard, missing alpha, safe-zone violation, palette drift, garbled wordmark, low contrast) to concrete repair primitives (matte, inpaint, route change, seed sweep, composite). Applies a retry budget so Claude does not loop on hopeless regenerations.
npx skillsauth add MohamedAbdallah-14/prompt-to-asset asset-validation-debugInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Triggered when asset_validate(), asset_generate_*, or asset_save_inline_svg returns warnings or errors. Do NOT loop on the same failure; follow the tree and respect the retry budget.
| Code | Origin | Repair primitive | Retry budget |
|---|---|---|---|
| T0_CHECKERBOARD | Imagen/Gemini rendering fake transparency | Route change → gpt-image-1 (background:"transparent"), Ideogram v3 (style:"transparent"), Recraft V3 | 2 |
| T0_ALPHA_MISSING | RGB-only output on transparency-required asset | Matte via asset_remove_background (BiRefNet preferred, RMBG fallback) | 1 |
| T0_DIMENSIONS | wrong width/height API params | Fix params, regenerate | 1 |
| T0_SAFE_ZONE | subject bleeds outside platform center | Regenerate with explicit "centered with 20% padding on all sides" | 1 |
| T0_FILE_SIZE (SVG) | path count blows budget | asset_save_inline_svg → SVGO → K-means color reduction → vtracer | 1 |
| T0_DCT_ENTROPY | solid-color / NSFW-filter hit | Regenerate same params once; if repeats, change prompt | 1 |
| T1_PALETTE_DRIFT | model ignored hex constraint | Recraft with controls.colors or recolor post-process (K-means remap in LAB) | 1 |
| T1_TEXT_MISSPELL | diffusion garbled wordmark | Drop text, composite SVG type (retry Ideogram 3 if text-only asset) | 0 in-diffusion / 1 on Ideogram |
| T1_LOW_CONTRAST | pale palette at 16×16 or over background | Regenerate with explicit contrast instruction; else post-boost luminance | 2 |
| T1_VQASCORE | prompt-image alignment weak | Defect area <15% → inpaint; else full regenerate | 2 |
| T2_BRAND_DRIFT | style diverges from brand refs | Seed sweep (N=4, rank by CLIPScore + HPSv2); augment brand bundle | 1 |
| T2_COMPOSITION | off-center, cluttered, poor whitespace | img2img at low denoise (0.35) — preserves layout, fixes style | 1 |
When a budget exhausts: stop retrying, report to user with diagnostic payload. Do not loop.
asset_validate() returns warnings[]
└─ for each warning:
├─ read code + affected tier
├─ classify failure class:
│ local (<15% image area) → inpaint / post-process
│ global (style/palette-wide) → route change / regenerate
│ compositional (safe-zone/framing) → regenerate with centering prompt
└─ select repair primitive (table above)
├─ apply
├─ re-validate
└─ if same code fires again:
├─ retry_count < budget → try next primitive in fallback chain
└─ retry_count ≥ budget → escalate to user
| Primitive | Cost relative to 1× generation | When to choose | |---|---|---| | SVGO / palette remap / recolor | 0.01–0.05× | Deterministic fix, no model call | | Matte (BiRefNet / RMBG) | 0.05× | alpha missing, no regeneration needed | | Inpaint (masked edit) | 0.3× | defect area <15%, composition is right | | img2img low-denoise | 1× | global style drift, preserve layout | | ControlNet tile reinjection | 1.5× | preserve structure, regen detail | | Full regenerate | 4× | architectural failure (checkerboard, wrong model) | | Seed sweep (N=4) | 4× + selection | brand drift, pick best |
Prefer cheaper primitives first when they apply.
| Symptom | Current route | Change to |
|---|---|---|
| Checkerboard | Imagen / Gemini | gpt-image-1 (first), Ideogram v3, Recraft V3 |
| Wordmark garbled | any diffusion | Ideogram 3 Turbo (first), gpt-image-1 (second), composite SVG (always works) |
| Palette drift after 2 tries | any | Recraft (hard palette lock via controls.colors) |
| Subject misrendered | SDXL | Flux.1 [dev], gpt-image-1 |
| Path count >200 on SVG | Recraft SVG | inline_svg mode + strict path budget |
Prevent 70% of failures by validating the brief before calling asset_generate_*:
BRIEF:
☐ asset_type in closed enum (logo|app_icon|favicon|og_image|splash_screen|
illustration|icon_pack|sticker|hero|transparent_mark)
☐ subject noun concrete (not just adjectives)
☐ prompt ≥ 10 words OR brand_bundle provides style refs
TEXT-IN-IMAGE:
☐ quoted string ≤ 12 chars? else composite SVG type
☐ string > 5 words? force composite, skip diffusion-text path
PALETTE:
☐ brand.palette provided?
☐ hex codes ≤ 4 (over-constraint degrades Flux/SDXL)
TRANSPARENCY:
☐ transparency required + model in [Imagen, Gemini]? → reroute
☐ transparency required + gpt-image-1? → set API `background:"transparent"`
☐ transparency required + Flux/SDXL? → plan post-matte
ROUTING:
☐ text required + model ≠ Ideogram/gpt-image-1? → suggest reroute
☐ native SVG needed + model ≠ Recraft? → suggest Recraft or inline_svg
asset_validate (and every generator that runs a tier-0 pass before returning) emits the codes as a structured array:
{
"pass": false,
"warnings": [...],
"failures": [
{ "code": "T0_CHECKERBOARD", "tier": 0, "detail": "checkerboard pattern detected in 42.7% of analyzed pixels; reject and route to native-RGBA provider", "data": { "ratio": 0.427 } },
{ "code": "T1_PALETTE_DRIFT", "tier": 1, "detail": "...", "data": { "avg_delta_e2000": 14.2, "threshold": 10 } }
],
"tier0": { "width": 1024, "height": 1024, "has_alpha": false, ... }
}
Read validations.failures (when consuming an AssetBundle) or the top-level failures (when calling asset_validate directly). The data field on each failure carries enough context (bbox coords, ΔE value, Levenshtein distance) to pick a repair primitive without re-running the check. Source: packages/mcp-server/src/pipeline/validate.ts, ValidationFailure type in types.ts.
Four-phase loop per failure:
validate output; log model, seed, guidance, prompt_hash.Red flags (stop, escalate):
GENERATION: model, seed, guidance_scale, num_steps, prompt_hash, latency_ms, status
MATTE: tool (birefnet|rmbg|difference), alpha_px_before, alpha_px_after, checker_probe
VECTORIZE: path_count_before, path_count_after, color_count, tool (recraft|vtracer|potrace)
EXPORT: variants[].{path, format, w, h, size_bytes}
VALIDATE: tier0{...}, tier1{palette_de: x, vqa: y, ocr_lev: z}, tier2{sim: w}
docs/research/14-negative-prompting-artifacts/14b-artifact-taxonomy.md — taxonomy + origin pointsdocs/research/14-negative-prompting-artifacts/14c-regenerate-vs-repair-strategies.md — primitives, cost/time tradeoffsdocs/research/03-evaluation-metrics/3e-asset-specific-eval.md — VQAScore, OCR, WCAG, CSD thresholdsdocs/research/24-skills-for-p2a/06-validation-debug-skill.md — full design spectesting
Translate a UI brief (a page, a screen, a single component, a feature) into a paste-ready prompt for Nano Banana Pro / gpt-image-2 / Ideogram / Flux 2 / Midjourney that produces a designer-grade mockup as visual inspiration — not pixel-spec UI, not AI slop. Use whenever the user asks for "imagine the X page", "mock up the Y screen", "give me a prompt for nano banana / gpt image 2 to design", "describe this UI for an image model", "draft a prompt for the designer to take inspiration from", or any time the agent needs to produce a UI image-gen prompt for a real product surface (pricing page, dashboard, settings, onboarding, mobile screen, marketing hero, single component). Be pushy — trigger even when the user says "design" without "prompt", or "show me what X could look like" — the agent should reach for this skill before hand-rolling a brief.
testing
Translate a UI brief (a page, a screen, a single component, a feature) into a paste-ready prompt for Nano Banana Pro / gpt-image-2 / Ideogram / Flux 2 / Midjourney that produces a designer-grade mockup as visual inspiration — not pixel-spec UI, not AI slop. Use whenever the user asks for "imagine the X page", "mock up the Y screen", "give me a prompt for nano banana / gpt image 2 to design", "describe this UI for an image model", "draft a prompt for the designer to take inspiration from", or any time the agent needs to produce a UI image-gen prompt for a real product surface (pricing page, dashboard, settings, onboarding, mobile screen, marketing hero, single component). Be pushy — trigger even when the user says "design" without "prompt", or "show me what X could look like" — the agent should reach for this skill before hand-rolling a brief.
development
Rewrite an asset brief into the exact prompt dialect of the target image model (OpenAI gpt-image-1, Google Imagen/Gemini, SDXL, Flux.1/Flux.2, Midjourney, Ideogram, Recraft). Handles negative-prompt translation, token budgets, transparency quirks, brand-palette injection, and text-in-image ceilings so that `asset_generate_*` submissions succeed on the first try.
development
Generate a production-grade logo (primary brand mark). Returns RGBA PNG master + SVG vector + monochrome variant. Route by text-length and per-model ceiling. Strong-text models render multi-word and even paragraph-length wordmarks reliably; weak-text models composite SVG type post-render.