Skip to content

sddcinfo/pptcraft

Repository files navigation

ppt-craft

Disclaimer: unofficial and unsupported. Provided for testing and evaluation only, on an "AS IS" basis, with no warranty and no support. Not affiliated with or endorsed by Dell. See DISCLAIMER.md.

Wiki: https://sddcinfo.github.io/pptcraft/

Local "Claude-for-PowerPoint" add-in for the GB10 - runs inside PowerPoint (online or desktop), powered by the local Qwen3.6 vLLM backend instead of Anthropic's API.

┌────────────────────────────────────────────────────────────────────┐
│ PowerPoint host (Online in browser, OR desktop on Mac/Windows) │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Claude-style taskpane (Office.js SPA) │ │
│ │ chat panel · live slide tree · action bar │ │
│ │ Office.js: insertSlidesFromBase64, getFileAsync, … │ │
│ └────────────────────────────┬───────────────────────────────┘ │
└──────────────────────────────┬│────────────────────────────────────┘
                               ││ HTTPS (mkcert local CA) / WSS / REST
┌──────────────────────────────▼▼────────────────────────────────────┐
│ GB10 - ppt-craft serve (FastAPI on :3030, HTTPS) │
│ python-pptx + lxml on OOXML │
│ shared vLLM @ localhost:8010 (Qwen3.6-FP8) │
└────────────────────────────────────────────────────────────────────┘

Backend sharing

ppt-craft reuses the same shared vLLM endpoint as meeting-scribe and autosre - http://localhost:8010 by default (autosre-managed Qwen/Qwen3.6-35B-A3B-FP8). One model, three clients. The 35B takes ~3 min to cold-load and needs ~35 GB VRAM, so the three clients share one instance rather than each loading their own.

Each consumer can run independently by pointing at a different URL:

# default - share the autosre vLLM
ppt-craft serve

# point at a separate vLLM (e.g. a private throwaway instance on :8011)
ppt-craft serve --qwen-url http://localhost:8011

# or via env (picked up by all subcommands)
PPT_CRAFT_QWEN_URL=http://my-other-host:8010 ppt-craft draft --intent ...

Quick start

# 1. provision local-CA HTTPS (mkcert must be on PATH)
ppt-craft cert init

# 2. build the three baked theme templates + manifest icons
ppt-craft themes build

# 3. boot the server (loopback only by default)
ppt-craft serve

# 4. emit a manifest pointing at your hostname
ppt-craft manifest --host gb10.local --port 3030 --out manifest.xml

# 5. sideload manifest.xml in PowerPoint Online or desktop
# (PowerPoint > Home > Add-ins > Upload My Add-in)

What's included today

  • CLI: serve, draft, explain, verify-deck, manifest, cert init, themes build, themes list
  • ppt-craft draft builds a full deck end-to-end with no PowerPoint host: storyline, per-slide draft, validate + repair, content critique, then assembles one openable deck.pptx. --stream shows live tokens.
  • Token streaming end-to-end: the storyline and each slide stream token-by-token to both UIs and to the CLI
  • Layout-aware rendering: two_column fills both columns, image_text captions, divider/closing styling, plus icon_grid and diagram visuals and native charts with an embedded workbook
  • Three baked themes: corporate / dark-tech / minimal (16:9 widescreen, palette + fonts written via lxml on every theme part - multi-master safe)
  • Standalone browser UI (/) and Office.js taskpane (/taskpane.html) over one WebSocket: storyline approval, live drafting, per-slide PNG previews, slide reorder (drag), delete-to-archive (never deleted), deck history, cancel, and /download.pptx
  • Durable: every deck persists to a registry.json manifest and is restored on restart; the bearer token persists too, so printed links keep working
  • The taskpane uses the documented contract, context.presentation.insertSlidesFromBase64(b64, options), with opaque Slide.id tracking (never index)

Documentation

Roadmap

Phase Status Notes
P1 done Skeleton + cert/HTTPS + Click commands
P2 done Theme builder (3 templates + icons)
P3 done OOXML editing core + layout-aware placement + icon_grid/diagram
P4 done Engine: storyline + slide-by-slide draft/edit/repair loop
P5 done Deterministic validators + LLM content critique in the loop
P6 done Office.js taskpane SPA (chat + token streaming + previews)
P7 done Standalone browser UI (streaming, reorder, delete, history)
P8 done Never-delete archival, persistence, BrEng lint, docs

Honest gaps vs. real Claude add-in

  • Multimodal screenshot QA: the locked-loaded GB10 vLLM is text-only; we substitute deterministic geometry/contrast validators + LLM text critique. Phase 2 enhancement: spawn a separate Qwen2.5-VL-7B sidecar on :8011.
  • PowerPoint.createPresentation 71.68M-char limit: pre-flight size check; on overflow we trigger a client-side Blob / <a download> save in the user's browser (per the iter-3 finding).
  • No keyboard-shortcut activation: PowerPoint doesn't honour Office.actions.associate; we ship a ribbon button only.

License

MIT.

About

Presentation generation toolkit

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors