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_libraryorindex_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)
| File | Size | Uploaded | |
|---|---|---|---|
| ouestcharlie_whitebeard-0.14.1.tar.gz | 1.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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