Skip to main content
The wandb compatibility shim is in public preview. Its interface and behavior may change as we iterate. Expect sharp edges.
We’ve created a Weights & Biases compatibility layer that enables dual-logging to both wandb and Pluto simultaneously. This allows you to gradually migrate your experiment tracking without touching existing training scripts.

Quick Start

Install Pluto and authenticate. Use either pluto login (stores a token in your system keyring — recommended for interactive workstations) or export PLUTO_API_KEY (recommended for CI / containers / non-interactive jobs):
Then run any existing wandb script — dual-logging activates automatically:
That’s it. Every wandb.log() call now also logs to Pluto. No PLUTO_PROJECT env var needed — the shim picks up the project= kwarg from wandb.init().

Configuration

Authentication

Either of the following is sufficient — the hook checks both: If neither is present, the shim logs a one-time warning pointing at pluto login / PLUTO_API_KEY and wandb runs unmodified.

Project Name

Resolved in this order (first match wins):

Optional Environment Variables

Supported Operations

The compatibility layer monkey-patches wandb.init() so the returned Run object dual-logs every supported call. Unsupported methods still work normally on wandb via attribute fallthrough — they just don’t dual-log to Pluto.

Initialization

wandb.init() completes fully before any Pluto code runs. pluto.init() runs in a thread with a 10s timeout — if the Pluto server is unreachable, the run silently falls back to wandb-only. Tag assignments on the wandb run sync to Pluto on every assignment.

Metric Logging

Numeric values, lists of numbers, and the wandb media types below are forwarded to Pluto. The data dict you pass into wandb.log() is never mutated.

Media Logging

Lists of media at the same step (wandb.log({"gens": [wandb.Image(a), wandb.Image(b)]})) are forwarded as a multi-sample group. The Pluto UI renders these with a per-card ◀ i / N ▶ nav — see Images: Multi-Sample Logging.

Artifacts and Saved Files

Reference entries (S3 URLs, etc.) inside wandb.Artifact are skipped — Pluto stores files directly. Artifact versions and aliases are not translated; Pluto has no equivalent.

Finish

wandb.finish() triggers pluto.finish() as well. Pluto’s teardown has a 5s timeout so it never blocks wandb’s cleanup. If pluto.init() failed earlier, the run stays wandb-only and finish() is a no-op on the Pluto side.

Not Supported

These wandb features run normally on wandb but do not dual-log to Pluto:

Post-Sunset Mode

When you’re ready to stop sending data to wandb, set the kill switch:
In disabled mode, WANDB_API_KEY can also hold a Pluto API token, so a user fully migrating from wandb can swap a single env var value:
All wandb.* calls are intercepted and redirected to Pluto without any code changes.