{"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 ~/.lovstudio/logo-collection/<slug>/. 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 `~/.lovstudio/logo-collection/<slug>/`.\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 ~/.claude/skills/lovstudio-find-logo/scripts/find_logo.py \\\n  --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, `curl -o` it into\n  `~/.lovstudio/logo-collection/<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/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## 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.470","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 40 github stars · SKILL.md body (4,051 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-04-22T00:56:34.594Z","embedding":null,"createdAt":"2026-04-21T01:36:43.039Z","updatedAt":"2026-04-22T00:56:34.594Z","lastSeenAt":"2026-04-22T00:56:34.594Z","tsv":"'+10':486,507 '+15':520 '+20':484 '+25':502 '+30':492 '+40':482 '+5':523 '-10':488 '-15':515 '-20':490,526 '-30':531 '-5':512 '/.claude/skills/lovstudio-find-logo/scripts/find_logo.py':204 '/.lovstudio/logo-collection':37,84,320,408,450 '/logo':321 '0':235 '1':124,506,511 '1.3':510 '1200x628':469 '128px':522 '2':196,273,414,505 '20':254,263 '3':224 '32px':528 '4':335 '400':534 '60':245,255 '64px':525 'accept':128 'almost':536 'alpha':494 'alt':413,425 'alt-1.png':456 'alt-2.png':460 'alt-n':424 'altern':82,558 'alway':498 'ambigu':161,171 'anthrop':206,451 'anthropic.com':208 'anyth':584 'api':593 'appl':173 'archiv':30,74,237,341,405,409,448 'argpars':564 'argument':373 'ask':89,146 'askuserquest':166 'aspect':26,253,347,500 'back':228,338 'banner':471 'bare':387 'base':393 'bash':202 'batch':212 'best':32,76 'brand':18,50,57,95,127,162,168,199,294,606 'brand/product':377 'byte':535 'candid':23,72,277,420,478 'certain':537 'chain':438 'channel':495 'claud':613 'clean':120 'clearbit':12,62,592 'cli':371 'code':234,272 'collect':49,91 'com':151,291,581,587 'come':550 'compani':103 'company/product':7 'count':499 'coupl':80 'cover':603 'crude':577 'curl':316 'default':374 'depend':559 'descript':375 'dimens':464 'direct':313 'directori':401 'domain':145,181,388,394,573 'drop':105 'e.g':172 'edg':519 'emit':429 'endpoint':601 'exist':329 'exit':233,271 'explicit':590 'fail':164 'fall':227 'fallback':611 'favicon':15,69,259,555 'fetch':5,197,465 'find':3,43,47 'find-logo':2,46 'format':348,480 'found':270,279 'fruit':174 'gave':138,190 'give':111,283 'given':16 'guess':150,154,395,574 'guessabl':184 'hand':324 'hand-writ':323 'heurist':475 'highest':454 'hit':598 'html.parser':563 'ico':266,489 'idempot':217 'identifi':125 'imag':14,68,314 'inc':176 'inspect':225 'instal':567 'invoc':201 'invok':303 'isn':182 'jpg':487 'json':209,427,431 'keep':412,422 'keep-alt':411 'key':594 'kit':298,366 'known':569 'land':556 'landscap':509 'layout':330,449 'least':440 'limit':570 'lineup':100 'list':192 'logo':4,8,44,48,51,96,117,236,288,549 'logo.png':452,468 'logo.svg':473 'loop':213 'lovstudio':1 'lowercas':579 'lowercase-strip':578 'major':605 'mandatori':122 'mani':416 'match':541 'meta':382 'meta.json':326,461 'mix':130 'n':426 'name':19,58,102,132,141,169,205,376,378,392,398,443,572 'name-bas':391 'need':232 'no-candid':275 'non':158 'non-us':157 'noth':280 'o':317 'obvious':144 'offer':358 'offici':384 'og':13,67 'one':77,92,198,441 'overrid':389,399 'overwrit':222 'page':299 'partners/press':108 'pass':588 'path':342 'payload':533 'per':200,218 'pip':566 'plus':78 'png':250,262,483 'prefer':28,52,543,546 'present':496 'press':297,365 'press-kit':296,364 'primari':345,453 'print':239 'probabl':257 'probe':61 'public':10 'pull':118 'python3':203 'qualiti':243 'ratio':501 're':220,302 're-invok':301 're-run':219 'refer':372 'report':336,337 'requir':447,568 'respons':615 'result':432 'retri':360 'rgba':545 'root':406,410 'run':221 'runner':34,418,458 'runner-up':33,417,457 'saniti':530 'say':42 'score':22,70,226,240,351,455,463,474 'script':152,215,278,618 'short':518 'signal':244 'silent':149 'site':64,290 'size':529 'skill' 'skill-find-logo' 'slide/poster/site':99 'slug':381,396,402 'slugifi':397 'small':261 'solid':246 'sourc':11,462 'source-lovstudio' 'specif':363 'squar':514,554 'status':274 'stdlib':560 'stdout':434 'step':123,195,223,334 'strip':109,580 'stripe':472 'stub':269,539 'suffix':582 'support':308 'svg':247,289,370,481,497 'take':55 'tall/portrait':517 'tell':354 'templat':333 'tini':268 'top':553 '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,54,249,470,491,548 'trigger':38 'unauthent':600 'up':35,459 'url':21,60,113,134,178,194,207,305,315,367,383,385,445,589 'urllib':562 'us':159 'usabl':256 'use':87,165,285,327,379,435,596 'user':41,88,101,110,137,189,356 'vercel':467 'vs':175 'want':115 'weak':264,353 'webp':485 'websearch':230,286,610 'wide':25,53,504,547 'wide-aspect':24 'wide/square':252 'wikipedia':369 'win':479 'without':193 'workflow':121 'write':325 'x.ai':186 'xai':185 'xai.com':188 '找':45 '长条形':544","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-04-22T00:56:34.594Z"}],"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":40,"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-04-21T15:57:51Z","description":"Agent skills for AI coding assistants — Markdown to PDF/DOCX with 14 themes, CJK support","skill_md_sha":"9e1b4bb7e6090b213904b107310d71a7f48523d0","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 ~/.lovstudio/logo-collection/<slug>/. 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-04-22T00:56:34.594Z"}}