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

Metadata

Release files for ouestcharlie-whitebeard 0.16.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.16.0
File Size Uploaded
ouestcharlie_whitebeard-0.16.0.tar.gz 1.7 MB Details

Built distribution (wheel)

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

Total release size: 1.7 MB

Release files / ouestcharlie_whitebeard-0.16.0.tar.gz

Download URL ouestcharlie_whitebeard-0.16.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
c1838510bac143fe952486adeb3be9870c0fad0050b0b4d2769834d79781b989
BLAKE2b-256 checksum
How to use checksums
fbe5f04a63700ad9eb7f74882effa34662dc0fba40683a24669c81d7386c80b9
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 Oct 1, 2026.

Transparency log

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

Download URL ouestcharlie_whitebeard-0.16.0-py3-none-any.whl
Size 16.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7f1e40fec13042f6b083d784488d2ed7a1bdf2eb155907c162dca6e60d96a8b6
BLAKE2b-256 checksum
How to use checksums
d538e667601e015292e979e1d917467d472fe4d99ed86d294abc9cabb8eb097a
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 Oct 1, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.16.0 This release

2 release files

0.15.0

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