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

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.15.0

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.15.0
File Size Uploaded
ouestcharlie_whitebeard-0.15.0.tar.gz 1.7 MB Details

Built distribution (wheel)

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

Total release size: 1.7 MB

Release files / ouestcharlie_whitebeard-0.15.0.tar.gz

Download URL ouestcharlie_whitebeard-0.15.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
155de7a412fb02cd0680434519a9bb6ea42b48944bd450783bb03aee846b57a3
BLAKE2b-256 checksum
How to use checksums
533d144ef9626d72617b31e9d10b3124c3579f4c9472dd59de374e0f3e0f2840
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 Sep 17, 2026.

Transparency log

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

Download URL ouestcharlie_whitebeard-0.15.0-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
085d685d17dac4137d108ae602c6c08dbaa3fdb4de5373099bdc233ad5972f55
BLAKE2b-256 checksum
How to use checksums
64a02160d68e0463bfa349e7808afa45e34fc923a15dcae9ca94512c67254cca
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 Sep 17, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.15.0 This release

2 release files

0.14.2

2 release files

0.14.1

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