{"_id":"@cic-it-nancy/dicom-brush","name":"@cic-it-nancy/dicom-brush","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@cic-it-nancy/dicom-brush","version":"1.0.0","description":"A TypeScript/JavaScript library for manipulating DICOM images, enabling redaction (masking) of image regions, metadata extraction, and transfer syntax transcoding.","license":"LGPL-3.0","author":{"name":"CIC-IT Nancy"},"repository":{"type":"git","url":"git+https://github.com/CIC-IT-Nancy/dicom-brush.git"},"bugs":{"url":"https://github.com/CIC-IT-Nancy/dicom-brush/issues"},"contributors":[{"name":"Pierre 'AlasDiablo' M","url":"https://github.com/AlasDiablo"}],"scripts":{"build":"tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json","prepublish":"npm run build"},"type":"module","main":"./lib/cjs/index.js","module":"./lib/esm/index.js","types":"./types/index.d.ts","dependencies":{"dcmjs":"~0.50.1","dcmjs-codecs":"~0.0.8"},"devDependencies":{"@eslint/js":"9.34.0","@stylistic/eslint-plugin":"5.3.1","@types/b4a":"1.6.5","eslint":"9.34.0","eslint-config-prettier":"10.1.8","eslint-plugin-import":"2.32.0","eslint-plugin-prettier":"5.5.4","globals":"16.3.0","typescript":"5.9.2","typescript-eslint":"8.42.0"},"gitHead":"bdc7a44a91ad8bb0c9db9e27e25911cbc64d5b76","_id":"@cic-it-nancy/dicom-brush@1.0.0","homepage":"https://github.com/CIC-IT-Nancy/dicom-brush#readme","_nodeVersion":"24.20.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-Oq8BaD385wmxGLNT+3BLkCpyf2S3v+tqHvQHe99tZOt891Z70ceTBHJQNn25HXLtrRH3vgyQ1SqCiTUJ3hLF2w==","shasum":"7a127d94f075fcab6d8bd2f8798b672ccb81e02b","tarball":"https://registry.npmjs.org/@cic-it-nancy/dicom-brush/-/dicom-brush-1.0.0.tgz","fileCount":17,"unpackedSize":68540,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDC+3w31gT8kxta9HTG4f23F65B6x2o/QUqB3UtebKbVAiEAwlt1YUV33jeZbnf6xmuJJ8nsWQ26pxeko5VGMCGAoEk="}]},"_npmUser":{"name":"alasdiablo","email":"marcolet.pierre@laposte.net"},"directories":{},"maintainers":[{"name":"naruto-kyun","email":"fauvel.marc@gmail.com"},{"name":"alasdiablo","email":"marcolet.pierre@laposte.net"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dicom-brush_1.0.0_1788506595055_0.8100546237907797"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-04T07:23:14.794Z","1.0.0":"2026-09-04T07:23:15.210Z","modified":"2026-09-04T07:23:15.462Z"},"maintainers":[{"name":"naruto-kyun","email":"fauvel.marc@gmail.com"},{"name":"alasdiablo","email":"marcolet.pierre@laposte.net"}],"description":"A TypeScript/JavaScript library for manipulating DICOM images, enabling redaction (masking) of image regions, metadata extraction, and transfer syntax transcoding.","homepage":"https://github.com/CIC-IT-Nancy/dicom-brush#readme","repository":{"type":"git","url":"git+https://github.com/CIC-IT-Nancy/dicom-brush.git"},"contributors":[{"name":"Pierre 'AlasDiablo' M","url":"https://github.com/AlasDiablo"}],"author":{"name":"CIC-IT Nancy"},"bugs":{"url":"https://github.com/CIC-IT-Nancy/dicom-brush/issues"},"license":"LGPL-3.0","readme":"# Dicom Brush\r\n\r\nA TypeScript/JavaScript library for manipulating DICOM images, enabling redaction (masking) of image regions, metadata\r\nextraction, and transfer syntax transcoding.\r\n\r\n---\r\n\r\n## Features\r\n\r\n- **ImageBrush**: Apply redaction areas to DICOM images\r\n- **ImageReader**: Extract technical metadata and specific frames\r\n- **ImageTranscoder**: Transcode DICOM files between transfer syntaxes (pack/unpack)\r\n- **Utils**: Utility functions for DICOM tag manipulation\r\n\r\n---\r\n\r\n## Installation\r\n\r\nInstall the package using your preferred package manager:\r\n\r\n```bash\r\n# Using npm\r\nnpm install @cic-it-nancy/dicom-brush\r\n\r\n# Using pnpm\r\npnpm add @cic-it-nancy/dicom-brush\r\n\r\n# Using Yarn\r\nyarn add @cic-it-nancy/dicom-brush\r\n```\r\n\r\n---\r\n\r\n## Usage\r\n\r\n### Loading DICOM files\r\n\r\nThe library uses `dcmjs` to read and write DICOM files. You first need to obtain a `dicomDict` object using `dcmjs`:\r\n\r\n```typescript\r\nimport { data } from 'dcmjs';\r\nimport { ImageTranscoder, ImageBrush } from '@cic-it-nancy/dicom-brush';\r\n\r\n// Load DICOM file using dcmjs\r\nconst dicomDict = data.DicomMessage.readFile(blob);\r\n```\r\n\r\n### Transcoding\r\n\r\n```typescript\r\nimport { ImageTranscoder } from '@cic-it-nancy/dicom-brush';\r\n\r\n// Initialise the transcoder (required once)\r\nawait ImageTranscoder.init();\r\n\r\n// Transcode a DICOM file\r\nconst transcoder = new ImageTranscoder(dicomDict);\r\n\r\n// Transcode to a different transfer syntax\r\nconst result = transcoder.transcode('1.2.840.10008.1.2.1'); // Explicit VR Little Endian\r\n\r\n// Helper methods for common operations\r\nconst unpacked = transcoder.unpack();  // Unpack to Implicit VR Little Endian\r\nconst packed = transcoder.pack();      // Pack to JPEG 2000 Lossless\r\n```\r\n\r\n### Redaction\r\n\r\n```typescript\r\nimport { ImageBrush } from '@cic-it-nancy/dicom-brush';\r\n\r\nconst brush = new ImageBrush(dicomDict);\r\n\r\n// Add redaction area (x, y, width, height in pixels)\r\nbrush.addRedactionArea({\r\n  x: 100,\r\n  y: 100,\r\n  width: 50,\r\n  height: 50\r\n});\r\n\r\n// Apply the redaction\r\nbrush.apply();\r\n\r\n// Get the modified DICOM dictionary\r\nconst redactedDicom = brush.getDicomDict();\r\n```\r\n\r\n### Reading image information\r\n\r\n```typescript\r\nimport { ImageReader } from '@cic-it-nancy/dicom-brush';\r\n\r\nconst imageInfo = ImageReader.readImageInfo(dicomDict);\r\n\r\nconsole.log(imageInfo.rows);           // Number of rows\r\nconsole.log(imageInfo.columns);        // Number of columns\r\nconsole.log(imageInfo.numberOfFrames); // Total frames\r\nconsole.log(imageInfo.transferSyntaxUID);\r\n```\r\n\r\n---\r\n\r\n## Supported Transfer Syntaxes\r\n\r\nTransfer syntax support depends on the `dcmjs-codecs` library, which provides WebAssembly-based codecs. Currently supported:\r\n\r\n- **Uncompressed**:\r\n  - Implicit VR Little Endian (`1.2.840.10008.1.2`)\r\n  - Explicit VR Little Endian (`1.2.840.10008.1.2.1`)\r\n  - Deflated Explicit VR Little Endian (`1.2.840.10008.1.2.1.99`)\r\n  - Explicit VR Big Endian (`1.2.840.10008.1.2.2`)\r\n\r\n- **JPEG**:\r\n  - JPEG Baseline (`1.2.840.10008.1.2.4.50`)\r\n  - JPEG Lossless (`1.2.840.10008.1.2.4.70`)\r\n\r\n- **JPEG 2000**:\r\n  - JPEG 2000 Lossless (`1.2.840.10008.1.2.4.90`)\r\n\r\n- **RLE Lossless** (`1.2.840.10008.1.2.5`)\r\n\r\nNote: The actual supported transfer syntaxes are determined by `dcmjs-codecs`. Check the [dcmjs-codecs repository](https://github.com/PantelisGeorgiadis/dcmjs-codecs) for the most up-to-date list.\r\n\r\n---\r\n\r\n## Technical details\r\n\r\n- **Build output**: CJS (`lib/cjs/`) and ESM (`lib/esm/`)\r\n- **TypeScript**: Strict mode, type declarations available in `types/index.d.ts`\r\n- **Dependencies**: `dcmjs` (0.50.1) for DICOM I/O, `dcmjs-codecs` (0.0.8) for transcoding\r\n\r\n---\r\n\r\n## Project structure\r\n\r\n```text\r\ndicom-brush/\r\n├── src/          # TypeScript source files\r\n├── lib/\r\n│   ├── cjs/      # CommonJS build\r\n│   └── esm/      # ES Module build\r\n├── types/        # TypeScript type definitions\r\n├── README.md\r\n└── Transfer Syntax.md\r\n```\r\n\r\n---\r\n\r\n## Authors & Contributors\r\n\r\n- **CIC-IT Nancy** — Author\r\n- **Pierre 'AlasDiablo' M** ([GitHub](https://github.com/AlasDiablo)) — Contributor\r\n\r\n---\r\n\r\n## License\r\n\r\nGNU Lesser General Public License v3.0 (LGPL-3.0) - CIC-IT Nancy\r\n","readmeFilename":"README.md","_rev":"1-f552b04e420497595441bbbd01c0c2ef"}