Skip to main content

blackboxml

PyPI version Python Version Tests Downloads Docs

ML experiment tracking. Local, lightweight, framework-agnostic.

blackboxml logs your training runs as structured JSON. No accounts, no servers. It works with PyTorch, Keras, scikit-learn, or any Python training loop.

Install

pip install blackboxml
pip install blackboxml[keras]  #(opt) TensorFlow support

Requires Python 3.10+.

Usage

@track decorator

from blackboxml import track, MetricStore

@track(name="resnet_cifar10", tags=["pytorch", "cifar10"])
def train():
    metrics = MetricStore()
    for epoch in range(10):
        metrics.reset()
        for batch in dataloader:
            loss, acc = train_step(batch)
            metrics.update({"loss": loss, "acc": acc}, n=len(batch))
        yield metrics.compute()

train()

Run context manager

from blackboxml import Run

with Run(name="resnet_cifar10", tags=["pytorch"]) as run:
    for epoch in range(10):
        run.log({"loss": train_one_epoch(), "epoch": epoch})

Keras callback

from blackboxml.callback import BlackBoxCallback

model.fit(x_train, y_train, epochs=10,
          callbacks=[BlackBoxCallback(name="lstm_nlp", tags=["keras"])])

scikit-learn

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from blackboxml import Run

with Run(name="rf_search", tags=["sklearn"]) as run:
    for n in [50, 100, 200]:
        scores = cross_val_score(RandomForestClassifier(n_estimators=n), X, y, cv=5)
        run.log({"n_estimators": n, "accuracy": scores.mean()})

CLI

$ bbml runs
NAME              DATE                 DURATION  STEPS  TAGS
----------------------------------------------------------------
resnet_cifar10    2026-03-10 14:22:01    13m 46s     10  pytorch, cifar10
lstm_nlp          2026-03-10 11:05:33     4m 12s      5  keras

$ bbml show resnet_cifar10
$ bbml clean

What gets logged

Each run saves to blackboxml_logs/<name>_<timestamp>/run.json:

{
  "name": "resnet_cifar10",
  "tags": ["pytorch", "cifar10"],
  "environment": {
    "git_commit": "a3f91bc",
    "git_dirty": false,
    "python": "3.11.2",
    "torch": "2.3.0",
    "hostname": "lab-gpu-01"
  },
  "start": "2026-03-10T14:22:01",
  "end": "2026-03-10T14:35:47",
  "duration_seconds": 826,
  "steps": [
    {"loss": 0.842, "acc": 0.65},
    {"loss": 0.671, "acc": 0.78}
  ]
}

Git commit, Python version, framework versions, and hostname are captured automatically.

Visualisation

from blackboxml import visualise_run

visualise_run("blackboxml_logs/resnet_cifar10_20260310_142201/run.json")
visualise_run("blackboxml_logs/resnet_cifar10_20260310_142201/run.json",
              save_path="plots/", show=False)

Releases

Version Date What changed
0.1.0 Apr 2025 Initial release, Keras auto-logging, visualise_metrics
0.2.0 Jul 2025 Type hints, logging module, error handling
0.5.0 Mar 2026 Framework-agnostic rewrite, @track, Run, MetricStore, bbml CLI
0.5.1 Apr 2026 Migrated repo to sxa-lab, updated license classifier, added PyPI metadata
0.5.2 Apr 2026 Documentation update, ReadTheDocs, updated package authorship

Contributing

See Contributing Guidelines to get started. Bug reports, feature requests, and pull requests are welcome.

License

Apache License 2.0

Maintainer

Maintained by SxA Lab

Metadata

Release files for blackboxml 0.5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for blackboxml 0.5.2
File Size Uploaded
blackboxml-0.5.2.tar.gz 16.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for blackboxml 0.5.2
File Interpreter ABI Platform
blackboxml-0.5.2-py3-none-any.whl Python 3 none any Details

Total release size: 34.3 kB

Release files / blackboxml-0.5.2.tar.gz

Download URL blackboxml-0.5.2.tar.gz
Size 16.6 kB
Tags Source
SHA-256 checksum
How to use checksums
f180ccb9e69830008be918a5ef1e6de18e86892ec5194c2eab1fa417f506bc6e
BLAKE2b-256 checksum
How to use checksums
4660c244f7dd00ec680a6056f3ef47ba3032a60995a6e46a28191be45736f62b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 28, 2026.

Transparency log

Release files / blackboxml-0.5.2-py3-none-any.whl

Download URL blackboxml-0.5.2-py3-none-any.whl
Size 17.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
34d32c0eafb63e9fab81a25d2e18b6f93f11ed679e758ccf5cbf7c9c3b1b526e
BLAKE2b-256 checksum
How to use checksums
cd88e38cafe612fd3a201251c2ab69e40b5b9d6ab8afc8b0d2c6aed75b349ac6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.5.2 This release

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.2.0

2 release files

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