{"_id":"@behold/sharp-vibrant","name":"@behold/sharp-vibrant","dist-tags":{"latest":"0.2.1"},"versions":{"0.2.1":{"name":"@behold/sharp-vibrant","version":"0.2.1","description":"Extract prominent colors from an image in a node environment using sharp.","main":"lib/index.js","types":"lib/index.d.ts","dependencies":{"@types/node":"^20.8.10","sharp":"^0.32.6"},"devDependencies":{"@types/chai":"^4.3.9","@types/lodash":"^4.14.200","@types/mocha":"^10.0.3","@typescript-eslint/eslint-plugin":"^6.9.1","@typescript-eslint/parser":"^6.9.1","chai":"^4.3.10","eslint":"^8.52.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-airbnb-typescript":"^17.1.0","eslint-import-resolver-typescript":"^3.6.1","eslint-plugin-import":"^2.29.0","lodash":"^4.17.21","mocha":"^10.2.0","rimraf":"^5.0.5","table":"^6.8.1","ts-loader":"^9.5.0","ts-node":"^10.9.1","typescript":"^5.2.2"},"scripts":{"clean":"npm run clean:node","clean:node":"rimraf lib","lint":"eslint --ext .js,.jsx,.ts,.tsx --cache ./src/","build":"npm run build:node","build:node":"tsc","test":"npm run test:node","test:node":"mocha --require ts-node/register src/test/**/*.spec.ts","sample:inspect":"cd fixtures/sample; npm run start","sample:update":"cd fixtures/sample; npm run update","prepublishOnly":"npm run clean && npm run build"},"author":{"name":"Griffin Johnston"},"license":"MIT","_id":"@behold/sharp-vibrant@0.2.1","gitHead":"2f536b578c19ee099cbcf34b0d3a6caa737e56cc","_nodeVersion":"20.5.1","_npmVersion":"9.8.0","dist":{"integrity":"sha512-GvJYf7izZNPIcWonYVoS9TXuFd7mS9WKDtP2fnHx2qf9KBKe96E46UBW9Hrp2dkv/GuPf1mssX6DtmFFYlhHiQ==","shasum":"e6c2844fa3d39212fc142324a3ee72f5aef8b576","tarball":"https://registry.npmjs.org/@behold/sharp-vibrant/-/sharp-vibrant-0.2.1.tgz","fileCount":83,"unpackedSize":603676,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3PBqEMkth9gWjcld6GPc2m7FX04F0Kzed+NqMo0YW/AiEAtbHdvNwfQkjRiG7o8jMYTT3rcgObUT0eu98QimAAyNE="}]},"_npmUser":{"name":"griffinjohnston","email":"griffinjohnston@gmail.com"},"directories":{},"maintainers":[{"name":"griffinjohnston","email":"griffinjohnston@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sharp-vibrant_0.2.1_1699041568033_0.6481166757891381"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-03T19:59:27.917Z","0.2.1":"2023-11-03T19:59:28.316Z","modified":"2023-11-03T19:59:28.598Z"},"maintainers":[{"name":"griffinjohnston","email":"griffinjohnston@gmail.com"}],"description":"Extract prominent colors from an image in a node environment using sharp.","author":{"name":"Griffin Johnston"},"license":"MIT","readme":"# sharp-vibrant\n\nExtract prominent colors from an image in nodejs using [sharp](https://sharp.pixelplumbing.com/) for image loading/processing.\n\nThis is a fork of [node-vibrant](https://github.com/Vibrant-Colors/node-vibrant) that reduces dependencies/complexity at the cost of absolutely no browser support. This fork was created for internal use and is not published to any package manager.\n\n## Usage\n### node.js\n\n```js\n// ES5\nvar Vibrant = require('sharp-vibrant')\n// ES6\nimport * as Vibrant from '@livechart/sharp-vibrant'\n// TypeScript\nimport Vibrant = require('@livechart/sharp-vibrant')\n\n// Using builder\nVibrant.from('path/to/image').getPalette((err, palette) => console.log(palette))\n// Promise\nVibrant.from('path/to/image').getPalette()\n  .then((palette) => console.log(palette))\n\n// Using constructor\nlet v = new Vibrant('path/to/image', opts)\nv.getPalette((err, palette) => console.log(palette))\n// Promise\nv.getPalette().then((palette) => console.log(palette))\n```\n\n## Contribution Guidelines\n1. Make changes\n2. Write test specs if necessary\n3. Pass tests\n4. Commit **source files only** (without compiled files)\n\n## References\n\n### `Vibrant`\nMain class of `sharp-vibrant`.\n\n#### `Vibrant.from(src: ImageSource): Builder`\nMake a `Builder` for an image. Returns a `Builder` instance.\n\n#### `constructor(src: ImageSource, opts: Partial<Options>)`\n\nName    |  Description\n------- |  ---------------------------------------\n`image` |  Path to image file (support HTTP/HTTPs)\n`opts`  |  Options (optional)\n\n##### `ImageSource`\n\n```ts\nexport type ImageSource = string | Buffer\n```\n\n##### `Options`\n\n```ts\nexport interface Options {\n    colorCount: number\n    quality: number\n    maxDimension: number\n    filters: Array<Filter>\n    ImageClass: ImageClass\n    quantizer: Quantizer\n    generator?: Generator\n}\n```\n\nField          | Default                         | Description\n-------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------------------------------\n`colorCount`   | 64                              | amount of colors in initial palette from which the swatches will be generated\n`quality`      | 5                               | Scale down factor used in downsampling stage. `1` means no downsampling. If `maxDimension` is set, this value will not be used.\n`maxDimension` | `undefined`                     | The max size of the image's longer side used in downsampling stage. This field will override `quality`.\n`filters`      | `[]`                            | An array of filters\n`ImageClass`   | `Image.Node`                    | An `Image` implementation class\n`quantizer`    | `Vibrant.Quantizer.MMCQ`        | A `Quantizer` implementation class\n`generator`    | `Vibrant.Generator.Default`     | An `Generator` instance\n\n##### `Resolvable<T>`\n\n```ts\nexport type Resolvable<T> = T | Promise<T>\n```\n\n##### `Quantizer`\n\n```ts\nexport interface Quantizer {\n    (pixels: Pixels, opts: Options): Resolvable<Array<Swatch>>\n}\n```\n\n##### `Generator`\n\n```ts\nexport interface Generator {\n    (swatches: Array<Swatch>, opts?: Object): Resolvable<Palette>\n}\n```\n\n##### `Filter`\n\nReturns `true` if the color is to be kept.\n\n```ts\nexport interface Filter {\n    (red: number, green: number, blue: number, alpha: number): boolean\n}\n```\n\n##### `getPalette(cb?: Callback<PaletteResult>): Promise<PaletteResult>`\n\nName | Description\n---- | -----------------\n`cb` | (Optional) callback function. Can be omitted when using `Promise`.\n\n##### `Callback<T>`\n\n```ts\nexport interface Callback<T> {\n    (err?: Error, result?: T): void\n}\n```\n\n##### `ImageDimensions`\n\n```ts\ninterface ImageDimensions {\n    readonly width: number\n    readonly height: number\n}\n```\n\n##### `PaletteResult`\n\n```ts\ninterface PaletteResult {\n    readonly pixelCount: number\n    readonly imageDimensions: ImageDimensions\n    readonly palette: Palette\n}\n```\n\n#### `Vibrant.Builder`\nHelper class for change configurations and create a `Vibrant` instance. Methods of a `Builder` instance can be chained like:\n\n```ts\nVibrant.from(src)\n  .quality(1)\n  .clearFilters()\n  // ...\n  .getPalette()\n  .then((paletteResult) => {})\n```\n\n#### `constructor(src: ImageSource, opts: Partial<Options>)`\nArguments are the same as `Vibrant.constructor`.\n\n#### `quality(q: number): Builder`\nSets `opts.quality` to `q`. Returns this `Builder` instance.\n\n#### `maxColorCount(n: number): Builder`\nSets `opts.colorCount` to `n`. Returns this `Builder` instance.\n\n#### `maxDimension(d: number): Builder`\nSets `opts.maxDimension` to `d`. Returns this `Builder` instance.\n\n#### `addFilter(f: Filter): Builder`\nAdds a filter function. Returns this `Builder` instance.\n\n#### `removeFilter(f: Filter): Builder`\nRemoves a filter function. Returns this `Builder` instance.\n\n#### `clearFilters(): Builder`\nClear all filters. Returns this `Builder` instance.\n\n#### `useImageClass(imageClass: ImageClass): Builder`\nSpecifies which `Image` implementation class to use. Returns this `Builder` instance.\n\n#### `useQuantizer(quantizer: Quantizer): Builder`\nSpecifies which `Quantizer` implementation class to use. Returns this `Builder` instance.\n\n#### `useGenerator(generator: Generator): Builder`\nSets `opts.generator` to `generator`. Returns this `Builder` instance.\n\n#### `build(): Vibrant`\nBuilds and returns a `Vibrant` instance as configured.\n\n#### `getPalette(cb?: Callback<PaletteResult>): Promise<PaletteResult>`\nBuilds a `Vibrant` instance as configured and calls its `getPalette` method.\n\n### `Vibrant.Swatch`\nRepresents a color swatch generated from an image's palette.\n\n#### `Vec3`\n\n```ts\nexport interface Vec3 extends Array<number> {\n    0: number,\n    1: number,\n    2: number\n}\n```\n\n#### `constructor(rgb: Vec3, population: number)`\nInternal use.\n\nName         | Description\n------------ | -----------------------------------\n`rgb`        | `[r, g, b]`\n`population` | Population of the color in an image\n\n#### `getHsl(): Vec3`\n#### `getPopulation(): number`\n#### `getRgb(): Vec3`\n#### `getHex(): string`\n#### `getTitleTextColor(): string`\nReturns an appropriate color to use for any 'title' text which is displayed over this `Swatch`'s color.\n\n#### `getBodyTextColor(): string`\nReturns an appropriate color to use for any 'body' text which is displayed over this `Swatch`'s color.\n\n### `Vibrant.Util`\nUtility methods. Internal usage.\n\n#### `hexToRgb(hex: string): Vec3`\n#### `rgbToHex(r: number, g: number, b: number): string`\n#### `hslToRgb(h: number, s: number, l: number): Vec3`\n#### `rgbToHsl(r: number, g: number, b: number): Vec3`\n#### `xyzToRgb(x: number, y: number, z: number): Vec3`\n#### `rgbToXyz(r: number, g: number, b: number): Vec3`\n#### `xyzToCIELab(x: number, y: number, z: number): Vec3`\n#### `rgbToCIELab(l: number, a: number, b: number): Vec3`\n#### `deltaE94(lab1: number, lab2: number): number`\nComputes CIE delta E 1994 diff between `lab1` and `lab2`. The 2 colors are in CIE-Lab color space. Used in tests to compare 2 colors' perceptual similarity.\n\n#### `rgbDiff(rgb1: Vec3, rgb2: Vec3): number`\nCompute CIE delta E 1994 diff between `rgb1` and `rgb2`.\n\n#### `hexDiff(hex1: string, hex2: string): number`\nCompute CIE delta E 1994 diff between `hex1` and `hex2`.\n\n#### `getColorDiffStatus(d: number): string`\nGets a string to describe the meaning of the color diff. Used in tests.\n\nDelta E  | Perception                             | Returns\n-------- | -------------------------------------- | -----------\n<= 1.0   | Not perceptible by human eyes.         | `\"Perfect\"`\n1 - 2    | Perceptible through close observation. | `\"Close\"`\n2 - 10   | Perceptible at a glance.               | `\"Good\"`\n11 - 49  | Colors are more similar than opposite  | `\"Similar\"`\n50 - 100 | Colors are exact opposite              | `Wrong`\n\n## NPM Tasks\n\nTask            | Description\n--------------- | --------------------------------------\n`build:node`    | Build node.js target\n`build`         | Build all targets\n`clean:node`    | Clean node.js build\n`clean`         | Clean all builds\n`test:node`     | Run node.js specs (mocha)\n`test`          | Run all specs\n","readmeFilename":"README.md"}