{"id":25982533,"url":"https://github.com/aastopher/imgdd","last_synced_at":"2025-06-20T11:07:51.458Z","repository":{"id":266777230,"uuid":"899322360","full_name":"aastopher/imgdd","owner":"aastopher","description":"Performance-first perceptual hashing library; perfect for handling large datasets. Designed to quickly process nested folder structures, commonly found in image datasets.","archived":false,"fork":false,"pushed_at":"2025-02-23T21:51:34.000Z","size":6891,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-27T21:55:12.775Z","etag":null,"topics":["discrete-cosine-transform","haar-wavelet-tranforms","hashing","image-hashing","image-hashing-algorithms","mathematics","perceptual-hashing"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aastopher.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":"2024-12-06T03:12:58.000Z","updated_at":"2025-03-21T18:25:58.000Z","dependencies_parsed_at":"2025-01-24T03:18:25.715Z","dependency_job_id":"a6c12917-c5b2-4815-8c06-3f5903812b8e","html_url":"https://github.com/aastopher/imgdd","commit_stats":null,"previous_names":["aastopher/imgdd"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/aastopher/imgdd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aastopher%2Fimgdd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aastopher%2Fimgdd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aastopher%2Fimgdd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aastopher%2Fimgdd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aastopher","download_url":"https://codeload.github.com/aastopher/imgdd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aastopher%2Fimgdd/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260933426,"owners_count":23084956,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["discrete-cosine-transform","haar-wavelet-tranforms","hashing","image-hashing","image-hashing-algorithms","mathematics","perceptual-hashing"],"created_at":"2025-03-05T09:32:40.663Z","updated_at":"2025-06-20T11:07:46.434Z","avatar_url":"https://github.com/aastopher.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Documentation Status](https://img.shields.io/badge/docs-online-brightgreen)](https://aastopher.github.io/imgdd/)\n[![imgdd pypi](https://img.shields.io/pypi/v/imgdd?label=imgdd%20pypi)](https://pypi.org/project/imgdd)\n[![imgdd crate](https://img.shields.io/crates/v/imgdd?label=imgdd)](https://crates.io/crates/imgdd)\n[![imgddcore crate](https://img.shields.io/crates/v/imgddcore?label=imgddcore)](https://crates.io/crates/imgddcore)\n[![codecov](https://codecov.io/gh/aastopher/imgdd/graph/badge.svg?token=XZ1O2X04SO)](https://codecov.io/gh/aastopher/imgdd)\n[![DeepSource](https://app.deepsource.com/gh/aastopher/imgdd.svg/?label=active+issues\u0026show_trend=true\u0026token=IiuhCO6n1pK-GAJ800k6Z_9t)](https://app.deepsource.com/gh/aastopher/imgdd/)\n\n# imgdd: Image DeDuplication\n\n`imgdd` is a performance-first perceptual hashing library that combines Rust's speed with Python's accessibility, making it perfect for handling large datasets. Designed to quickly process nested folder structures, commonly found in image datasets.\n\n## Features\n- **Multiple Hashing Algorithms**: Supports `aHash`, `dHash`, `mHash`, `pHash`, `wHash`.\n- **Multiple Filter Types**: Supports `Nearest`, `Triangle`, `CatmullRom`, `Gaussian`, `Lanczos3`.\n- **Identify Duplicates**: Quickly identify duplicate hash pairs.\n- **Simplicity**: Simple interface, robust performance.\n\n## Why imgdd?\n\n`imgdd` has been inspired by [imagehash](https://github.com/JohannesBuchner/imagehash) and aims to be a lightning-fast replacement with additional features. To ensure enhanced performance, `imgdd` has been benchmarked against `imagehash`. In Python, [**imgdd consistently outperforms imagehash by ~60%–95%**](https://aastopher.github.io/imgdd/latest/benches), demonstrating a significant reduction in hashing time per image.\n\n---\n\n# Quick Start\n\n## Installation\n\n```bash\npip install imgdd\n```\n\n## Usage Examples\n\n### Hash Images\n\n```python\nimport imgdd as dd\n\nresults = dd.hash(\n    path=\"path/to/images\",\n    algo=\"dhash\",  # Optional: default = dhash\n    filter=\"triangle\",  # Optional: default = triangle\n    sort=False # Optional: default = False\n)\nprint(results)\n```\n\n### Find Duplicates\n\n```python\nimport imgdd as dd\n\nduplicates = dd.dupes(\n    path=\"path/to/images\",\n    algo=\"dhash\", # Optional: default = dhash\n    filter=\"triangle\", # Optional: default = triangle\n    remove=False # Optional: default = False\n)\nprint(duplicates)\n```\n\n## Supported Algorithms\n- **aHash**: Average Hash\n- **mHash**: Median Hash\n- **dHash**: Difference Hash\n- **pHash**: Perceptual Hash\n- **wHash**: Wavelet Hash\n\n## Supported Filters\n- `Nearest`, `Triangle`, `CatmullRom`, `Gaussian`, `Lanczos3`\n\n## Contributing\nContributions are always welcome! 🚀  \n\nFound a bug or have a question? Open a GitHub issue. Pull requests for new features or fixes are encouraged!\n\n## Similar projects\n- https://github.com/JohannesBuchner/imagehash\n- https://github.com/commonsmachinery/blockhash-python\n- https://github.com/acoomans/instagram-filters\n- https://pippy360.github.io/transformationInvariantImageSearch/\n- https://www.phash.org/\n- https://pypi.org/project/dhash/\n- https://github.com/thorn-oss/perception (based on imagehash code, depends on opencv)\n- https://docs.opencv.org/3.4/d4/d93/group__img__hash.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faastopher%2Fimgdd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faastopher%2Fimgdd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faastopher%2Fimgdd/lists"}