Install any skill in seconds. Free to start, no credit card required.
Get Started Free →사용자 product UI 생성 시 placeholder 자리를 generic SVG가 아닌 **실제 free-license CDN 자산**으로 채운다. 로고·일러스트·아이콘·사진·폰트·패턴 카탈로그를 verified URL만으로 운영. '에셋 가져와줘', '플레이스홀더 진짜 이미지로', '로고 자리 채워줘', 'unsplash에서 사진 가져와' 류 요청에 트리거. omd:apply / omd:harness 안에서 자동 호출됨.
.claude/skills/kwakseongjae-omd-asset-fetch/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 98% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 35% | 0% |
<!-- omd:installed-skill — managed by omd install-skills. Do not edit; rerun the command to refresh. -->
"초안 같음" 결과물의 90%는 placeholder가 너무 generic이라서 — [YOUR LOGO] 점선 박스, organic blob SVG, "image placeholder" 회색 사각형. 사용자가 "와우" 못 느낌.
이 스킬은 모든 placeholder 자리에 verified free-license CDN 자산을 박는 catalog. URL은 전부 200 OK 검증됨 (2026-05-14 기준).
assets/attribution.md에 의무 기록 — URL + license + 사용 위치 + fetch 일자.seed 또는 lock 파라미터로 결과 재현 가능. 매번 다른 이미지 나오는 random URL은 피할 것.별도 icon / shapes mark / DiceBear logo 합성 금지. 헤더 logo = product name 텍스트 + 디스플레이 폰트, 그게 전부.
왜: AI가 합성한 icon mark는 "generic"하게 보임 (사용자 frustration source). product 이름을 꽤 괜찮은 폰트로 그대로 박는 게 진짜 brand wordmark처럼 보이고 사용자가 1초만에 자기 product name으로 swap 가능.
패턴:
html<a class="logo" href="/" style="display:inline-flex;align-items:center;text-decoration:none;"> <span class="logo-wordmark">{{PRODUCT_NAME}}</span> </a> <style> .logo-wordmark{ font-family:"Bricolage Grotesque","Space Grotesk","DM Serif Display","Fraunces",-apple-system,sans-serif; font-size:22px;font-weight:700;letter-spacing:-0.04em; color:var(--color-text-heading); } </style>
<head>에 디스플레이 폰트 <link> 의무 (§6 참고).
brand vibe별 폰트 매칭:
{{PRODUCT_NAME}} 결정:
Folio, Mint, Pop, Spark, Townie, Lane, Compass, ...)<title>, hero copy, footer brand 자리 전부 일관 적용 (사용자 grep replace 1번이면 swap 끝)금지 패턴 (v1.3.6 회귀 방지):
shapes mark + wordmark 페어 — generic "AI 로고" 느낌initials 이니셜 chip — 이메일 아바타 같이 보임<svg> logo icon — 손그림 anatomy 회귀[YOUR LOGO] / [YOUR PRODUCT NAME] 텍스트가 점선 박스 안에 그대로 — placeholder 티 폭발DiceBear avatars (CC0) — v1.3.4부터 이미 사용 중. 5 스타일:
| style | use case | URL pattern | |---|---|---| | notionists | financial advisor, business persona | https://api.dicebear.com/9.x/notionists/svg?seed=<seed>&size=520 | | lorelei | warm, approachable | https://api.dicebear.com/9.x/lorelei/svg?seed=<seed>&size=520 | | personas | diverse persona | https://api.dicebear.com/9.x/personas/svg?seed=<seed>&size=520 | | adventurer | active, mobility | https://api.dicebear.com/9.x/adventurer/svg?seed=<seed>&size=520 | | fun-emoji | warm, casual commerce | https://api.dicebear.com/9.x/fun-emoji/svg?seed=<seed>&size=520 |
생성기는 brand의 voice register 또는 surface signal에 맞춰 style 선택 — 예: 핀테크 advisor → notionists, 커뮤니티 커머스 → lorelei 또는 fun-emoji.
금지 (v1.3.4부터 누적, 자주 어겨지므로 재명시):
<path>로 그리지 말 것<!-- dicebear-fetched: <full URL> | <ISO> --> 코멘트 박을 것 — 후속 audit gate가 검증Lucide (ISC) — 한 줄 1500+ 아이콘
https://cdn.jsdelivr.net/npm/lucide-static@latest/icons/<name>.svgcredit-card, home, landmark, shield-check, trending-up, book-open, map-pin, bell, heart, search, user, chevron-right, arrow-right, external-link, play, bar-chart-3Heroicons (MIT)
https://cdn.jsdelivr.net/npm/heroicons@2/24/outline/<name>.svgTabler Icons (MIT)
https://cdn.jsdelivr.net/npm/@tabler/icons@latest/icons/<name>.svg색상 적용: SVG inline 후 currentColor / stroke="..." 변경, 또는 CSS filter
Lorem Picsum (CC0 — Unsplash-derived rehosting)
https://picsum.photos/<w>/<h> (매 호출 다름)https://picsum.photos/seed/<seed>/<w>/<h><brand>-product-01, <brand>-hero-01 식으로 의미 부여?grayscale?blur=2https://picsum.photos/seed/musinsa-card-1/400/500 → musinsa product 카드 자리에 들어갈 결정적 이미지Loremflickr (Flickr CC) — 키워드 매칭 + deterministic
https://loremflickr.com/<w>/<h>/<keyword>/all?lock=<n>seoul, korean,food, cafe,interior, apartment,korea?lock=N로 결정적 출력https://loremflickr.com/600/400/seoul,city/all?lock=42 → 서울 도시 사진 결정적사용 가이드:
<brand>-product-1, -2, -3 ...)lorelei 또는 notionists (people 사진 placeholder 보다 일관)금지:
cdn.banksalad.com/... 등)은 product DOM에 hot-link 금지 — TOS·IP 영역Hero Patterns (CC BY 4.0) — https://heropatterns.com — SVG 도큐 보고 inline 복사
assets/attribution.md에 CC BY 표기 의무CSS 자체 생성 — abstract gradient ornament는 generator가 직접:
css.hero-ornament { position: absolute; inset: -100px -200px auto auto; width: 480px; height: 280px; background: radial-gradient(circle, var(--brand) 0%, transparent 70%); filter: blur(120px); opacity: 0.4; pointer-events: none; z-index: 0; }
이건 brand-specific creative work 아님 — 우리가 직접 그려도 무방.
기존 omd:reference-capture Phase 3.5의 fonts.json catalog와 동일. SIL OFL / open-source만:
디스플레이/액센트 폰트 (logo / hero 헤드라인용, SIL OFL):
https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&display=swaphttps://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swaphttps://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300..900&display=swaphttps://fonts.googleapis.com/css2?family=Bricolage+Grotesque:wght@400;500;700&display=swap[YOUR PRODUCT NAME] 자리를 폼나게 만들 때 위 display 폰트 + letter-spacing: -0.03em + font-weight: 600 정도가 polish 시작점.
모든 자산 사용 시 assets/attribution.md에 다음 형식으로 기록:
markdown# Asset Attribution Generated by `omd:asset-fetch` on <ISO-date>. ## Used Assets | Asset | Source URL | License | Used at | |---|---|---|---| | Hero character | `https://api.dicebear.com/9.x/notionists/svg?seed=X&size=520` | CC0 | landing.html#L148 | | Logo wordmark | `Folio` rendered in Bricolage Grotesque 700 (SIL OFL via Google Fonts) | SIL OFL | landing.html header `.logo-wordmark` | | Product card 1 photo | `https://picsum.photos/seed/musinsa-card-1/400/500` | CC0 (Picsum) | landing.html#L412 | | ... | ... | ... | ... | ## License Summary - CC0 자산: 무제한 commercial 사용 - CC BY 4.0 자산 (Hero Patterns 등): 사용 시 attribution 의무 — 이 파일이 attribution 역할 - SIL OFL 폰트: 폰트 자체 redistribution은 라이센스에 따름; 웹페이지 임베드는 자유
이 스킬은 omd:apply / omd:harness가 내부적으로 호출하는 룩업 catalog. 사용자가 명시적으로 부를 일은 드묾.
| 호출 컨텍스트 | 액션 | |---|---| | omd:harness가 hero 일러스트 자리 채울 때 | §2 DiceBear avatar URL fetch | | omd:apply가 product 카드 N개 그릴 때 | §4 Picsum seeded URL 사용 | | omd:harness가 헤더 logo 자리 만들 때 | §1 워드마크-only 패턴 (디스플레이 폰트 + product name, icon mark X) | | omd:harness가 feature 카드 아이콘 정할 때 | §3 Lucide URL | | 사용자가 직접 "사진 자료 가져와줘" 요청 | 사용자 의도 확인 후 §4 Picsum / Loremflickr |
생성된 HTML 작성 직후 self-audit:
grep -E '<svg[^>]*>(\s*<path d="M[0-9.,\sCQ-]+"\s*/?>)' landing.html — handcrafted inline svg path 개수 확인. 차트(.hero-chart) 외에 0이어야 함.grep -E '\[YOUR LOGO\]|\[YOUR PRODUCT NAME\]' landing.html — placeholder 텍스트 남아있나? 있으면 §1 패턴으로 교체.grep -E 'assets/attribution\.md' landing.html 또는 attribution.md 파일 존재 확인.grep -E 'placeholder|TBD|TODO|FIXME' landing.html — sub-agent가 lazy fallback 남겼나? 0이어야 함.모든 placeholder = catalog fetch + attribution. handcraft inline graphics 0.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 31,088 | 27,634 | -11% | 1 | 1 | 0% | 6,229 | 9,714 | +56% | 0 | 0 | — |
case-02 | fail→fail | 32,851 | 28,393 | -14% | 1 | 1 | 0% | 6,220 | 9,705 | +56% | 0 | 0 | — |
case-03 | fail→pass | 27,619 | 27,622 | +0% | 1 | 1 | 0% | 6,217 | 9,702 | +56% | 0 | 0 | — |
case-04 | fail→fail | 27,773 | 18,895 | -32% | 1 | 1 | 0% | 5,992 | 7,610 | +27% | 0 | 0 | — |
case-05 | fail→pass | 23,538 | 19,638 | -17% | 1 | 1 | 0% | 4,645 | 7,850 | +69% | 0 | 0 | — |
case-06 | fail→pass | 13,481 | 7,986 | -41% | 1 | 1 | 0% | 2,553 | 5,061 | +98% | 0 | 0 | — |
case-07 | fail→pass | 18,205 | 13,566 | -25% | 1 | 1 | 0% | 3,434 | 6,348 | +85% | 0 | 0 | — |
case-08 | fail→pass | 24,111 | 15,448 | -36% | 1 | 1 | 0% | 4,922 | 6,643 | +35% | 0 | 0 | — |
case-09 | fail→pass | 11,778 | 6,011 | -49% | 1 | 1 | 0% | 1,879 | 4,533 | +141% | 0 | 0 | — |
case-10 | pass→pass | 10,423 | 5,021 | -52% | 1 | 1 | 0% | 1,733 | 4,264 | +146% | 0 | 0 | — |
case-11 | pass→pass | 14,376 | 6,500 | -55% | 1 | 1 | 0% | 2,274 | 4,573 | +101% | 0 | 0 | — |
case-12 | fail→pass | 9,532 | 5,369 | -44% | 1 | 1 | 0% | 1,565 | 4,462 | +185% | 0 | 0 | — |
case-13 | fail→pass | 24,381 | 21,176 | -13% | 1 | 1 | 0% | 4,603 | 7,987 | +74% | 0 | 0 | — |
case-14 | fail→pass | 14,237 | 6,601 | -54% | 1 | 1 | 0% | 2,200 | 4,614 | +110% | 0 | 0 | — |
case-15 | fail→pass | 13,808 | 4,578 | -67% | 1 | 1 | 0% | 2,742 | 4,350 | +59% | 0 | 0 | — |
case-16 | fail→pass | 18,648 | 6,226 | -67% | 1 | 1 | 0% | 3,863 | 4,622 | +20% | 0 | 0 | — |
case-17 | fail→pass | 12,157 | 7,695 | -37% | 1 | 1 | 0% | 1,832 | 4,877 | +166% | 0 | 0 | — |
case-18 | fail→pass | 10,695 | 2,477 | -77% | 1 | 1 | 0% | 1,560 | 3,850 | +147% | 0 | 0 | — |
case-19 | pass→pass | 14,636 | 10,170 | -31% | 1 | 1 | 0% | 2,422 | 5,129 | +112% | 0 | 0 | — |
case-20 | pass→pass | 15,910 | 13,609 | -14% | 1 | 1 | 0% | 2,757 | 5,900 | +114% | 0 | 0 | — |
case-21 | pass→pass | 15,189 | 14,394 | -5% | 1 | 1 | 0% | 2,565 | 5,984 | +133% | 0 | 0 | — |
case-22 | pass→pass | 15,053 | 15,525 | +3% | 1 | 1 | 0% | 2,598 | 6,153 | +137% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +59 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.