{"id":47010265,"url":"https://github.com/blezek/nifi-dicom","last_synced_at":"2026-03-11T20:42:02.917Z","repository":{"id":47312187,"uuid":"123916720","full_name":"blezek/nifi-dicom","owner":"blezek","description":"DICOM handling for NiFi","archived":false,"fork":false,"pushed_at":"2024-11-12T20:14:28.000Z","size":3007,"stargazers_count":12,"open_issues_count":3,"forks_count":10,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-12T21:22:59.151Z","etag":null,"topics":["dicom","java","java-8","nifi"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blezek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-05T12:32:51.000Z","updated_at":"2024-11-12T20:13:40.000Z","dependencies_parsed_at":"2024-11-12T21:33:41.716Z","dependency_job_id":null,"html_url":"https://github.com/blezek/nifi-dicom","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/blezek/nifi-dicom","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blezek%2Fnifi-dicom","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blezek%2Fnifi-dicom/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blezek%2Fnifi-dicom/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blezek%2Fnifi-dicom/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blezek","download_url":"https://codeload.github.com/blezek/nifi-dicom/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blezek%2Fnifi-dicom/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30399660,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T18:46:22.935Z","status":"ssl_error","status_checked_at":"2026-03-11T18:46:17.045Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dicom","java","java-8","nifi"],"created_at":"2026-03-11T20:42:02.317Z","updated_at":"2026-03-11T20:42:02.910Z","avatar_url":"https://github.com/blezek.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DICOM for NiFi\n\n[`nifi-dicom`](https://github.com/blezek/nifi-dicom) adds DICOM features to Apache's [NiFi](https://nifi.apache.org/) package.  The new [`Processors`](https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html) reside in a `nar` file and extend NiFi with several new processors.  The `Processors` are self-documenting, with some details below.\n\nThe `nar` file releases can be [downloaded from GitHub](https://github.com/blezek/nifi-dicom/releases).\n\n## Building\n\n```bash\n# Run tests\n./gradlew test\n# Build the nar file, in build/libs\n./gradlew nar\n```\n\n## Install\n\nTo install `nifi-dicom` copy the `nar` file into the `lib` directory of your NiFi install and restart NiFi.\n\n```bash\ncp build/libs/nifi-dicom*.nar $NIFI_HOME/lib\n```\n\n## Notes on Encryption\n\n[DICOM Supplement 55 Attribute Level Confidentiality](http://dicom.nema.org/Dicom/supps/sup55_03.pdf) covers the proper procedure for deidentification of DICOM data, and potential later recovery of the original PHI.  The secret sauce is to encrypt a set of tags and embed into the deidentified DICOM.  Later, with the proper key or password, the data can be recovered.\n\nA [Nifi controller](https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#Controller_Services) providing deidentification using the [PixelMedNet DICOM Cleaner](http://www.pixelmed.com/cleaner.html) application.  Removed or modified attributes are encrypted using the [Bouncy Castle FIPS](https://www.bouncycastle.org/fips_faq.html) code (distributed with the source code).\n\nTo keep `UID` remapping consistent, this processor needs to be associated with a `DeidentificationService`.\n\n\n\n`DeidentifyEncryptDICOM` has these relevant properties:\n\n* `Password`: password used to encrypt, needed for decryption\n* `Iterations`: number of iterations to use in encryption, more is better for security but costs CPU cycles\n\n`DecryptReidentifyDICOM` decrypts and reidentifies DICOM data.  Must use the same `password` as `DeidentifyEncryptDICOM` or the data will not be recoverable.  Has the option (`Accept new series`) to preserve the `SeriesInstanceUID` and `SOPInstanceUID` in the deidentified data.  This is mainly useful for analytics that create new series and instances.\n\nRelevant properties:\n\n* `Password`: password for decryption, must match the `DeidentifyEncryptDICOM` password\n* `Accept new series`: if `true`, new series are allowed, otherwise they are rejected\n\n## Processors\n\n### DeidentifyDICOM\n\nThis processor implements a DICOM deidentifier.  The DeidentifyDICOM processor substitutes DICOM tags with deidentified values and stores the values.\n\n#### Properties:\n\n* `Deidentification controller`: Specified the deidentification controller for DICOM deidentification\n* `Generate identification`: Create generated identifiers if the patient name did not match the Identifier CSV file\n* `Keep descriptors`: Keep text description and comment attributes\n* `Keep series descriptors`: Keep the series description even if all other descriptors are removed\n* `Keep protocol name`: Keep protocol name even if all other descriptors are removed\n* `Keep patient characteristics`: Keep patient characteristics (such as might be needed for PET SUV calculations)\n* `Keep device identity`: Keep device identity\n* `Keep institution identity`: Keep institution identity\n* `Keep private tags`: Keep all private tags.  If set to 'false', all unsafe private tags are removed.\n* `Add contributing equipment sequence`: Add tags indicating the software used for deidentification\n\n#### Relationships:\n\n* `success`: All deidentified DICOM images will be routed as FlowFiles to this relationship\n* `not_matched`: DICOM files that do not match the patient remapping are routed to this relationship\n* `failure`: FlowFiles that are not DICOM images\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### ExtractDICOMTags\n\nThis processor extracts DICOM tags from the DICOM image and sets the values at attributes of the flowfile.  **Note:** this processor reads the entire file including all pixel data.\n\n#### Properties:\n\n* `Extract all DICOM tags`: Extract all DICOM tags if true, only listed tags if false\n* `Construct suggested filename`: Construct a filename of the pattern 'PatientName/Modality_Date/SeriesNumber_SeriesDescription/SOPInstanceUID.dcm' with all unacceptable characters mapped to '_'\n* `\u003cTagName\u003e`: any named Tag, for instance, `SeriesDescription`, `PatientId`.  Any Tag defined by `dcm4che` is accessable.  Missing Tags, or unknown Tags are ignored.  The `dcm4che` [Tags are generated dynamically from XML files](https://github.com/dcm4che/dcm4che/tree/master/dcm4che-dict/src/main/resources) \n\n#### Relationships:\n\n* `success`: All DICOM images will be routed as FlowFiles to this relationship\n* `failure`: FlowFiles that are not DICOM images\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### ListenDICOM\n\nThis processor implements a DICOM receiver to listen for incoming DICOM images.\n\n#### Properties:\n\n* `Local Application Entity Title`: ListenDICOM requires that remote DICOM Application Entities use this AE Title when sending DICOM, default is to accept all called AE Titles\n* `Listening port`: The TCP port the ListenDICOM processor will bind to.\n\n#### Relationships:\n\n* `success`: All new DICOM images will be routed as FlowFiles to this relationship\n\n#### FlowFile attributes:\n\n* `dicom.calling.aetitle`: The sending AE title\n* `dicom.calling.hostname`: The sending hostname\n* `dicom.called.aetitle`: The receiving AE title\n* `dicom.called.hostname`: The receiving hostname\n* `dicom.called.hostname`: The receiving hostname\n\n### PutDICOM\n\nThis processor implements a DICOM sender, sending DICOM images to the specified destination.\n\n#### Properties:\n\n* `Remote Application Entity Title`: \n* `Remote hostname of remote DICOM destination`: \n* `Remote Port`: The TCP port to send to.\n* `Local Application Entity`: \n* `batch size`: maxmium number of DICOM images to send at once, 0 is unlimited\n\n#### Relationships:\n\n* `success`: FlowFiles that are successfully sent will be routed to success\n* `reject`: FlowFiles that are not DICOM images\n* `failure`: FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### ModifyDICOMTags\n\nThis processor modifies DICOM tags. DICOM Tags listed as Properities are replaced by their value.  Tags are named according to the `ExtractDICOMTags` processor documented above. \n\n#### Properties:\n\n* `\u003cTag\u003e`: the value of the property is written as the value to `Tag`\n\n#### Relationships:\n\n* `success`: All modified DICOM images will be routed as FlowFiles to this relationship\n* `failure`: FlowFiles that are not DICOM images\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### DeidentifyEncryptDICOM\n\nThis processor implements a DICOM deidentifier.  Deidentified DICOM tags are encrypted using a password for later decription and re-identification.\n\n#### Properties:\n\n* `Encryption password`: Encryption password, leave empty or unset if deidintified or removed attributes are not to be encripted\n* `Encryption iterations`: Number of encription rounds.  Higher number of iterations are typically more secure, but require more per-image computation\n* `Keep descriptors`: Keep text description and comment attributes\n* `Keep series descriptors`: Keep the series description even if all other descriptors are removed\n* `Keep protocol name`: Keep protocol name even if all other descriptors are removed\n* `Keep patient characteristics`: Keep patient characteristics (such as might be needed for PET SUV calculations)\n* `Keep device identity`: Keep device identity\n* `Keep institution identity`: Keep institution identity\n* `Keep private tags`: Keep all private tags.  If set to 'false', all unsafe private tags are removed.\n* `Add contributing equipment sequence`: Add tags indicating the software used for deidentification\n\n#### Relationships:\n\n* `success`: All deidentified DICOM images will be routed as FlowFiles to this relationship\n* `failure`: FlowFiles that are not DICOM images\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### DecryptReidentifyDICOM\n\nThis processor implements a DICOM reidentifier.  Previously deidintified DICOM files with Supplement 55 encrypted tags have the original tags decrypted and the reidentified image is written as a FlowFile.\n\n#### Properties:\n\n* `Encryption password`: Encryption password, leave empty or unset if deidintified or removed attributes are not to be encripted\n* `Accept new series`: If the encrypted, generated Series and Instance UIDs do not match the DICOM object, assume this DICOM image is a new series generated from a deidentified, encrypted DICOM image.  Decrypt the original tags, but do not replace the Series and SOPInstance UIDs, effectively creating a new series\n* `Batch size`: Number of DICOM files to process in batch\n\n#### Relationships:\n\n* `success`: All deidentified DICOM images will be routed as FlowFiles to this relationship\n* `failure`: FlowFiles that are not DICOM images\n* `not decrypted`: DICOM images that could not be sucessfully decrypted\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n### DeidentifyEncryptDICOM\n\nThis processor implements a DICOM deidentifier.  Deidentified DICOM tags are encrypted using a password for later decription and re-identification.\n\n#### Properties:\n\n* `Encryption password`: Encryption password, leave empty or unset if deidintified or removed attributes are not to be encripted\n* `Encryption iterations`: Number of encription rounds.  Higher number of iterations are typically more secure, but require more per-image computation\n* `Keep descriptors`: Keep text description and comment attributes\n* `Keep series descriptors`: Keep the series description even if all other descriptors are removed\n* `Keep protocol name`: Keep protocol name even if all other descriptors are removed\n* `Keep patient characteristics`: Keep patient characteristics (such as might be needed for PET SUV calculations)\n* `Keep device identity`: Keep device identity\n* `Keep institution identity`: Keep institution identity\n* `Keep private tags`: Keep all private tags.  If set to 'false', all unsafe private tags are removed.\n* `Add contributing equipment sequence`: Add tags indicating the software used for deidentification\n\n#### Relationships:\n\n* `success`: All deidentified DICOM images will be routed as FlowFiles to this relationship\n* `failure`: FlowFiles that are not DICOM images\n\n#### FlowFile attributes:\n\n* **N/A**: does not set attributes\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblezek%2Fnifi-dicom","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblezek%2Fnifi-dicom","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblezek%2Fnifi-dicom/lists"}