Getting started¶
This page takes you from zero to a running presentation in about five minutes.
Prerequisites¶
- Python 3.11 or newer
- uv (recommended), or pip
- A web browser
- An SVG editor. Inkscape is the primary authoring tool, but any editor that exports standard SVG works
Run the demo¶
The demo deck lives in the repository, so clone it and serve:
Open http://localhost:7777 in your browser. Use the keyboard to navigate. Here are a few shortcuts to get you started:
| Key | Action |
|---|---|
← / → |
Navigate slides step-wise |
↓ / ↑ |
Jump to next / previous slide (skip steps) |
f |
Toggle fullscreen |
g + number + Enter |
Go to slide number |
Ctrl + scroll |
Zoom (Ctrl + drag to pan, 0 to reset) |
? |
Show all shortcuts |
Decks are executable code
A deck.py is a Python program that Inkflow imports and runs. Serving,
building, or exporting a deck executes it. Only run decks you trust.
Create your first deck¶
inkflow init scaffolds a starter project instead of you writing everything by hand:
Note
For a fresh project, inkflow init also runs git init and configures git
hooks automatically — see Git integration.
uvx runs inkflow just long enough to scaffold. uv run then installs inkflow
into the project's own environment from the generated pyproject.toml.
inkflow init writes slides/, notes/, a deck.py,
and a pyproject.toml pinning inkflow.
It refuses to scaffold into a non-empty directory unless you pass --force.
The starter deck has three slides, each showing a different way to author one:
slides/title.svg— a plain SVG you drew. No layout, no zones: draw an SVG, point aSlideat it, done.- A built-in layout filled with Markdown —
Slide("content", md="guide")pullsslides/guide.mdinto the layout's content zone.slides/guide.mditself explains how the template works. slides/diagram.svg— your own SVG that inherits a themed background viainkflow:parent, carries its own Markdown zone (slides/diagram.md), and animates an element by itsid. The slide is a labelled "anatomy" diagram of itself.
Speaker notes for each slide live in notes/ and show only in the presenter panel
(press p).
Make it yours:
- Edit the text in
slides/title.svg(open it in Inkscape) and the Markdown inslides/guide.md/slides/diagram.md. - Fill a layout zone from
deck.pywith aTextBoxinstead of Markdown:
- Draw your own shape in any slide SVG and give it an ID (in Inkscape, select it and open Object Properties via the Object menu or Ctrl+Shift+O) to animate it:
Save, and the presenter updates automatically. No refresh needed.
Git integration¶
For a fresh project, inkflow init also runs git init, writes a .gitignore,
and configures git hooks — so inkflow init my-talk gives you a version-controlled
project out of the box. The hooks set up two things:
- A pre-commit hook that strips Inkscape editor metadata (viewport position, zoom, window size) from staged SVGs, so that noise never lands in git history.
- A diff driver so
git diffand GitHub show only visual changes for SVGs.
If you run inkflow init inside an existing repository, it leaves that repo's
git configuration untouched and instead points you at inkflow setup-git. Skip all
git steps during scaffolding with inkflow init --no-git, or run the hook setup
manually at any time:
Git won't run hooks automatically on clone — that's an intentional security
boundary — so commit .githooks/pre-commit and .gitattributes, and have
teammates run inkflow setup-git once in their own clone to activate it.
Next steps¶
- Concepts: understand the mental model before writing more slides
- Slides: element IDs, zones, and media
- Markdown content: filling a slide from a
.mdfile - Steps: building a slide up one keypress at a time
- Layouts: reusable slide templates