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) │
└────────────────────────────────────────────────────────────────────┘
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 ...# 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)- CLI:
serve,draft,explain,verify-deck,manifest,cert init,themes build,themes list ppt-craft draftbuilds a full deck end-to-end with no PowerPoint host: storyline, per-slide draft, validate + repair, content critique, then assembles one openabledeck.pptx.--streamshows 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_columnfills both columns,image_textcaptions,divider/closingstyling, plusicon_gridanddiagramvisuals 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.jsonmanifest 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 opaqueSlide.idtracking (never index)
- Architecture - system map + data flow
- API reference - WebSocket events + REST routes
- Theming - palette/font/layout customisation
- Prompting - intent/audience/slide_count + the layout and visual vocabulary
- Sideload guide - put the taskpane into PowerPoint
| 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 |
- 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.createPresentation71.68M-char limit: pre-flight size check; on overflow we trigger a client-sideBlob/<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.
MIT.