---
name: presentation-pptx
description: 'File-type spec: PowerPoint presentation (.pptx). Used by the KB ingest pipeline to classify + extract + render.'
title: PowerPoint presentation
category: file-types
status: active
author: system
metadata:
  priority: 0
---
## What this skill is

One entry in the **File-Type Registry** ([kb/file_types.py](../../../../server/src/agntspace/kb/file_types.py)). Declares how `.pptx` files flow through the three ingest layers:

1. **Classify** — extension `.pptx` + MIME `application/vnd.openxmlformats-officedocument.presentationml.presentation` + magic `PK\x03\x04` (zip archive); source_type `presentation`; LLM prompt focuses on slide titles, key arguments, supporting bullets, tables, and speaker notes.
2. **Extract** — `pptx_python_pptx@1.0.0` walks slides in order, emitting one heading (depth=1) per slide title, then text-frame paragraphs / bulleted list items in visual reading order (top-down, left-right), tables with rows + headers, and speaker notes as a final `[Notes:]` paragraph per slide. Embedded pictures are recorded as `MediaRef`s with semantic pointers (`<filename>#slide=N&pic=J`) — actual vision-LLM description on embedded images is Phase 5 v2 territory and currently only enabled for PDFs.
3. **Render** — markdown canvas type with thumbnail preview; ui_icon `Presentation` (Lucide).

Legacy `.ppt` (binary format) is **not supported** — python-pptx only reads OOXML. Convert via PowerPoint (Save As → .pptx) or LibreOffice headless before ingesting.

The actual strategy lives in [config/file-type.yaml](config/file-type.yaml) — edit it to customise. The registry reloads on next KB service init; for changes without a server restart, use the evolution loop.

## Why this exists as a skill (not just Python)

Rule 12 — strategy lives in skills, never in code. The Python bundled default ([file_types_defaults.py](../../../../server/src/agntspace/kb/file_types_defaults.py)) is a degraded-mode fallback so the pipeline is never empty on first boot. The YAML here is the canonical source, and your vault's copy at `system/skills/file-types/presentation-pptx/config/file-type.yaml` overrides both (overwrite=True — user vault wins).

## Extending

- Want a different extraction strategy for this file type? Change the `extractor:` field to another registered extractor id (`text_utf8`, `pdf_pdfplumber`, `vision_llm`, `csv_tabular`, `json_pretty`, `vtt_srt`, `html_parser`, `docx_python_docx`, `pptx_python_pptx`, `epub_markitdown`, `audio_whisper`, `video_ffmpeg_vision` — plus any plugin-registered extractors).
- Want to tune the LLM's focus? Edit `prompt_focus:`. It propagates to the classify prompt in the next KB service init.
- Want vision descriptions on embedded images? Not yet — Phase 5 v2 only wires that for PDFs. The pptx extractor records `MediaRef`s for pictures but does not currently call vision. A future extension can mirror the PDF `extract_embedded_images` opt-in.
- Want to change how the file is filed under `library/`? That's the **library layout** concern (thematic / type-date / flat) — see KB-level SCHEMA.md, NOT this file.