{"id":"663e6089-3360-4126-ad80-7371f1b9105a","shortId":"J2P6qy","kind":"skill","title":"lovstudio-find-logo","tagline":"Fetch a company/product logo from public sources (Clearbit, og:image, favicon) given a brand name or URL, score candidates (wide-aspect + transparent preferred), and archive the best + runner-ups to the configured logo collection directory. Trigger when the user says \"find logo\",","description":"# find-logo — collect brand logos, prefer wide + transparent\n\nTakes a brand name or URL, probes Clearbit + the site's own og:image /\n`<link rel=icon>` / favicon, scores each candidate, and archives the best\none plus a couple of alternates into the configured collection directory.\n\n## When to Use\n\n- User asks to collect one or more brand logos for a slide/poster/site lineup\n- User names companies to drop into a partners/press strip\n- User gives a URL and wants its logo pulled down cleanly\n\n## Workflow (MANDATORY)\n\n### Step 1: Identify each brand\n\nAccept any mix of names and URLs. If the user gave only a name with no obvious\ndomain, ask — don't silently guess `.com` (script will guess, but for non-US or\nambiguous brands that fails).\n\nUse `AskUserQuestion` when:\n- Brand name is ambiguous (e.g. \"Apple\" = fruit vs. Inc.)\n- No URL and the domain isn't guessable (`xAI` → `x.ai`, not `xai.com`)\n- User gave a list without URLs\n\n### Step 2: Fetch — one brand per invocation\n\n```bash\npython3 scripts/find_logo.py --name \"Anthropic\" --url https://anthropic.com --json\n```\n\nFor a batch, loop; the script is idempotent per `<slug>/` (re-runs overwrite).\n\n### Step 3: Inspect score; fall back to WebSearch if needed\n\n- Exit code `0` → logo archived. The printed `score` is your quality signal:\n  - `≥ 60` — solid: SVG or transparent PNG with wide/square aspect\n  - `20–60` — usable: probably a favicon or small PNG\n  - `< 20` — weak: only ICO or tiny stub found\n- Exit code `2` / `status: \"no-candidates\"` → script found nothing.\n  Do NOT give up. Use `WebSearch` for `\"<brand> logo svg site:*.com\"` or the\n  brand's press-kit page, then re-invoke with `--url <direct-image-url>` is\n  **not supported** — if you have a direct image URL, save it into the configured\n  collection directory under `<slug>/logo.<ext>` and hand-write `meta.json`\n  using the existing layout as a template.\n\n### Step 4: Report\n\nReport back with the archive path and the primary's aspect + format. If the\nscore is weak, tell the user and offer to retry with a specific press-kit URL\nor Wikipedia SVG.\n\n## CLI Reference\n\n| Argument | Default | Description |\n|----------|---------|-------------|\n| `--name` | — | Brand/product name. Used for slug + meta. |\n| `--url` | — | Official URL or bare domain. Overrides the name-based domain guess. |\n| `--slug` | slugified name | Override the directory slug under the archive root. |\n| `--out` | `LOVSTUDIO_FIND_LOGO_OUTPUT_DIR` or `~/.lovstudio/logo-collection` | Archive root. |\n| `--keep-alts` | `2` | How many runner-up candidates to keep as `alt-N.<ext>`. |\n| `--json` | off | Emit a JSON result to stdout (use this when chaining). |\n\nAt least one of `--name` or `--url` is required.\n\n## Archive Layout\n\n```\n~/.lovstudio/logo-collection/\n├── anthropic/\n│   ├── logo.png            # primary (highest score)\n│   ├── alt-1.png           # runner-ups\n│   ├── alt-2.png\n│   └── meta.json           # sources, scores, dimensions, fetched_at\n├── vercel/\n│   ├── logo.png            # 1200x628 transparent banner\n│   └── ...\n└── stripe/\n    ├── logo.svg\n    └── ...\n```\n\n## Scoring Heuristic (why a candidate wins)\n\n- Format: SVG (+40) > PNG (+20) > WebP (+10) > JPG (-10) > ICO (-20)\n- Transparency: `+30` if alpha channel present (SVG always counts)\n- Aspect ratio: `+25` for wide (≥2:1), `+10` for landscape (≥1.3:1),\n  `-5` for square, `-15` for tall/portrait\n- Short edge: `+15` if ≥128px, `+5` if ≥64px, `-20` if <32px\n- Size sanity: `-30` if payload <400 bytes (almost certainly a stub)\n\nThis matches the \"prefer 长条形 + rgba\" preference — wide transparent logos\ncome out on top, square favicons land as alternates.\n\n## Dependencies\n\nStdlib only (urllib, html.parser, argparse). No `pip install` required.\n\n## User Configuration\n\nDefault archive files live under `~/.lovstudio/logo-collection/`. Override this\nper run with `--out`, or set `LOVSTUDIO_FIND_LOGO_OUTPUT_DIR` for the skill.\n\n## Known Limits\n\n- The name → domain guess is a crude lowercase-strip + `.com` suffix. For\n  anything not on `.com`, pass `--url` explicitly.\n- No Clearbit API key is used — we hit the unauthenticated endpoint, which\n  covers most major brands but not all.\n- `WebSearch` fallback is Claude's responsibility, not the script's.","tags":["find","logo","skills","lovstudio","agent-skills","ai-coding-assistant","cjk","claude-code","cursor","gemini-cli","markdown-to-docx","markdown-to-pdf"],"capabilities":["skill","source-lovstudio","skill-find-logo","topic-agent-skills","topic-ai-coding-assistant","topic-cjk","topic-claude-code","topic-cursor","topic-gemini-cli","topic-markdown-to-docx","topic-markdown-to-pdf"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/lovstudio/skills/find-logo","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add lovstudio/skills","source_repo":"https://github.com/lovstudio/skills","install_from":"skills.sh"}},"qualityScore":"0.477","qualityRationale":"deterministic score 0.48 from registry signals: · indexed on github topic:agent-skills · 54 github stars · SKILL.md body (4,232 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:57:48.834Z","embedding":null,"createdAt":"2026-04-21T01:36:43.039Z","updatedAt":"2026-05-18T18:57:48.834Z","lastSeenAt":"2026-05-18T18:57:48.834Z","tsv":"'+10':501,522 '+15':535 '+20':499 '+25':517 '+30':507 '+40':497 '+5':538 '-10':503 '-15':530 '-20':505,541 '-30':546 '-5':527 '/.lovstudio/logo-collection':423,465,591 '/logo':330 '0':241 '1':130,521,526 '1.3':525 '1200x628':484 '128px':537 '2':202,279,429,520 '20':260,269 '3':230 '32px':543 '4':344 '400':549 '60':251,261 '64px':540 'accept':134 'almost':551 'alpha':509 'alt':428,440 'alt-1.png':471 'alt-2.png':475 'alt-n':439 'altern':85,573 'alway':513 'ambigu':167,177 'anthrop':212,466 'anthropic.com':214 'anyth':623 'api':632 'appl':179 'archiv':30,77,243,350,414,424,463,587 'argpars':579 'argument':382 'ask':95,152 'askuserquest':172 'aspect':26,259,356,515 'back':234,347 'banner':486 'bare':396 'base':402 'bash':208 'batch':218 'best':32,79 'brand':18,53,60,101,133,168,174,205,300,645 'brand/product':386 'byte':550 'candid':23,75,283,435,493 'certain':552 'chain':453 'channel':510 'claud':652 'clean':126 'clearbit':12,65,631 'cli':380 'code':240,278 'collect':40,52,89,97,327 'com':157,297,620,626 'come':565 'compani':109 'company/product':7 'configur':38,88,326,585 'count':514 'coupl':83 'cover':642 'crude':616 'default':383,586 'depend':574 'descript':384 'dimens':479 'dir':421,604 'direct':319 'directori':41,90,328,410 'domain':151,187,397,403,612 'drop':111 'e.g':178 'edg':534 'emit':444 'endpoint':640 'exist':338 'exit':239,277 'explicit':629 'fail':170 'fall':233 'fallback':650 'favicon':15,72,265,570 'fetch':5,203,480 'file':588 'find':3,47,50,418,601 'find-logo':49 'format':357,495 'found':276,285 'fruit':180 'gave':144,196 'give':117,289 'given':16 'guess':156,160,404,613 'guessabl':190 'hand':333 'hand-writ':332 'heurist':490 'highest':469 'hit':637 'html.parser':578 'ico':272,504 'idempot':223 'identifi':131 'imag':14,71,320 'inc':182 'inspect':231 'instal':582 'invoc':207 'invok':309 'isn':188 'jpg':502 'json':215,442,446 'keep':427,437 'keep-alt':426 'key':633 'kit':304,375 'known':608 'land':571 'landscap':524 'layout':339,464 'least':455 'limit':609 'lineup':106 'list':198 'live':589 'logo':4,8,39,48,51,54,102,123,242,294,419,564,602 'logo.png':467,483 'logo.svg':488 'loop':219 'lovstudio':2,417,600 'lovstudio-find-logo':1 'lowercas':618 'lowercase-strip':617 'major':644 'mandatori':128 'mani':431 'match':556 'meta':391 'meta.json':335,476 'mix':136 'n':441 'name':19,61,108,138,147,175,211,385,387,401,407,458,611 'name-bas':400 'need':238 'no-candid':281 'non':164 'non-us':163 'noth':286 'obvious':150 'offer':367 'offici':393 'og':13,70 'one':80,98,204,456 'output':420,603 'overrid':398,408,592 'overwrit':228 'page':305 'partners/press':114 'pass':627 'path':351 'payload':548 'per':206,224,594 'pip':581 'plus':81 'png':256,268,498 'prefer':28,55,558,561 'present':511 'press':303,374 'press-kit':302,373 'primari':354,468 'print':245 'probabl':263 'probe':64 'public':10 'pull':124 'python3':209 'qualiti':249 'ratio':516 're':226,308 're-invok':307 're-run':225 'refer':381 'report':345,346 'requir':462,583 'respons':654 'result':447 'retri':369 'rgba':560 'root':415,425 'run':227,595 'runner':34,433,473 'runner-up':33,432,472 'saniti':545 'save':322 'say':46 'score':22,73,232,246,360,470,478,489 'script':158,221,284,657 'scripts/find_logo.py':210 'set':599 'short':533 'signal':250 'silent':155 'site':67,296 'size':544 'skill':607 'skill-find-logo' 'slide/poster/site':105 'slug':390,405,411 'slugifi':406 'small':267 'solid':252 'sourc':11,477 'source-lovstudio' 'specif':372 'squar':529,569 'status':280 'stdlib':575 'stdout':449 'step':129,201,229,343 'strip':115,619 'stripe':487 'stub':275,554 'suffix':621 'support':314 'svg':253,295,379,496,512 'take':58 'tall/portrait':532 'tell':363 'templat':342 'tini':274 'top':568 'topic-agent-skills' 'topic-ai-coding-assistant' 'topic-cjk' 'topic-claude-code' 'topic-cursor' 'topic-gemini-cli' 'topic-markdown-to-docx' 'topic-markdown-to-pdf' 'transpar':27,57,255,485,506,563 'trigger':42 'unauthent':639 'up':35,474 'url':21,63,119,140,184,200,213,311,321,376,392,394,460,628 'urllib':577 'us':165 'usabl':262 'use':93,171,291,336,388,450,635 'user':45,94,107,116,143,195,365,584 'vercel':482 'vs':181 'want':121 'weak':270,362 'webp':500 'websearch':236,292,649 'wide':25,56,519,562 'wide-aspect':24 'wide/square':258 'wikipedia':378 'win':494 'without':199 'workflow':127 'write':334 'x.ai':192 'xai':191 'xai.com':194 '长条形':559","prices":[{"id":"171be992-8ae2-40d8-8970-d2498dc718cb","listingId":"663e6089-3360-4126-ad80-7371f1b9105a","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"lovstudio","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-21T01:36:43.039Z"}],"sources":[{"listingId":"663e6089-3360-4126-ad80-7371f1b9105a","source":"github","sourceId":"lovstudio/skills/find-logo","sourceUrl":"https://github.com/lovstudio/skills/tree/main/skills/find-logo","isPrimary":false,"firstSeenAt":"2026-04-21T01:36:43.039Z","lastSeenAt":"2026-05-18T18:57:48.834Z"}],"details":{"listingId":"663e6089-3360-4126-ad80-7371f1b9105a","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"lovstudio","slug":"find-logo","github":{"repo":"lovstudio/skills","stars":54,"topics":["agent-skills","ai-coding-assistant","cjk","claude-code","cursor","gemini-cli","markdown-to-docx","markdown-to-pdf"],"license":"mit","html_url":"https://github.com/lovstudio/skills","pushed_at":"2026-05-17T09:28:31Z","description":"Top-level index for the Lovstudio skills ecosystem","skill_md_sha":"03625e37cc3be20cad189046aeba64af1928a328","skill_md_path":"skills/find-logo/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/lovstudio/skills/tree/main/skills/find-logo"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"lovstudio-find-logo","license":"MIT","description":"Fetch a company/product logo from public sources (Clearbit, og:image, favicon) given a brand name or URL, score candidates (wide-aspect + transparent preferred), and archive the best + runner-ups to the configured logo collection directory. Trigger when the user says \"find logo\", \"找 logo\", \"抓 logo\", \"收集 logo\", \"brand asset\", \"需要 <brand> 的 logo\", or wants logos laid out for a website/PPT/poster.","compatibility":"Requires Python 3.8+ (stdlib only — no pip deps). Cross-platform: macOS, Windows, Linux."},"skills_sh_url":"https://skills.sh/lovstudio/skills/find-logo"},"updatedAt":"2026-05-18T18:57:48.834Z"}}