tessera
Build self-contained, interactive HTML reports from Python — one file you can commit, or serve, with no runtime and no dependencies on the viewer's machine. Designed for batch-generated data and ML output: loop over your experiments, runs, or segments and emit a report per iteration.
Content is laid out on a grid of typed cells (charts, tables, metrics, code,
images, diagrams), and the whole deck embeds into a single .html.
Documentation
https://tessera-report.readthedocs.io/
Installation
pip install tessera-report
Quick start
from tessera import Deck
deck = Deck(
title="My Report",
)
deck.add_title("My Report", subtitle="Subtitle here")
deck.add_section("1 — Introduction")
slide = deck.add_slide("Results", ncols=2)
slide.add_metric(value=98.7, label="Efficiency (%)", delta=+2.3)
slide.add_text("Text with **markdown** and LaTeX: $E = mc^2$")
deck.write("report", open_browser=True)
Batch generation
The core use case — one report per run, generated in a loop:
deck = Deck(title=f"Experiment Results", author="Company name", date="Jun 20th, 2026")
for run in experiment_runs:
deck.add_section(title=f"Run #{run.id}")
slide = deck.add_slide("Metrics", nrows=1, ncols=3)
slide.add_metric(value=run.accuracy, label="Accuracy", delta=run.delta)
slide.add_plotly(run.loss_curve)
slide.add_table(run.results_table, caption="Results")
deck.write("report")
Cell types
| Method | Cell | Description |
|---|---|---|
add_text |
TextCell | Markdown + LaTeX (MathJax) |
add_metric |
MetricCell | KPI card with value, label and delta |
add_table |
TableCell | CSV, dict, list or DataFrame |
add_image |
ImageCell | Image with lightbox and zoom/pan |
add_image_slider |
ImageSliderCell | Image carousel |
add_list |
ListCell | Bullet or numbered list |
add_code |
CodeCell | Code with syntax highlighting |
add_plotly |
PlotlyCell | Interactive Plotly chart |
add_mermaid |
MermaidCell | Declarative diagram (flowchart, etc.) |
add_html |
HtmlCell | Raw HTML without escaping |
add_iframe |
IframeCell | Embed external content |
add_empty |
EmptyCell | Reserves space in the grid |
Common cell options
All add_* methods accept:
slide.add_text(
"content",
colspan=2, # spans 2 columns
rowspan=1,
caption="Caption",
overflow=True, # internal scroll
expand_button=True, # expand to fullscreen button
copy_button=True, # copy button (CodeCell)
transparent=True, # hides cell border and background
)
License
MIT
Metadata
Release files for tessera-report 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tessera_report-0.5.0.tar.gz | 3.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tessera_report-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 6.0 MB
Release files / tessera_report-0.5.0.tar.gz
| Download URL | tessera_report-0.5.0.tar.gz |
|---|---|
| Size | 3.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dbd25519d063d7882fd5177121e30aaeaca8cc686c2b6197e62dd221edbcc663
|
|
BLAKE2b-256 checksum How to use checksums |
e582da34a24305f026c5edd3cda9b7546332433890d746f08a5fd73a1a4000e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.14
|
Release files / tessera_report-0.5.0-py3-none-any.whl
| Download URL | tessera_report-0.5.0-py3-none-any.whl |
|---|---|
| Size | 3.0 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c6efa60b81dbc29d1b53bb599c927c02944434b29d56211aee4e52dc8bb7c28b
|
|
BLAKE2b-256 checksum How to use checksums |
746786673bb674fe005ded160f50605789800ab2aac015fd7b35fade0be93ac3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.14
|