Communitygithub.com

Windy-X211/pptx

PowerPoint-Präsentationen (.pptx) erstellen, bearbeiten und analysieren. Wird geladen, wenn der Nutzer Begriffe wie 'Präsentation erstellen', 'Folien generieren', 'PPT bearbeiten', 'Analyse' oder 'pptx', 'presentation', 'slides' verwendet. Deckt den gesamten Workflow ab: Neuerstellung (pptxgenjs), Bearbeitung auf Basis von Vorlagen (OOXML entpacken/bearbeiten/packen) sowie Inhalts- und Layout-Qualitätssicherung.

Was ist pptx?

Dieses Skill ermöglicht die umfassende Arbeit mit PowerPoint-Präsentationen (.pptx) direkt über die KI-Schnittstelle. Es unterstützt drei Hauptworkflows: das Lesen und Analysieren von bestehenden Präsentationen, das Bearbeiten auf Basis von Vorlagen durch OOXML-Manipulation sowie das Erstellen neuer Präsentationen von Grund auf mit pptxgenjs. Dabei wird strikt auf eine strukturierte Vorgehensweise geachtet: eine schrittweise Ausführung mit Abhängigkeitsprüfung, eine obligatorische Layout-Qualitätssicherung nach jeder Bearbeitung und eine detaillierte Planung vor der Code-Generierung. Das Skill enthält klare Richtlinien zur Farbkonsistenz, zur Verwendung nativer Formen gegenüber externen Tools (Matplotlib, Mermaid) und zur Namenskonvention von Bilddateien. Es ist für Entwickler und Power-User konzipiert, die Präsentationen programmatisch erstellen und dabei höchste Qualität und Vermeidung von Überlauf-Fehlern sicherstellen wollen. Die Plattformen umfassen alle gängigen Betriebssysteme, wobei die Abhängigkeiten je nach Schritt dynamisch installiert werden können.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Windy-X211/AgentCluster-Market/tree/HEAD/skills/pptx

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Schritt-für-Schritt-Ausführung und Abhängigkeiten

  1. Befolgen Sie die Reihenfolge dieses Skills. Bevor ein Schritt eine Bibliothek, ein Befehlszeilentool, eine Laufzeitumgebung oder eine Schriftart verwendet, prüfen Sie nur die für diesen Schritt erforderlichen Abhängigkeiten; gehen Sie nicht davon aus, dass sie installiert sind.
  2. Verwenden Sie verfügbare Abhängigkeiten erneut. Fehlt eine, installieren Sie nur diese Abhängigkeit mit dem aktuellen Betriebssystem und einem verfügbaren Paketmanager, überprüfen Sie sie und wiederholen Sie den ursprünglichen Schritt. Installieren Sie nicht die gesamte Abhängigkeitsliste im Voraus.
  3. Verwenden Sie die aktive Python-Umgebung (python -m pip install <Paket> oder das passende python); erstellen Sie bei Bedarf eine task-lokale virtuelle Umgebung. Installieren Sie Node.js-Bibliotheken im Task-Projekt (npm install <Paket>), damit das Skript sie auflösen kann. Für Systemtools und Schriftarten verwenden Sie den verfügbaren Betriebssystem-Paketmanager (z.B. Homebrew auf macOS, apt auf Debian/Ubuntu oder winget auf Windows).
  4. Befolgen Sie den Berechtigungsablauf des Hosts, wenn die Installation eine Genehmigung erfordert. Wenn der Paketmanager oder die erforderliche Berechtigung nicht verfügbar ist oder die Installation/der Download fehlschlägt, melden Sie die fehlende Abhängigkeit und den betroffenen Schritt; wiederholen Sie nicht unbegrenzt oder behaupten Sie, der Schritt sei bestanden. Fahren Sie nach Möglichkeit mit unabhängigen Schritten fort.
  5. Behalten Sie den ursprünglichen Workflow und die Qualitätsprüfungen bei. Prüfen Sie Schriftarten nur, wenn das Rendern sie erfordert. Schritte, die nur Text, integrierte Tools oder eigenständiges HTML verwenden, erfordern keine Paketinstallation; der Zugriff auf externe Tools oder die Authentifizierung müssen über den Host erfolgen, nicht über einen Paketmanager.

