Logo Finder
Find the current official logo for one or more companies, verify it, process it to spec, and deliver it — as ready-to-place files or inserted into the user's document. This replaces a manual loop: googling " logo transparent png", checking the company site for the current version, fixing padding, and resizing by eye.
Workflow
- Confirm intended use
- Gather requirements (brands, style, mark format, destination)
- Confirm the right company
- Source — library first, then freshest and highest quality
- Verify programmatically
- Process (trim, recolor, normalize)
- Contact sheet for approval
- Deliver
Steps 1–3 usually collapse into one or two questions. Ask only what the request leaves ambiguous, and bundle questions rather than asking serially.
1. Intended use
Logos are trademarks. Confirm once per session: internal use (decks, internal docs) → proceed. External use (marketing, website, sales collateral) → ask the user to confirm they have permission from the brand owner or are within that brand's published usage guidelines, then proceed — it's their call. If the destination makes it obvious ("our internal town hall deck"), state the assumption instead of asking.
2. Requirements
- Brands — the list of companies.
- Style — default: official full-color on transparent background. The standard treatments a brand publishes, and the menu to offer when the user's intent is unclear: full color (light backgrounds), reverse (for dark backgrounds — the official full-color-reverse if the brand has one, else all-white), black and white flat mono (uniform logo walls), and grayscale (keeps tonal detail — the choice for muted walls where flat black is too heavy). Any treatment can pair with any mark format below.
- Mark format — most brands publish several marks: a full lockup (symbol + name), a standalone wordmark, and a square icon (the social/app avatar). When more than one exists and the user hasn't specified, ask — or infer from the destination: customer/partner rows on a slide usually want the lockup or wordmark (it carries the name); small-scale uses (tables, tight grids, tiny badges) want the square icon, which stays legible where a wordmark turns to fuzz. When uncertain and unable to ask, source the primary lockup and the icon and put both on the contact sheet.
- Destination — if a deck or document is provided, look at it: background color, available space, and how many logos share the slide inform style, format, and sizing.
- Deliverable — files, or placed directly into the document if there is one.
3. Confirm the right company
Names are ambiguous — "Mercury" is a bank, an insurer, and a marine-engine maker; big corporations have holding companies and divisions with different marks. The official website domain is the anchor: it settles which company is meant and becomes the source of truth for the current logo.
- Check the user's context first: the target document, CRM, deal records, or conversation often identify the company outright.
- Unambiguous → state the assumption ("Assuming McDonald's Corporation, mcdonalds.com") and proceed.
- Ambiguous → present candidates (name, domain, one-line descriptor) and let the user pick, all ambiguous brands bundled into one question.
- Larger sets (roughly 6+ brands): switch to a roster. Resolve every brand up front, then present one table — brand → entity → domain, with the ambiguous ones flagged and their candidates listed — for a single confirm-by-exception reply ("all good, but #7 is the insurer"). Never ask brand-by-brand; twenty serial questions is worse than the manual process this skill replaces.
4. Source
Library first. If the workspace has a logo-library/ folder (or the user maintains one), use matching files and skip sourcing for those brands — each brand should cost sourcing effort once, ever. Save newly sourced originals back to the library.
For the rest, work down this ladder per brand, stopping at a current, high-quality mark:
- Official brand/press page on the confirmed domain (
site:<domain> brand assets, "press kit", "media resources") — often has SVGs, all mark formats, and light/dark variants.
- Wikipedia/Wikimedia Commons — current logos as SVG, kept fresh by editors.
- Community icon and vector libraries published on public package registries — search the registry for the brand. Actively maintained collections of official vectors, and the reliable fallback in sandboxes where brand-kit downloads and logo CDNs are blocked (package registries usually aren't). Mostly icon-only marks — lockups and wordmarks generally need sources 1–2.
- Logo APIs / web image search (domain-keyed logo services, or a plain " logo svg" search) — most likely to be stale or doctored, so verify hard.
- Browser automation — the true last resort. If your environment has browser tooling (a scriptable browser, a browser extension, or computer-use), do what a human does: open the brand's site or an image search in the browser, find the best candidate, and save it — download it from within the page session or capture the asset the page itself loads. A real browser gets past bot walls that block plain HTTP fetches. Work read-only on public pages, honor the environment's permission prompts, and never bypass its security or data-protection controls — if the browser route is walled off too, fall back to handing the user URLs (below).
Freshness check, always. Compare the candidate against what the company itself uses today (fetch the confirmed domain's homepage). Rebrands are common and old marks linger for years. If image fetches are blocked in your environment, verify by proxy: palette match against published brand colors and any recent rebrand news. Prefer SVG, then rasterize it:
python3 scripts/logo_prep.py rasterize logo.svg logo.png --width 2000
This installs nothing — it uses whichever renderer the machine already has (librsvg, ImageMagick, or headless Chrome) and names the options if it finds none. Two ways past a machine with no renderer: download a pre-rendered PNG instead of the SVG (Wikimedia serves any Commons SVG as a PNG at any width via its /thumb/ URL), or hand the user the URL per the note below.
Use your web search and page-fetch tools for discovery, then download the chosen asset. If a source is unreachable, move down the ladder rather than fighting it. For larger sets, source in one uninterrupted sweep (parallel where your environment allows) after the roster is confirmed — don't interleave questions with sourcing, and don't stall the batch on one stubborn brand: finish the rest and report the gap on the contact sheet.
When your environment can't download images at all (some sandboxes allow search but block file downloads): don't stop at reporting the gap. Hand the user the exact asset URLs you found — one clickable link per missing brand, best candidate first — so they can save the file and drop it back to you in seconds. Then verify and process their file like any other candidate. A found-but-undownloadable logo is a 30-second human assist, not a failure.
5. Verify
Never trust a file's claims — run the bundled verifier on every candidate:
python3 scripts/logo_prep.py verify candidate.png
It reports whether transparency exists and is actually used (many "transparent" PNGs have a white background baked in), content bounding box, padding, and low-resolution flags. Fix problems by finding a better source before repairing a bad file.
6. Process
All in scripts/logo_prep.py (Python 3 + Pillow; rasterize is covered in step 4):
trim in.png out.png — crop to actual logo content + small margin. Do this before any sizing decision: padding varies wildly between files, so raw pixel dimensions lie.
remove-bg in.png out.png [--feather 30] — make a near-white background transparent when no truly transparent source exists. Edges are ramped rather than cut, so anti-aliasing doesn't leave a pale rim on dark backgrounds; widen --feather if one still shows. Inspect the result; white internal detail can still be damaged.
recolor in.png out.png --color black|white|#hex — flat mono versions (white = the reverse treatment) when the official variant isn't findable. Keeps the alpha silhouette. Logos relying on internal contrast (white text on a colored badge) can flatten into a blob — eyeball every conversion and flag doubtful ones on the contact sheet.
grayscale in.png out.png [--lighten N] — desaturates while keeping tonal detail and transparency; different from flat black, and usually what "make them all grayscale" actually means. Prefer the brand's official one-color mark when one exists; derive only when it doesn't.
normalize a.png b.png --out prepared/ --size 260 — equalize visual scale across a set. Scales by content area (with aspect caps), not raw dimensions, so a wide wordmark and a square icon carry the same visual weight; outputs uniform-height canvases that drop into a row cleanly. This is the step that replaces resizing by eye.
7. Contact sheet
Before delivering or placing anything:
python3 scripts/logo_prep.py contact-sheet prepared/ --out contact_sheet.html
Every logo on light and dark backgrounds (transparency problems and white logos are invisible on white alone), with dimensions, transparency badge, and quality flags. The user approves or names the ones needing alternatives — sourcing judgment stays human. If a brand only yielded mediocre candidates, say so plainly. Working non-interactively: deliver the sheet with the outputs and note anything deserving a second look.
One sheet per batch, however large — review is approve-by-exception ("all good" or "swap #4 and #11"), and a swap round redoes only the named logos, never the whole set. Whatever the set size, the user should hit exactly two checkpoints: the roster before sourcing, the contact sheet before delivery. Everything between runs without questions.
8. Deliver
- Files: processed set plus originals in
sources/. Predictable names: <brand>.png, <brand>-black.png, <brand>-white.png, <brand>-gray.png, <brand>-icon.png. In the library, store each brand's best full-color transparent original (vector when possible) — black/white/grayscale derive from it on demand, so there's no need to hoard every variant. This is the universal deliverable — normalized transparent PNGs drop cleanly into PowerPoint, Google Slides, Keynote, Canva, Figma, or any other deck or design tool, already matched in visual scale so the user just places them.
- Direct insertion: when the destination is a file you can edit (PowerPoint, Word, PDF) or a tool you have a connector for (Google Slides, Canva, Figma), place the logos yourself: roughly 2× their display size for crispness, aligned at consistent heights on a shared row. Render or screenshot the result afterward and check it. When you can't edit the destination (a web editor with no connector), deliver the prepared files with a one-line placement note instead.
- Shared asset library: when a connector to the user's design platform exists (Canva, Figma, or similar), offer to upload the prepared set so the whole team reuses it instead of re-sourcing. Prefer a shared, searchable folder holding many brands over a single-brand identity kit — folders scale and are shareable, while identity kits are built for one brand's own assets and are often limited per plan. Mirror the local
logo-library/ file naming so the two stay in sync.
Dependencies
Python 3 + Pillow (pip install pillow) — everything in scripts/logo_prep.py.
SVG rasterizing uses whichever renderer is already installed — rsvg-convert, magick,
or headless Chrome.
This skill installs nothing; if no renderer is present, rasterize says so and names the
options. Run python3 scripts/selftest.py to check an environment.
Usage note
This skill retrieves publicly available brand assets. All logos and trademarks remain the property of their respective owners; users are responsible for ensuring their use complies with trademark/copyright law and each brand's guidelines. Intended for internal reference use (e.g., internal presentations) — external or commercial use of a third party's logo generally requires permission. Informational, not legal advice.
1---2name: logo-finder3description: Source, verify, and prepare company/brand logos (customers, partners, vendors) for decks and internal assets. Use this skill whenever the user needs a logo or a set of logos — for a town hall deck, a customer slide, a partner page, a one-pager, or any document — including requests phrased as "add the McDonald's logo", "grab logos for our new customers", "I need the white version of their logo", "get me their icon", or "put customer logos on this slide". Also use it when the user asks to clean up, recolor, resize, or make transparent an existing logo file. Handles finding the current official logo, confirming the right corporate entity, choosing between wordmark/lockup and square icon formats, verifying transparency and quality, converting to black/white versions, normalizing a set to consistent visual scale, and placing logos into decks and documents — PowerPoint, Google Slides, Keynote, PDFs, Canva, Figma, or wherever the logos are headed.4license: MIT5---67# Logo Finder89Find the current official logo for one or more companies, verify it, process it to spec, and deliver it — as ready-to-place files or inserted into the user's document. This replaces a manual loop: googling "<brand> logo transparent png", checking the company site for the current version, fixing padding, and resizing by eye.1011## Workflow12131. Confirm intended use142. Gather requirements (brands, style, mark format, destination)153. Confirm the right company164. Source — library first, then freshest and highest quality175. Verify programmatically186. Process (trim, recolor, normalize)197. Contact sheet for approval208. Deliver2122Steps 1–3 usually collapse into one or two questions. Ask only what the request leaves ambiguous, and bundle questions rather than asking serially.2324## 1. Intended use2526Logos are trademarks. Confirm once per session: internal use (decks, internal docs) → proceed. External use (marketing, website, sales collateral) → ask the user to confirm they have permission from the brand owner or are within that brand's published usage guidelines, then proceed — it's their call. If the destination makes it obvious ("our internal town hall deck"), state the assumption instead of asking.2728## 2. Requirements2930- **Brands** — the list of companies.31- **Style** — default: official full-color on transparent background. The standard treatments a brand publishes, and the menu to offer when the user's intent is unclear: **full color** (light backgrounds), **reverse** (for dark backgrounds — the official full-color-reverse if the brand has one, else all-white), **black** and **white** flat mono (uniform logo walls), and **grayscale** (keeps tonal detail — the choice for muted walls where flat black is too heavy). Any treatment can pair with any mark format below.32- **Mark format** — most brands publish several marks: a full lockup (symbol + name), a standalone wordmark, and a square icon (the social/app avatar). When more than one exists and the user hasn't specified, ask — or infer from the destination: customer/partner rows on a slide usually want the lockup or wordmark (it carries the name); small-scale uses (tables, tight grids, tiny badges) want the square icon, which stays legible where a wordmark turns to fuzz. When uncertain and unable to ask, source the primary lockup *and* the icon and put both on the contact sheet.33- **Destination** — if a deck or document is provided, look at it: background color, available space, and how many logos share the slide inform style, format, and sizing.34- **Deliverable** — files, or placed directly into the document if there is one.3536## 3. Confirm the right company3738Names are ambiguous — "Mercury" is a bank, an insurer, and a marine-engine maker; big corporations have holding companies and divisions with different marks. The official website domain is the anchor: it settles which company is meant and becomes the source of truth for the current logo.3940- Check the user's context first: the target document, CRM, deal records, or conversation often identify the company outright.41- Unambiguous → state the assumption ("Assuming McDonald's Corporation, mcdonalds.com") and proceed.42- Ambiguous → present candidates (name, domain, one-line descriptor) and let the user pick, all ambiguous brands bundled into one question.43- **Larger sets (roughly 6+ brands)**: switch to a roster. Resolve every brand up front, then present one table — brand → entity → domain, with the ambiguous ones flagged and their candidates listed — for a single confirm-by-exception reply ("all good, but #7 is the insurer"). Never ask brand-by-brand; twenty serial questions is worse than the manual process this skill replaces.4445## 4. Source4647**Library first.** If the workspace has a `logo-library/` folder (or the user maintains one), use matching files and skip sourcing for those brands — each brand should cost sourcing effort once, ever. Save newly sourced originals back to the library.4849For the rest, work down this ladder per brand, stopping at a current, high-quality mark:50511. **Official brand/press page** on the confirmed domain (`site:<domain> brand assets`, "press kit", "media resources") — often has SVGs, all mark formats, and light/dark variants.522. **Wikipedia/Wikimedia Commons** — current logos as SVG, kept fresh by editors.533. **Community icon and vector libraries** published on public package registries — search the registry for the brand. Actively maintained collections of official vectors, and the reliable fallback in sandboxes where brand-kit downloads and logo CDNs are blocked (package registries usually aren't). Mostly icon-only marks — lockups and wordmarks generally need sources 1–2.544. **Logo APIs / web image search** (domain-keyed logo services, or a plain "<brand> logo svg" search) — most likely to be stale or doctored, so verify hard.555. **Browser automation — the true last resort.** If your environment has browser tooling (a scriptable browser, a browser extension, or computer-use), do what a human does: open the brand's site or an image search in the browser, find the best candidate, and save it — download it from within the page session or capture the asset the page itself loads. A real browser gets past bot walls that block plain HTTP fetches. Work read-only on public pages, honor the environment's permission prompts, and never bypass its security or data-protection controls — if the browser route is walled off too, fall back to handing the user URLs (below).5657**Freshness check, always.** Compare the candidate against what the company itself uses today (fetch the confirmed domain's homepage). Rebrands are common and old marks linger for years. If image fetches are blocked in your environment, verify by proxy: palette match against published brand colors and any recent rebrand news. Prefer SVG, then rasterize it:5859```bash60python3 scripts/logo_prep.py rasterize logo.svg logo.png --width 200061```6263This installs nothing — it uses whichever renderer the machine already has (librsvg, ImageMagick, or headless Chrome) and names the options if it finds none. Two ways past a machine with no renderer: download a pre-rendered PNG instead of the SVG (Wikimedia serves any Commons SVG as a PNG at any width via its `/thumb/` URL), or hand the user the URL per the note below.6465Use your web search and page-fetch tools for discovery, then download the chosen asset. If a source is unreachable, move down the ladder rather than fighting it. For larger sets, source in one uninterrupted sweep (parallel where your environment allows) after the roster is confirmed — don't interleave questions with sourcing, and don't stall the batch on one stubborn brand: finish the rest and report the gap on the contact sheet.6667**When your environment can't download images at all** (some sandboxes allow search but block file downloads): don't stop at reporting the gap. Hand the user the exact asset URLs you found — one clickable link per missing brand, best candidate first — so they can save the file and drop it back to you in seconds. Then verify and process their file like any other candidate. A found-but-undownloadable logo is a 30-second human assist, not a failure.6869## 5. Verify7071Never trust a file's claims — run the bundled verifier on every candidate:7273```bash74python3 scripts/logo_prep.py verify candidate.png75```7677It reports whether transparency exists **and is actually used** (many "transparent" PNGs have a white background baked in), content bounding box, padding, and low-resolution flags. Fix problems by finding a better source before repairing a bad file.7879## 6. Process8081All in `scripts/logo_prep.py` (Python 3 + Pillow; `rasterize` is covered in step 4):8283- `trim in.png out.png` — crop to actual logo content + small margin. Do this before any sizing decision: padding varies wildly between files, so raw pixel dimensions lie.84- `remove-bg in.png out.png [--feather 30]` — make a near-white background transparent when no truly transparent source exists. Edges are ramped rather than cut, so anti-aliasing doesn't leave a pale rim on dark backgrounds; widen `--feather` if one still shows. Inspect the result; white internal detail can still be damaged.85- `recolor in.png out.png --color black|white|#hex` — flat mono versions (white = the reverse treatment) when the official variant isn't findable. Keeps the alpha silhouette. Logos relying on internal contrast (white text on a colored badge) can flatten into a blob — eyeball every conversion and flag doubtful ones on the contact sheet.86- `grayscale in.png out.png [--lighten N]` — desaturates while keeping tonal detail and transparency; different from flat black, and usually what "make them all grayscale" actually means. Prefer the brand's official one-color mark when one exists; derive only when it doesn't.87- `normalize a.png b.png --out prepared/ --size 260` — equalize *visual* scale across a set. Scales by content area (with aspect caps), not raw dimensions, so a wide wordmark and a square icon carry the same visual weight; outputs uniform-height canvases that drop into a row cleanly. This is the step that replaces resizing by eye.8889## 7. Contact sheet9091Before delivering or placing anything:9293```bash94python3 scripts/logo_prep.py contact-sheet prepared/ --out contact_sheet.html95```9697Every logo on light *and* dark backgrounds (transparency problems and white logos are invisible on white alone), with dimensions, transparency badge, and quality flags. The user approves or names the ones needing alternatives — sourcing judgment stays human. If a brand only yielded mediocre candidates, say so plainly. Working non-interactively: deliver the sheet with the outputs and note anything deserving a second look.9899One sheet per batch, however large — review is approve-by-exception ("all good" or "swap #4 and #11"), and a swap round redoes only the named logos, never the whole set. Whatever the set size, the user should hit exactly two checkpoints: the roster before sourcing, the contact sheet before delivery. Everything between runs without questions.100101## 8. Deliver102103- **Files**: processed set plus originals in `sources/`. Predictable names: `<brand>.png`, `<brand>-black.png`, `<brand>-white.png`, `<brand>-gray.png`, `<brand>-icon.png`. In the library, store each brand's best full-color transparent original (vector when possible) — black/white/grayscale derive from it on demand, so there's no need to hoard every variant. This is the universal deliverable — normalized transparent PNGs drop cleanly into PowerPoint, Google Slides, Keynote, Canva, Figma, or any other deck or design tool, already matched in visual scale so the user just places them.104- **Direct insertion**: when the destination is a file you can edit (PowerPoint, Word, PDF) or a tool you have a connector for (Google Slides, Canva, Figma), place the logos yourself: roughly 2× their display size for crispness, aligned at consistent heights on a shared row. Render or screenshot the result afterward and check it. When you can't edit the destination (a web editor with no connector), deliver the prepared files with a one-line placement note instead.105- **Shared asset library**: when a connector to the user's design platform exists (Canva, Figma, or similar), offer to upload the prepared set so the whole team reuses it instead of re-sourcing. Prefer a shared, searchable folder holding many brands over a single-brand identity kit — folders scale and are shareable, while identity kits are built for one brand's own assets and are often limited per plan. Mirror the local `logo-library/` file naming so the two stay in sync.106107## Dependencies108109Python 3 + `Pillow` (`pip install pillow`) — everything in `scripts/logo_prep.py`.110SVG rasterizing uses whichever renderer is already installed — `rsvg-convert`, `magick`,111or headless Chrome.112This skill installs nothing; if no renderer is present, `rasterize` says so and names the113options. Run `python3 scripts/selftest.py` to check an environment.114115## Usage note116117This skill retrieves publicly available brand assets. All logos and trademarks remain the property of their respective owners; users are responsible for ensuring their use complies with trademark/copyright law and each brand's guidelines. Intended for internal reference use (e.g., internal presentations) — external or commercial use of a third party's logo generally requires permission. Informational, not legal advice.