{"_id":"@acdvorak/edid-parser-ts","_rev":"3-86ed076d1e1905529f87f43e9c929c14","name":"@acdvorak/edid-parser-ts","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@acdvorak/edid-parser-ts","version":"1.0.0","author":{"name":"Andrew C. Dvorak","email":"andy@andydvorak.net"},"license":"MIT","_id":"@acdvorak/edid-parser-ts@1.0.0","maintainers":[{"name":"acdvorak","email":"acdvorak@gmail.com"}],"homepage":"https://github.com/acdvorak/edid-parser-ts#readme","bugs":{"url":"https://github.com/acdvorak/edid-parser-ts/issues"},"dist":{"shasum":"672aaffbac381ef041240fb2095f79615acd05de","tarball":"https://registry.npmjs.org/@acdvorak/edid-parser-ts/-/edid-parser-ts-1.0.0.tgz","fileCount":11,"integrity":"sha512-9VWNBAfAf7Jb6ssHFzf3c1TcyUIZgHK0c1gEOPmqFJUvK5z2jC3/BtSy6rjxQhzqk4UfPGopC/zrupQa7DTAIg==","signatures":[{"sig":"MEUCIH1GTivUilQwUrLQwWWq1wzSEAwDy7XC487d933p/6xyAiEA/AaxPJH4+P4bXXWIyofq4mvaYP9O4zsnt7b+NOFMkRA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1520830},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"cf5075882afb4aeceb43ec83c9ea8c55cf56b677","private":false,"scripts":{"dev":"tsdown --watch","lint":"eslint --cache .","test":"vitest run","build":"tsdown","clean":"rimraf dist/ out/ .tsbuildcache/ .eslintcache","format":"npm-run-all format:prettier format:eslint format:prettier","update":"tsx src/scripts/update-vid-dbs.ts","test:dev":"vitest","typecheck":"tsc --build --noEmit tsconfig.json","format:eslint":"eslint --cache --fix .","prepublishOnly":"npm run build","format:prettier":"prettier --write ."},"_npmUser":{"name":"acdvorak","email":"acdvorak@gmail.com"},"repository":{"url":"git+https://github.com/acdvorak/edid-parser-ts.git","type":"git"},"_npmVersion":"11.10.0","description":"Pure TypeScript EDID parser with zero dependencies. Supports all JS runtimes (Node, browser, Deno, Bun, etc.).","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jiti":"^2.6.1","bumpp":"^10.3.2","eslint":"^9.39.2","rimraf":"^6.1.2","tsdown":"^0.18.1","vitest":"^4.0.16","cheerio":"^1.2.0","outdent":"^0.8.0","prettier":"^3.8.1","deepmerge":"^4.3.1","titlecase":"^1.1.3","type-fest":"^5.4.4","@eslint/js":"^9.39.2","sort-jsonc":"^1.0.2","typescript":"^5.9.3","@types/node":"^22.19.7","npm-run-all":"^4.1.5","@eslint/core":"^1.1.0","@fast-csv/parse":"^5.0.5","@types/titlecase":"^1.1.2","typescript-eslint":"^8.55.0","eslint-plugin-import":"^2.32.0","eslint-import-context":"^0.2.0","eslint-plugin-command":"^3.4.0","prettier-plugin-curly":"^0.4.1","eslint-config-prettier":"^10.1.8","@typescript-eslint/utils":"^8.55.0","eslint-plugin-simple-import-sort":"^12.1.1","@typescript-eslint/typescript-estree":"^8.55.0"},"_npmOperationalInternal":{"tmp":"tmp/edid-parser-ts_1.0.0_1771134751785_0.001987541796491632","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@acdvorak/edid-parser-ts","version":"1.1.0","author":{"name":"Andrew C. Dvorak","email":"andy@andydvorak.net"},"license":"MIT","_id":"@acdvorak/edid-parser-ts@1.1.0","maintainers":[{"name":"acdvorak","email":"acdvorak@gmail.com"}],"homepage":"https://github.com/acdvorak/edid-parser-ts#readme","bugs":{"url":"https://github.com/acdvorak/edid-parser-ts/issues"},"dist":{"shasum":"09c77f321bb78df554de0115bc2f69ddc7fae12d","tarball":"https://registry.npmjs.org/@acdvorak/edid-parser-ts/-/edid-parser-ts-1.1.0.tgz","fileCount":11,"integrity":"sha512-zH2sdxgMHE0Wz7y915OvC2z0F/hXtPdM47iGcAXsZL6KL/3qj9D2t9lYqByLL7IuIBLA8dmIbwtp2/qFvujXvA==","signatures":[{"sig":"MEQCICQ5xlx/eHZv7g25PNjaV0X0zStNr3XXKtrmPfHs50KuAiAlsnkSQePDbi/S/AghiIN/FK4gITYCjGTWho3Y5mRxrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1560660},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.cts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"./package.json":"./package.json"},"gitHead":"660e4c55889bfe098c77f7cad0cdc3bfeaae4ade","private":false,"scripts":{"dev":"tsdown --watch","lint":"eslint --cache .","test":"vitest run","build":"tsdown","clean":"rimraf dist/ out/ .tsbuildcache/ .eslintcache","format":"npm-run-all format:prettier format:eslint format:prettier","update":"tsx src/scripts/update-vid-dbs.ts","test:dev":"vitest","typecheck":"tsc --build --noEmit tsconfig.json","format:eslint":"eslint --cache --fix .","prepublishOnly":"npm run build","format:prettier":"prettier --write ."},"_npmUser":{"name":"acdvorak","email":"acdvorak@gmail.com"},"repository":{"url":"git+https://github.com/acdvorak/edid-parser-ts.git","type":"git"},"_npmVersion":"11.10.0","description":"Pure TypeScript EDID parser with zero dependencies. Exports ESM and CJS and supports all JS runtimes (Node, browser, Deno, Bun, etc.).","directories":{},"_nodeVersion":"24.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jiti":"^2.6.1","bumpp":"^10.3.2","eslint":"^9.39.2","rimraf":"^6.1.2","tsdown":"^0.18.1","vitest":"^4.0.16","cheerio":"^1.2.0","outdent":"^0.8.0","prettier":"^3.8.1","deepmerge":"^4.3.1","titlecase":"^1.1.3","type-fest":"^5.4.4","@eslint/js":"^9.39.2","sort-jsonc":"^1.0.2","typescript":"^5.9.3","@types/node":"^22.19.7","npm-run-all":"^4.1.5","@eslint/core":"^1.1.0","@fast-csv/parse":"^5.0.5","@types/titlecase":"^1.1.2","typescript-eslint":"^8.55.0","eslint-plugin-import":"^2.32.0","eslint-import-context":"^0.2.0","eslint-plugin-command":"^3.4.0","prettier-plugin-curly":"^0.4.1","eslint-config-prettier":"^10.1.8","@typescript-eslint/utils":"^8.55.0","eslint-plugin-simple-import-sort":"^12.1.1","@typescript-eslint/typescript-estree":"^8.55.0"},"_npmOperationalInternal":{"tmp":"tmp/edid-parser-ts_1.1.0_1771214644763_0.8965398676021525","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@acdvorak/edid-parser-ts","type":"module","version":"1.1.1","description":"Pure TypeScript EDID parser with zero dependencies. Exports ESM and CJS and supports all JS runtimes (Node, browser, Deno, Bun, etc.).","author":{"name":"Andrew C. Dvorak","email":"andy@andydvorak.net"},"license":"MIT","private":false,"publishConfig":{"access":"public"},"homepage":"https://github.com/acdvorak/edid-parser-ts#readme","repository":{"type":"git","url":"git+https://github.com/acdvorak/edid-parser-ts.git"},"bugs":{"url":"https://github.com/acdvorak/edid-parser-ts/issues"},"exports":{".":{"require":"./dist/index.cjs","import":"./dist/index.mjs"},"./package.json":"./package.json"},"main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.cts","scripts":{"build":"tsdown","clean":"rimraf dist/ out/ .tsbuildcache/ .eslintcache","format":"npm-run-all format:prettier format:eslint format:prettier","format:prettier":"prettier --write .","format:eslint":"eslint --cache --fix .","lint":"eslint --cache .","dev":"tsdown --watch","test":"vitest run","test:dev":"vitest","typecheck":"tsc --build --noEmit tsconfig.json","update":"tsx src/scripts/update-vid-dbs.ts","prepublishOnly":"npm run build"},"devDependencies":{"@eslint/core":"^1.1.0","@eslint/js":"^9.39.2","@fast-csv/parse":"^5.0.5","@types/node":"^22.19.7","@types/titlecase":"^1.1.2","@typescript-eslint/typescript-estree":"^8.55.0","@typescript-eslint/utils":"^8.55.0","bumpp":"^10.3.2","cheerio":"^1.2.0","deepmerge":"^4.3.1","eslint":"^9.39.2","eslint-config-prettier":"^10.1.8","eslint-import-context":"^0.2.0","eslint-plugin-command":"^3.4.0","eslint-plugin-import":"^2.32.0","eslint-plugin-simple-import-sort":"^12.1.1","jiti":"^2.6.1","npm-run-all":"^4.1.5","outdent":"^0.8.0","prettier":"^3.8.1","prettier-plugin-curly":"^0.4.1","rimraf":"^6.1.2","sort-jsonc":"^1.0.2","titlecase":"^1.1.3","tsdown":"^0.18.1","tsx":"^4.21.0","type-fest":"^5.4.4","typescript":"^5.9.3","typescript-eslint":"^8.55.0","vitest":"^4.0.16"},"gitHead":"9cb06d598edf569a715c9d9d0eb94239c524b4be","_id":"@acdvorak/edid-parser-ts@1.1.1","_nodeVersion":"24.11.0","_npmVersion":"11.10.0","dist":{"integrity":"sha512-Ew9ppb8/dXFTLogW0T628rsqgSNnDgJPmnTtu4d0FsrbOAiob7P2C5LW96jn0hduvvag4msIZQxyS/oIqlGSCQ==","shasum":"5dc2935e1e3ae87d972b6b82d71e85988bd32b6d","tarball":"https://registry.npmjs.org/@acdvorak/edid-parser-ts/-/edid-parser-ts-1.1.1.tgz","fileCount":11,"unpackedSize":1560658,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAyWPbNAo70Txgm0opRBXF66Hr1tQykMNJ5uirVHmftIAiAMT2x8FZTM5g4w5PWGkCdVfeS2dQ3Ynw+MKlRzTIzTLg=="}]},"_npmUser":{"name":"acdvorak","email":"acdvorak@gmail.com"},"directories":{},"maintainers":[{"name":"acdvorak","email":"acdvorak@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/edid-parser-ts_1.1.1_1771216708087_0.44709917177627734"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-15T05:52:31.711Z","modified":"2026-02-16T04:38:28.387Z","1.0.0":"2026-02-15T05:52:31.976Z","1.1.0":"2026-02-16T04:04:04.974Z","1.1.1":"2026-02-16T04:38:28.281Z"},"bugs":{"url":"https://github.com/acdvorak/edid-parser-ts/issues"},"author":{"name":"Andrew C. Dvorak","email":"andy@andydvorak.net"},"license":"MIT","homepage":"https://github.com/acdvorak/edid-parser-ts#readme","repository":{"type":"git","url":"git+https://github.com/acdvorak/edid-parser-ts.git"},"description":"Pure TypeScript EDID parser with zero dependencies. Exports ESM and CJS and supports all JS runtimes (Node, browser, Deno, Bun, etc.).","maintainers":[{"name":"acdvorak","email":"acdvorak@gmail.com"}],"readme":"# @acdvorak/edid-parser-ts\n\n**Pure TypeScript EDID parser** with _zero dependencies_.\n\nExports ESM and CJS bundles.\n\nSupports _all JS runtimes_ (Node, browser, Deno, Bun, etc.).\n\n## Contributing\n\nThis library is a passion project I wrote in my spare time. It's a hobby, not a\njob.\n\nIssues and pull requests are welcome, but don't be offended if you don't receive\na timely response. It probably just means I'm busy with family, work, and life.\n\n## Usage\n\nThis library exports two API functions:\n\n- `parseEdid(bytes)` - Fully decodes EDID blocks, including CTA-861 extensions,\n  colorimetry, and HDR static/dynamic metadata.\n- `getVendorInfo(vid)` - Returns the name of the display manufacturer.\n  - Well-known or notable display vendors have short, UI-friendly brand names\n    (e.g., \"Samsung\" instead of \"Samsung Electronics Co., Ltd.\"), sourced from\n    several manually-curated lists.\n  - Less-common display vendors return whatever's in the official UEFI registry.\n\nExample:\n\n```ts\nimport { getVendorInfo, parseEdid } from '@acdvorak/edid-parser-ts';\n\n/** Samsung S95C, model QN65S95CAF, ca. 2023. HDR10+, VRR, 144 Hz. */\nconst SAMSUNG_S95C_EDID_BYTES = new Uint8Array([\n  0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x4c, 0x2d, 0xa5, 0x73, 0x00,\n  // ...\n]);\n\nconst parsedEdid = parseEdid(SAMSUNG_S95C_EDID_BYTES);\n\nconsole.log(getVendorInfo('SAM'));\nconsole.log(parsedEdid);\n```\n\nwill output:\n\n```js\n{ vid: 'SAM', goodName: 'Samsung' }\n```\n\n```jsonc\n{\n  \"featureSupport\": {\n    \"hdmiVersion\": 2.1,\n    \"edidVersion\": 1.3,\n\n    // DisplayID is the modern successor to EDID.\n    // When present, it is stored as an extension block inside an EDID.\n    \"displayIdVersion\": 1.2,\n\n    // Range of the color palette — i.e., the outer limits of which colors the\n    // display can hit (gamut/primaries), not the HDR tone curve.\n    \"colorGamuts\": [\"srgb\", \"display_p3\", \"rec_2020\"],\n\n    // Bit depth = how finely the display can shade within the active gamut.\n    \"maxInputSignalBitDepth\": 12,\n\n    // HDR support\n    \"supportsHDR10\": true,\n    \"supportsHDR10Plus\": true,\n    \"supportsDolbyVision\": false,\n\n    // Manual Low-Latency Mode\n    \"supportsGameMode\": true,\n\n    // Auto Low-Latency Mode (auto-detect video game consoles)\n    \"supportsALLM\": true,\n\n    // Standard/Static Refresh Rate\n    \"minSrrHz\": 48,\n    \"maxSrrHz\": 144,\n\n    // Variable Refresh Rate\n    \"supportsVRR\": true,\n    \"minVrrHz\": 48,\n    \"maxVrrHz\": 144,\n  },\n\n  \"vendorInfo\": {\n    \"vid\": \"SAM\",\n    \"goodName\": \"Samsung\",\n  },\n\n  \"productInfo\": {\n    \"productCode\": 29605,\n    \"serialNumberInt\": 16780800,\n    \"serialNumberStr\": \"...\",\n    \"modelName\": \"QCQ95S\",\n    \"manufactureWeek\": 1,\n    \"manufactureYear\": 2023,\n  },\n\n  \"basicDisplayParams\": {\n    \"physicalWidthInMm\": 1420,\n    \"physicalHeightInMm\": 800,\n    \"diagonalInches\": 64.2,\n  },\n\n  \"nativeResolution\": {\n    \"activeHorizontalPixels\": 3840,\n    \"activeVerticalLines\": 2160,\n    \"physicalWidthInMm\": 1872,\n    \"physicalHeightInMm\": 1053,\n    \"diagonalInches\": 84.6,\n    \"isInterlaced\": false,\n    \"refreshRateHz\": 60,\n  },\n\n  \"baseBlock\": {\n    \"vendorId\": \"SAM\",\n\n    \"standardDisplayModes\": [\n      {\n        \"xResolution\": 1280,\n        \"xyPixelRatio\": 3,\n        \"vertFreqHz\": 60,\n      },\n      // ...\n      {\n        \"xResolution\": 1920,\n        \"xyPixelRatio\": 3,\n        \"vertFreqHz\": 60,\n      },\n    ],\n\n    \"dtds\": [\n      {\n        \"horizontalActivePixels\": 3840,\n        \"verticalActivePixels\": 2160,\n        \"horizontalDisplaySizeInMm\": 1872,\n        \"verticalDisplaySizeInMm\": 1053,\n        \"isInterlaced\": false,\n        \"stereoModeCode\": 0,\n        \"syncTypeCode\": 3,\n      },\n      {\n        \"horizontalActivePixels\": 2560,\n        \"verticalActivePixels\": 1440,\n        \"horizontalDisplaySizeInMm\": 1872,\n        \"verticalDisplaySizeInMm\": 1053,\n        \"isInterlaced\": false,\n        \"stereoModeCode\": 0,\n        \"syncTypeCode\": 3,\n      },\n    ],\n  },\n\n  \"extensions\": [\n    {\n      \"extTagByte\": 2,\n      \"revisionNumber\": 3,\n      \"supportsUnderscan\": true,\n      \"supportsBasicAudio\": true,\n      \"supportsYCbCr444\": true,\n      \"supportsYCbCr422\": true,\n      \"extensionType\": \"cta-861\",\n      \"dataBlockCollection\": [\n        {\n          \"tag\": {\n            \"string\": \"EXTENDED TAG\",\n            \"value\": 7,\n          },\n          \"extendedTag\": {\n            \"string\": \"VIDEO CAPABILITY\",\n            \"value\": 0,\n          },\n          \"quantizationRangeYCC\": false,\n          \"quantizationRangeRGB\": true,\n          \"overscanPT\": \"No data\",\n          \"overscanIT\": \"Supports both overscan and underscan\",\n          \"overscanCE\": \"Supports both overscan and underscan\",\n        },\n        {\n          \"tag\": {\n            \"string\": \"EXTENDED TAG\",\n            \"value\": 7,\n          },\n          \"extendedTag\": {\n            \"string\": \"COLORIMETRY\",\n            \"value\": 5,\n          },\n          \"supportsBT2020RGB\": true,\n          \"supportsBT2020YCC\": true,\n          \"supportsBT2020cYCC\": false,\n          \"supportsAdobeRGB\": false,\n          \"supportsAdobeYCC601\": false,\n          \"supportssYCC601\": false,\n          \"supportsxvYCC709\": true,\n          \"supportsxvYCC601\": true,\n          \"gamutMD3\": 0,\n          \"gamutMD2\": 0,\n          \"gamutMD1\": 0,\n          \"gamutMD0\": 1,\n        },\n        {\n          \"tag\": {\n            \"string\": \"VENDOR SPECIFIC\",\n            \"value\": 3,\n          },\n          \"ieeeOui\": 3075,\n          \"physicalAddress\": 8192,\n          \"supportsAI\": true,\n          \"supportsDeepColor48\": false,\n          \"supportsDeepColor36\": true,\n          \"supportsDeepColor30\": true,\n          \"supportsDeepColorY444\": true,\n          \"supportsDualDvi\": false,\n        },\n        {\n          \"tag\": {\n            \"string\": \"VENDOR SPECIFIC\",\n            \"value\": 3,\n          },\n          \"ieeeOui\": 12869080,\n          \"hdmiForumFeatures\": {\n            \"isScdcPresent\": true,\n            \"supportsQMS\": true,\n            \"supportsALLM\": true,\n            \"supportsVESADSC12a\": true,\n            \"supportsCompressedVideo420\": true,\n            \"supportsQMSTFRmin\": true,\n            \"supports10bpcCompressedVideo\": true,\n          },\n          \"version\": 1,\n          \"maxTMDSCharacterRateMhz\": 600,\n          \"supportsSCDC\": true,\n          \"supportsSCDCRR\": false,\n          \"maxFixedRateLink\": \"4 lanes @ 10 Gbps\",\n          \"vrrMinHz\": 48,\n          \"vrrMaxHz\": 144,\n        },\n        {\n          \"tag\": {\n            \"string\": \"EXTENDED TAG\",\n            \"value\": 7,\n          },\n          \"extendedTag\": {\n            \"string\": \"HDR STATIC METADATA\",\n            \"value\": 6,\n          },\n          \"supportedEOTFs\": [\n            \"Traditional gamma - SDR luminance range\",\n            \"SMPTE ST2084 (PQ)\",\n            \"Hybrid Log-Gamma (HLG)\",\n          ],\n          \"supportedStaticMetadataDescriptors\": [\"Static Metadata Type 1\"],\n        },\n        {\n          \"tag\": {\n            \"string\": \"EXTENDED TAG\",\n            \"value\": 7,\n          },\n          \"extendedTag\": {\n            \"string\": \"YCBCR420_CAPABILITY_MAP\",\n            \"value\": 15,\n          },\n          \"YCbCr420CapableShortVideoDescriptors\": [\n            {\n              \"vic\": 97,\n              \"isNativeResolution\": false,\n            },\n            // ...\n          ],\n        },\n      ],\n    },\n  ],\n}\n```\n\n## What is EDID?\n\nEDID is a **small array of bytes**, hard-coded into a monitor or TV's firmware\nat manufacture time, that advertises which features a physical display\n**_claims_** to support.\n\n**Important**: EDID _cannot_ tell us anything about the current, active display\nmode, and it _cannot_ tell us whether a given display mode is actually usable\nwith the current setup. It can only tell us which display modes the monitor/TV\nis _probably_ capable of displaying IFF the GPU and cable can also deliver them.\n\n### Metadata\n\nFrom EDID you can _usually_ derive:\n\n- **Manufacturer ID** (Apple, Samsung, LG, etc.)\n- **Product ID**\n- **Serial number**\n- **Physical dimensions** (width and height in centimeters)\n- List of supported **resolutions**, **refresh rates**, pixel formats, and\n  colorimetry\n\nWith extension blocks, you may also see things like:\n\n- **Audio support** (codecs, channel counts, sample rates)\n- **Color spaces** (RGB / Y'CbCr variants)\n- **Deep color** and bits-per-channel _claims_\n- **HDR support** (HDR10, HDR10+, Dolby Vision, HLG)\n- **VRR support** (often via HDMI Forum VRR / Adaptive-Sync indicators rather\n  than a single universal flag)\n\n### Gotchas\n\n1. **Static metadata**: EDID bytes are effectively baked into the display's\n   firmware at manufacturing/assembly time: **they do not change** when the user\n   switches the current resolution/refresh/HDR mode, and they **do not tell you\n   the active mode** (only OS/GPU APIs can do that).\n2. **Unreliable values**: EDID data quality varies _wildly_. Blocks can be\n   incomplete, wrong, copy-pasted across models, updated in later revisions, or\n   even spoofed/overridden by docks, KVMs, adapters, and drivers. Do not assume\n   that EDID data is 100% accurate or trustworthy.\n3. **Non-unique**: EDIDs are not guaranteed to be globally unique. In\n   particular, serial numbers are often missing or duplicated.\n\nIf you need robust display identification and \"what's active right now?\"\nanswers, treat EDID as an identity _hint_ + capability _claims_, and combine it\nwith other signals (OS display IDs, connector/path info, sink OUI/vendor blocks,\nand runtime mode queries).\n\n## Vendor IDs\n\nPlug-n-Play Vendor IDs (aka PNP IDs or VIDs) are 3-letter codes that uniquely\nidentify the company that manufactured the display.\n\nVendor IDs consist of 3 uppercase Latin letters (A-Z). Manufacturers can and\noften do have multiple VIDs.\n\nFor example, the most common VIDs in consumer monitors/TVs are:\n\n| VID   | Manufacturer             |  Models |\n| :---- | :----------------------- | ------: |\n| `ACI` | Asus                     |  `5546` |\n| `ACR` | Acer                     |  `9266` |\n| `AOC` | AOC International        |  `7081` |\n| `APP` | Apple                    |  `1245` |\n| `AUO` | AU Optronics             |  `2103` |\n| `AUS` | Asus                     |  `4093` |\n| `BNQ` | BenQ                     |  `6499` |\n| `BBY` | Best Buy                 |   `283` |\n| `DEL` | Dell                     | `18260` |\n| `GBT` | Gigabyte                 |  `1052` |\n| `GSM` | LG                       | `14288` |\n| `HEC` | Hisense                  |   `437` |\n| `HPN` | Hewlett Packard          |  `3901` |\n| `HWP` | Hewlett Packard          |  `4938` |\n| `LCD` | Toshiba                  |   `165` |\n| `LEN` | Lenovo                   |  `3755` |\n| `LGD` | LG                       |  `1294` |\n| `LPL` | LG Philips               |   `190` |\n| `MEI` | Panasonic                |   `408` |\n| `MSI` | Micro-Star International |  `1963` |\n| `NEC` | NEC Corporation          |   `877` |\n| `PHL` | Philips                  |  `5920` |\n| `SAM` | Samsung                  | `18273` |\n| `SDC` | Samsung                  |   `331` |\n| `SHP` | Sharp                    |  `1260` |\n| `SNY` | Sony                     |  `1011` |\n| `TCL` | TCL Corporation          |   `585` |\n| `TOL` | TCL Corporation          |     `3` |\n| `TSB` | Toshiba                  |   `332` |\n| `VIZ` | Vizio                    |   `634` |\n| `VSC` | ViewSonic                |  `2733` |\n| `WOR` | Dell                     |   `132` |\n\n### VID database\n\nThere is no single canonical, correct, complete list of all known VIDs, so I\nmerged the following sources together and cleaned them up as best I could:\n\n1. My own custom list of manually-curated VIDs and short brand names for major\n   and notable manufacturers.\n2. [@linuxhw/EDID](https://github.com/linuxhw/EDID) - Repository of decoded\n   EDIDs from real-world digital and analog monitors, collected by Linux users\n   at [linux-hardware.org](https://linux-hardware.org).\n3. [Lansweeper Knowledge Base article](https://community.lansweeper.com/t5/managing-assets/list-of-3-letter-monitor-manufacturer-codes/ta-p/64429)\n4. [`pnp.ids` from @vcrhonek/hwdata](https://github.com/vcrhonek/hwdata/blob/428ad3882/pnp.ids) -\n   Derived from the \"official\" UEFI registry, with custom patches for\n   correctness/completeness.\n5. \"Official\" UEFI registry (incomplete and low quality):\n   - [CSV](https://uefi.org/UEFI-PNP-Export)\n   - [HTML](https://uefi.org/PNP_ID_List)\n   - [PDF](https://uefi.org/sites/default/files/resources/PNPID_List.pdf)\n\nThe `getVendorInfo(vid)` function searches each dataset for the corresponding ID\nand returns the \"highest-quality\" name it can find.\n\n### VID deprecation\n\nAccording to the\n[Unified Extensible Firmware Interface Forum](https://uefi.org/PNP_ACPI_Registry):\n\n> **Sunset of Vendor IDs in PnP Form**\n>\n> Starting at the end of 2024, the UEFI Forum no longer issues new 3-letter Plug\n> and Play (PnP) Vendor Identifiers (a \"VID\"). For ACPI implementation purposes,\n> a 4-letter ACPI ID can be used for all situations where the ID is needed, for\n> example in creating device identifiers.\n\nAs of early 2026, no manufacturers are using ACPI IDs yet; VIDs are still the\nstandard identifier used in all displays.\n\n## Development\n\nInstall dependencies:\n\n```bash\nnpm install\n```\n\nRun the unit tests:\n\n```bash\nnpm run test\n```\n\nBuild the library:\n\n```bash\nnpm run build\n```\n\nUpdate EDID vendor ID databases:\n\n```bash\nnpm run update\n```\n\n## Credit\n\nThis package is a TypeScript fork of https://github.com/dgallegos/edidreader.\nThey did all the hard work of figuring out how to actually parse the giant ball\nof crazy that is EDID; all I did was slap some typedefs on top of it.\n","readmeFilename":"README.md"}