[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MATWH7HZ3ZK0B84T22MXHQ":3,"skill-same:01M6MATWH7HZ3ZK0B84T22MXHQ":134},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":46,"linkOnly":47,"markdownContent":48,"markdownBody":49,"frontMatter":50,"refName":58,"commitSha":59,"skillDirectory":60,"forksCount":61,"repositoryHtmlUrl":62,"repositoryHomepageUrl":63,"ownerHtmlUrl":64,"ownerBlogUrl":65,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6MATWH7HZ3ZK0B84T22MXHQ","pydicom",null,"Reads, inspects, writes, and transforms local DICOM files with pydicom 3.x (dcmread, dcmwrite, pydicom.pixels), including metadata, transfer syntaxes, compressed pixel data plugins, frame decoding, private elements, DICOM JSON, and bounded pseudonymization review using bundled helper scripts. Use when extracting aggregate metadata from DICOM datasets without printing PHI, checking which transfer syntaxes and codec plugins a deployment needs, planning frame or memory limits before decoding pixel data, rendering one non-diagnostic frame, compressing or decompressing pixel data, or building and auditing a pseudonymized derivative. Not for diagnostic viewing, or for claiming DICOM PS3.15, HIPAA, or GDPR compliance.","hashgraph-online\u002Fawesome-codex-plugins","hashgraph-online","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F160371962?v=4","01M6CNB6NRJVNNGN14TR01Q6D3","HOL (Hashgraph Online)","01M6JT1HSKKG9V68KQAQGBA7XP",1575,"MIT","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"scripts","2026","when","limits","pillow","which","extracting","gdpr compliance","transforms","rendering","imaging","de","review","clinical","medical","local","pixel","files","only","phi","data","memory","2026-11-10 10:12:30",false,"---\nname: pydicom\ndescription: Reads, inspects, writes, and transforms local DICOM files with pydicom 3.x (dcmread, dcmwrite, pydicom.pixels), including metadata, transfer syntaxes, compressed pixel data plugins, frame decoding, private elements, DICOM JSON, and bounded pseudonymization review using bundled helper scripts. Use when extracting aggregate metadata from DICOM datasets without printing PHI, checking which transfer syntaxes and codec plugins a deployment needs, planning frame or memory limits before decoding pixel data, rendering one non-diagnostic frame, compressing or decompressing pixel data, or building and auditing a pseudonymized derivative. Not for diagnostic viewing, or for claiming DICOM PS3.15, HIPAA, or GDPR compliance.\nlicense: MIT\ncompatibility: Python 3.10+ with pydicom 3.0.2; optional pinned NumPy, Pillow, and pixel plugins. Helper CLIs are local-only and require authorized data.\nmetadata:\n  version: '1.2'\n  category: clinical-and-health\n  maintainer: Kalaris Labs\n  last-reviewed: '2026-07-23'\n  tags: DICOM, medical imaging, radiology, de-identification, Python\n---\n\n# pydicom\n\nUse pydicom for DICOM dataset I\u002FO and pixel processing. Version 3.0.2 is the\ncurrent stable release reviewed here. It fixes CVE-2026-32711, a crafted\nDICOMDIR path-traversal issue. pydicom 3.0.2 declares Python `>=3.10`; its\nbundled DICOM dictionary is 2024c, while the live DICOM Standard may be newer.\n\n## Mandatory safety boundary\n\n- Work only with local data that the user is authorized to access.\n- DICOM metadata, file names, private elements, overlays, structured content,\n  and pixels may contain protected health information (PHI).\n- Never print `Dataset`, export full metadata\u002FJSON, or log element values by\n  default. Use a documented allowlist and aggregate output.\n- pydicom is a general DICOM framework, not a diagnostic viewer. Pixel output,\n  validation, conversion, and plugin availability are not diagnostic claims.\n- De-identification is profile-, purpose-, recipient-, jurisdiction-, and\n  threat-context-specific. It requires privacy\u002FDICOM expert verification.\n- Never claim that a tag-removal script is DICOM PS3.15, HIPAA, GDPR, or other\n  compliance. Preserve originals and audit derived outputs.\n- Treat deterministic pseudonymization keys and UID maps as re-identification\n  secrets: use least privilege and encrypted\u002Fmanaged secret storage, never\n  commit, sync, log, or share them with derivatives, and define backup,\n  rotation, revocation, and destruction procedures. A leaked key invalidates\n  the intended separation; rotation also changes deterministic mappings.\n- Set explicit input-file, file-count, frame-count, decoded-byte, and output\n  limits before parsing untrusted or unusually large datasets.\n\n## Installation\n\nCreate or activate an isolated environment, then install the exact reviewed\nrelease:\n\n```bash\nuv pip install \"pydicom==3.0.2\"\n```\n\nUncompressed pixel arrays and image rendering:\n\n```bash\nuv pip install \"pydicom==3.0.2\" \"numpy==2.5.1\" \"Pillow==12.3.0\"\n```\n\nInstall only the transfer-syntax plugins required by the deployment:\n\n```bash\n# JPEG\u002FJPEG-LS, JPEG 2000\u002FHTJ2K, and faster RLE through pylibjpeg\nuv pip install \"numpy==2.5.1\" \"pylibjpeg==2.1.0\" \\\n  \"pylibjpeg-libjpeg==2.4.0\" \"pylibjpeg-openjpeg==2.5.0\" \\\n  \"pylibjpeg-rle==2.2.0\"\n\n# JPEG-LS encoder\u002Fdecoder\nuv pip install \"numpy==2.5.1\" \"pyjpegls==1.5.1\"\n\n# Alternative decoder with platform-specific wheels\nuv pip install \"python-gdcm==3.2.6\"\n```\n\nPlugin licenses and wheels differ by package\u002Fplatform; review them before\ndeployment. Pillow has documented decoding limitations and pydicom cautions\nthat plugin output must be independently checked.\n\nNative codec wheels widen the supply-chain and memory-safety boundary. For a\ncontrolled deployment, resolve these exact pins on a trusted build host, lock\nand verify wheel hashes\u002Fprovenance, mirror approved artifacts internally, scan\nthem, and install with hash enforcement rather than resolving from the public\nindex at runtime.\n\n## Choose the workflow\n\n1. Need an aggregate overview: run `scripts\u002Fextract_metadata.py`.\n2. Need bounded technical checks: run `scripts\u002Fdicom_inventory.py`.\n3. Need codec deployment preflight: run\n   `scripts\u002Ftransfer_syntax_inspector.py`.\n4. Need frame\u002Fmemory planning: run `scripts\u002Fpixel_frame_planner.py`.\n5. Need one non-diagnostic rendered frame: run\n   `scripts\u002Fdicom_to_image.py`.\n6. Need a pseudonymized derivative: read the de-identification section, create\n   a site-reviewed action profile, then run `scripts\u002Fanonymize_dicom.py` and\n   `scripts\u002Fdeidentification_audit.py`.\n7. Need to check a sensitive UID map: run\n   `scripts\u002Fuid_mapping_validator.py`.\n\n## Read datasets safely\n\n`dcmread()` returns a `FileDataset`, a `Dataset` subclass with File Format\nstate such as `file_meta`, preamble, and original encoding.\n\n```python\nfrom pathlib import Path\nimport pydicom\n\npath = Path(\"authorized\u002Finput.dcm\")\nds = pydicom.dcmread(\n    path,\n    stop_before_pixels=True,\n    specific_tags=[\n        \"SOPClassUID\",\n        \"Modality\",\n        \"Rows\",\n        \"Columns\",\n        \"NumberOfFrames\",\n    ],\n)\n\ntechnical = {\n    \"sop_class\": ds.get(\"SOPClassUID\"),\n    \"modality\": ds.get(\"Modality\"),\n    \"rows\": ds.get(\"Rows\"),\n    \"columns\": ds.get(\"Columns\"),\n}\n```\n\nUse:\n\n- `stop_before_pixels=True` for metadata-only work.\n- `specific_tags=[...]` for a minimum allowlist.\n- `defer_size=\"1 MiB\"` when a later write must preserve large values.\n- `force=False` (default). `force=True` only bypasses the File Format header\n  check; it does not prove the bytes are valid DICOM.\n\nDo not call `print(ds)`, `repr(ds)`, or iterate values into logs on clinical\ndata.\n\n## Dataset, DataElement, and sequences\n\nAccess standard elements by keyword and check for absence:\n\n```python\nmodality = ds.get(\"Modality\", \"UNSPECIFIED\")\nif \"ReferencedImageSequence\" in ds:\n    for item in ds.ReferencedImageSequence:\n        referenced_class = item.get(\"ReferencedSOPClassUID\")\n```\n\nTag access, such as `ds[0x0010, 0x0010]`, returns a `DataElement`; its `.value`\nis separate. `Sequence` behaves like a list of nested `Dataset` items. Privacy\nactions must recurse through every sequence item, not only the top level.\n\nWhen creating a file, use `FileMetaDataset` for group `0002`, keep dataset and\nfile-meta SOP UIDs consistent, set a Transfer Syntax UID, and write in enforced\nFile Format:\n\n```python\nfrom pydicom import dcmwrite\nfrom pydicom.dataset import FileDataset, FileMetaDataset\nfrom pydicom.uid import CTImageStorage, ExplicitVRLittleEndian, generate_uid\n\nmeta = FileMetaDataset()\nmeta.MediaStorageSOPClassUID = CTImageStorage\nmeta.MediaStorageSOPInstanceUID = generate_uid()\nmeta.TransferSyntaxUID = ExplicitVRLittleEndian\n\nds = FileDataset(None, {}, file_meta=meta, preamble=b\"\\0\" * 128)\nds.SOPClassUID = meta.MediaStorageSOPClassUID\nds.SOPInstanceUID = meta.MediaStorageSOPInstanceUID\n# Add all attributes required by the selected IOD before writing.\ndcmwrite(\"new.dcm\", ds, enforce_file_format=True, overwrite=False)\n```\n\n`write_like_original` is deprecated in pydicom 3.0; use\n`enforce_file_format`. A successful write is not full PS3.3 IOD conformance.\n\n## UIDs and transfer syntax\n\nThe File Meta Information Transfer Syntax UID controls dataset encoding and\npixel compression:\n\n```python\nts = ds.file_meta.TransferSyntaxUID\nsummary = {\n    \"uid\": str(ts),\n    \"name\": ts.name,\n    \"compressed\": ts.is_compressed,\n    \"implicit_vr\": ts.is_implicit_VR,\n    \"little_endian\": ts.is_little_endian,\n}\n```\n\npydicom 3.0 chooses write encoding from the Transfer Syntax UID before legacy\ndataset flags. Do not replace structural UIDs (Transfer Syntax, SOP Class, or\ncoding-scheme UIDs) during pseudonymization. Instance\u002Freference UID replacement\nmust be one-to-one and consistent across the complete declared scope.\n\nRead [references\u002Ftransfer_syntaxes.md](references\u002Ftransfer_syntaxes.md) before\ncompression, decompression, or encapsulation.\n\n## Pixel data and frames\n\nThe stable `pydicom.pixels` API supports path-based, frame-specific decoding:\n\n```python\nfrom pydicom.pixels import pixel_array\n\n# Reads only the selected frame where the source permits it.\nframe = pixel_array(\"authorized\u002Fimage.dcm\", index=0, raw=False)\n```\n\nShape semantics:\n\n- grayscale single frame: `(rows, columns)`\n- grayscale multi-frame: `(frames, rows, columns)`\n- color single frame: `(rows, columns, samples)`\n- color multi-frame: `(frames, rows, columns, samples)`\n\n`raw=False` converts YCbCr pixel data to RGB when possible; `raw=True` retains\nthe decoded color space after mandatory minimal processing. Use\n`iter_pixels(path, indices=[...])` for bounded multi-frame iteration.\n\nFor grayscale display, apply transforms in this order:\n\n```python\nfrom pydicom.pixels import apply_modality_lut, apply_voi_lut\n\nmodality_values = apply_modality_lut(frame, ds)\ndisplay_values = apply_voi_lut(modality_values, ds, index=0)\n```\n\nModality LUT\u002Frescale and VOI\u002Fwindowing change display\u002Fvalue semantics.\nMONOCHROME1 may require presentation inversion. Palette Color requires\n`apply_color_lut()`. Presentation states and ICC behavior may require a\nvalidated viewer. Never use per-frame min\u002Fmax normalization for quantitative\nanalysis.\n\n## Compression, decompression, and encapsulation\n\n- Accessing `pixel_array` decodes as needed but does not change the dataset.\n- `Dataset.decompress()` changes Pixel Data in place, sets Explicit VR Little\n  Endian, updates image metadata, and generates a new SOP Instance UID by\n  default.\n- `Dataset.compress(uid)` changes Pixel Data and Transfer Syntax in place and\n  generates a new SOP Instance UID by default.\n- pydicom 3.0 built-in\u002Ffound encoders cover RLE Lossless, JPEG-LS, and JPEG\n  2000 combinations documented in the stable plugin matrix.\n- Each compressed frame is separately encoded and then encapsulated. Use\n  `encapsulate()` or `encapsulate_extended()` for externally encoded frames.\n- Read frames with current `pydicom.encaps.generate_frames()` or `get_frame()`;\n  legacy encapsulation generator names are deprecated for pydicom 4.\n\nAlways inspect capabilities first, limit decoded bytes\u002Fframes, and verify pixel\ncorrectness independently. Lossy compression acceptability is outside pydicom\nand the DICOM encoding specification.\n\n## DICOM JSON and private elements\n\n`Dataset.to_json()`, `to_json_dict()`, and `Dataset.from_json()` implement the\nDICOM JSON Model, but pydicom documents JSON support as beta. Full JSON may\ninline binary data and expose every identifier and pixel payload. Do not emit\nit as a metadata report. A `BulkDataURI` handler introduces separate storage,\nauthorization, and retrieval obligations.\n\nPrivate elements are not standardized and may contain PHI:\n\n```python\n# Recursive removal, but not sufficient de-identification by itself.\nds.remove_private_tags()\n```\n\nRetain private elements only under an explicit reviewed safe-private policy.\nRead [references\u002Fcommon_tags.md](references\u002Fcommon_tags.md) for tag access,\nprivacy classes, and standard pointers.\n\n## De-identification workflow\n\nDICOM PS3.15 Annex E explicitly states that confidentiality profiles do not\nguarantee removal of all identifying information and do not replace a complete\nde-identification process.\n\n1. Define purpose, recipients, linkage needs, regulations, threat model, and\n   acceptable re-identification risk.\n2. Select the Basic Application Level Confidentiality Profile and needed\n   options (pixel, recognizable visual features, graphics, structured content,\n   descriptors, temporal information, patient characteristics, devices,\n   institutions, UIDs, and safe private data).\n3. Preserve source objects unchanged in controlled storage.\n4. Apply every action recursively, including nested sequences.\n5. Replace instance\u002Freference UIDs consistently across the complete scope;\n   preserve structural UIDs.\n6. Decide date\u002Ftime handling explicitly. A fixed shift can preserve intervals\n   but partial dates, time zones, standalone times, leap days, longitudinal\n   linkage, and external events require reviewed policy.\n7. Inspect pixels, overlays, graphics, structured content, and recognizable\n   visual features. Do not infer clean pixels from missing metadata or set\n   `BurnedInAnnotation=NO` without verification.\n8. Rebuild File Meta Information and preamble to prevent leakage.\n9. Run technical validation and a de-identification audit, then perform expert\n   verification and documented risk review.\n\nThe bundled script intentionally sets `PatientIdentityRemoved` to `NO` because\nit cannot establish successful de-identification.\n\n## Helper CLIs\n\nAll `--help` paths are dependency-free. The tools perform no network access and\nemit no DICOM values beyond narrow technical allowlists.\n\nBundled content consists of the two linked references, the documented helper\nscripts, and synthetic tests. The pydicom runtime dependency is installed from\nthe pinned PyPI release.\n\n```bash\n# Redacted aggregate metadata\npython scripts\u002Fextract_metadata.py authorized\u002F --recursive\n\n# Metadata-only technical inventory\npython scripts\u002Fdicom_inventory.py authorized\u002F --recursive\n\n# Installed codec\u002Fplugin capabilities\npython scripts\u002Ftransfer_syntax_inspector.py --input authorized\u002Fimage.dcm\n\n# Frame shape, byte, and transform plan\npython scripts\u002Fpixel_frame_planner.py authorized\u002Fimage.dcm --frames 0,2-4\n\n# One non-diagnostic frame\npython scripts\u002Fdicom_to_image.py authorized\u002Fimage.dcm frame.png \\\n  --acknowledge-pixel-phi\n\n# Create a secret key, then a scoped pseudonymized derivative plus audit\npython scripts\u002Fanonymize_dicom.py --generate-uid-key project.key\npython scripts\u002Fanonymize_dicom.py authorized\u002Fin.dcm derived\u002Fout.dcm \\\n  --uid-key-file project.key --uid-scope export-v1 \\\n  --audit-report derived\u002Fout.audit.json\n\n# Audit candidate metadata; no pixel decompression\npython scripts\u002Fdeidentification_audit.py derived\u002Fout.dcm\n\n# Validate an explicitly requested sensitive UID mapping\npython scripts\u002Fuid_mapping_validator.py derived\u002Fuid-map.json \\\n  --uid-key-file project.key --uid-scope export-v1\n```\n\nThe generated raw key file is a controlled-local convenience and is created\nwith owner-only permissions. For production, materialize key bytes from an\napproved secret manager into a locked ephemeral file, restrict access to the\nde-identification service, and securely remove it afterward. Store any optional\nUID map separately from derivatives; it directly links original and replacement\nidentifiers.\n\n## pydicom 3.0 migration notes\n\n- `read_file()` and `write_file()` were removed; use `dcmread()` and\n  `dcmwrite()`.\n- `write_like_original` is deprecated; use `enforce_file_format`.\n- `pydicom.pixel_data_handlers` is deprecated for removal in v4; use\n  `pydicom.pixels`.\n- `Dataset.pixel_array` uses the new pixels backend by default and converts\n  YCbCr to RGB when possible.\n- `JPEGLossless` now means UID `1.2.840.10008.1.2.4.57`;\n  `JPEGLosslessSV1` is `.70`.\n- `Dataset.is_little_endian` and `is_implicit_VR` are deprecated for v4.\n\n## Sources (verified 2026-07-23)\n\n- [pydicom 3.0.2 on PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydicom\u002F) — released\n  2026-03-19; Python `>=3.10`.\n- [pydicom releases](https:\u002F\u002Fgithub.com\u002Fpydicom\u002Fpydicom\u002Freleases) — 3.0.2 and\n  CVE-2026-32711 details.\n- [Stable release notes](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Frelease_notes\u002Findex.html)\n- [Stable installation guide](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Finstallation.html)\n- [Dataset basics](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fdataset_basics.html)\n- [Stable pixel tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fpixel_data\u002Fintroduction.html)\n- [Stable pixel plugins](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Fguides\u002Fuser\u002Fimage_data_handlers.html)\n- [Stable compression tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fpixel_data\u002Fcompressing.html)\n- [Stable DICOM JSON tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fdicom_json.html)\n- [Stable private-element guide](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Fguides\u002Fuser\u002Fprivate_data_elements.html)\n- [Current DICOM Standard](https:\u002F\u002Fwww.dicomstandard.org\u002Fcurrent)\n- [DICOM PS3.3](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart03\u002FPS3.3.html),\n  [PS3.5](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart05\u002FPS3.5.html),\n  [PS3.6](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart06\u002FPS3.6.html),\n  and [PS3.15](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fhtml\u002Fpart15.html)\n\n## Agent operating procedure\n\n1. **Check the environment.** Confirm data access permissions, de-identification status and the governing regulations or protocols.\n2. **Pin down the inputs.** Confirm formats, identifiers and parameters from the data or the user. Ask rather than guess any value that changes the result.\n3. **Run a small version first.** Work on a de-identified sample or synthetic data first.\n4. **Execute the full task** using the instructions and references above.\n5. **Validate the result.** Check outputs against clinical guidelines and reporting standards; have a qualified human review clinical content.\n6. **Report.** State what was run (versions, commands, parameters), what was checked, and what is still uncertain.\n\n| If this happens | Do this |\n|---|---|\n| Data appears to contain identifiable patient information | Stop and ask the user before processing further. |\n| A function, flag or endpoint in these instructions is missing in the installed version | Check the installed version's own documentation (`help()`, `--help`, official docs), adapt, and tell the user. Never invent an API. |\n| A required input, identifier or parameter is ambiguous | Ask the user, or state the assumption explicitly before running. |\n\n**Integrity rules**\n\n- Never fabricate results, parameters, identifiers, citations or statistics. If something cannot be run or verified, say so plainly.\n- Outputs are decision support for qualified professionals, not medical advice; never present them as diagnoses or orders.\n- Treat version-specific details here as possibly outdated: confirm them against the official documentation for the installed version.\n- Ask before actions that cost money, consume shared GPUs or cloud quota, touch personal or patient data, or cannot be undone.\n","# pydicom\n\nUse pydicom for DICOM dataset I\u002FO and pixel processing. Version 3.0.2 is the\ncurrent stable release reviewed here. It fixes CVE-2026-32711, a crafted\nDICOMDIR path-traversal issue. pydicom 3.0.2 declares Python `>=3.10`; its\nbundled DICOM dictionary is 2024c, while the live DICOM Standard may be newer.\n\n## Mandatory safety boundary\n\n- Work only with local data that the user is authorized to access.\n- DICOM metadata, file names, private elements, overlays, structured content,\n  and pixels may contain protected health information (PHI).\n- Never print `Dataset`, export full metadata\u002FJSON, or log element values by\n  default. Use a documented allowlist and aggregate output.\n- pydicom is a general DICOM framework, not a diagnostic viewer. Pixel output,\n  validation, conversion, and plugin availability are not diagnostic claims.\n- De-identification is profile-, purpose-, recipient-, jurisdiction-, and\n  threat-context-specific. It requires privacy\u002FDICOM expert verification.\n- Never claim that a tag-removal script is DICOM PS3.15, HIPAA, GDPR, or other\n  compliance. Preserve originals and audit derived outputs.\n- Treat deterministic pseudonymization keys and UID maps as re-identification\n  secrets: use least privilege and encrypted\u002Fmanaged secret storage, never\n  commit, sync, log, or share them with derivatives, and define backup,\n  rotation, revocation, and destruction procedures. A leaked key invalidates\n  the intended separation; rotation also changes deterministic mappings.\n- Set explicit input-file, file-count, frame-count, decoded-byte, and output\n  limits before parsing untrusted or unusually large datasets.\n\n## Installation\n\nCreate or activate an isolated environment, then install the exact reviewed\nrelease:\n\n```bash\nuv pip install \"pydicom==3.0.2\"\n```\n\nUncompressed pixel arrays and image rendering:\n\n```bash\nuv pip install \"pydicom==3.0.2\" \"numpy==2.5.1\" \"Pillow==12.3.0\"\n```\n\nInstall only the transfer-syntax plugins required by the deployment:\n\n```bash\n# JPEG\u002FJPEG-LS, JPEG 2000\u002FHTJ2K, and faster RLE through pylibjpeg\nuv pip install \"numpy==2.5.1\" \"pylibjpeg==2.1.0\" \\\n  \"pylibjpeg-libjpeg==2.4.0\" \"pylibjpeg-openjpeg==2.5.0\" \\\n  \"pylibjpeg-rle==2.2.0\"\n\n# JPEG-LS encoder\u002Fdecoder\nuv pip install \"numpy==2.5.1\" \"pyjpegls==1.5.1\"\n\n# Alternative decoder with platform-specific wheels\nuv pip install \"python-gdcm==3.2.6\"\n```\n\nPlugin licenses and wheels differ by package\u002Fplatform; review them before\ndeployment. Pillow has documented decoding limitations and pydicom cautions\nthat plugin output must be independently checked.\n\nNative codec wheels widen the supply-chain and memory-safety boundary. For a\ncontrolled deployment, resolve these exact pins on a trusted build host, lock\nand verify wheel hashes\u002Fprovenance, mirror approved artifacts internally, scan\nthem, and install with hash enforcement rather than resolving from the public\nindex at runtime.\n\n## Choose the workflow\n\n1. Need an aggregate overview: run `scripts\u002Fextract_metadata.py`.\n2. Need bounded technical checks: run `scripts\u002Fdicom_inventory.py`.\n3. Need codec deployment preflight: run\n   `scripts\u002Ftransfer_syntax_inspector.py`.\n4. Need frame\u002Fmemory planning: run `scripts\u002Fpixel_frame_planner.py`.\n5. Need one non-diagnostic rendered frame: run\n   `scripts\u002Fdicom_to_image.py`.\n6. Need a pseudonymized derivative: read the de-identification section, create\n   a site-reviewed action profile, then run `scripts\u002Fanonymize_dicom.py` and\n   `scripts\u002Fdeidentification_audit.py`.\n7. Need to check a sensitive UID map: run\n   `scripts\u002Fuid_mapping_validator.py`.\n\n## Read datasets safely\n\n`dcmread()` returns a `FileDataset`, a `Dataset` subclass with File Format\nstate such as `file_meta`, preamble, and original encoding.\n\n```python\nfrom pathlib import Path\nimport pydicom\n\npath = Path(\"authorized\u002Finput.dcm\")\nds = pydicom.dcmread(\n    path,\n    stop_before_pixels=True,\n    specific_tags=[\n        \"SOPClassUID\",\n        \"Modality\",\n        \"Rows\",\n        \"Columns\",\n        \"NumberOfFrames\",\n    ],\n)\n\ntechnical = {\n    \"sop_class\": ds.get(\"SOPClassUID\"),\n    \"modality\": ds.get(\"Modality\"),\n    \"rows\": ds.get(\"Rows\"),\n    \"columns\": ds.get(\"Columns\"),\n}\n```\n\nUse:\n\n- `stop_before_pixels=True` for metadata-only work.\n- `specific_tags=[...]` for a minimum allowlist.\n- `defer_size=\"1 MiB\"` when a later write must preserve large values.\n- `force=False` (default). `force=True` only bypasses the File Format header\n  check; it does not prove the bytes are valid DICOM.\n\nDo not call `print(ds)`, `repr(ds)`, or iterate values into logs on clinical\ndata.\n\n## Dataset, DataElement, and sequences\n\nAccess standard elements by keyword and check for absence:\n\n```python\nmodality = ds.get(\"Modality\", \"UNSPECIFIED\")\nif \"ReferencedImageSequence\" in ds:\n    for item in ds.ReferencedImageSequence:\n        referenced_class = item.get(\"ReferencedSOPClassUID\")\n```\n\nTag access, such as `ds[0x0010, 0x0010]`, returns a `DataElement`; its `.value`\nis separate. `Sequence` behaves like a list of nested `Dataset` items. Privacy\nactions must recurse through every sequence item, not only the top level.\n\nWhen creating a file, use `FileMetaDataset` for group `0002`, keep dataset and\nfile-meta SOP UIDs consistent, set a Transfer Syntax UID, and write in enforced\nFile Format:\n\n```python\nfrom pydicom import dcmwrite\nfrom pydicom.dataset import FileDataset, FileMetaDataset\nfrom pydicom.uid import CTImageStorage, ExplicitVRLittleEndian, generate_uid\n\nmeta = FileMetaDataset()\nmeta.MediaStorageSOPClassUID = CTImageStorage\nmeta.MediaStorageSOPInstanceUID = generate_uid()\nmeta.TransferSyntaxUID = ExplicitVRLittleEndian\n\nds = FileDataset(None, {}, file_meta=meta, preamble=b\"\\0\" * 128)\nds.SOPClassUID = meta.MediaStorageSOPClassUID\nds.SOPInstanceUID = meta.MediaStorageSOPInstanceUID\n# Add all attributes required by the selected IOD before writing.\ndcmwrite(\"new.dcm\", ds, enforce_file_format=True, overwrite=False)\n```\n\n`write_like_original` is deprecated in pydicom 3.0; use\n`enforce_file_format`. A successful write is not full PS3.3 IOD conformance.\n\n## UIDs and transfer syntax\n\nThe File Meta Information Transfer Syntax UID controls dataset encoding and\npixel compression:\n\n```python\nts = ds.file_meta.TransferSyntaxUID\nsummary = {\n    \"uid\": str(ts),\n    \"name\": ts.name,\n    \"compressed\": ts.is_compressed,\n    \"implicit_vr\": ts.is_implicit_VR,\n    \"little_endian\": ts.is_little_endian,\n}\n```\n\npydicom 3.0 chooses write encoding from the Transfer Syntax UID before legacy\ndataset flags. Do not replace structural UIDs (Transfer Syntax, SOP Class, or\ncoding-scheme UIDs) during pseudonymization. Instance\u002Freference UID replacement\nmust be one-to-one and consistent across the complete declared scope.\n\nRead [references\u002Ftransfer_syntaxes.md](references\u002Ftransfer_syntaxes.md) before\ncompression, decompression, or encapsulation.\n\n## Pixel data and frames\n\nThe stable `pydicom.pixels` API supports path-based, frame-specific decoding:\n\n```python\nfrom pydicom.pixels import pixel_array\n\n# Reads only the selected frame where the source permits it.\nframe = pixel_array(\"authorized\u002Fimage.dcm\", index=0, raw=False)\n```\n\nShape semantics:\n\n- grayscale single frame: `(rows, columns)`\n- grayscale multi-frame: `(frames, rows, columns)`\n- color single frame: `(rows, columns, samples)`\n- color multi-frame: `(frames, rows, columns, samples)`\n\n`raw=False` converts YCbCr pixel data to RGB when possible; `raw=True` retains\nthe decoded color space after mandatory minimal processing. Use\n`iter_pixels(path, indices=[...])` for bounded multi-frame iteration.\n\nFor grayscale display, apply transforms in this order:\n\n```python\nfrom pydicom.pixels import apply_modality_lut, apply_voi_lut\n\nmodality_values = apply_modality_lut(frame, ds)\ndisplay_values = apply_voi_lut(modality_values, ds, index=0)\n```\n\nModality LUT\u002Frescale and VOI\u002Fwindowing change display\u002Fvalue semantics.\nMONOCHROME1 may require presentation inversion. Palette Color requires\n`apply_color_lut()`. Presentation states and ICC behavior may require a\nvalidated viewer. Never use per-frame min\u002Fmax normalization for quantitative\nanalysis.\n\n## Compression, decompression, and encapsulation\n\n- Accessing `pixel_array` decodes as needed but does not change the dataset.\n- `Dataset.decompress()` changes Pixel Data in place, sets Explicit VR Little\n  Endian, updates image metadata, and generates a new SOP Instance UID by\n  default.\n- `Dataset.compress(uid)` changes Pixel Data and Transfer Syntax in place and\n  generates a new SOP Instance UID by default.\n- pydicom 3.0 built-in\u002Ffound encoders cover RLE Lossless, JPEG-LS, and JPEG\n  2000 combinations documented in the stable plugin matrix.\n- Each compressed frame is separately encoded and then encapsulated. Use\n  `encapsulate()` or `encapsulate_extended()` for externally encoded frames.\n- Read frames with current `pydicom.encaps.generate_frames()` or `get_frame()`;\n  legacy encapsulation generator names are deprecated for pydicom 4.\n\nAlways inspect capabilities first, limit decoded bytes\u002Fframes, and verify pixel\ncorrectness independently. Lossy compression acceptability is outside pydicom\nand the DICOM encoding specification.\n\n## DICOM JSON and private elements\n\n`Dataset.to_json()`, `to_json_dict()`, and `Dataset.from_json()` implement the\nDICOM JSON Model, but pydicom documents JSON support as beta. Full JSON may\ninline binary data and expose every identifier and pixel payload. Do not emit\nit as a metadata report. A `BulkDataURI` handler introduces separate storage,\nauthorization, and retrieval obligations.\n\nPrivate elements are not standardized and may contain PHI:\n\n```python\n# Recursive removal, but not sufficient de-identification by itself.\nds.remove_private_tags()\n```\n\nRetain private elements only under an explicit reviewed safe-private policy.\nRead [references\u002Fcommon_tags.md](references\u002Fcommon_tags.md) for tag access,\nprivacy classes, and standard pointers.\n\n## De-identification workflow\n\nDICOM PS3.15 Annex E explicitly states that confidentiality profiles do not\nguarantee removal of all identifying information and do not replace a complete\nde-identification process.\n\n1. Define purpose, recipients, linkage needs, regulations, threat model, and\n   acceptable re-identification risk.\n2. Select the Basic Application Level Confidentiality Profile and needed\n   options (pixel, recognizable visual features, graphics, structured content,\n   descriptors, temporal information, patient characteristics, devices,\n   institutions, UIDs, and safe private data).\n3. Preserve source objects unchanged in controlled storage.\n4. Apply every action recursively, including nested sequences.\n5. Replace instance\u002Freference UIDs consistently across the complete scope;\n   preserve structural UIDs.\n6. Decide date\u002Ftime handling explicitly. A fixed shift can preserve intervals\n   but partial dates, time zones, standalone times, leap days, longitudinal\n   linkage, and external events require reviewed policy.\n7. Inspect pixels, overlays, graphics, structured content, and recognizable\n   visual features. Do not infer clean pixels from missing metadata or set\n   `BurnedInAnnotation=NO` without verification.\n8. Rebuild File Meta Information and preamble to prevent leakage.\n9. Run technical validation and a de-identification audit, then perform expert\n   verification and documented risk review.\n\nThe bundled script intentionally sets `PatientIdentityRemoved` to `NO` because\nit cannot establish successful de-identification.\n\n## Helper CLIs\n\nAll `--help` paths are dependency-free. The tools perform no network access and\nemit no DICOM values beyond narrow technical allowlists.\n\nBundled content consists of the two linked references, the documented helper\nscripts, and synthetic tests. The pydicom runtime dependency is installed from\nthe pinned PyPI release.\n\n```bash\n# Redacted aggregate metadata\npython scripts\u002Fextract_metadata.py authorized\u002F --recursive\n\n# Metadata-only technical inventory\npython scripts\u002Fdicom_inventory.py authorized\u002F --recursive\n\n# Installed codec\u002Fplugin capabilities\npython scripts\u002Ftransfer_syntax_inspector.py --input authorized\u002Fimage.dcm\n\n# Frame shape, byte, and transform plan\npython scripts\u002Fpixel_frame_planner.py authorized\u002Fimage.dcm --frames 0,2-4\n\n# One non-diagnostic frame\npython scripts\u002Fdicom_to_image.py authorized\u002Fimage.dcm frame.png \\\n  --acknowledge-pixel-phi\n\n# Create a secret key, then a scoped pseudonymized derivative plus audit\npython scripts\u002Fanonymize_dicom.py --generate-uid-key project.key\npython scripts\u002Fanonymize_dicom.py authorized\u002Fin.dcm derived\u002Fout.dcm \\\n  --uid-key-file project.key --uid-scope export-v1 \\\n  --audit-report derived\u002Fout.audit.json\n\n# Audit candidate metadata; no pixel decompression\npython scripts\u002Fdeidentification_audit.py derived\u002Fout.dcm\n\n# Validate an explicitly requested sensitive UID mapping\npython scripts\u002Fuid_mapping_validator.py derived\u002Fuid-map.json \\\n  --uid-key-file project.key --uid-scope export-v1\n```\n\nThe generated raw key file is a controlled-local convenience and is created\nwith owner-only permissions. For production, materialize key bytes from an\napproved secret manager into a locked ephemeral file, restrict access to the\nde-identification service, and securely remove it afterward. Store any optional\nUID map separately from derivatives; it directly links original and replacement\nidentifiers.\n\n## pydicom 3.0 migration notes\n\n- `read_file()` and `write_file()` were removed; use `dcmread()` and\n  `dcmwrite()`.\n- `write_like_original` is deprecated; use `enforce_file_format`.\n- `pydicom.pixel_data_handlers` is deprecated for removal in v4; use\n  `pydicom.pixels`.\n- `Dataset.pixel_array` uses the new pixels backend by default and converts\n  YCbCr to RGB when possible.\n- `JPEGLossless` now means UID `1.2.840.10008.1.2.4.57`;\n  `JPEGLosslessSV1` is `.70`.\n- `Dataset.is_little_endian` and `is_implicit_VR` are deprecated for v4.\n\n## Sources (verified 2026-07-23)\n\n- [pydicom 3.0.2 on PyPI](https:\u002F\u002Fpypi.org\u002Fproject\u002Fpydicom\u002F) — released\n  2026-03-19; Python `>=3.10`.\n- [pydicom releases](https:\u002F\u002Fgithub.com\u002Fpydicom\u002Fpydicom\u002Freleases) — 3.0.2 and\n  CVE-2026-32711 details.\n- [Stable release notes](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Frelease_notes\u002Findex.html)\n- [Stable installation guide](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Finstallation.html)\n- [Dataset basics](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fdataset_basics.html)\n- [Stable pixel tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fpixel_data\u002Fintroduction.html)\n- [Stable pixel plugins](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Fguides\u002Fuser\u002Fimage_data_handlers.html)\n- [Stable compression tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fpixel_data\u002Fcompressing.html)\n- [Stable DICOM JSON tutorial](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Ftutorials\u002Fdicom_json.html)\n- [Stable private-element guide](https:\u002F\u002Fpydicom.github.io\u002Fpydicom\u002Fstable\u002Fguides\u002Fuser\u002Fprivate_data_elements.html)\n- [Current DICOM Standard](https:\u002F\u002Fwww.dicomstandard.org\u002Fcurrent)\n- [DICOM PS3.3](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart03\u002FPS3.3.html),\n  [PS3.5](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart05\u002FPS3.5.html),\n  [PS3.6](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fchtml\u002Fpart06\u002FPS3.6.html),\n  and [PS3.15](https:\u002F\u002Fdicom.nema.org\u002Fmedical\u002Fdicom\u002Fcurrent\u002Foutput\u002Fhtml\u002Fpart15.html)\n\n## Agent operating procedure\n\n1. **Check the environment.** Confirm data access permissions, de-identification status and the governing regulations or protocols.\n2. **Pin down the inputs.** Confirm formats, identifiers and parameters from the data or the user. Ask rather than guess any value that changes the result.\n3. **Run a small version first.** Work on a de-identified sample or synthetic data first.\n4. **Execute the full task** using the instructions and references above.\n5. **Validate the result.** Check outputs against clinical guidelines and reporting standards; have a qualified human review clinical content.\n6. **Report.** State what was run (versions, commands, parameters), what was checked, and what is still uncertain.\n\n| If this happens | Do this |\n|---|---|\n| Data appears to contain identifiable patient information | Stop and ask the user before processing further. |\n| A function, flag or endpoint in these instructions is missing in the installed version | Check the installed version's own documentation (`help()`, `--help`, official docs), adapt, and tell the user. Never invent an API. |\n| A required input, identifier or parameter is ambiguous | Ask the user, or state the assumption explicitly before running. |\n\n**Integrity rules**\n\n- Never fabricate results, parameters, identifiers, citations or statistics. If something cannot be run or verified, say so plainly.\n- Outputs are decision support for qualified professionals, not medical advice; never present them as diagnoses or orders.\n- Treat version-specific details here as possibly outdated: confirm them against the official documentation for the installed version.\n- Ask before actions that cost money, consume shared GPUs or cloud quota, touch personal or patient data, or cannot be undone.\n",{"name":5,"license":15,"metadata":51,"description":7,"compatibility":57},{"tags":52,"version":53,"category":54,"maintainer":55,"last-reviewed":56},"DICOM, medical imaging, radiology, de-identification, Python","1.2","clinical-and-health","Kalaris Labs","2026-07-23","Python 3.10+ with pydicom 3.0.2; optional pinned NumPy, Pillow, and pixel plugins. Helper CLIs are local-only and require authorized data.","main","2b63f856ce19c2a797929cacabd9e0fc936812fa","plugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom",491,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins","https:\u002F\u002Fhol.org\u002Fplugins\u002Fbest-codex-plugins","https:\u002F\u002Fgithub.com\u002Fhashgraph-online","https:\u002F\u002Fhol.org","Open-source standards and developer tools for interoperable AI agents: discovery, identity, communication, payments, privacy and security.","2026-11-14 14:06:13",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add hashgraph-online\u002Fawesome-codex-plugins --skill pydicom",{"tool":74,"command":75},"bunx","bunx skills add hashgraph-online\u002Fawesome-codex-plugins --skill pydicom",{"tool":77,"command":78},"pnpm","pnpm dlx skills add hashgraph-online\u002Fawesome-codex-plugins --skill pydicom","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002FSKILL.md",true,[82,88,92,98,102,106,110,114,118,122,126,130],{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Fcommon_tags.md","REFERENCE","参考文档",12078,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Freferences\u002Fcommon_tags.md",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Ftransfer_syntaxes.md",12538,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Freferences\u002Ftransfer_syntaxes.md",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002F__init__.py","SCRIPT","脚本",60,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002F__init__.py",{"path":99,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002F_common.py",29812,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002F_common.py",{"path":103,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":104,"sourceHtmlUrl":105},"scripts\u002Fanonymize_dicom.py",25805,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fanonymize_dicom.py",{"path":107,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":108,"sourceHtmlUrl":109},"scripts\u002Fdeidentification_audit.py",13090,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fdeidentification_audit.py",{"path":111,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":112,"sourceHtmlUrl":113},"scripts\u002Fdicom_inventory.py",13597,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fdicom_inventory.py",{"path":115,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":116,"sourceHtmlUrl":117},"scripts\u002Fdicom_to_image.py",15486,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fdicom_to_image.py",{"path":119,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":120,"sourceHtmlUrl":121},"scripts\u002Fextract_metadata.py",11452,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fextract_metadata.py",{"path":123,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":124,"sourceHtmlUrl":125},"scripts\u002Fpixel_frame_planner.py",10130,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fpixel_frame_planner.py",{"path":127,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":128,"sourceHtmlUrl":129},"scripts\u002Ftransfer_syntax_inspector.py",7881,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Ftransfer_syntax_inspector.py",{"path":131,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":132,"sourceHtmlUrl":133},"scripts\u002Fuid_mapping_validator.py",8533,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002FKalarisLabs\u002Fresearch-agent-skills\u002Fskills\u002Fpydicom\u002Fscripts\u002Fuid_mapping_validator.py",[135,144,151,158,183,207],{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":143},"01M746ZWACVKMZ1BJXJZHYJSSX","migrate-to-e2e","Moves an existing Playwright, Cypress, Selenium, Appium, Detox, Maestro, or TesterArmy suite to e2e one slice at a time, with the old suite running beside the new one until each ported test is proven. Keeps a MIGRATION.md progress file so any later session resumes where the last stopped. Optionally plants a defect to show both suites catch it. Use for \u002Fmigrate-to-e2e, \"migrate our tests to e2e\", \"port these Maestro flows\", \"move our TesterArmy tests\", or when a project has an e2e config and an older suite still running.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fmigrate-to-e2e\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":143},"01M746ZPTAX1Q0FBKAB1CYND7E","e2e","Writes, runs, and debugs end-to-end tests for web and mobile apps with e2e, the agentic test runner, which mixes agent.act goals with exact locator assertions on a Playwright browser or an iOS or Android device. Also drives a project's running app live over the e2e MCP server to look at a screen, check a UI change, take a screenshot or record a video, and try a locator; and runs bug bashes, parallel e2e explore runs with each bug proven by a repro test. Use when a project depends on e2e or has an e2e.config.ts, when asked for end-to-end, browser, mobile, or agentic UI tests, to check a change in the running app, to QA or bug bash an app or branch, or when an e2e run fails.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fe2e\u002FSKILL.md",[],[],{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":143},"01M746ZJN784HVHMDP9MQGCSGG","create-verification-skill","Generate a project-local verify-\u003Capp> skill on top of e2e, so any coding agent can launch the app, check it is worth driving, exercise a feature the way a user does, keep evidence, and bug bash it. Writes the skill, a feature map with one explore charter per feature, and proves it once. Use for \u002Fcreate-verification-skill, \"make a verification skill for this repo\", or when a project has no scripted way to prove UI behavior.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftester-army\u002Fe2e\u002Fskills\u002Fcreate-verification-skill\u002FSKILL.md",[],[],{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":46},"01M716A6ETNB9B1SQ3GXZC75VR","deja-search","deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-search\u002FSKILL.md",[],[165,166,167,168,169,45,170,171,172,173,174,26,175,176,177,178,179,180,181,182],"search","deja search","never","error","ready","re","decide","fix","design","debugging","you","done","reviewer","io","change","cli","merge","past",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":46},"01M716A3J2W5SENSE9VGMXB375","deja-reflect","End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fvshulcz\u002Fdeja-vu\u002Fskills\u002Fdeja-reflect\u002FSKILL.md",[],[190,191,36,178,192,193,194,195,196,197,198,199,200,201,45,202,203,204,205,206],"deja reflect","reflect","with","record","github","next","https","node","Rules","decisions","brew","remember","project rules","project","session","end","reflection",{"skillNo":208,"name":209,"nameZh":6,"description":210,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":139,"licenseFileUrl":6,"sourceHtmlUrl":211,"categories":212,"keywords":224,"publishedAt":46},"01M715T3RR4BAYSR57HPPTJ0PF","revid","Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.","https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Ftmakersas\u002Frevid-skills\u002Fskills\u002Frevid\u002FSKILL.md",[213,218,221],{"categoryNo":214,"categoryName":215,"taxonomyType":216,"taxonomyTypeDesc":217},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":219,"categoryName":220,"taxonomyType":216,"taxonomyTypeDesc":217},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":222,"categoryName":223,"taxonomyType":216,"taxonomyTypeDesc":217},"01JBSEEDCAT000000000000010","后端与接口",[209,225,226,227,228,229,230,203,231,170,232,233,234,235,26,236,237,238,239,240],"URL","Video","short-form","standalone","PDF","viral","tiktok","short","social","MCP","song","image","mcp server","schedule","api","publish"]