{
  "guide": {
    "slug": "philter-ucsf",
    "title": "Philter UCSF Guide",
    "subtitle": "A source-qualified guide to when Philter UCSF fits the locally deployable text redaction job.",
    "summary": "Philter UCSF is eligible for the clinical-note subset of local text de-identification; a specialized alternative, not a general-language drop-in.",
    "category": {
      "slug": "software",
      "name": "Software",
      "description": "Fact sheets for developer tools, AI systems, software platforms, and technical buying or adoption decisions."
    },
    "tags": [
      "software",
      "privacy",
      "pii",
      "redaction",
      "philter-ucsf"
    ],
    "version": "2026-10-18.1",
    "publishedAt": "2026-10-18",
    "r2JsonKey": "guides/philter-ucsf/2026-10-18.1.json",
    "updatedAt": "2026-10-18",
    "vaultPath": "Research/Technology/Software Development/AI Tools/Philter UCSF Guide.md",
    "freshness": "Checked 2026-10-18 against the cited sources. Official product claims, independent review/community signals, and evidence limits are reported; no hands-on benchmark, installation test, or privacy audit is claimed.",
    "heroLabel": "Locally deployable text redaction",
    "archetype": "comparison",
    "thesisCards": [
      {
        "label": "Verdict",
        "title": "Choose it for clinical-note filtering.",
        "body": "Philter UCSF fits the clinical-note subset of local text de-identification. It is a specialized alternative rather than a general-language drop-in."
      },
      {
        "label": "Workflow",
        "title": "Remove protected health information from clinical text.",
        "body": "Configure the filters and input/output paths for clinical plain-text notes, then inspect the redacted output. Evaluate it on representative clinical text before extending the workflow to another domain."
      },
      {
        "label": "Boundary",
        "title": "Check the limit before committing",
        "body": "The key constraint is Clinical-domain focus; general chat/email quality is not established. No source here proves a universal performance, privacy, or reliability outcome."
      }
    ],
    "stats": [],
    "sections": [
      {
        "id": "decision",
        "eyebrow": "Decision",
        "title": "Choose Philter UCSF when its documented boundary matches the job.",
        "body": "Philter UCSF fits the clinical-note subset of local text de-identification. The cited sources describe it as a locally deployable redaction option. Choose it when clinical-note de-identification is the job. Its clinical-domain focus does not establish quality for general chat or email."
      },
      {
        "id": "setup",
        "eyebrow": "Setup",
        "title": "Start by confirming deployment and the data path.",
        "body": "Confirm this setup detail before you build a routine: Local Python command-line package. Then verify the processing boundary — Configurable filtering pipeline with optional evaluation annotations — and keep the first sample low-risk until the account, device, or runtime behavior matches the source description."
      },
      {
        "id": "workflow",
        "eyebrow": "Workflow",
        "title": "Workflow: remove protected health information from clinical plain text.",
        "body": "Use Philter UCSF to remove protected health information from clinical plain text. Customization is described as filter configuration and input/output paths. Keep the workflow small enough to review its output and control settings; the cited sources do not establish a universal quality or speed result."
      },
      {
        "id": "comparison",
        "eyebrow": "Alternatives",
        "title": "Compare Philter UCSF by the constraint that decides the work.",
        "body": "The five-guide table retains the current guide and four siblings in the locally deployable text redaction group. Values come from the cited source cells; an Unknown cell means the sources did not support a stronger statement.",
        "table": {
          "columns": [
            "Guide",
            "Workflow",
            "Deployment",
            "Input",
            "Entry cost",
            "Method",
            "Customization",
            "Limitation"
          ],
          "rows": [
            [
              "OpenAI Privacy Filter",
              "Model-based text redaction with a local CLI and Python API.",
              "Local CPU or GPU; checkpoints downloaded if absent.",
              "Text strings, files and pipes.",
              "Open repository; compute and operational costs remain.",
              "Token classification with span decoding.",
              "Runtime precision/recall presets, evaluation and fine-tuning commands.",
              "Validate detection on the target corpus; community scores change with matching criteria."
            ],
            [
              "Presidio",
              "PII identification followed by configurable anonymization.",
              "Python module or self-hosted HTTP service/container.",
              "Text and detected entity spans.",
              "Open-source deployment; self-hosting/integration cost separate.",
              "Analyzer plus separate anonymizer operators.",
              "Replace, mask, redact or encrypt; reversible operators need corresponding metadata and keys.",
              "Anonymizer acts on supplied detections; missing detections are not repaired by replacement."
            ],
            [
              "scrubadub",
              "Replace personally identifiable spans in free text.",
              "Python package invoked inside local scripts.",
              "Free-text strings.",
              "Apache-2.0 software; dependency and operation costs separate.",
              "Detectors identify spans; postprocessors control replacement.",
              "Optional address, spaCy and Stanford detector packages; locale configuration.",
              "Extra detector dependencies are needed for some entity types."
            ],
            [
              "Limina on-premises",
              "Detect and de-identify sensitive data; this comparison covers text.",
              "Container in customer on-premises environment or VPC.",
              "Text; product also supports documents, images and audio.",
              "Enterprise custom pricing; free hosted Starter is not the local-deployment price.",
              "Commercial entity detection and de-identification engine.",
              "Enterprise model-version pinning and guided integration/tuning.",
              "Local availability and commercial terms require vendor agreement."
            ],
            [
              "Philter UCSF",
              "Remove protected health information from clinical plain text.",
              "Local Python command-line package.",
              "Plain-text file or directory of clinical notes.",
              "BSD-3-Clause software; integration and compute separate.",
              "Configurable filtering pipeline with optional evaluation annotations.",
              "Filter configuration and input/output paths.",
              "Clinical-domain focus; general chat/email quality is not established."
            ]
          ]
        }
      },
      {
        "id": "review-signal",
        "eyebrow": "Review signal",
        "title": "Independent context for Philter UCSF is bounded.",
        "body": "UCSF authors / JAMIA Open (A certified de-identification system for all clinical text documents) reports: The available paper summary discusses the clinical system’s development and precision concerns. Limit: No numeric result from this paper was independently verified for this guide. These signals add context, but they do not establish comparative performance.",
        "bullets": [
          "UCSF authors / JAMIA Open: The available paper summary discusses the clinical system’s development and precision concerns. (No numeric result from this paper was independently verified for this guide.)"
        ]
      },
      {
        "id": "caveats",
        "eyebrow": "Caveats",
        "title": "Keep the source boundary visible while you decide.",
        "body": "The current cited cost statement is: BSD-3-Clause software; integration and compute separate. Privacy or processing control is described as: Privacy controls are not fully described in the cited sources. The principal product boundary is: Clinical-domain focus; general chat/email quality is not established. These are source-qualified statements, not an installation result, benchmark, security audit, or retention guarantee.",
        "bullets": [
          "The paper summary provides clinical context, but no independently verified numeric result supports a performance comparison here.",
          "Repository and published system versions may differ. No claimed compliance certification or accuracy number."
        ]
      },
      {
        "id": "decision-surface",
        "eyebrow": "First check",
        "title": "Make the first adoption check specific to Philter UCSF.",
        "body": "Run a labeled sample from the target corpus through detection and replacement, then inspect misses, over-redaction, and logs before sending real data through the pipeline."
      }
    ],
    "sources": [
      {
        "id": "opf-repo",
        "title": "Privacy Filter repository and CLI",
        "publisher": "OpenAI",
        "url": "https://github.com/openai/privacy-filter",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "presidio-home",
        "title": "Presidio overview",
        "publisher": "Data Privacy Stack",
        "url": "https://presidio.dataprivacystack.org/",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "presidio-anonymizer",
        "title": "Presidio Anonymizer",
        "publisher": "Data Privacy Stack",
        "url": "https://presidio.dataprivacystack.org/anonymizer/",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "scrubadub-repo",
        "title": "scrubadub README and license",
        "publisher": "LeapBeyond",
        "url": "https://github.com/LeapBeyond/scrubadub",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "scrubadub-docs",
        "title": "scrubadub stable documentation",
        "publisher": "scrubadub maintainers",
        "url": "https://scrubadub.readthedocs.io/en/stable/",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "limina-plans",
        "title": "Pricing and deployment FAQ",
        "publisher": "Limina",
        "url": "https://www.getlimina.ai/en/pricing",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "philter-repo",
        "title": "Philter UCSF README",
        "publisher": "UCSF / BCHSI",
        "url": "https://github.com/BCHSI/philter-ucsf",
        "sourceType": "official",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "opf-community-eval",
        "title": "GLiNER large-v2.1 vs Privacy Filter case study",
        "publisher": "Gaurav Vij / GitHub",
        "url": "https://github.com/gauravvij/pii-filter-model-eval",
        "sourceType": "community",
        "accessedAt": "2026-10-18"
      },
      {
        "id": "philter-paper",
        "title": "A certified de-identification system for all clinical text documents",
        "publisher": "UCSF authors / JAMIA Open",
        "url": "https://pmc.ncbi.nlm.nih.gov/articles/PMC10320112/",
        "sourceType": "review",
        "accessedAt": "2026-10-18"
      }
    ],
    "claims": [
      {
        "id": "research-philter-ucsf-philter-ucsf-workflow",
        "claim": "Remove protected health information from clinical plain text.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Source-qualified product description; no independent performance test was run.",
        "guideLocation": "Workflow: remove protected health information from clinical plain text.",
        "sectionId": "workflow"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-deployment",
        "claim": "Local Python command-line package.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Source-qualified product description; no independent performance test was run.",
        "guideLocation": "Start by confirming deployment and the data path.",
        "sectionId": "setup"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-input",
        "claim": "Plain-text file or directory of clinical notes.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Source-qualified product description; no independent performance test was run.",
        "guideLocation": "Start by confirming deployment and the data path.",
        "sectionId": "setup"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-entryCost",
        "claim": "BSD-3-Clause software; integration and compute separate.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Observed source wording; regional pricing, billing cadence, and future plan changes are not inferred.",
        "guideLocation": "Choose Philter UCSF when its documented boundary matches the job.",
        "sectionId": "decision"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-method",
        "claim": "Configurable filtering pipeline with optional evaluation annotations.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Source-qualified product description; no independent performance test was run.",
        "guideLocation": "Workflow: remove protected health information from clinical plain text.",
        "sectionId": "workflow"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-customization",
        "claim": "Filter configuration and input/output paths.",
        "sourceId": "philter-repo",
        "evidenceType": "official",
        "confidence": "high",
        "caveat": "Source-qualified product description; no independent performance test was run.",
        "guideLocation": "Workflow: remove protected health information from clinical plain text.",
        "sectionId": "workflow"
      },
      {
        "id": "research-philter-ucsf-philter-ucsf-limitation",
        "claim": "Clinical-domain focus; general chat/email quality is not established.",
        "sourceId": "philter-repo",
        "evidenceType": "inference",
        "confidence": "medium",
        "caveat": "This is a scope inference; published clinical results do not establish quality on general chat or email.",
        "guideLocation": "Keep the source boundary visible while you decide.",
        "sectionId": "caveats"
      },
      {
        "id": "research-philter-ucsf-signal-philter-paper",
        "claim": "UCSF authors / JAMIA Open reports: The available paper summary discusses the clinical system’s development and precision concerns.",
        "sourceId": "philter-paper",
        "evidenceType": "review",
        "confidence": "medium",
        "caveat": "No numeric result from this paper was independently verified for this guide.",
        "guideLocation": "Independent context for Philter UCSF is bounded.",
        "sectionId": "review-signal"
      }
    ],
    "relatedGuides": [
      {
        "slug": "openai-privacy-filter",
        "role": "alternative",
        "rank": 1,
        "reason": "The existing locally runnable model/CLI baseline for contextual text redaction."
      },
      {
        "slug": "presidio-text-redaction",
        "role": "alternative",
        "rank": 2,
        "reason": "A local integration toolkit when the evaluator needs configurable recognizers and multiple replacement operators."
      },
      {
        "slug": "scrubadub-text-redaction",
        "role": "alternative",
        "rank": 3,
        "reason": "A locally embedded Python option for relatively simple text-cleaning pipelines with configurable detectors."
      },
      {
        "slug": "limina-local-redaction",
        "role": "alternative",
        "rank": 4,
        "reason": "The commercial local-deployment option for organizations that want vendor-supported de-identification."
      }
    ],
    "comparison": {
      "title": "Locally deployable text redaction alternatives",
      "intro": "This table keeps philter-ucsf beside four listed alternatives using source-qualified workflow, platform, processing, cost, control, and limitation notes. It is an editorial fit map, not a performance test or market ranking.",
      "alternatives": [
        "openai-privacy-filter",
        "presidio-text-redaction",
        "scrubadub-text-redaction",
        "limina-local-redaction"
      ],
      "includeCurrent": true,
      "dimensions": [
        {
          "id": "workflow",
          "label": "workflow",
          "values": {
            "openai-privacy-filter": "Model-based text redaction with a local CLI and Python API.",
            "presidio-text-redaction": "PII identification followed by configurable anonymization.",
            "scrubadub-text-redaction": "Replace personally identifiable spans in free text.",
            "limina-local-redaction": "Detect and de-identify sensitive data; this comparison covers text.",
            "philter-ucsf": "Remove protected health information from clinical plain text."
          }
        },
        {
          "id": "deployment",
          "label": "deployment",
          "values": {
            "openai-privacy-filter": "Local CPU or GPU; checkpoints downloaded if absent.",
            "presidio-text-redaction": "Python module or self-hosted HTTP service/container.",
            "scrubadub-text-redaction": "Python package invoked inside local scripts.",
            "limina-local-redaction": "Container in customer on-premises environment or VPC.",
            "philter-ucsf": "Local Python command-line package."
          }
        },
        {
          "id": "input",
          "label": "input",
          "values": {
            "openai-privacy-filter": "Text strings, files and pipes.",
            "presidio-text-redaction": "Text and detected entity spans.",
            "scrubadub-text-redaction": "Free-text strings.",
            "limina-local-redaction": "Text; product also supports documents, images and audio.",
            "philter-ucsf": "Plain-text file or directory of clinical notes."
          }
        },
        {
          "id": "entry-cost",
          "label": "entry cost",
          "values": {
            "openai-privacy-filter": "Open repository; compute and operational costs remain.",
            "presidio-text-redaction": "Open-source deployment; self-hosting/integration cost separate.",
            "scrubadub-text-redaction": "Apache-2.0 software; dependency and operation costs separate.",
            "limina-local-redaction": "Enterprise custom pricing; free hosted Starter is not the local-deployment price.",
            "philter-ucsf": "BSD-3-Clause software; integration and compute separate."
          }
        },
        {
          "id": "method",
          "label": "method",
          "values": {
            "openai-privacy-filter": "Token classification with span decoding.",
            "presidio-text-redaction": "Analyzer plus separate anonymizer operators.",
            "scrubadub-text-redaction": "Detectors identify spans; postprocessors control replacement.",
            "limina-local-redaction": "Commercial entity detection and de-identification engine.",
            "philter-ucsf": "Configurable filtering pipeline with optional evaluation annotations."
          }
        },
        {
          "id": "customization",
          "label": "customization",
          "values": {
            "openai-privacy-filter": "Runtime precision/recall presets, evaluation and fine-tuning commands.",
            "presidio-text-redaction": "Replace, mask, redact or encrypt; reversible operators need corresponding metadata and keys.",
            "scrubadub-text-redaction": "Optional address, spaCy and Stanford detector packages; locale configuration.",
            "limina-local-redaction": "Enterprise model-version pinning and guided integration/tuning.",
            "philter-ucsf": "Filter configuration and input/output paths."
          }
        },
        {
          "id": "limitation",
          "label": "limitation",
          "values": {
            "openai-privacy-filter": "Validate detection on the target corpus; community scores change with matching criteria.",
            "presidio-text-redaction": "Anonymizer acts on supplied detections; missing detections are not repaired by replacement.",
            "scrubadub-text-redaction": "Extra detector dependencies are needed for some entity types.",
            "limina-local-redaction": "Local availability and commercial terms require vendor agreement.",
            "philter-ucsf": "Clinical-domain focus; general chat/email quality is not established."
          }
        }
      ]
    },
    "revisions": [
      {
        "version": "2026-10-18.1",
        "date": "2026-10-18",
        "note": "Initial dedicated guide from the 2026-10-18 cited sources."
      }
    ]
  },
  "publicUrl": "https://fieldguides.co/g/philter-ucsf"
}