npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

brandpull

v0.1.4

Published

Give agents instant branding visuals from websites

Readme

brandpull

Give your agents instant branding visuals from any public website.

Brandpull extracts clean branding JSON: logos, favicons, OG images, colors, fonts, typography, spacing, and component styles.

brandpull preview showing Exa branding tokens

Install

# Run without installing, using npm
npx brandpull https://exa.ai

# Or run with Bun
bunx brandpull https://exa.ai

# Install globally with npm
npm install -g brandpull

# Or install globally with Bun
bun install -g brandpull

Quick Start

# Extract branding JSON, save it, and open the local preview
brandpull https://exa.ai

# Save to a custom file
brandpull https://exa.ai -o exa-branding.json

# Reopen an existing branding JSON file
brandpull preview exa-branding.json

For Agents

Use --no-preview when an agent needs the branding JSON without starting the local HTML preview server.

brandpull https://exa.ai --no-preview

The default command is human-friendly and opens the preview. The --no-preview flag keeps it automation-friendly while still saving the JSON file.

Branding Commands

brandpull <url> [options]
brandpull branding <url> [options]
brandpull brand <url> [options]
brandpull preview <file.json> [options]

Options:

-o, --out <file>    Write branding JSON to a file instead of stdout
--web-preview       Open a local browser preview for the branding JSON
--no-preview        Save JSON without starting the local preview server
--preview-port <n>  Preferred preview server port (default: 4177)
--no-open           Start preview server without opening a browser
--llm               Use optional OpenAI enhancement when OPENAI_API_KEY is set
--raw               Include raw logo/button/background candidates
--wait <ms>         Extra page settle wait (default: 2000)
--timeout <ms>      Page navigation timeout (default: 30000)

If the preview port is already busy, brandpull automatically tries the next port.

Examples

# Save exa-ai-branding.json and open the preview
brandpull https://exa.ai

# Save the branding profile
brandpull branding https://ramp.com -o ramp-branding.json

# Capture debug candidates and inspect them visually
brandpull branding https://exa.ai --raw --web-preview

# Preview a local JSON file without scraping again
brandpull preview ramp-branding.json

# Use the optional LLM cleanup pass
OPENAI_API_KEY=... brandpull branding https://linear.app --llm -o linear-branding.json

How Branding Works

Branding mode renders the page in Chromium, waits for it to settle, then collects computed styles and page metadata from the live DOM. It pulls logo candidates from images and SVGs, captures favicons and OG images, samples colors from real elements, reads typography stacks, and snapshots buttons/inputs with their rendered CSS.

The processor then scores those candidates into a stable profile. If navigation, image loading, or optional LLM enhancement fails, the command still returns JSON with diagnostics so you can see what happened in the preview.

Output Shape

{
  "brandName": "Exa",
  "url": "https://exa.ai/",
  "logo": "https://exa.ai/...",
  "images": {
    "favicon": "https://exa.ai/favicon.ico",
    "ogImage": "https://exa.ai/..."
  },
  "colors": {
    "primary": "#ffffff",
    "accent": "#e5e5e5",
    "background": "#0a0a0a",
    "textPrimary": "#ffffff"
  },
  "fonts": [],
  "typography": {},
  "components": {},
  "confidence": {}
}

Requirements

  • Node.js 20+
  • Playwright browser dependencies for rendered branding extraction

Bun is only used for local development and publishing builds.

License

MIT