@loupe-lab/lsi
v0.3.3
Published
Loupe Style Intelligence - A deterministic imaging engine for photographic style analysis.
Maintainers
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
sharpadapter - 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/lsiArchitecture
Image files / Assets
|
v
ImageLoader + Metadata readers
|
v
Asset
|
v
Engine
|
v
Analyzers -> Metrics -> Classifiers -> Descriptors
|
v
StyleDNAMetadata 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 4173Open 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.lightingdna.colourdna.tonedna.whiteBalance
It also provides:
dna.summarydna.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