Live rich content slides in jupyter notebook
Project description
IPySlides
Create Interactive Slides in Jupyter/Voila with all kind of rich content.
- Launch example Notebook
- See a Demo Notebook at Kaggle.
- See PDF-Slides
- See PDF-Report
Changelog
Above version 1.4.0, users can see upto date documentation via ipyslides.LiveSlides().load_docs()
, so no additional changelog will be created in future.
See old changelog
Install
> pip install ipyslides >= 1.7.5
For development install, clone this repository and then
> cd ipyslides
> pip install -e .
Creating Slides
Tip: You can use
ipyslides.LiveSlides().demo()
to create example slides and start editing.
#------------ Cell 1 --------------------
import ipyslides as isd
ls = isd.LiveSlides(**settings_kwargs) # settings_kwargs are added in 1.4.1
ls.settings.set_animation('zoom') # could be as animaation='zoom' in settings_kwargs in 1.4.1 +
ls.special_syntax # Gives you information what you can do with markdown 1.7.2+
#------------ Cell 2 --------------------
%%title
# create a rich content title page
#------------ Cell 3 --------------------
%%slide 1
# slide 1 content
#------------ Cell 4 --------------------
%%slide 1 -m # new in 1.4.6
Markdown here with extended options. Nested blocks are not supported
```multicol 30 70
less content
+++
more content
```
```python run source
x = 1 + 2
ls.write([x, source])
```
{{source}} will be shown in start here as well. Expressions are supported in 1.5.8+.
(1.5.5+) three underscores ___ on their own line create multiple frames
#------------ Cell 5 --------------------
@ls.frames(1,*objs)
def func(obj):
write(obj) #This will create as many slides after the slide number 1 as length(objs)
#------------ Cell 6 --------------------
ls # This displays slides if on the last line of cell, or use `ls.show()`.
You can load slides from a markdown file
slides separator should be --- (three dashes) frames separator should be ___ (three underscores)
ls.from_markdown(path)
with ls.slide(2):
write(ls[2].markdown) # write content of slide 2 from file
plot_something() # Add other things to same file
write_something()
You can see documentation slides with:
ls.load_docs()
You can build html of slides
Content type is limited. Widgets can not be exported.
ls.export.report() # >= 1.6
ls.export.slides() # HTML Slides
When exported to HTML and then PDF is printed, this gives a clean document.
Content Types to Embed
You can embed anything that you can include in Jupyter notebook like ipywidgets,HTML,PDF,Videos etc.,including jupyter notebook itself!
Note: Websites may refuse to load in iframe.
IPython Display Objects
Any object with following methods could be in write
command:
_repr_pretty_
, _repr_html_
, _repr_markdown_
, _repr_svg_
, _repr_png_
, _repr_jpeg_
, _repr_latex_
, _repr_json_
, _repr_javascript_
, _repr_pdf_
Such as IPython.display.<HTML,SVG,Markdown,Code>
etc. or third party such as plotly.graph_objects.Figure
.
Plots and Other Data Types (0.8.7+)
These objects are implemented to be writable in write
command:
matplotlib.pyplot.Figure
, altair.Chart
, pygal.Graph
, pydeck.Deck
, pandas.DataFrame
, bokeh.plotting.Figure
.
Many will be extentended in future. If an object is not implemented, use display(obj)
to show inline or use library's specific command to show in Notebook outside write
.
Interactive Widgets
Any object in ipywidgets
or libraries based on ipywidgtes
such as bqplot
,ipyvolume
,plotly's FigureWidget
can be included in iwrite
command. iwrite
also renders other objects except Javascript.
Custom and Third Party Objects(not implemented in this library)
Starting version 1.6.1, you can add serialization method in current namespace. For example you can do something like this
@ls.serializer.register(int)
def colorize(obj):
color = 'red' if obj % 2 == 0 else 'green'
return f'<span style="color:{color};">{obj}</span>'
slides.write(*range(10))
# This will color even odd integers differently
Full Screen Presentation
-
Jupyterlab 3.0+ has full screen eneabled from any view:
-
Use Voila for full screen prsentations. Your notebook remains same, it is just get run by Voila, may not work as expected.
-
Slides in Jupyter Lab are theme aware in
Inherit
theme mode, so theme of slides changes based on editor theme.
PDF printing
To include all type of objects you need to make PDF manually.
Read instructions in side panel about PDF printing. See PDF-Slides
If you just have HTML objects like matplotolib plots
, images
, plotly
, bokeh
charts etc. and not something like ipywidgets
, see next section.
HTML/PDF Report/Slides [HTML Slides in 1.5.2+]
- You can create beautiful HTML/PDF report from slides using
ls.export.report
. See PDF-Report - You can use CSS classes
.report-only
and.slides-only
to create different content for both sceberios. Content variety is limited. Widgets can not be exported. - Use
ls.export.slides
to build static slides that you can print as well. Widgets are not exported.
Speaker Notes (1.2.0+) (Experimental)
- You can turn on speaker notes with a
Show Notes
check in side panel. Notes can be added to slides usingls.notes.insert
(ls.notes
in < 1.2.1) command. - Notes is an experimantal feuture, so use at your own risk. Do not share full screen, share a brwoser tab for slides and you can keep notes hidden from audience this way.
Known Limitations
- Slide number is necessary to be tracked by user, as notebook cells are not linked to each other and multiple runs of a cell can lead to adding many slides with same content.
- Bounding box of slides for screenshots should be set by user (if not in fullscreen).
Customize Slides
You can customize slides by inheriting from LiveSlides
class.
For example if you want to have custom theme and some other settings always enabled and
bottom information only on title slide, you can do so:
class CustomSlides(isd.LiveSlides):
def __init__(self):
super().__init__()
self.settings.theme_dd.value = 'Custom'
self.progress_slider.observe(self.set_visible, names=['index'])
def set_visible(self, change):
if self.progress_slider.index == 0:
self.widgets.footerbox.layout.visibility = 'visible'
else:
self.widgets.footerbox.layout.visibility = 'hidden'
Very thankful to Python-Markdown which enabled to create
write
command as well as syntax highliting.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for ipyslides-1.7.5-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2dc1fe35c66250b8b8482fea652a3370b27bed6d90d855ebd94f4e486c67d87c |
|
MD5 | 307a26c2389502beaffe9afacb245ae8 |
|
BLAKE2b-256 | ed3179c1ce125927f0b2bd8a968a01431f99806f751db0d63452fbbf26f5bb37 |