Open in new tab

jupyterlab-deck#

docs

install

extend

demo

ci

rtd-badge

pypi-badge
conda-badge

npm-badge

binder-badge
lite-badge

ci-badge
reports-badge
cov-badge

Lightweight presentations for JupyterLab


Installing#

pip install jupyterlab-deck

or

mamba install -c conda-forge jupyterlab-deck # or conda, if you must

See CONTRIBUTING.md for a development installation.


Uninstalling#

pip uninstall jupyterlab-deck

or

mamba remove jupyterlab-deck # or conda if you must

Usage#


Get started#

After installing, open or create a Notebook.

Other documents work but are not as much fun.

Deck Mode#

Start Deck Mode by

  • in the Notebook Toolbar, click deck-icon

  • open the Command Palette and run Start Deck

In Deck Mode, until you configure any slide types, all of your content should appear in a vertically-scrollable stack.


Remote#

In Deck Mode, navigate with:

  • the onscreen remote

    • if available, up, down, left, right will be available

  • these correspond to the standard keyboard shortcuts,

    • , , ,

    • shift+enter executes and advances

  • the spacebar tries two directions:

    • space = , or

    • shift+space = , or


Revealing JupyterLab UX Features#

Many of the core JupyterLab UI elements are still available, but hidden by default. Hover over their usual places to reveal them. These include:

  • the right and left sidebar

  • the Notebook Toolbar


Hidden JupyterLab UX Features#

Some elements are not visible, and cannot be revealed:

  • the Main Menu

  • the Status Bar

  • the Cell Toolbar

Next Steps:


Exiting Deck Mode#

To exit Deck Mode:


Slides#

Build a slideshow by changing the slideshow type per cell using the Property Inspector sidebar or the design tools.

type

purpose

-

(default) stack underneath the previous cell

slide

start a new stack

fragment

reveal when activated

subslide

start a new cell stack in the optional Y axis

skip

hide the cell entirely

notes

TBD: moves this cell to the off-screen note viewer


Layers#

Pick a layer type from:

Layers either temporarily or permanently show content, and won’t be reached by. Specifying a layer scope will override the slideshow type. Layers have one of the following scopes:

scope

relationship to slides

deck

show on all current and future slide or subslides

stack

show until the next slide

slide

show until the next slide or subslide

fragment

only show until the next fragment


Design Tools#

In Deck mode, click the ellipsis icon in the bottom left corner

The design tools offer lightweight buttons to:

  • show/hide the slide layout overlay

  • set the slideshow type

  • set the layer type

  • change a few key appearance properties:

    • use the sliders to customize

      • z-index controls the vertical stacking of elements:

        • higher is “closer” to the user

      • opacity controls how vibrant the fonts and colors appear

        • higher is more full

      • zoom controls how big the contents of the cell appear

        • higher is bigger

    • un-check the checkbox to restore to the defaults


Slide Layout#

After opening the design tools, click the Show Layout button

In slide layout mode, each part of the slide receives an overlay.

Moving a part manually will remove it from the default layout, and allow you to place it anywhere on the screen, but it will keep the same navigation index.

The keyboard shortcuts and remote should still function as normal.


Moving Parts#

Click and drag a part overlay to move the part underneath.


Resizing Parts#

Click one of the handles in the corners of the part overlay to resize a part.


Reverting Part Move/Resize#

After moving a part to a fixed position, click the button on a part overlay to restore the part to the default layout.


Configuration#


Enabling Deck Mode at startup#

{
  "@deathbeds/jupyterlab-deck:plugin": {
    "active": true
  }
}

Frequently Asked Questions#


Does it work with notebook 6 aka classic?#

No. Use RISE.


Does it work with notebook 7?#

Mostly. Navigating multiple documents during the same presentation will probably never work, as this is incompatible with the one-document-at-a-time design constraint of the Notebook UX. Each skip to another document will open a new browser tab, though deck should be installed.


Will it generate PowerPoint?#

No. This would be a fine third-party extension which could consume notebook metadata created by this extension, jupyterlab-fonts, and nbconvert-compatible slides.


Will it generate single-document static HTML presentations?#

No. Use nbconvert, but no layers or style customization will work.

For a full static viewing experience, try something like JupyterLite.


Will it generate PDF?#

Not yet.

Changelog#

0.2.0#

  • #56 addresses style and behavior differences on Notebook 7 and JupyterLab 4

  • #36 adds support for Jupyter Notebook 7 and JupyterLab 4

0.2.0a1#

  • #56 addresses style and behavior differences on Notebook 7 and JupyterLab 4

0.2.0a0#

  • #36 adds support for Jupyter Notebook 7 and JupyterLab 4

0.1.3#

  • #19 adds a basic Markdown presenter, with slides delimited by ---

  • #22 adds a stack of previously-viewed documents when navigating between documents

  • #27 adds a drag-and-drop slide layout overlay and design tools to support customization

  • #29 adds support for using #<header> anchors while presenting

0.1.2#

  • #17 adds foreground and background layers with customized per-cell styling

0.1.1#

Enhancements#

  • improve keyboard navigation with (shift)space

  • the active cell is scrolled into view when exiting presentation mode

Bug Fixes#

  • fix some packaging metadata and documentation issues

  • fix handling of null cells

0.1.0#

initial release

Contributing#

Setup#

mamba env update --prefix .venv --file .binder/environment.yml
source activate ./.venv

doit#

The various build tasks are managed by doit. To get up to a ready-to-play JupyterLab:

doit serve:lab

See other available tasks with:

doit list

Legacy#

Support for JupyterLab 3 is verified with the legacy subtasks.

Run all legacy tasks:

doit legacy

Run an isolated JupyterLab 3 application:

doit serve:lab:legacy

Releasing#

Open Source#

BSD 3-Clause License

Copyright (c) 2022, jupyterlab-deck contributors
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this
  list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

* Neither the name of the copyright holder nor the names of its
  contributors may be used to endorse or promote products derived from
  this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.