Pfad- und Laufzeitumgebungs-Konventionen (vor Befehlsausführung lesen)

  • Python-Befehl: Dieser Computer verwendet python (unter Windows gibt es normalerweise kein python3). Alle folgenden Befehle verwenden einheitlich python.
  • Skript-Pfade: Die Skripte dieses Skills befinden sich in AppData/skills/pptx/scripts/ (relativ zum Projektstamm). Die Skriptbefehle in diesem Dokument sowie in editing.md / pptxgenjs.md sind bereits als absolute relative Pfade zu diesem Basisverzeichnis angegeben und können direkt vom Projektstamm aus ausgeführt werden.
  • Arbeitsverzeichnis: Die Befehle gehen davon aus, dass das aktuelle Arbeitsverzeichnis der Projektstamm ist. Falls das Arbeitsverzeichnis abweicht (z.B. default_workdir auf ein anderes Verzeichnis gesetzt wurde), ersetzen Sie AppData/skills/pptx durch den absoluten Pfad des Skill-Verzeichnisses.
  • Node.js: Fügen Sie vor der Ausführung von npm/node (benötigt für pptxgenjs) gemäß den Projektregeln das Node.js-Verzeichnis zur PATH-Variable hinzu.

PPTX Skill

Kurzreferenz

AufgabeAnleitung
Inhalt lesen/analysierenpython -m markitdown presentation.pptx
Bearbeiten oder aus Vorlage erstellenLesen Sie editing.md — QA: validate_layout.py + markitdown
Von Grund auf neu erstellen1. Inhalt planen → 2. Assets vorab generieren → 3. Lesen Sie pptxgenjs.md
Überlauf durch Design verhindernLesen Sie pptxgenjs.md
Designsystem generierenpython AppData/skills/pptx/scripts/design/search.py "<Thema>" --design-system
Korrektur nach Generierungpython AppData/skills/pptx/scripts/fix_pptx.py output.pptx
Layout-QA (zuerst kritisch)python AppData/skills/pptx/scripts/validate_layout.py presentation.pptx

Inhalt lesen

# Textextraktion
python -m markitdown presentation.pptx

# Raw-XML
python AppData/skills/pptx/scripts/unpack.py presentation.pptx unpacked/

Bearbeitungs-Workflow

Lesen Sie editing.md für vollständige Details.

  1. Vorlage mit markitdown analysieren
  2. Entpacken + Stil-Ebenen-Prüfung + Theme- & Style-Ausrichtungsplan
  3. Folien manipulieren → Inhalt bearbeiten → bereinigen → packen
  4. ⚠️ Layout-QA (obligatorisches Tor): python AppData/skills/pptx/scripts/validate_layout.py output.pptx --slides <bearbeitete_Foliennummern>
  5. ⚠️ Inhalts-QA (obligatorisch): python -m markitdown output.pptx

Von Grund auf neu erstellen

Lesen Sie pptxgenjs.md für vollständige Details.

Verwenden Sie diesen Workflow, wenn keine Vorlage oder Referenzpräsentation verfügbar ist.

Erforderliche Folienstruktur (nur bei Neuerstellung)

Wenn Sie eine Präsentation von Grund auf neu erstellen, MÜSSEN Sie diese Struktur befolgen:

  1. Folie 1: Titelseite
  2. Folie 2: Inhaltsverzeichnis (Agenda)
  3. Folie 3 ff.: Inhaltsabschnitte in der genauen Reihenfolge, die auf Folie 2 aufgeführt ist
  4. Letzte Folie: Abschluss-/Dankesseite

Überspringen Sie nicht die Folie mit dem Inhaltsverzeichnis. Platzieren Sie keine Inhaltsfolien vor dem Inhaltsverzeichnis.

⚠️ Keine leeren Folien erlaubt

Jede Folie MUSS mindestens ein sichtbares Element (addText, addShape, addImage, addChart oder addTable) innerhalb der Folie enthalten. Eine Folie mit nur einer Hintergrundfarbe und ohne Inhaltselemente ist ein Generierungsfehler.

Häufige Ursachen für leere Folien:

  • Vergessen, Inhalt zu Abschnittstrenn- / Übergangsfolien hinzuzufügen
  • Token-Kürzung während der Generierung, die einige Folien leer zurücklässt
  • Annahme, dass Folienlayout oder Master die Inhalte automatisch ausfüllen (tun sie nicht – pptxgenjs erstellt minimale Layouts ohne geerbte Formen)

