Jupyter β†’ SageMath HTML Converter

Convert .ipynb notebooks β€” single files, whole folders or ZIP archives β€” into self-contained SageMath HTML notebooks, entirely in your browser.

1Upload the SageMath HTML template

A blank notebook with your custom settings (e.g., theme, your own Sage Cell server, AI settings etc.). These settings will be applied to all the exported notebooks. Current version of a blank SageMath AI notebook (v20) can be found at GitHub .

πŸ“„
Drop your template .html here
or click to browse

2Add notebooks, a ZIP archive or a folder

Three ways to feed the converter β€” they can be combined: (a) one or more loose .ipynb files, (b) a .zip archive with any folder structure, (c) a folder dragged in or picked with the folder button. Inside archives/folders only .ipynb files are converted; everything else (images, data, PDFs…) is copied over unchanged.

πŸ““ πŸ“¦ πŸ“
Drop .ipynb files, a .zip, or a folder here
or click to browse files (multiple allowed)

3Options, convert & download

Output naming
Archive / folder mode

πŸ—‘οΈ Stale-HTML rule (always on): if a folder already contains an HTML file whose name matches a notebook in that same folder (notes.ipynb ↔ notes.html), that old HTML is replaced by the fresh export. All other HTML files in the folder are left untouched.

How it works

The converter uses your template β€” a blank SageMath HTML notebook β€” as the host environment. The template is loaded into a hidden iframe, which means all the custom settings are applied in the exported HTML notebooks. Nothing is uploaded anywhere: reading, converting and zipping happen locally in your browser.

What you get back

Example (archive mode, defaults)

input.zip                       output.zip
β”œβ”€ course/                      β”œβ”€ course/
β”‚   β”œβ”€ intro.ipynb              β”‚   β”œβ”€ intro.html      ← new
β”‚   β”œβ”€ intro.html   (old)       β”‚   β”œβ”€ syllabus.html   ← untouched
β”‚   β”œβ”€ syllabus.html            β”‚   └─ img/plot.png    ← copied
β”‚   └─ img/plot.png             └─ data/values.csv     ← copied
└─ data/values.csv

intro.html was regenerated (the stale one was dropped), syllabus.html had no matching notebook so it stayed, and intro.ipynb was omitted because β€œKeep the original .ipynb files” is off.

Naming: file name vs. H1 heading

Notes & limits

Timing settings

Two timers control how long the converter waits between operations inside the iframe. They exist because rendering happens asynchronously since the page (as of now) can't know in advance when it's truly done. Defaults work for typical notebooks β€” increase them if you see incomplete output, decrease them to speed up batches of small files.

SettingWhat it controlsWhen to change it
Settle time How long to wait after .ipynb import before triggering the Save sequence (as if one would do it in the Sage notebook). Increase (e.g. 4000–6000 ms) for long notebooks with lots of LaTeX or large outputs.
Decrease (e.g. 1500 ms) for short notebooks if you want batches to finish faster.
Per-file delay Pause between consecutive conversions, after one is finished and before the next iframe is created. Usually fine at the default. Increase if your browser seems sluggish during big batches; set to 0 for maximum speed.