Skip to main content

pikslide

pikslide draws a diagram written as text into a PowerPoint slide.

The text, a .pik file, places shapes one after another and refers to them by name, with no coordinates to work out. The slide it becomes is made of native, editable PowerPoint shapes, colored by the deck's theme: a person can select, move and restyle each one afterwards.

Text an LLM can write, and a slide a person can finish: pikslide is made for drawing with an LLM, with you in the loop.

pipeline.png: You prompt an LLM, which writes a .pik; pikslide renders it to a .pptx and, with --png, a .png. You can also edit the .pik, or edit the .pptx in PowerPoint and ask the LLM to apply your edits to the .pik

  1. You prompt the LLM, and it writes a .pik.
  2. pikslide renders the .pik to a .pptx and, with --png, to a .png as well.
  3. You edit the .pptx in PowerPoint and hand it back to the LLM with your next prompt. The LLM carries your edits into the .pik, so the next render keeps them: each shape in the .pptx is named after its label in the .pik, so the two match up.
  4. Or skip PowerPoint: tell the LLM what to change, or edit the .pik yourself.

The picture above is pikslide's own, docs/examples/pipeline.pik:

# Drawing a slide with an LLM and pikslide, with a person in the loop.
# The LLM writes a .pik, and pikslide renders it to a .pptx and, with
# --png, a .png. You step in where you like: prompt the LLM, edit the
# .pik, or edit the .pptx in PowerPoint and ask the LLM to apply your
# edits to the .pik.

boxwid = 1.2in
boxht = 0.55in
filewid = 0.8in
fileht = 0.55in

LLM: box "LLM"
arrow 1.5in
Pik: file ".pik"
arrow
Pikslide: box "pikslide" bold fill accent1 lighter 60%
Png: file ".png" with .w at 0.8in right of Pikslide.e + (0, 0.5in)
Pptx: file ".pptx" with .w at 0.8in right of Pikslide.e - (0, 0.5in)
arrow from Pikslide.e right 0.4in then up until even with Png then to Png.w
"--png" small above at 1/2<(Pikslide.e.x + 0.4in, Png.y), Png.w>
arrow from Pikslide.e right 0.4in then down until even with Pptx then to Pptx.w

You: box "You" bold wid (Pptx.e.x - LLM.w.x) ht 0.45in fill bg1 darker 5% \
    with .nw at (LLM.w.x, Pptx.s.y - 0.6in)
arrow "prompt" "e.g. “draw how Japan's capital moved”" small "or “apply my edits in the .pptx to the .pik”" small ljust from (LLM.x, You.n.y) to LLM.s
arrow "edit" ljust from (Pik.x, You.n.y) to Pik.s
arrow "edit in PowerPoint" rjust from (Pptx.x, You.n.y) to Pptx.s

docs/examples/japan-capitals.md is a slide Claude Code drew this way, in one run, with the prompt it was given. docs/ has more examples and a cookbook of diagram recipes.

Install

pikslide needs Python 3.12+. Install it from PyPI as a standalone pikslide command:

uv tool install pikslide
# or
pipx install pikslide
# or, into the current virtual environment
pip install pikslide

pikslide --version prints the version installed.

To work on pikslide itself, clone the repository and use uv: uv run pikslide ... runs the clone with no install step, and uv tool install . installs it as the pikslide command.

Usage

pikslide diagram.pik diagram.pptx                        # a one-slide deck, sized to the diagram
pikslide diagram.pik diagram.pptx --png                  # and diagram.png, drawn by PowerPoint
pikslide diagram.pik --template corporate.potx           # on the template's slide, in its theme
pikslide diagram.pik --check                             # lay it out and report errors, write nothing

--png (and --pdf) use PowerPoint itself, on Windows or from WSL with a Windows install, and fall back to LibreOffice otherwise: good for a quick look, but not for checking exact layout against PowerPoint.

pikslide --help lists every flag. The language reference is built in, so neither you nor an LLM needs this repository to write a diagram:

  • pikslide --help intro: the language in one page, the place to start
  • pikslide --help box: a keyword's synopsis, attributes and defaults
  • pikslide --help colors, shapes, keywords, …: the lists
  • pikslide --help template: drawing on a template's slide
  • pikslide --help spec, grammar: the full manuals, spec.md and grammar.md

Status

The language's v1 is implemented. Not in it yet: drawing into an existing deck's slide, connectors, auto-layout, and multi-slide decks, among others (spec.md §7).

Development

uv run pytest

The layout stage's simplifications are listed in the docstring of src/pikslide/pik/layout.py.

Acknowledgments

pikslide descends from Brian Kernighan's pic (1984), which placed named objects one after another instead of at coordinates, and D. Richard Hipp's pikchr, which carried that idea into a modern language emitting SVG. pikslide's tokenizer, grammar, macro expansion and layout engine began as a port of pikchr's own, default sizes, placement and edge geometry included, and its test fixtures under tests/fixtures/examples/ are pikchr's example diagrams. pikchr is released under the Zero-Clause BSD license; see NOTICE.

License

0BSD

Metadata

Release files for pikslide 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pikslide 0.1.1
File Size Uploaded Provenance
pikslide-0.1.1.tar.gz 129.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pikslide 0.1.1
File Interpreter ABI Platform
pikslide-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 268.9 kB

Release files / pikslide-0.1.1.tar.gz

Download URL pikslide-0.1.1.tar.gz
Size 129.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ea9365b3b1b1593cd1f01fa2003c1ba919a809d51da535363ee36364be55742a
BLAKE2b-256 checksum
How to use checksums
1656585f5f22fd1a194ad3a52c09147e1c0395e15d94bd79d0a56f174346b951
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / pikslide-0.1.1-py3-none-any.whl

Download URL pikslide-0.1.1-py3-none-any.whl
Size 139.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4f54a1b7abc2ba8239bf85dee8a187aa1eeb7211fbb28233f8777b1204963588
BLAKE2b-256 checksum
How to use checksums
94ab246f9f462023992a7f1a0eab57004a7e71aaa467ae9b91da33b4d82903f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for pikslide 0.1.1

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page