plot-saver
plot-saver is a small reusable package for adding save buttons to Matplotlib figures in marimo notebooks.
It saves plots under a project results directory and can be configured with a project-level config.toml.
Installation
pip install plot-saver
or with uv:
uv add plot-saver
Config
plot-saver looks for a config.toml by searching upward from the current working directory.
All configuration keys are optional. If you do not provide a config.toml, or if you only provide some keys, plot-saver falls back to its built-in defaults.
The default output format is png.
You can override the defaults with a section like this:
[plot-saver]
format = "png"
default_label = "Save"
save_all_label = "Save all model plots"
empty_title = "No plots available"
empty_detail = "Render the notebook plots first."
saved_title = "Saved"
saved_many_title = "Saved {count} plots"
saved_error_title = "Saved with errors"
failed_title = "Could not save plots"
toast_detail_color = "#6b7280"
[plot-saver.theme]
radius = "8px"
padding_y = "0.45rem"
padding_x = "0.9rem"
font_size = "0.9rem"
light_border = "rgba(107, 114, 128, 0.35)"
light_background = "rgba(249, 250, 251, 0.95)"
light_text = "#111827"
light_hover_background = "rgba(243, 244, 246, 1)"
light_hover_border = "rgba(107, 114, 128, 0.55)"
light_disabled_background = "rgba(229, 231, 235, 0.9)"
light_disabled_border = "rgba(156, 163, 175, 0.35)"
dark_border = "rgba(156, 163, 175, 0.35)"
dark_background = "rgba(31, 41, 55, 0.95)"
dark_text = "#f3f4f6"
dark_hover_background = "rgba(55, 65, 81, 1)"
dark_hover_border = "rgba(209, 213, 219, 0.45)"
dark_disabled_background = "rgba(55, 65, 81, 0.8)"
dark_disabled_border = "rgba(107, 114, 128, 0.35)"
Usage
from pathlib import Path
import marimo as mo
import matplotlib.pyplot as plt
from plot_saver import make_plot_saver
fig, ax = plt.subplots()
ax.plot([0, 1, 2], [1, 3, 2])
save_plot = make_plot_saver(
mo,
results_dir=Path("results"),
config_path=None,
task_name="2AFC",
model_id="example-model",
)
button = save_plot(fig, "Example figure")
save_all = save_plot.save_all_widget()
Saved plots go to:
results/plots/<task_name>/<model_id>/
save_plot(fig, "Example figure") registers that figure and returns an individual save button for it.
save_plot.save_all_widget() returns a single button that saves every figure previously registered with that PlotSaver instance. This is useful in notebooks where you render several figures for the same task and model and want one action to export all of them together.
API
Main entry points:
make_plot_saver(...)save_button(...)save_figure(...)get_plot_save_format(...)find_project_config_path(...)
Release files for plot-saver 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| plot_saver-0.1.7.tar.gz | 56.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| plot_saver-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 64.9 kB
Release files / plot_saver-0.1.7.tar.gz
| Download URL | plot_saver-0.1.7.tar.gz |
|---|---|
| Size | 56.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
85fed272de32ba5f8be02bfa581a87381aa807d2c639ca4654a731b11555e193
|
|
BLAKE2b-256 checksum How to use checksums |
94805a8619e939cad4b657b1fe61d4d46ca923bad20db29ab929a0d7f5f3736a
|
| 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 May 18, 2026.
Transparency logRelease files / plot_saver-0.1.7-py3-none-any.whl
| Download URL | plot_saver-0.1.7-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
117f1e1bcf0d9023495287c746ffc3c998cadad40cc274dd34a80901f5768f4f
|
|
BLAKE2b-256 checksum How to use checksums |
6c1e1b9eb15a2d56025844165c713f82864f07ab653622ee7982e91d9fd68493
|
| 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 May 18, 2026.
Transparency log