OuEstCharlie Whitebeard — photo indexer agent for local drives
Project description
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_partition and index_library, 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
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 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_partition.
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 |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ouestcharlie_whitebeard-0.7.0.tar.gz.
File metadata
- Download URL: ouestcharlie_whitebeard-0.7.0.tar.gz
- Upload date:
- Size: 379.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d022731dd999b81e5efdbff8f163b6144d52229bc74158c839f53527c723f6e
|
|
| MD5 |
0df988b97e8eebdd04d7f815e7100148
|
|
| BLAKE2b-256 |
c7279228589ebdc1832f55d1debb8275da60ced25eecf3ab05145ecd5c1126c9
|
Provenance
The following attestation bundles were made for ouestcharlie_whitebeard-0.7.0.tar.gz:
Publisher:
publish.yml on ouestcharlie/ouestcharlie-whitebeard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ouestcharlie_whitebeard-0.7.0.tar.gz -
Subject digest:
3d022731dd999b81e5efdbff8f163b6144d52229bc74158c839f53527c723f6e - Sigstore transparency entry: 1382481784
- Sigstore integration time:
-
Permalink:
ouestcharlie/ouestcharlie-whitebeard@0accc4a57785c98d05288511a7a4b057f78950fe -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/ouestcharlie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0accc4a57785c98d05288511a7a4b057f78950fe -
Trigger Event:
push
-
Statement type:
File details
Details for the file ouestcharlie_whitebeard-0.7.0-py3-none-any.whl.
File metadata
- Download URL: ouestcharlie_whitebeard-0.7.0-py3-none-any.whl
- Upload date:
- Size: 12.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eb5bec121d167db231b1202e30322372aa47e2f64776743239fef085a504df7
|
|
| MD5 |
feeeb104f31f8781f9eb6bbfe3ab480e
|
|
| BLAKE2b-256 |
42af54b2b96eca614aa992b667687365bcdf54bee013e4a71f1dcd6ae342f8a0
|
Provenance
The following attestation bundles were made for ouestcharlie_whitebeard-0.7.0-py3-none-any.whl:
Publisher:
publish.yml on ouestcharlie/ouestcharlie-whitebeard
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ouestcharlie_whitebeard-0.7.0-py3-none-any.whl -
Subject digest:
1eb5bec121d167db231b1202e30322372aa47e2f64776743239fef085a504df7 - Sigstore transparency entry: 1382481800
- Sigstore integration time:
-
Permalink:
ouestcharlie/ouestcharlie-whitebeard@0accc4a57785c98d05288511a7a4b057f78950fe -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/ouestcharlie
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0accc4a57785c98d05288511a7a4b057f78950fe -
Trigger Event:
push
-
Statement type: