Batch workflows

Process entire directories of images at once. Batch operations wrap the individual embed, extract, and verify functions for directory-level workflows.

Batch embed

Batch embed workflow
Input directory + metadata
↓
batch_embed()
↓
Iterate matching files (*.jpg)
↓
Call embed_image() for each
↓
Output directory with embedded images
from jpegtrust import batch_embed

outputs = batch_embed(
    input_dir="./raw_photos",
    metadata="metadata.json",
    output_dir="./signed_photos",
    pattern="*.jpg",
)
print(f"Embedded {len(outputs)} files")

Batch extract

Batch extract workflow
Input directory
↓
batch_extract()
↓
Iterate files, extract metadata
↓
List of results + optional JSON files
from jpegtrust import batch_extract

results = batch_extract(
    input_dir="./signed_photos",
    output_dir="./extracted",    # writes .json files here
    pattern="*.jpg",
)
for r in results:
    has_meta = "yes" if r["metadata"] else "no"
    print(f"{r['filename']}: metadata={has_meta}")

Batch verify

Batch verify workflow
Input directory + trust profile
↓
batch_verify()
↓
Iterate files
↓
Extract + verify each image
↓
Aggregate results + summary
↓
Output: results list + summary counts
from jpegtrust import batch_verify

result = batch_verify(
    input_dir="./signed_photos",
    profile="newsroom_profile.yml",
    pattern="*.jpg",
)

summary = result["summary"]
print(f"Total: {summary['total']}")
print(f"Passed: {summary['passed']}")
print(f"Warnings: {summary['warnings']}")
print(f"Failed: {summary['failed']}")
print(f"Errors: {summary['errors']}")

# Detailed per-file results
for r in result["results"]:
    print(f"  {r['filename']}: {r['status']} ({r.get('score', 0)})")

CLI

# Batch embed
jpegtrust batch embed ./photos metadata.json -o ./signed

# Batch extract
jpegtrust batch extract ./signed -o ./extracted

# Batch verify (text summary)
jpegtrust batch verify ./signed profile.yml

# Batch verify (JSON for piping)
jpegtrust batch verify ./signed profile.yml --format json

# Custom file pattern
jpegtrust batch verify ./signed profile.yml --pattern "*.jpeg"

Result format

{
  "summary": {
    "total": 50,
    "passed": 42,
    "warnings": 5,
    "failed": 2,
    "errors": 1
  },
  "results": [
    {"filename": "img001.jpg", "status": "pass", "score": 1.0, ...},
    {"filename": "img002.jpg", "status": "warning", "score": 0.778, ...},
    {"filename": "img003.jpg", "status": "error", "message": "No metadata found"}
  ]
}