image-bridge-toolkit
image-bridge-toolkit provides cache-backed perceptual image fingerprinting and cross-dataset bridge matching designed to handle large scale (50,000+ image) libraries. It finds identical or highly similar images across disparate folders while remaining resilient to scale shifts, aspect ratio changes, heavy compression, and intrusive watermarks.
Key Features
- Per-Directory JSON Caching: Generates and maintains lightweight
image_cache.jsonfiles within each directory, keyed by filename and modification time (mtime). - Scale-Invariant Waveform Approximations: Uses 16-float 1D Discrete Cosine Transform (DCT) grayscale histogram vectors to ignore local watermark text spikes and compression artifacts.
- 5-Tier Matching Funnel:
- Tier 1 (Bitwise pHash Luma + Color): Generous 64-bit Hamming filtering to eliminate obvious non-matches.
- Tier 2 (Histogram Waveform): Euclidean distance on 16 low-frequency DCT coefficients to filter lighting distribution changes.
- Tier 3 (LAB Perceptual Metrics): Vector distance across
lab_value,lab_hue,lab_chroma, andlab_warmth. - Tier 4 (Spatial Layout Tie-Breaker): 16-point color spatial coordinates down-weighting image outer margins where signatures and borders reside.
- Tier 5 (Optional SSIM Direct Comparison): Full structural similarity pixel comparison on top candidate matches.
- Resumable & High Performance: Output streams as
.jsonlobjects, allowing runs over huge original sets to resume instantly without re-processing. - Zero-Dependency Fallback: Runs with
OpenCVif available for acceleration, or falls back to pureNumPy+Pillow.
Installation
Install via PyPI:
# Minimal installation (NumPy + Pillow)
pip install image-bridge-toolkit
# Recommended installation (includes OpenCV acceleration & progress bars)
pip install "image-bridge-toolkit[all]"
For development:
git clone [https://github.com/akingdom/image_bridge_toolkit.git](https://github.com/akingdom/image_bridge_toolkit.git)
cd image_bridge_toolkit
pip install -e ".[all]"
Usage
1. Build or Update Metadata Caches (imgcache-build)
Walks a root directory, scanning all subdirectories (skipping any directory containing .ignore_subdir), and generates or updates image_cache.json.
# Build cache for a query dataset (e.g., 1,000 watermarked images)
imgcache-build /path/to/thumbnails_set
# Build cache for a target dataset (e.g., 50,000 original images)
imgcache-build /path/to/originals_set
2. Match Datasets (imgmatch-bridge)
Matches images from the query dataset against the target library, generating a bridge mapping file with confidence scores and top candidate lists.
imgmatch-bridge /path/to/thumbnails_set /path/to/originals_set \
-o bridge_map.jsonl \
--max-hamming 16 \
--candidate-threshold 0.03 \
--direct-compare
Command-Line Options
| Flag | Default | Description |
|---|---|---|
-o, --output |
bridge_map.jsonl |
File path for output streaming results. |
--max-hamming |
16 |
Maximum allowed Tier 1 pHash Hamming distance threshold. |
--candidate-threshold |
0.03 |
Percentage band (e.g., 3%) to include close secondary matches. |
--direct-compare |
False |
Performs Tier 5 pixel-level SSIM re-ranking on candidates. |
Cache Integrity & Updating
mtimeMatching: A cached entry is preserved as long as the file's modification time matches the record inimage_cache.json.- Partial Recomputation: If an existing cache entry is missing a newly added metric type (e.g.,
hist_waveform), only the missing calculation is executed; existing valid metrics are preserved. - Corrupt Cache Handling: Invalid or unparseable JSON files are automatically caught and rebuilt without interrupting directory traversal.
- Subdirectory Exclusion: Placing a
.ignore_subdirmarker inside any directory causes the builder and matcher to ignore that folder and all nested subdirectories.
Programming Usage
Includes
from pathlib import Path
from image_bridge_toolkit.cache_builder import ImageCacheBuilder
from image_bridge_toolkit.matcher import run_match
--- Tool A: build/refresh caches ---
builder = ImageCacheBuilder("/data/deviantart", workers=8)
stats = builder.run() # returns dict: dirs, files_seen, files_updated, files_reused
print(stats)
builder = ImageCacheBuilder("/data/originals", workers=16)
builder.run()
--- Tool B: match ---
run_match(
da_root="/data/deviantart",
orig_root="/data/originals",
output_path="bridge_map.jsonl",
max_hamming=16,
candidate_threshold=0.03,
do_direct_compare=True,
workers=8,
resume=True,
)
read results back in
import json
with open("bridge_map.jsonl") as f:
for line in f:
result = json.loads(line)
print(result["query_path"], "->", len(result["top_matches"]), "candidates")
License & Copyright
- Source Code (
src/): Licensed under the MIT License. - Documentation & Branding: Copyright © 2026 Andrew Kingdom. Licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License (CC BY-NC-ND 4.0).
- Translation Permission: Permission is explicitly granted to translate this documentation into other languages, provided that full attribution to Andrew Kingdom is maintained, a direct link to the original repository is included, and no non-linguistic modifications or structural alterations are made to the content.
Metadata
Release files for image-bridge-toolkit 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| image_bridge_toolkit-0.1.2.tar.gz | 20.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| image_bridge_toolkit-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.7 kB
Release files / image_bridge_toolkit-0.1.2.tar.gz
| Download URL | image_bridge_toolkit-0.1.2.tar.gz |
|---|---|
| Size | 20.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6f26b3d75dd9d851ef8ae8ec05167e02b55991b9372836cae5ea9a5d5395f76
|
|
BLAKE2b-256 checksum How to use checksums |
14d37e99d3b0bb7f868487d82157a7963867adcd77dd2d9c0601b85ddb7a7058
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.13
|
Release files / image_bridge_toolkit-0.1.2-py3-none-any.whl
| Download URL | image_bridge_toolkit-0.1.2-py3-none-any.whl |
|---|---|
| Size | 22.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0976538de95a12285d2d9c2602cfe769cdf6e932a806a6f597cf5711bc40a223
|
|
BLAKE2b-256 checksum How to use checksums |
e285bd237d29dee429b69ba1d8bced286f4426348c5c7602d4d99bb8b8586f0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.13
|
Security for image-bridge-toolkit 0.1.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.