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

@loupe-lab/lsi

v0.3.3

Published

Loupe Style Intelligence - A deterministic imaging engine for photographic style analysis.

Readme

Loupe Style Intelligence

Loupe Style Intelligence (LSI) is a deterministic TypeScript SDK for analyzing photographic style.

LSI works with an internal Image abstraction and produces a structured StyleDNA profile. It also includes optional infrastructure for loading image files, reading capture metadata, reading XMP sidecars, and composing these inputs into an Asset.

Features

  • Deterministic StyleDNA analysis
  • Lighting, colour, tone, and white balance descriptors
  • JPEG loading through a hidden sharp adapter
  • EXIF metadata reading
  • Lightroom / Camera Raw XMP sidecar reading
  • Asset model for pixels, capture metadata, and edit metadata
  • Batch directory and asset processing
  • TypeScript-first public API

Installation

npm install @loupe/lsi

Architecture

Image files / Assets
        |
        v
 ImageLoader + Metadata readers
        |
        v
      Asset
        |
        v
      Engine
        |
        v
Analyzers -> Metrics -> Classifiers -> Descriptors
        |
        v
     StyleDNA

Metadata and XMP are intentionally independent from StyleDNA. StyleDNA represents deterministic analysis of pixels.

Quick Start

import { Engine } from "@loupe/lsi";

const engine = new Engine();
const dna = await engine.analyzeFile("photo.jpg");

console.log(dna.summary);
console.log(dna.confidence.overall);

Browser Usage

Node consumers should use the package root:

import { Engine } from "@loupe/lsi";

Browser consumers should use the browser distribution:

import { Engine } from "@loupe/lsi/browser";

The browser entry point packages the browser-safe analysis API and avoids Node-only loading, metadata, and batch infrastructure.

Browser Smoke Test

The standalone browser smoke test verifies that the packaged browser distribution can be imported and can analyze a deterministic synthetic image without Loupe or external assets.

Build the package, then serve the repository root with any local static server:

npm run build
npm run build:browser
python3 -m http.server 4173

Open http://localhost:4173/examples/browser-smoke/. A successful run shows Success plus lighting, tone, colour, white balance, and confidence output.

StyleDNA

StyleDNA is the structured output of deterministic image analysis. It preserves individual descriptors and exposes convenient accessors:

  • dna.lighting
  • dna.colour
  • dna.tone
  • dna.whiteBalance

It also provides:

  • dna.summary
  • dna.getSummary()
  • dna.confidence

Capture metadata and XMP edit metadata are available through separate APIs and are not merged into StyleDNA.

Metadata

import { Engine } from "@loupe/lsi";

const engine = new Engine();
const metadata = await engine.readMetadata("photo.jpg");
const xmp = await engine.readXmp("photo.xmp");

Assets

Assets compose pixels, capture metadata, and edit metadata:

import { AssetLoader, Engine } from "@loupe/lsi";

const asset = await new AssetLoader().load("photo.jpg");
const dna = await new Engine().analyzeAsset(asset);

Missing metadata or XMP sidecars are represented as partial assets rather than hard failures.

Batch Analysis

import { Engine } from "@loupe/lsi";

const engine = new Engine();
const result = await engine.analyzeDirectory("photos", {
  recursive: true,
  parallelism: 2,
  continueOnError: true
});

console.log(result.summary);

Contributing

See CONTRIBUTING.md. Release checks are:

npm run build
npm run lint
npm test
npm run examples:check