{
    "version": "ifuri.connector.v1",
    "generatedAt": "2026-07-17T05:23:51+00:00",
    "connector": {
        "id": "fs",
        "name": "Filesystem duplicates",
        "status": "available",
        "category": "Filesystem",
        "summary": "Find duplicate files in any folder over fs:// URIs. Exact byte duplicates by SHA-256 (stdlib) and near-duplicate IMAGES by perceptual hash (reusing wronai-img2nl analyze_fingerprint). A move command quarantines extras into _duplicates/, keeping the first of each group.",
        "description": "fs:// turns duplicate detection into a first-class URI instead of ad-hoc shell + sha256sum. fs://host/duplicates/query/find scans a folder tree and returns groups of duplicate files: mode=sha256 finds byte-identical files of any type; mode=perceptual finds near-duplicate images by perceptual hash (phash/dhash/whash via the wronai/img2nl fingerprint engine, compared by Hamming distance within a threshold). fs://host/duplicates/command/move quarantines the extra copies (all but the first of each group) into <root>/_duplicates/<key>/, with a dry_run default. Built for the office flow — dedupe exported invoices and attachments.",
        "uriSchemes": [
            "fs"
        ],
        "routes": [
            "fs://host/duplicates/query/find",
            "fs://host/duplicates/command/move"
        ],
        "useCases": [
            "Find byte-identical duplicate files in a folder tree.",
            "Detect near-duplicate images by perceptual hash.",
            "Quarantine the extra copies of exported invoices."
        ],
        "examples": [
            {
                "title": "Find duplicates",
                "uri": "fs://host/duplicates/query/find",
                "payload": {
                    "root": "/data/exports",
                    "mode": "sha256"
                }
            },
            {
                "title": "Move extra copies",
                "uri": "fs://host/duplicates/command/move",
                "payload": {
                    "root": "/data/exports",
                    "dry_run": true
                }
            }
        ],
        "requires": {
            "system": [],
            "python": [
                "urirun"
            ],
            "optional": [
                "pillow + imagehash (or img2nl) for perceptual image mode"
            ]
        },
        "install": {
            "mode": "urirun-extra",
            "pipSpec": "urirun-connector-fs @ git+https://github.com/if-uri/urirun-connector-fs.git@v0.1.0"
        },
        "docsUrl": "https://github.com/if-uri/urirun-connector-fs",
        "keywords": [
            "duplicates",
            "dedupe",
            "sha256",
            "perceptual-hash",
            "phash",
            "imagehash",
            "filesystem",
            "invoice"
        ],
        "provenance": "verified",
        "publisher": {
            "name": "if-uri",
            "url": "https://ifuri.com",
            "github": "https://github.com/if-uri"
        }
    },
    "registryEntry": {
        "id": "fs",
        "name": "Filesystem duplicates",
        "status": "available",
        "category": "Filesystem",
        "summary": "Find duplicate files in any folder over fs:// URIs. Exact byte duplicates by SHA-256 (stdlib) and near-duplicate IMAGES by perceptual hash (reusing wronai-img2nl analyze_fingerprint). A move command quarantines extras into _duplicates/, keeping the first of each group.",
        "description": "fs:// turns duplicate detection into a first-class URI instead of ad-hoc shell + sha256sum. fs://host/duplicates/query/find scans a folder tree and returns groups of duplicate files: mode=sha256 finds byte-identical files of any type; mode=perceptual finds near-duplicate images by perceptual hash (phash/dhash/whash via the wronai/img2nl fingerprint engine, compared by Hamming distance within a threshold). fs://host/duplicates/command/move quarantines the extra copies (all but the first of each group) into <root>/_duplicates/<key>/, with a dry_run default. Built for the office flow — dedupe exported invoices and attachments.",
        "uriSchemes": [
            "fs"
        ],
        "routes": [
            "fs://host/duplicates/query/find",
            "fs://host/duplicates/command/move"
        ],
        "examples": [
            {
                "title": "Find duplicates",
                "uri": "fs://host/duplicates/query/find",
                "payload": {
                    "root": "/data/exports",
                    "mode": "sha256"
                }
            },
            {
                "title": "Move extra copies",
                "uri": "fs://host/duplicates/command/move",
                "payload": {
                    "root": "/data/exports",
                    "dry_run": true
                }
            }
        ],
        "flowExample": [],
        "install": {
            "mode": "urirun-extra",
            "pipSpec": "urirun-connector-fs @ git+https://github.com/if-uri/urirun-connector-fs.git@v0.1.0"
        },
        "docsUrl": "https://github.com/if-uri/urirun-connector-fs",
        "hubUrl": "https://connect.ifuri.com/connectors/fs",
        "manifestUrl": "https://connect.ifuri.com/connectors/fs.json",
        "verified": false
    },
    "installCommand": "curl -fsSL 'https://connect.ifuri.com/install?connectors=fs' | bash"
}