Wenn Sie eine Folie als Abschnittstrenner beabsichtigen, MÜSSEN Sie explizit Elemente hinzufügen – z.B. eine große Abschnittsnummer, Titeltext und/oder dekorative Formen.


⚠️ ERFORDERLICH: Planung vor der Generierung

Bevor Sie Code schreiben, MÜSSEN Sie diese Planungsschritte abschließen:

⚡ Schnellpfad für einfache Anfragen: Wenn der Benutzer nach einem kurzen/einfachen Deck fragt (≤ 6 Folien, ein Thema, keine komplexen Diagramme), überspringen Sie die formelle Planungsausgabe und gehen Sie direkt zu Schritt 3 (Code schreiben) mit der Standardstruktur Titelseite + Inhaltsverzeichnis + (N-3) Inhalte + Abschluss. Schnellpfad = keine ausführliche Planung in Ihrer Antwort, sondern erstellen und führen Sie das Skript direkt aus.

Schritt 1: Inhalts-Design-Plan ausgeben

Präsentieren Sie einen strukturierten Plan, der Folgendes abdeckt:

  1. Gesamtthema und -stil

    • Farbpalettenauswahl (siehe Abschnitt "Design-Ideen")
    • Typografie-Kombination
    • Visuelles Motiv, das sich durch alle Folien zieht
  2. Folien-für-Folien-Gliederung

    Folie 1: Titelseite - Layouttyp, Schlüsselelemente
    Folie 2: Inhaltsverzeichnis - Geordnete Abschnittsliste
    Folie 3: [Abschnitt 1 aus Inhaltsverzeichnis] - Layouttyp, Schlüsselelemente, Einblicksplan (falls visuell)
    ...
    Folie N: Abschluss / Danke - Layouttyp, Schlüsselelemente
    ...
    
  3. Inventar der visuellen Elemente

    • Alle benötigten Bilder, Symbole, Diagramme und Grafiken auflisten
    • Jedes als [Integriert] (pptxgenjs-Formen/Diagramme) oder [Extern] (benötigt Vorabgenerierung) markieren

Beispiel für eine Planungsausgabe:

## Präsentationsplan

**Thema:** Ozean-Verlaufspalette (065A82, 1C7293, 21295C)
**Schriftarten:** Georgia (Überschriften) + Calibri (Fließtext)
**Motiv:** Abgerundete Karten mit linkem Akzentrand

### Folien:
1. Titelseite - Zentrierter Titel, Verlaufshintergrund
2. Inhaltsverzeichnis - Überblick / Architektur / Metriken / Zeitplan
3. [Abschnitt 1 aus Inhaltsverzeichnis] - Layouttyp, Schlüsselelemente, Einblicksplan (falls visuell)
...
n. Danke - Abschlusserklärung + Kontakt

⚠️ Nach der Ausgabe Ihres Plans fahren Sie SOFORT mit Schritt 2 und Schritt 3 fort. Planen Sie nicht erneut, wiederholen Sie nicht dieselbe Gliederung mit geringfügigen Abweichungen. Geben Sie den Plan EINMAL aus und beginnen Sie dann mit dem Schreiben des pptxgenjs-Codes.

Schritt 2: Externe Assets vorab generieren

Für als [Extern] markierte Grafiken generieren Sie diese VOR dem Schreiben des pptxgenjs-Codes.

⚠️ KRITISCH: Farbkonsistenz

Alle generierten Diagramme und Grafiken MÜSSEN dieselbe Farbpalette wie die Präsentation verwenden. Definieren Sie die Farben am Anfang Ihres Generierungsskripts basierend auf Ihrem gewählten Thema.

Option A: Native Formen/Diagramme zuerst (ERFORDERLICH Standard)

ALLE Architekturdiagramme, Flussdiagramme, Prozessdiagramme, Organigramme und Beziehungsdiagramme MÜSSEN mit nativen pptxgenjs-Formen (RECHTECK, OVAL, LINIE, Verbinder + addText) erstellt werden. Siehe pptxgenjs.md "Diagramme mit nativen Formen erstellen" für Muster und Beispiele.

  • Verwenden Sie eine starke Vorlagenfolie (Prozess, Vergleich, 2-spaltig, Symbolraster), wenn sie passt
  • Verwenden Sie native pptxgenjs-Formen (Boxen/Pfeile/Linien + Text) für Abläufe, Architekturen und Hierarchien
  • Verwenden Sie pptxgenjs-Diagramme für einfache Datendiagramme (Balken, Kreis, Linie usw.)

