Skip to main content

Whitebeard: Photo library indexer

Whitebeard is the indexing agent for OuEstCharlie. It operates in index mode: scan an existing local photo library in place (no files moved), create XMP sidecars with ouestcharlie: fields, and write leaf manifests.

More about OuEstCharlie on the OuEstCharlie Blog

MCP tools: index_library and index_partition_scope, both incremental by default (force_full_index=False).

Project Layout

src/whitebeard/
  indexer.py    — core logic (no MCP dependency, independently testable)
  agent.py      — WhitebeardAgent(AgentBase) registering MCP tools
  __main__.py   — entry point: python -m whitebeard
tests/
  test_indexer.py

Installation

From PyPI (recommended)

pip install whitebeard

System prerequisites:

  • macOS: brew install inih brotli gettext (required by pyexiv2 at runtime)
  • Linux/Windows: no extra steps

From source (development)

Requires the sibling ouestcharlie-py-toolkit repo and a built image-proc binary (see its README_DEV.md):

uv venv
uv sync

Running Tests

Always use .venv/bin/python -m pytest:

.venv/bin/python -m pytest tests/ -v

Incremental vs Force Indexing

By default, both index_partition_scope and index_library run in incremental mode: photos already present in the index are carried over without re-processing. Only photos missing from the manifest are indexed.

To re-process all photos regardless of their manifest state, pass force_full_index=True. To also regenerate XMP sidecars specifically, add force_extract_exif=True.

Photos deleted from disk are automatically removed from the index on the next run, in both incremental and full-index mode.

MCP Inspector

Use mcp dev from the repo root with a backend config pointing at a local photo folder:

WOOF_BACKEND_CONFIG='{"type":"filesystem","root":"/path/to/photos"}' \
    mcp dev src/whitebeard/__main__.py

Note: The default MCP Inspector timeout is too low for full-library indexing runs. Increase it in the Inspector settings before calling index_library or index_partition_scope.

Context

Repository Purpose
ouestcharlie Architecture docs, HLR/HLD, MCP interface
ouestcharlie-woof Woof controller
ouestcharlie-py-toolkit Python toolkit for agents
ouestcharlie-whitebeard This repo Indexing agent
ouestcharlie-wally Search/consumption agent

Release files for ouestcharlie-whitebeard 0.14.1

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

Source distribution (sdist)

Source distribution for ouestcharlie-whitebeard 0.14.1
File Size Uploaded
ouestcharlie_whitebeard-0.14.1.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for ouestcharlie-whitebeard 0.14.1
File Interpreter ABI Platform
ouestcharlie_whitebeard-0.14.1-py3-none-any.whl Python 3 none any Details

Total release size: 1.7 MB

Release files / ouestcharlie_whitebeard-0.14.1.tar.gz

Download URL ouestcharlie_whitebeard-0.14.1.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
d2333a741bca1b2eb46223a525ce09fd2455a3c947534db6f7ebeaaf5f21e8d6
BLAKE2b-256 checksum
How to use checksums
6a9ef0819484d895f172d2c396f317be6b31b2e3d4392436438484a7fa74c000
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 16, 2026.

Transparency log

Release files / ouestcharlie_whitebeard-0.14.1-py3-none-any.whl

Download URL ouestcharlie_whitebeard-0.14.1-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec80384743040bbc444d61e318059550289b192779a8b517f125c3c0281219d9
BLAKE2b-256 checksum
How to use checksums
674e806ebb84031c726991dd33accf74b3de599d419db97abab4b61a9c906555
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 16, 2026.

Transparency log

Release history Release notifications | RSS feed

0.15.0

2 release files

0.14.2

2 release files

This release

0.14.1 This release

2 release files

0.14.0

2 release files

0.13.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.2

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.5.2

2 release files

0.5.0

2 release files

0.3.0

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