Real brand marks, fetched properly: the right variant for the background, a real SVG renderer, and the licence recorded next to the file. Never generate, trace or approximate a company's logo.
Commands
python3 scripts/icons.py search copilot # ranked: slug · title · licence · variants
python3 scripts/icons.py info github-copilot # full registry entry + plain-language usage note
python3 scripts/icons.py fetch claude openai cursor --out assets/icons --theme light
python3 scripts/icons.py sheet claude openai cursor --out preview.png --bg "#EEF1EC"
python3 scripts/icons.py credits assets/icons --md # attribution table for a README / video description
fetchwrites<slug>.svgand a transparent 512 px<slug>.png(use--png Nfor other sizes), plusicons.jsonwith the title, variant, source URL, licence and brand URL.--theme light|darkis the background the icon will sit on. It picks thesvg'slight/darkvariant when there is one, and falls back todefault, thenmono.sheetis the quick visual check. Look at it before using icons in a design. Single-colour marks that would vanish on the chosen background are tinted to ink or paper, except no-derivatives marks.
Workflow
- Resolve slugs with
search. Brands often have several entries (claude,claude-ai,claude-code;awsvsaws-amazon-q). Pick the one that matches what the copy says: for "works with Claude Code" useclaude-code. - Check the licence column before using an icon:
CC0/MIT/Apache-2.0/ISC/BSD: fine.CC-BY-*: credit it. ForND, don't recolour, crop or alter the mark.brand-use/Trademark: follow the brand's guidelines; use it only to refer to the product ("works with", "integrates with").Unknown: skipped by default. Use--allow-unknownonly if the user has the brand's permission.
- Fetch into the project's assets, then
sheetto review on the real background colour. - Credit: add the
credits --mdoutput wherever attribution belongs, such as the README, the video description, or a slide footer.
Using the files
- In framesmith templates,
framesmith.media.icon(svg_path, size, tint=None)loads the cached PNG, trimmed and squared, andis_light_mark(im)tells you whether a white mark needs tinting. Thenarrated-collage-explainericonsbeat uses these directly. - Anywhere else, use the SVG for web and vector work, and the PNG for raster pipelines.
Rules
- Real marks only. Don't redraw, "stylise" or AI-generate a brand's logo, and don't combine brand marks into new logos.
- Keep proportions, and don't add effects to a mark. Place icons on plain grounds, never inside pills or badges.
- One brand, one mark: don't mix a company's icon and wordmark in the same row.
Requirements
Python 3.9+, Pillow, numpy. For rendering, headless Chromium or Chrome is recommended (it handles gradients, clip paths and compact path syntax). Without it, the script falls back to cairosvg if installed, then ImageMagick, which fails on some icons. Snap-packaged Chromium can't see /tmp or hidden folders, so rendering is staged under ~/framesmith-svg-stage automatically.