Verwenden Sie matplotlib nur für komplexe statistische Diagramme (Heatmaps, Streudiagramme, Boxplots), die pptxgenjs-Diagramme nicht verarbeiten können. Verwenden Sie Mermaid nur, wenn das Diagramm mit nativen Formen zu komplex ist UND viele Querverweise enthält.

Option B: Matplotlib/Python-Diagramme

Definieren Sie die Farbpalette am Anfang, um sie an Ihr PPT-Thema anzupassen:

import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

# ============================================================
# FARBPALETTE - An Ihr PPT-Thema anpassen
# ============================================================
# Beispiel: "Ozean-Verlauf"-Thema
COLORS = {
    'primary': '#065A82',
    'secondary': '#1C7293',
    'accent': '#21295C',
    'background': '#F0F7FA',
    'text': '#21295C',
    'light': '#E8F4F8',
}

# Farbzyklus für mehrere Datenreihen
COLOR_CYCLE = [COLORS['primary'], COLORS['secondary'], COLORS['accent'], '#4A90A4', '#2D5A6B']

# Thema global anwenden
plt.rcParams.update({
    'axes.prop_cycle': plt.cycler(color=COLOR_CYCLE),
    'axes.facecolor': 'none',
    'axes.edgecolor': COLORS['text'],
    'axes.labelcolor': COLORS['text'],
    'text.color': COLORS['text'],
    'xtick.color': COLORS['text'],
    'ytick.color': COLORS['text'],
    'figure.facecolor': 'none',
    'font.family': 'sans-serif',
    'font.size': 12,
})
# ============================================================

# Diagramm mit Themenfarben erstellen
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
bars = ax.bar(['Q1', 'Q2', 'Q3', 'Q4'], [25, 40, 35, 50],
              color=[COLORS['primary'], COLORS['secondary'], COLORS['primary'], COLORS['secondary']],
              edgecolor=COLORS['accent'], linewidth=1.5)
ax.set_title('Quartalsumsatz', fontsize=16, fontweight='bold', color=COLORS['text'])
ax.set_ylabel('Umsatz (Mio. $)', color=COLORS['text'])
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

plt.tight_layout()
width_px, height_px = int(8 * 150), int(5 * 150)
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
plt.close()

Matplotlib-Palettenvorlagen:

# Mitternachts-Manager
COLORS = {'primary': '#1E2761', 'secondary': '#CADCFC', 'accent': '#FFFFFF', 'text': '#1E2761'}

# Wald & Moos
COLORS = {'primary': '#2C5F2D', 'secondary': '#97BC62', 'accent': '#F5F5F5', 'text': '#2C5F2D'}

# Korallen-Energie
COLORS = {'primary': '#F96167', 'secondary': '#F9E795', 'accent': '#2F3C7E', 'text': '#2F3C7E'}

# Warmes Terrakotta
COLORS = {'primary': '#B85042', 'secondary': '#E7E8D1', 'accent': '#A7BEAE', 'text': '#B85042'}

# Teal-Vertrauen
COLORS = {'primary': '#028090', 'secondary': '#00A896', 'accent': '#02C39A', 'text': '#028090'}

Verwenden für:

  • Komplexe statistische Diagramme (Balken, Linie, Kreis, Punkt, Radar usw.)
  • Benutzerdefinierte Visualisierungen, die von pptxgenjs nicht unterstützt werden
  • Heatmaps, Streudiagramme, Boxplots

⚠️ Verwenden Sie matplotlib NICHT für:

  • Architekturdiagramme
  • Flussdiagramme / Prozessdiagramme
  • Organigramme / Hierarchiediagramme
  • Netzwerktopologiediagramme
  • Jedes Diagramm, das hauptsächlich Beziehungen zwischen Komponenten zeigt

Diese MÜSSEN mit nativen pptxgenjs-Formen erstellt werden, damit sie als bearbeitbare PPT-Objekte gerendert werden – nicht als Rasterbilder.

matplotlib - Diagramme mit CJK-Unterstützung

Beim Erstellen von Diagrammen/Grafiken mit matplotlib, die chinesischen Text enthalten, MÜSSEN Sie die Schriftart konfigurieren:

import os
import platform
import matplotlib.pyplot as plt
import matplotlib

