Skip to main content

photo-quality-analyzer

Intelligent technical assessment for digital photography.

photo-quality-analyzer is a local-first Python SDK and CLI tool that uses signal processing and computer vision to objectively score photographic quality. It normalizes metrics against a database of 147+ camera models to account for sensor-specific physics like diffraction limits and dynamic range baselines.

From PyPI

pip install photo-quality-analyzer-core

From GitHub (Source)

For developers or users who want the latest changes directly from the source:

pip install git+https://github.com/prasadabhishek/photo-quality-analyzer.git

What This Library Is (And Isn't)

This library is a Technical Quality Filter ("Janitor"), not an artistic evaluator ("Curator").

✅ What it WILL do:

  • Identify out-of-focus, underexposed, or noisy images
  • Filter out broken shots from large photo libraries (10,000+ images)
  • Provide objective technical metrics (sharpness, noise, dynamic range)
  • Normalize scores against known camera sensor physics

❌ What it WON'T do:

  • Judge artistic merit or emotional impact
  • Understand intentional creative choices (low-key lighting, film grain, etc.)
  • Replace human curation for portfolio selection
  • Prefer "interesting" photos over "boring but technically perfect" ones

Use Case: Wedding photographers culling 5,000 shots to eliminate camera-shake blurs and exposure failures—not fine art curation.


Metrics

The engine evaluates technical quality through a multi-dimensional lens:

  • Sharpness: FFT-based acutance, invariant to rotation and noise.

  • Exposure: Ansel Adams Zone System analysis for clipping detection.

  • Focus: ROI-specific sharpness on the main subject (auto-detected).

  • Noise: Statistical variance estimation for ISO-related grain.

  • Dynamic Range: Tonal entropy and sensor-aware potential.

  • Color Balance: Neutral pixel selection for finding color casts.

  • Color Balance: Neutral pixel selection for finding color casts.

For more information, see our documentation:

  • 📖 USAGE.md: Practical examples and CLI guides.
  • ⚙️ API.md: Technical reference for Python developers.
  • 🔬 SCIENCE.md: Deep dive into the underlying physics and algorithms.

Usage

CLI

Analyze an entire folder and optionally move files based on quality:

python analyzer.py --folder_path /path/to/photos --move

SDK

from photo_quality_analyzer_core.analyzer import evaluate_photo_quality

# Works with JPEGs and RAW files
result = evaluate_photo_quality("photo.arw")
print(result['judgement']) # "Excellent", "Good", etc.

See USAGE.md for more advanced examples (AI toggling, metric filtering, etc).

How it works

The engine uses a hybrid approach to distinguish between artistic intent and technical failure:

  1. FFT Anisotropy: Measures purely optical acutance, invariant to rotation. Adjusted for Aperture-aware diffraction.
  2. Zone System Histogram: Analyzes luminance using Ansel Adams' Zone System to detect destructive clipping.
  3. Neural ROI (YOLO26): Leverages the latest YOLO26 (January 2026 release) via ONNX Runtime to identify main subjects, ensuring metrics are calculated on the subject rather than the background.
  4. Sensor Normalization: Benchmarks images against the known limits of the specific camera sensor (Full Frame vs APS-C vs 1-inch).

Technology Stack

  • ONNX Runtime: Optimized, lightweight inference engine (replaced PyTorch).
  • YOLO26: Transformer-based subject detection (43% faster on CPUs).
  • OpenCV (Headless): Efficient image processing without GUI overhead.

evaluate_photo_quality(file_path, ...)

The primary entry point. It returns a dictionary containing scores, qualitative labels, and AI-generated scene descriptions.

See API.md for full function signatures and return types.

Contributing

Contributions are welcome! Please run the test suite before submitting:

PYTHONPATH=. python3 -m unittest discover tests

License

MIT

Metadata

Release files for photo-quality-analyzer-core 0.8.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for photo-quality-analyzer-core 0.8.4
File Size Uploaded
photo_quality_analyzer_core-0.8.4.tar.gz 38.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for photo-quality-analyzer-core 0.8.4
File Interpreter ABI Platform
photo_quality_analyzer_core-0.8.4-py3-none-any.whl Python 3 none any Details

Total release size: 68.8 kB

Release files / photo_quality_analyzer_core-0.8.4.tar.gz

Download URL photo_quality_analyzer_core-0.8.4.tar.gz
Size 38.4 kB
Tags Source
SHA-256 checksum
How to use checksums
b5b144876de3f4743a7884d5ea330d7af1525fe7154a34b032716798047f743c
BLAKE2b-256 checksum
How to use checksums
8f379abb88fb6532241f31024f5d717fa1baa0aceed14bf74e621c3a6cbba128
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 16, 2026.

Transparency log

Release files / photo_quality_analyzer_core-0.8.4-py3-none-any.whl

Download URL photo_quality_analyzer_core-0.8.4-py3-none-any.whl
Size 30.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1bc2a4179a56fd20d669de1e42ac58ae92ef3850828dd0100ce26598d026dd65
BLAKE2b-256 checksum
How to use checksums
b6f3d284125ea58ba1e2451f599a4629df9b39ac3afab281a7c9be51c6e2e6a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.8.4 This release

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page