GrimoirePlot
GrimoirePlot is a live dashboard of plotly-compatible plots of remote data
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)
| File | Size | Uploaded | |
|---|---|---|---|
| grimoireplot-0.0.3.tar.gz | 18.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|