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 partition manifest are carried over without re-processing. Only photos missing from the manifest are indexed. Photos deleted from disk are automatically removed from the manifest on the next run.

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.

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

Built distribution (wheel)

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

Total release size: 1.7 MB

Release files / ouestcharlie_whitebeard-0.14.0.tar.gz

Download URL ouestcharlie_whitebeard-0.14.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
0542465d3fa90a17ca24817e236089f42815fad662a28fb0fa410475228db48d
BLAKE2b-256 checksum
How to use checksums
76ab546f5a7cba061fc2c1612f52a8374c29974e3be0c3695ca32d9040e16645
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.0-py3-none-any.whl

Download URL ouestcharlie_whitebeard-0.14.0-py3-none-any.whl
Size 14.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0060b4be90354f9008e0fcf5022e042742c3165fb41959249fe9e415041105ea
BLAKE2b-256 checksum
How to use checksums
c168f7dab044f29b6601e03d39b64f416261eee38be0d6bd0c13979c2a259f52
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

0.14.1

2 release files

This release

0.14.0 This release

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