def setup_matplotlib_cjk():
    """Konfiguriert matplotlib zur Unterstützung von CJK-Zeichen"""
    system = platform.system()

    if system == "Darwin":  # macOS
        font_names = ['Arial Unicode MS', 'PingFang SC', 'Heiti SC', 'STHeiti']
    elif system == "Windows":
        font_names = ['Microsoft YaHei', 'SimHei', 'SimSun']
    else:  # Linux
        font_names = ['Noto Sans CJK SC', 'WenQuanYi Zen Hei', 'Droid Sans Fallback']

    # Verfügbare Schriftart finden
    available_fonts = [f.name for f in matplotlib.font_manager.fontManager.ttflist]
    for font_name in font_names:
        if font_name in available_fonts:
            plt.rcParams['font.sans-serif'] = [font_name] + plt.rcParams['font.sans-serif']
            plt.rcParams['axes.unicode_minus'] = False  # Minuszeichen-Anzeige korrigieren
            return font_name
    return None

# CJK-Schriftart vor dem Erstellen von Diagrammen einrichten
cjk_font = setup_matplotlib_cjk()

# Balkendiagramm mit chinesischen Beschriftungen erstellen
categories = ['Erstes Quartal', 'Zweites Quartal', 'Drittes Quartal', 'Viertes Quartal']
values = [120, 135, 142, 158]

plt.figure(figsize=(10, 6))
plt.bar(categories, values, color='steelblue')
plt.title('Vierteljährliche Verkaufsdaten', fontsize=16)
plt.xlabel('Quartal', fontsize=12)
plt.ylabel('Umsatz', fontsize=12)
plt.tight_layout()
plt.savefig('chart.png', dpi=150)
plt.close()

Option C: Websuche nach Bildern

Nach relevanten Bildern suchen, wenn:
- Stockfotos oder Illustrationen benötigt werden
- Symbole oder Logos erforderlich sind
- Referenzbilder für Konzepte

Option D: Mermaid-Diagramme (letzter Ausweg)

Nur verwenden, wenn das Diagramm nicht sauber mit nativen Formen/Layouts dargestellt werden kann, und es konsistent mit dem Deck halten:

# Installieren falls nötig: npm install -g @mermaid-js/mermaid-cli

Erstellen Sie eine Theme-Konfigurationsdatei, die zu Ihrer PPT-Palette passt:

// mermaid-config.json - Beispiel für "Ozean-Verlauf"-Thema
{
  "theme": "base",
  "themeVariables": {
    "primaryColor": "#065A82",
    "primaryTextColor": "#FFFFFF",
    "primaryBorderColor": "#21295C",
    "secondaryColor": "#1C7293",
    "secondaryTextColor": "#FFFFFF",
    "secondaryBorderColor": "#065A82",
    "tertiaryColor": "#E8F4F8",
    "tertiaryTextColor": "#21295C",
    "lineColor": "#21295C",
    "textColor": "#21295C",
    "mainBkg": "#E8F4F8",
    "nodeBorder": "#065A82",
    "clusterBkg": "#F0F7FA",
    "titleColor": "#21295C",
    "edgeLabelBackground": "#FFFFFF"
  }
}
cat > diagram.mmd << 'EOF'
graph LR
    A[Client] --> B[API Gateway]
    B --> C[Dienst A]
    B --> D[Dienst B]
EOF

# Hohe Auflösung für PPT-Verwendung bevorzugen
mmdc -i diagram.mmd -o diagram.png -c mermaid-config.json -b white -w 1600 --scale 2

Schritt 3: Bildbenennungskonvention (ERFORDERLICH)

Alle generierten Bilder MÜSSEN die Abmessungen im Dateinamen enthalten:

{name}_{breite}x{höhe}.png

Beispiele:

  • architecture_800x600.png - 800px breit, 600px hoch
  • timeline_1200x400.png - 1200px breit, 400px hoch
  • chart_600x600.png - 600px quadratisch

Beim Speichern von Bildern immer die Abmessungen angeben:

# Matplotlib-Beispiel
fig, ax = plt.subplots(figsize=(8, 5), dpi=150)
# ... Diagramm erstellen ...
width_px = int(8 * 150)   # 1200
height_px = int(5 * 150)  # 750
plt.savefig(f'chart_{width_px}x{height_px}.png', dpi=150, transparent=True)
# Allgemein

Verwandte Skills