Skip to main content

GrimoirePlot

GrimoirePlot is a live dashboard of plotly-compatible plots of remote data

demo

Adding to your current project

uv add grimoireplot

Or install from source:

# git clone the repo
cd grimoireplot
uv sync --extra dev

Installation as a tool

uv tool install grimoireplot  # not yet on pypi, will setup ci/cd on github later on

Quick Start

1. Start the Server

grimoireplot serve --host localhost --port 8080

Then open your browser at http://localhost:8080 to see the dashboard.

2. Push Sample Plots (Test the Server)

In another terminal, push some sample plots to verify everything works:

grimoireplot push-samples --host localhost --port 8080

CLI Reference

grimoireplot serve

Start the GrimoirePlot dashboard server.

grimoireplot serve [--host HOST] [--port PORT]
Option Default Description
--host localhost Host to bind the server
--port 8080 Port to bind the server

grimoireplot push-samples

Push sample plots to test the server.

grimoireplot push-samples [--host HOST] [--port PORT] [--secret SECRET] [--grimoire-name NAME]
Option Default Description
--host localhost Server host
--port 8080 Server port
--secret IDidntSetASecret Authentication secret
--grimoire-name test_grimoire Name of the grimoire to create

grimoireplot live-test

Test live plot updates by continuously adding datapoints to a line plot.

grimoireplot live-test [--host HOST] [--port PORT] [--secret SECRET] [--grimoire-name NAME] [--interval SECONDS] [--max-points N]
Option Default Description
--host localhost Server host
--port 8080 Server port
--secret IDidntSetASecret Authentication secret
--grimoire-name live_test Name of the grimoire to create
--interval 0.2 Interval between datapoints in seconds
--max-points 0 Maximum number of points (0 = unlimited)

Programmatic Usage

Sending Plots from Python

GrimoirePlot organizes plots in a hierarchy: Grimoire → Chapter → Plot

Synchronous API

import plotly.graph_objects as go
from grimoireplot.client import push_plot_sync

# Create a Plotly figure
fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3, 4], y=[10, 11, 12, 13], mode='lines+markers'))
fig.update_layout(title='My Plot')

# Push to the server
response = push_plot_sync(
    grimoire_name="my_experiment",
    chapter_name="training_metrics",
    plot_name="loss_curve",
    fig=fig,
    grimoire_server="http://localhost:8080",
    grimoire_secret="your-secret",
)

Asynchronous API

import asyncio
import plotly.graph_objects as go
from grimoireplot.client import push_plot

async def main():
    fig = go.Figure()
    fig.add_trace(go.Bar(x=['A', 'B', 'C'], y=[20, 14, 23]))
    fig.update_layout(title='Async Plot')

    response = await push_plot(
        grimoire_name="my_experiment",
        chapter_name="results",
        plot_name="bar_chart",
        fig=fig,
        grimoire_server="http://localhost:8080",
        grimoire_secret="your-secret",
    )

asyncio.run(main())

Integration Example: Training Loop

import plotly.graph_objects as go
from grimoireplot.client import push_plot_sync

losses = []

for epoch in range(100):
    loss = train_one_epoch()  # Your training code
    losses.append(loss)

    # Update the plot every 10 epochs
    if epoch % 10 == 0:
        fig = go.Figure()
        fig.add_trace(go.Scatter(y=losses, mode='lines', name='Training Loss'))
        fig.update_layout(title=f'Training Progress (Epoch {epoch})',
                          xaxis_title='Epoch', yaxis_title='Loss')

        push_plot_sync(
            grimoire_name="experiment_001",
            chapter_name="training",
            plot_name="loss",
            fig=fig,
        )

Configuration

GrimoirePlot can be configured via environment variables:

Variable Default Description
GRIMOIRE_SERVER http://localhost:8080 Default server URL
GRIMOIRE_SECRET IDidntSetASecret Authentication secret

You can also use a .env file in your project directory.

Testing

# you need to install with --extra dev
GRIMOIRE_TEST=true uv run pytest

Concepts

  • Grimoire: A collection of related visualizations (e.g., an experiment)
  • Chapter: A group of plots within a grimoire (e.g., training metrics, evaluation results)
  • Plot: A single Plotly figure

Acknowledgments

GrimoirePlot is inspired by visdom

Metadata

Release files for grimoireplot 0.0.3

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

Source distribution (sdist)

Source distribution for grimoireplot 0.0.3
File Size Uploaded
grimoireplot-0.0.3.tar.gz 18.7 kB Details

Built distribution (wheel)

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

Total release size: 42.3 kB

Release files / grimoireplot-0.0.3.tar.gz

Download URL grimoireplot-0.0.3.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
23390174613bed2c10886f1c81bf03251dad5694e74cd6dd4e8d62b55564048c
BLAKE2b-256 checksum
How to use checksums
31b94c8002de83f5ecff9a91c95b522873c1caee3fae64cc535ff77b06fba28c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / grimoireplot-0.0.3-py3-none-any.whl

Download URL grimoireplot-0.0.3-py3-none-any.whl
Size 23.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
56464aa7f21bd3a70a4ed9ffda8a2ea8effe79140436d66e5f8a1aaef1745b69
BLAKE2b-256 checksum
How to use checksums
f9ae41cfc4101d09671746f9eb40e0edcd42da940158304795fc697864252853
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"22.04","id":"jammy","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

0.0.1

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