Jupyter Lecture Studio
Premium, bilingual teaching components for Jupyter — one design for every course.
Build lectures in Python or JSON: covers, concept slides, execution traces, code comparisons, quizzes, exercises and callouts, plus formulas, charts, neural networks, trees, graphs, memory diagrams and database schemas. Present them in Jupyter, share them as one offline HTML file, project them as a slideshow, or print them as PDF. Arabic and English are both first-class.
python -m pip install "jupyter-lecture-studio[notebook,highlight]"
A lecture in one cell
from jupyter_lecture_studio import LectureDeck
deck = LectureDeck(course="Introduction to Programming", series="CS 101", lesson="03", locale="en")
deck.cover("Loops and iteration", "Repeat work without repeating code.",
tags=["Understand", "Trace", "Practice"], hero_code=">>> for x in [1, 2]: print(x)")
deck.agenda(["Write a `for` loop over a list", "Trace an **accumulator** step by step"])
deck.slide("A running total", cards=[
{"title": "The idea", "explanation": "Start with `total = 0`, then add each item.",
"code": "total = 0\nfor g in grades:\n total += g"},
], activity={"question": "What is `total` after the loop?", "answer": "The sum of all grades."})
deck.trace("total = 0\nfor g in [70, 80]:\n total += g", [
{"line": 1, "variables": {"total": 0}},
{"line": 3, "variables": {"total": 70, "g": 70}},
{"line": 3, "variables": {"total": 150, "g": 80}},
])
deck.compare("Resetting inside the loop", "for g in grades:\n total = 0", "total = 0\nfor g in grades:")
deck.quiz("How many times does `range(3)` loop?", ["2", "3", "4"], answer=1)
deck.recap(["Initialise before the loop", "Trace variables to explain output"])
deck.export("lecture.html") # teacher copy
deck.export("lecture-student.html", include_answers=False) # no answers or solutions
deck.export("lecture-slides.html", present=True) # slideshow with speaker notes
Why Lecture Studio
| Teaching components | Cover, agenda/recap, slide, code + output, execution trace, compare, quiz, exercise, callout, figure, divider, note, table |
| Subject visuals | LaTeX formulas ($...$ inline too), arrays with pointers and slices, matrices and confusion matrices, line/bar/scatter charts, neural networks, trees, graphs, memory diagrams and database schemas, drawn as MathML and SVG |
| Every programming course | Built-in highlighting for Python, C, C++, Java, C#, JavaScript, TypeScript, Kotlin, Go, Rust, Dart, Swift, SQL, Bash, R, MATLAB, JSON, HTML and CSS, identical on every machine |
| Interactive without JavaScript | Quizzes grade the chosen answer, traces step through code, answers and hints reveal — in notebooks and offline files |
| Arabic and English | Interface labels and direction follow the locale; layouts mirror; Arabic is never letter-spaced; C++ stays readable in Arabic text |
| Themes | gold, emerald, ocean, violet, ruby and the light paper; every color is a design token; register your institution's theme |
| Notebook-native | Re-running a cell replaces its slide; fonts are sent once (~80% smaller notebooks); identical content gives identical HTML |
| Share anywhere | Single-file offline HTML, student copies, presentation mode (keyboard, fullscreen, notes), PDF |
| Content as data | Every component maps to JSON; deck.save() and LectureDeck.from_file() round-trip; a CLI validates and exports |
| Extensible | Add components, themes and languages; distribute components as plugins via entry points |
| Safe and dependency-free | Text is escaped by default; the core needs only the standard library; typed and tested |
Arabic quick start — بداية سريعة
from jupyter_lecture_studio import LectureDeck
deck = LectureDeck(course="الذكاء الاصطناعي", series="AI SERIES", lesson="01")
deck.cover("من البيانات إلى القرار", "نفهم الفكرة من مثال واضح.\nثم نجرّب ونفسّر النتيجة.",
tags=["افهم", "توقّع", "جرّب"])
deck.slide("الفكرة الأساسية", cards=[
{"title": "نفهم", "explanation": "نربط المفهوم بخبرة الطالب السابقة."},
{"title": "نطبّق", "code": "print('Hello')"},
], activity={"question": "ما الناتج المتوقع؟", "answer": "تظهر كلمة Hello؛ اشرح لماذا قبل التنفيذ."})
deck.quiz("ما ناتج `len('AI')`؟", ["1", "2", "3"], answer=1)
deck.export("lecture.html")
اللغة الافتراضية العربية واتجاه الكتابة من اليمين. الخط Cairo للنص وJetBrains Mono للكود مضمّنان ويعملان دون اتصال. إعادة تشغيل الخلية تستبدل شريحتها بدل تكرارها. للنسخة الإنجليزية: locale="en". الدليل العربي الكامل مرفق مع الحزمة: jupyter-lecture-studio docs.
Command line
jupyter-lecture-studio init my-lecture --course "Artificial Intelligence" --locale en
jupyter-lecture-studio validate my-lecture/lecture.json
jupyter-lecture-studio export my-lecture/lecture.json lecture.html --student
jupyter-lecture-studio export my-lecture/lecture.json slides.html --present
jupyter-lecture-studio docs
Extras
| Extra | Adds |
|---|---|
notebook |
IPython display in Jupyter |
highlight |
Pygments syntax colors for SQL, Java, C++, JavaScript and hundreds more (Python is built in) |
pdf |
Offline PDF export with Chromium (jupyter-lecture-studio setup-pdf) |
Documentation
The complete English and Arabic documentation — components, themes, languages, presenting, JSON, API reference, extending and migration — ships with the package and works offline:
jupyter-lecture-studio docs
Compatibility
Python 3.10+. Verified in JupyterLab 4 and modern browsers. from lecture_studio import ..., the lecture-studio command and the LuxurySlideDeck bridge keep working. Upgrading from 0.x keeps the gold design identical; HTML class names now use the ls- prefix (see the migration guide).
License
Library code is MIT. Bundled Cairo and JetBrains Mono fonts are SIL Open Font License 1.1; documentation assets retain their upstream notices. See THIRD_PARTY_NOTICES.md.
Maintained by aoos101 · PyPI project · Contributions welcome: see CONTRIBUTING.md.
Metadata
Release files for jupyter-lecture-studio 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| jupyter_lecture_studio-1.0.2.tar.gz | 855.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jupyter_lecture_studio-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.5 MB
Release files / jupyter_lecture_studio-1.0.2.tar.gz
| Download URL | jupyter_lecture_studio-1.0.2.tar.gz |
|---|---|
| Size | 855.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
47a752eae6e145d0f8114783f26ce3326c4f0c79789cd973e0af25f97d842fa0
|
|
BLAKE2b-256 checksum How to use checksums |
d3eaf21e24630492bf095622251039967369b984999e4877a0a0144564db8636
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Release files / jupyter_lecture_studio-1.0.2-py3-none-any.whl
| Download URL | jupyter_lecture_studio-1.0.2-py3-none-any.whl |
|---|---|
| Size | 694.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
09fbe656eb1999bc63f629ee98016505d8587231e8133ae4eb611df1f7746a16
|
|
BLAKE2b-256 checksum How to use checksums |
dae912579899e4ae5c2bf6933a7164f59c27d09effedfc552b9c5a4176bba683
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.5
|
Security for jupyter-lecture-studio 1.0.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.