asset-enhancer
Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model…
Skill by MohamedAbdallah-14
Chalk Labs
Need help deploying asset-enhancer?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/mohamedabdallah-14-asset-enhancer-e304d1
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, backend, data, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions: not checked yet.
What's inside
- Skill name
asset-enhancer- Description
- Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model, rewrite the prompt in the target model's dialect, pick an execution mode (inline_svg / external_prompt_only / api) based on what's actually available, and run the pipeline. Use whenever the user asks for any visual asset for a software product.
- License
- MIT
- Instructions
- 268 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# asset-enhancer skill
Comprehensive behavior spec for producing production-grade software-development assets. Drives every `asset_*` MCP tool.
## Cardinal rules
> 1. Producing production-grade software assets is a **routing + post-processing** problem, not a prompt-engineering problem.
> 2. The user may not have an image-model API key. The plugin must work anyway.
> 3. There are real zero-key and free-token paths — always surface them first before asking the user to pay for anything. The `free_api.routes` block in `asset_capabilities()` enumerates the ranked free programmatic routes: Cloudflare Workers AI (Flux-1-Schnell + SDXL, 10k neurons/day), NVIDIA NIM (Flux / SDXL / SANA, 1k requests/month with `NVIDIA_API_KEY`, no card), HF Inference (free `HF_TOKEN`), Stable Horde (anonymous queue), Pollinations (zero-signup HTTP, last resort), and local ComfyUI. **Google's Gemini / Imagen image API is paid for programmatic image output** — unbilled `GEMINI_API_KEY` → HTTP 429, `limit: 0`. The AI Studio **web UI** at https://aistudio.google.com is still free for interactive generation — treat it as a paste-only flow (`external_prompt_only` → `asset_ingest_external`).
See `rules/asset-enhancer-activate.md` for the condensed always-on version. This file is the long-form spec.
## Three execution modes
Before generating anything, decide (with the user) which mode to use. Call `asset_capabilities()` to learn what's available in the current environment.
### 1. `inline_svg` — zero key, Claude writes the SVG, server persists
Two-step round trip:
1. The server returns an `svg_brief` (viewBox, palette, path budget, style hints, skeleton) and `instructions_to_host_llm`. You emit the `<svg>…</svg>` inline in your reply as a ```svg code block so the user can see it.
2. **Immediately after emitting, call `asset_save_inline_svg({ svg, asset_type })`.** The server validates the SVG against the brief (viewBox, `<path>` count, palette), writes `master.svg` to disk, and — for favicon / app_icon — runs the full platform export (favicon.ico + apple-touch-icon + PWA 192/512/512-maskable; or AppIconSet + Android adaptive + PWA). Returns an `AssetBundle` with `variants[].path`. Show those paths to the user.
Skip step 2 and the user gets a code block with no file. Do not skip step 2.
**Good for:** `logo`, `favicon`, `icon_pack`, `sticker`, `transparent_mark`, simple `app_icon` masters. Flat, geometric, ≤40 paths.
**Not good for:** illustrations, hero art, photoreal, OG cards with web-font typography.
### 2. `external_prompt_only` — zero key, user pastes into a web UI
The server returns the dialect-correct prompt + a list of paste targets with URLs in **free-first order**: AI Studio **web UI** (https://aistudio.google.com — free interactive Gemini / Imagen), Pollinations (zero-signup HTTP), HF Inference (free `HF_TOKEN`), Stable Horde (anonymous queue), then paid UIs (Ideogram web, Recraft web, Midjourney, fal.ai Flux, BFL Playground, OpenAI Platform Playground, etc.). The user generates elsewhere, saves the image locally, and calls `asset_ingest_external({ image_path, asset_type })` to run the matte / vectorize / validate pipeline.
Note: `GEMINI_API_KEY` does NOT give free image-gen — Google removed that tier in December 2025. The free Gemini/Imagen route is the AI Studio web UI, not the API.
**Good for:** any asset type. Best for `illustration`, `hero`, text-heavy logos, when the user has a Midjourney / Ideogram subscription but no API key.
### 3. `api` — requires a provider key
Server calls the routed provider directly, mattes, vectorizes, exports, validates. Writes a content-addressed `AssetBundle` with `variants[].path` for every artifact.
**Requires** at least one of: `OPENAI_API_KEY`, `IDEOGRAM_API_KEY`, `RECRAFT_API_KEY`, `BFL_API_KEY`, `GEMINI_API_KEY` (or `GOOGLE_API_KEY`). The router falls back among configured providers automatically.
## Recommended flow
```
user brief
↓ asset_capabilities() → what's available RIGHT NOW
↓ asset_enhance_prompt({ brief }) → AssetSpec + modes_available
↓ ask the user which mode they want
↓ asset_generate_<type>({ brief, mode }) → InlineSvgPlan | ExternalPromptPlan | AssetBundle
↓ if inline_svg:
1. emit <svg> in reply (user sees the shape)
2. call asset_save_inline_svg({ svg, asset_type })
3. show the returned variants[].path list (user sees files on disk)
↓ if external: show prompt + paste_targets; wait for asset_ingest_external
↓ if api: show variants[].path and validation warnings
```
## Asset taxonomy — closed enum
| `asset_type` | Transparency default | Vector? | Text? | inline_svg? | external_prompt_only? | api? |
|---|---|---|---|---|---|---|
| `logo` | yes (RGBA PNG **and** SVG) | preferred | wordmark optional (composite) | ✅ | ✅ | ✅ |
| `app_icon` | **no** on iOS 1024 marketing | no | no | ✅ master only | ✅ master only | ✅ full fan-out |
| `favicon` | mixed | prefer | rare | ✅ | ✅ | ✅ |
| `og_image` | no | no | yes (headline) | ❌ (web-font layout beyond LLM reach) | ✅ bg only | ✅ |
| `splash_screen` | vector icon + solid bg | no | no | ❌ | ✅ | ✅ |
| `illustration` | often | SVG where geometry allows | avoid | ❌ path budget | ✅ | ✅ |
| `icon_pack` | yes | **mandatory SVG** | no | ✅ | ✅ | ✅ |
| `hero` | optional | no | sometimes | ❌ | ✅ | ✅ |
| `sticker` | yes | no | rare | ✅ | ✅ | ✅ |
| `transparent_mark` | yes | no | avoid | ✅ | ✅ | ✅ |
## Pipeline (api mode)
```
brief
↓ classify() → asset_type ∈ enum
↓ parse_brand_bundle()? → BrandBundle | null
↓ compute_params(asset_type, brand) → dimensions, transparency, safe_zone
↓ route(asset_type, ...) → primary_model, fallback_model, postprocess[]
↓ rewrite(brief, model, brand) → dialect-appropriate final prompt
── call provider with seed pinned ──
↓ validate_0(image) → reject checkerboard / bad alpha / moderation
↓ matte? (birefnet | rmbg via PROMPT_TO_BUNDLE_RMBG_URL | difference fallback | native)
↓ vectorize? (recraft | vtracer-on-PATH | potrace-on-PATH | llm-svg | posterize fallback)
↓ upscale? (dat2 | supir | img2img | never)
↓ export (sharp platform fan-out + @resvg/resvg-js + satori + png-to-ico + svgo)
↓ validate_final (tile-luma alpha check + bbox + palette ΔE2000 + OCR Levenshtein + WCAG contrast)
↓ content-address cache (prompt_hash, model, seed, params_hash)
→ AssetBundle
```
## Model routing (data-driven)
The routing table lives in `data/routing-table.json`. Summary:
| Need | Primary | Fallback | Never |
|---|---|---|---|
| Transparent PNG mark | `gpt-image-1` (`background:"transparent"`) | Ideogram 3 Turbo `style:"transparent"` → Recraft V3 | Imagen any, Gemini any, SD 1.5 |
| Logo with 1–3 word text | Ideogram 3 → `gpt-image-1.5` → Recraft V4 | Composite real SVG type over mark | Imagen 4, SD 1.5, Flux Schnell |
| Logo with 4–10 word text | `flux-2` / `gpt-image-2` / Nano Banana Pro | `gpt-image-1.5` | SD, Flux Schnell, Pollinations |
| Logo with paragraph-length text | Nano Banana Pro / `gpt-image-2` (model can render); composite stays safer for pixel-exact UI | — | All weak-text models |
| Native SVG | Recraft V4 | LLM-author SVG (simple geometry) — **this is `inline_svg` mode** | Everyone else |
| Photoreal hero | Flux 2 / `gpt-image-2` / Imagen 4 Ultra | SDXL + brand LoRA | DALL·E 3 |
| Empty-state illustration | Flux 2 + brand refs (up to 10) / IP-Adapter | SDXL + LoRA → Recraft brand style | One-off Ideogram/MJ (style drift) |
| App icon | Recraft V4 or Ideogram 3 for mark → packaging pipeline | `gpt-image-1.5` mark → packaging | Full-bleed Imagen 4 as final |
| Favicon | SVG first (LLM-author or Recraft V3) | Raster 512 → vectorize | — |
| OG image | Satori + `@resvg/resvg-js` template (no diffusion) | Diffusion **only** for hero image inside OG template | — |
## Dialect rules per provider
Prompts are **never** forwarded verbatim. Rewrite per target family. See the per-angle research under `docs/research/` for derivations; implementation is in `packages/mcp-server/src/rewriter.ts`.
### `gpt-image-2` / `gpt-image-1.5` / `gpt-image-1` (OpenAI)
- Prose sentences. Subject → Context → Style → Constraints.
- **Transparency:** `gpt-image-1.5` and `gpt-image-1` accept `background: "transparent"`. **`gpt-image-2` does NOT — the param 400s** (regression). Route transparent jobs to gpt-image-1.5.
- For text: `"Acme"` in double quotes. Ceilings: gpt-image-2 ~80 chars / paragraph (~99% per third-party); gpt-image-1.5 dense text (~60 chars, LM Arena #1); gpt-image-1 ~50 chars.From MohamedAbdallah-14/prompt-to-asset, MIT.
More from MohamedAbdallah-14/prompt-to-asset
- 0.539score
ui-mockup-prompt
MohamedAbdallah-14
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 /…
SkillCFreshness: C★ 24Claude Code +9 - 0.528score
Prompt To Asset
MohamedAbdallah-14
Generate app icons, favicons, OG images, and logos by routing across 30+ image models.
ConnectorCFreshness: CLocal★ 24Claude Code +5 - 0.472score
svg-authoring
MohamedAbdallah-14
Author production-grade inline SVG (logos, favicons, icon packs, stickers, transparent marks) when the P2A `inline_svg` execution mode is selected.
SkillDFreshness: D★ 24Claude Code +9 - 0.472score
t2i-prompt-dialect
MohamedAbdallah-14
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…
SkillDFreshness: D★ 24Claude Code +9 - 0.472score
asset-validation-debug
MohamedAbdallah-14
Diagnose and repair asset-generation failures.
SkillDFreshness: D★ 24Claude Code +9 - 0.472score
asset-enhancer
MohamedAbdallah-14
Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model…
SkillDFreshness: D★ 24Claude Code +9 - 0.472score
brand-consistency
MohamedAbdallah-14
Maintain visual coherence across a multi-asset brand set (logo + app icon + favicon + illustrations).
SkillDFreshness: D★ 24Claude Code +9 - 0.469score
favicon
MohamedAbdallah-14
Generate a full favicon bundle — favicon.ico (16/32/48 multi-res), icon.svg with prefers-color-scheme dark support, apple-touch-icon.png 180×180 opaque, and…
SkillDFreshness: D★ 24Claude Code +9 - 0.469score
vectorize
MohamedAbdallah-14
Convert a raster image to SVG.
SkillDFreshness: D★ 24Claude Code +9 - 0.469score
app-icon
MohamedAbdallah-14
Generate an app icon from a single 1024² master and fan out to iOS (AppIcon.appiconset with squircle-ready 1024 opaque), Android (adaptive foreground +…
SkillDFreshness: D★ 24Claude Code +9 - 0.469score
illustration
MohamedAbdallah-14
Generate an in-product illustration (empty state, onboarding, hero, spot art) that obeys a brand bundle.
SkillDFreshness: D★ 24Claude Code +9 - 0.469score
logo
MohamedAbdallah-14
Generate a production-grade logo (primary brand mark).
SkillDFreshness: D★ 24Claude Code +9
Signals
- Stars
- 24
- Forks
- 3
- Open issues
- 3
- Contributors
- 2
- Last commit (this folder)
- Apr 26, 2026 (6 months ago)
- Last release
- Apr 26, 2026 (6 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
- 0.472score
asset-enhancer
MohamedAbdallah-14
Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model…
SkillDFreshness: D★ 24Claude Code +9 - 0.283score
asset-enhancer
MohamedAbdallah-14
Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model…
SkillDFreshness: D★ 24Claude Code +9 - 0.283score
asset-enhancer
MohamedAbdallah-14
Classify a software-asset brief (logo, app icon, favicon, OG image, illustration, splash, icon pack, transparent mark), route to the right image model…
SkillDFreshness: D★ 24Claude Code +9
More from MohamedAbdallah-14
- 0.715score
unslop
MohamedAbdallah-14
Humanize LLM output so it reads like a careful human wrote it.
SkillBFreshness: B★ 161Claude Code +9 - 0.710score
unslop-file
MohamedAbdallah-14
Humanize natural-language memory files (CLAUDE.md, todos, preferences, docs) by removing AI-isms and adding burstiness while preserving every code block, URL…
SkillBFreshness: B★ 161Claude Code +9 - 0.709score
unslop-commit
MohamedAbdallah-14
Rewrites commit messages so they sound like a careful human engineer wrote them.
SkillBFreshness: B★ 161Claude Code +9 - 0.709score
unslop-reasoning
MohamedAbdallah-14
Strip AI-slop patterns from reasoning traces (chain-of-thought, extended thinking, agent decomposition) — not final prose.
SkillBFreshness: B★ 161Claude Code +9 - 0.709score
unslop-review
MohamedAbdallah-14
Rewrites code review comments so they read like a human teammate wrote them.
SkillBFreshness: B★ 161Claude Code +9 - 0.706score
unslop-help
MohamedAbdallah-14
Quick-reference card for unslop modes, sub-skills, and slash commands.
SkillBFreshness: B★ 161Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get asset-enhancer running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
asset-enhancer skill. Agent Mart. https://agentmart.dev/skills/mohamedabdallah-14-asset-enhancer-e304d1 (last updated 2026-10-24)