Migrate all repos into monorepo context folders

Bahn: aisupport, Analyse-O2C-C2S, awesome-bahn-mcp-servers, beam-mcp,
      Confluence_Bot, db-planet-mcp-server, O2C-Harness, project-audit,
      Projekt-KIQ-HP, teamlandkarte-mcp
Dhive: Jury-Voting
Privat: CV, NoteGraph (NOTE: NoteGraph needs complete redo after consolidation)
Shared: AI-Orchestrator, OrgMyLife, power_skills_and_more
Shared/references: symphony (read-only)

Bahn repos remain available as independent remotes - this monorepo
pulls them in via subtree, the originals are untouched.
This commit is contained in:
2026-06-30 20:39:52 +02:00
parent 2f2b295531
commit a5f8fb49ab
1717 changed files with 447332 additions and 0 deletions
@@ -0,0 +1,84 @@
# Asset-Katalog: Hintergrundbilder und Empfehlungen
Alle Hintergrundbilder liegen im Skill-Ordner unter `assets/`. Im Helper-Modul gibt es
das Dict `BACKGROUND_IMAGES` mit Beschreibung und Empfehlungen.
## Verwendung
```python
from db_infrago_pptx import background_image_path
add_titel_bild_weiss(prs, "Titel", bild=background_image_path("datenstroeme"))
```
Eigene Bilder gehen genauso, einfach den Pfad statt des Helper-Aufrufs:
```python
add_titel_bild_schwarz(prs, "Titel", bild=r"C:\eigene\bilder\titel.jpg")
```
## Bilder mit Empfehlungen
| Key | Datei | Motiv | Passt zu |
|---|---|---|---|
| `ice_line` | Ice_line_background.png | Sand→Türkis Gradient mit ICE-Silhouette und Netzplan-Linien | Titelfolien, Trenner, Schluss, neutrale Themen |
| `laptop_checkmark` | bg-laptop-checkmark.jpeg | Mann am Laptop mit leuchtendem türkisen Checkmark, digitale Schaltkreise | Demos, Abnahme, Ergebnisse, Qualitätssicherung, Freigabe |
| `datenstroeme` | bg-datenstroeme-blau.jpeg | Blaue Datenströme in dunklem Raum, digitale Autobahn | Architektur, Datenflüsse, Schnittstellen, Performance, Migration |
| `gleisarbeiter` | bg-gleisarbeiter-bruecke.jpeg | Gleisarbeiter mit Funkenflug auf Brücke, ICE und Regionalzüge | Infrastruktur, Wartung, Betrieb, Hands-on, Kapitel-Trenner |
| `weltkugel` | bg-weltkugel-hologramm.jpeg | Holografische Weltkugel mit Digital-Transformation-Icons | Strategie, Vision, Digitalisierung, Transformation |
| `ice_bahnsteig` | bg-ice-bahnsteig.jpeg | ICE rast durch Bahnhof, Bewegungsunschärfe, Sonnenuntergang | Geschwindigkeit, Performance, Go-Live, Meilensteine, Dynamik |
| `gluehbirne` | bg-gluehbirne-innovation.jpeg | Glühbirne mit orangenem Netzwerk auf dunkler Platine | Innovation, Konzepte, Brainstorming, Ideen, Kreativität |
| `puzzle` | bg-puzzle-teamwork.jpeg | Vier Hände halten Puzzleteile zusammen, Stadt-Doppelbelichtung | Teamwork, Integration, Zusammenarbeit, Onboarding |
| `digital_transformation` | bg-digital-transformation.jpeg | Mann tippt auf Glas-Panel mit Tech-Icons (Cloud, Chip, Roboterarm) | Digitalisierung, Transformation, Technologie-Bausteine, Strategie |
| `binaercode` | bg-binaercode-netzwerk.jpeg | Weiße Nullen/Einsen über blauem Netzwerk-Drahtgitter | Daten, Code, Technologie, Migration, Netzwerk |
## Auswahl-Heuristik für die Titelfolie
Wenn der User keinen Bild-Wunsch nennt, schlage GENAU EIN Bild vor — nicht „eines von
diesen drei", sondern konkret. Die Auswahl folgt dem Thema:
| Thema enthält Stichwort … | Schlage vor |
|---|---|
| Architektur, Datenfluss, Migration, Schnittstelle | `datenstroeme` |
| Innovation, Konzept, Idee, Brainstorming | `gluehbirne` |
| Strategie, Vision, Roadmap (high-level) | `weltkugel` |
| Digitalisierung, Transformation, Technologie | `digital_transformation` |
| Bahnbetrieb, Infrastruktur, Wartung, Hands-on | `gleisarbeiter` |
| Performance, Go-Live, Meilenstein, Geschwindigkeit | `ice_bahnsteig` |
| Teamwork, Onboarding, Integration, Stakeholder | `puzzle` |
| Demo, Abnahme, Qualität, Freigabe, Test | `laptop_checkmark` |
| Daten, Code, Netzwerk (technisch) | `binaercode` |
| Allgemein / Status / Update / nicht klar | `ice_line` |
Beispiel-Begründung im Chat: „Für ein Status-Update zur O2C-Migration nehme ich
`datenstroeme` als Titelbild — passt zum Thema Datenflüsse und Architektur."
## Eingebettete Master-Icons
Die Vorlage enthält 86 SVG-Piktogramme aus der DB-Bibliothek (Slide 24
„Piktogrammbibliothek"). Sie sind über `add_pictogram()` direkt verwendbar und liegen
unter `assets/pictograms/`.
Beispiel:
```python
from db_infrago_pptx import add_pictogram, list_pictograms, DB_TURQUOISE_500
from pptx.util import Cm
slide = add_nur_titel(prs, "Vorteile", footer=FOOTER)
add_pictogram(slide, "haekchen", Cm(2), Cm(7), Cm(4), color=DB_TURQUOISE_500)
add_pictogram(slide, "uhr", Cm(9), Cm(7), Cm(4), color=DB_TURQUOISE_500)
# Alle 86 Keys auflisten
for key, descr in list_pictograms():
print(f" {key:30s} {descr}")
```
PowerPoint 2016+ rendert SVGs nativ — die Icons skalieren verlustfrei. Über den
`color`-Parameter kannst du sie in jede DB-Farbe einfärben (siehe
[references/slide-typen.md](slide-typen.md) Abschnitt „Piktogramme" für die volle
Doku und alle Keys gruppiert nach Anwendung).
## Eigene Icons einbinden
Wenn du Icons brauchst, die nicht in der Bibliothek sind: lege sie als externe Datei ab
und nutze `slide.shapes.add_picture(path, left, top, width, height)`. Empfohlene
Formate: PNG mit transparentem Hintergrund oder SVG (PowerPoint 2016+ rendert SVG).
@@ -0,0 +1,111 @@
# CI-Referenz: DB InfraGO Folienmaster
Quelle: `theme1.xml` aus dem offiziellen Folienmaster.
## Farben
Definiert im Helper-Modul als `RGBColor`-Konstanten — direkt importierbar:
```python
from db_infrago_pptx import (
DB_RED, DB_RED_DARK,
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_TURQUOISE_300, DB_TURQUOISE_100,
DB_SAND, DB_DARK, DB_GRAY_LIGHT, DB_GRAY_MED, DB_BLACK, DB_WHITE,
)
```
| Konstante | Hex | Verwendung |
|---|---|---|
| `DB_RED` | `#EC0016` | Logo, Akzente, Highlights — NICHT als Hauptfarbe |
| `DB_RED_DARK` | `#9B000E` | Hover/Pressed-Varianten, dunkle Rot-Akzente |
| `DB_TURQUOISE_700` | `#006E6B` | Tabellen-Header, dunkle Akzente |
| `DB_TURQUOISE_500` | `#00A099` | Primärakzent Türkis |
| `DB_TURQUOISE_300` | `#83CACA` | Helle Türkis-Flächen |
| `DB_TURQUOISE_100` | `#E3F5F4` | Türkis-Hintergrund (sehr hell) |
| `DB_SAND` | `#FCE3BA` | Sand-Akzent |
| `DB_DARK` | `#3C414B` | Dunkler Hintergrund (Folien-BG) |
| `DB_GRAY_LIGHT` | `#F0F3F5` | Heller Hintergrund |
| `DB_GRAY_MED` | `#AFB4BB` | Linien, Trenner |
| `DB_BLACK` / `DB_WHITE` | — | Schriftfarbe |
Volle DB-Palette (ebenfalls im theme1.xml definiert, falls du sie brauchst):
- Yellow: `FFD800` (500), Orange: `F39200`, Red: `EC0016`
- Burgundy: `A9455D`, Pink: `E93E8F`, Violet: `814997`
- Blue: `1455C0`, Cyan: `309FD1`, Turquoise: `00A099`, Green: `408335`
- Light Green: `63A615`, Warm Grey: `858379`
Jede Farbe gibt's in den Schattierungen 100/300/500/700.
## Schriften
- **Überschriften (major):** DB Neo Office Head
- **Fließtext (minor):** DB Neo Office
Diese Schriften sind nur auf DB-Rechnern verfügbar. Der Helper setzt sie explizit auf
jeden Run — sonst würde python-pptx sie weglassen und PowerPoint auf System-Defaults
wie Calibri zurückfallen. Auf Nicht-DB-Rechnern zeigt PowerPoint einen Fallback an,
beim Öffnen auf einem DB-Rechner werden die korrekten Schriften aufgelöst.
Konstanten im Helper:
- `DB_FONT_HEADING = "DB Neo Office Head"`
- `DB_FONT_BODY = "DB Neo Office"`
## Folienformat
- Größe: 33.87 × 19.05 cm (16:9, 12192000 × 6858000 EMU)
- Logo wird vom Master eingefügt (oben rechts) — nicht selbst zeichnen
- Footer-Slot ist im Master vorgesehen (unten links) — über den Footer-Platzhalter
jeder Layout-Funktion befüllen
- Foliennummer (unten rechts) wird automatisch durch den Master gesetzt
## Design-Regeln (Master-konform)
### Setzen — was der Master leistet
- Logo (DB Rot oben rechts) — automatisch via Master
- Foliennummer — automatisch
- Layout-spezifische Hintergrundfarben/-bilder — über Layout-Auswahl
- Schrift, Bullet-Style, Farbschema — vom Theme
### Nicht setzen — was vermieden werden sollte
- Kein eigenes Logo platzieren
- Keine eigenen Farb-Hintergründe für Standard-Folien (Layout 14 etc.) — der Master
bestimmt das
- Keine eigenen Bullet-Zeichen — die Templates haben Türkis-Striche definiert
- Keine Schrift überschreiben (Größe und Farbe nur in Ausnahmen)
### Inhalt
- DB Rot ist Akzent, nicht Hauptfarbe
- Schriftfarbe: Schwarz auf hell, Weiß auf dunkel/farbig
- Aufzählungszeichen: vom Theme (Türkis-Strich)
- Tabellen-Header: Türkis 700 (`DB_TURQUOISE_700`)
- Keine Farbverläufe, keine bunte Schrift
- Max 57 Bullets pro Folie, max 2 Sätze pro Bullet (besser: Stichworte)
- Schriftgröße nicht unter 14pt für Body-Text
- Eine Kernaussage pro Folie
- 3060 Sekunden Erfassbarkeit
- Speaker-Notes für Details (`add_notes(slide, "...")`)
### Footer-Konvention
```
DB InfraGO AG | Vollständiger Name | Team | Jahr
```
NIEMALS nur Vorname. NIEMALS abgekürzte Teamnamen ohne Kontext. Wenn das Team
unbekannt ist: User fragen.
## Sektionsstruktur (3-Akt)
Der Folienmaster hat im `presentation.xml` folgende offizielle Sektionen vordefiniert:
1. **Präsentationsfolien** — Titel + Untertitel
2. **Inhaltsverzeichnis** — Agenda
3. **Inhaltsfolien** — Hauptteil
4. **Grafische und kreativere Folien** — Statements, Zitate, Bilder
5. **Trenner- und Abschlussfolie** — Kapiteltrenner, Ende
Nach diesem Aufbau strukturieren — gibt automatisch eine ordentliche 3-Akt-Struktur
mit Eröffnung, Hauptteil und Abschluss.
@@ -0,0 +1,185 @@
# Layout-Katalog: DB InfraGO Folienmaster
Quelle: `assets/InfraGo_master_vorlage.pptx`. Slide-Größe 33.87 × 19.05 cm (16:9).
Alle 31 Layouts mit Index, Name, Helper-Funktion und Platzhaltern.
Maße: `(left, top) width × height` in cm. Index = `placeholder_format.idx`.
## Titel-Layouts (06)
### Layout 2 — Titel (Bild, Logo Schwarz)
Funktion: `add_titel_bild_schwarz(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
| idx | Typ | Inhalt |
|----:|--------------|-----------------------|
| 0 | TITLE | Titel |
| 1 | SUBTITLE | Untertitel |
| 15 | PICTURE | Hintergrundbild |
| 18 | BODY | Kategorie / Tagline |
| 11 | FOOTER | Footer |
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
### Layout 3 — Titel (Bild, Logo Weiß)
Funktion: `add_titel_bild_weiss(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
Wie Layout 2, Logo erscheint weiß.
### Layout 6 — Titel (Rahmen)
Funktion: `add_titel_rahmen(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
Titel im Rahmen über Vollbild. Visueller Hingucker für Highlights.
| idx | Typ | Inhalt |
|----:|--------------|-----------------------|
| 0 | TITLE | Titel |
| 1 | SUBTITLE | Untertitel |
| 15 | PICTURE | Hintergrundbild |
| 18 | BODY | Kategorie / Tagline |
| 11 | FOOTER | Footer |
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
## Inhaltsverzeichnis-Layouts (710)
### Layout 7 — Inhaltsverzeichnis (Weiß)
Funktion: `add_inhaltsverzeichnis_weiss(prs, titel, eintraege, footer="")`
| idx | Typ | Inhalt |
|----:|---------------|-----------------------|
| 0 | TITLE | Titel ("Agenda") |
| 19 | BODY | Liste der Einträge |
| 20 | FOOTER | Footer |
| 12 | SLIDE_NUMBER | Foliennummer (auto) |
### Layout 8 — Inhaltsverzeichnis (Rot)
Funktion: `add_inhaltsverzeichnis_rot(prs, titel, eintraege, footer="")`
Roter Hintergrund. Footer ist hier idx=11.
### Layout 9 — Inhaltsverzeichnis (Bild, Logo Schwarz)
Funktion: `add_inhaltsverzeichnis_bild_schwarz(prs, titel, eintraege, bild=None, kategorie="", footer="")`
Zusätzlich Bild-Platzhalter idx=15 und Kategorie idx=18.
### Layout 10 — Inhaltsverzeichnis (Bild, Logo Weiß)
Funktion: `add_inhaltsverzeichnis_bild_weiss(...)`
Wie Layout 9, Logo weiß.
## Kapiteltrenner (1113)
### Layout 11 — Kapiteltrenner (Weiß)
Funktion: `add_kapiteltrenner_weiss(prs, titel, untertitel="", footer="")`
| idx | Typ | Inhalt |
|----:|--------------|-----------------------|
| 0 | TITLE | Kapitel-Titel |
| 14 | BODY | Untertitel/Erklärung |
| 11 | FOOTER | Footer |
### Layout 12 — Kapiteltrenner (Bild, Logo Schwarz)
Funktion: `add_kapiteltrenner_bild_schwarz(prs, titel, untertitel="", bild=None, kategorie="", footer="")`
Zusätzlich Bild idx=17, Kategorie idx=18.
### Layout 13 — Kapiteltrenner (Bild, Logo Weiß)
Funktion: `add_kapiteltrenner_bild_weiss(...)`
## Inhaltsfolien (1422)
### Layout 14 — Titel und Inhalt (DEFAULT für Inhaltsfolien)
Funktion: `add_titel_und_inhalt(prs, titel, bullets, levels=None, footer="")`
| idx | Typ | Inhalt |
|----:|--------------|-------------------------------------|
| 0 | TITLE | Folientitel |
| 13 | OBJECT | Bullet-Liste (oder beliebiger Text) |
| 11 | FOOTER | Footer |
`levels=[0, 0, 1, 1, 0]` für mehrstufige Listen (0 = Hauptpunkt, 1 = Unterpunkt).
### Layout 15 — Titel und 2 Inhalte
Funktion: `add_titel_und_2_inhalte(prs, titel, bullets_links, bullets_rechts, footer="")`
Zwei OBJECT-Platzhalter idx=14 (links) und idx=15 (rechts).
### Layout 16 — Text und Bild (links)
Funktion: `add_text_und_bild_links(prs, titel, bullets, bild=None, footer="")`
Bild-Platzhalter idx=15 (links unten), Text idx=16 (rechts).
### Layout 17 — Text und Bild (rechts)
Funktion: `add_text_und_bild_rechts(prs, titel, bullets, bild=None, footer="")`
Spiegelversion: Bild rechts, Text links.
### Layout 18 — Bild mit Titel (Logo Schwarz)
Funktion: `add_bild_mit_titel_schwarz(prs, titel, bild=None, kategorie="", footer="")`
Vollbild mit oben durchgehender Titelzeile.
### Layout 19 — Bild mit Titel (Logo Weiß)
Funktion: `add_bild_mit_titel_weiss(...)`
### Layout 20 — Nur Titel
Funktion: `add_nur_titel(prs, titel, footer="")`
Leeres Inhaltsfeld zum freien Bestücken.
### Layout 21 — Nur Titel (Grau)
Funktion: `add_nur_titel_grau(prs, titel, footer="")`
Variante mit grauem Hintergrund.
### Layout 22 — Leer
Funktion: `add_leer(prs, footer="")`
Komplett leer (nur Footer-Slot). Für eigenes Layout mit `slide.shapes.add_*`.
## Statement / Zitat (2326)
### Layout 23 — Statement (Logo Rot)
Funktion: `add_statement_rot(prs, titel, statement, bild=None, kategorie="", footer="")`
Großer Aussage-Text mittig (idx=19).
### Layout 24 — Statement (Logo Weiß)
Funktion: `add_statement_weiss(...)`
### Layout 25 — Zitat (Logo Rot)
Funktion: `add_zitat_rot(prs, zitat, autor="", kategorie="", footer="")`
| idx | Typ | Inhalt |
|----:|--------------|-----------------------|
| 0 | TITLE | Zitat (groß) |
| 14 | BODY | Autor |
| 18 | BODY | Kategorie / Tagline |
| 11 | FOOTER | Footer |
### Layout 26 — Zitat (Logo Weiß)
Funktion: `add_zitat_weiss(...)`
Gleiche Platzhalter wie Layout 25, Logo erscheint weiß.
## Schluss / Spezial (2730)
### Layout 27 — Ende (Bild)
Funktion: `add_ende_bild(prs, titel="Vielen Dank.", bild=None)`
### Layout 28 — Ende (Rot)
Funktion: `add_ende_rot(prs, titel="Vielen Dank.")`
### Layout 29 — Bild_Agenda
Funktion: `add_bild_agenda(prs, titel, kategorie="", footer="")`
Spezial für bildgeprägte Agenda-Folien.
### Layout 30 — Ende (Logo)
Funktion: `add_ende_logo(prs, text="")`
Schlussfolie mit zentrierter Logo-Darstellung.
| idx | Typ | Inhalt |
|----:|--------------|-----------------------------------|
| 18 | BODY | Optionaler Text (z. B. Kontakt) |
Hinweis: Diese Schlussfolie hat KEINEN Footer- und KEINEN Foliennummer-Slot —
das ist Layout-Default für Schlussfolien (Layouts 27, 28, 30).
## Schnell-Referenz: Welcher Index für welchen Inhaltstyp?
| idx-Bereich | Bedeutung im Master |
|-------------|--------------------------------------------------|
| 0 | Titel (TITLE oder CENTER_TITLE) |
| 1 | Untertitel |
| 1012 | Footer / Sub-Decorations |
| 11 | FOOTER (sichtbarer Footer) |
| 12 | SLIDE_NUMBER (auto) |
| 1316 | Haupt-Content (OBJECT, BODY, PICTURE) |
| 17 | Hintergrundbild bei Trennern |
| 18, 20 | Kategorie / Tagline |
| 19 | Statement-Text / Inhaltsverzeichnis-Liste |
Bei Unsicherheit: Skript ausführen, das `prs.slide_layouts[i].placeholders` durchgeht.
@@ -0,0 +1,686 @@
# Slide-Typen mit Code-Beispielen
Alle Funktionen aus `db_infrago_pptx`. Importiere nur was du brauchst.
## Setup
`SKILL_DIR` zeigt auf den `assets/`-Ordner deiner Skill-Installation. Pfad an deine
Plattform anpassen:
- Windows (user-level): `C:\Users\<dein-username>\.kiro\skills\pptx-infrago\assets`
- Windows (workspace): `<projekt>\.kiro\skills\pptx-infrago\assets`
- macOS / Linux (user-level): `~/.kiro/skills/pptx-infrago/assets`
- macOS / Linux (workspace): `<projekt>/.kiro/skills/pptx-infrago/assets`
```python
import sys
from pathlib import Path
SKILL_DIR = Path.home() / ".kiro" / "skills" / "pptx-infrago" / "assets"
sys.path.insert(0, str(SKILL_DIR))
from db_infrago_pptx import open_deck, save, add_notes, background_image_path
prs = open_deck()
FOOTER = "DB InfraGO AG | Max Mustermann | Team | 2026"
```
## Titel-Folien
```python
from db_infrago_pptx import (
add_titel_bild_schwarz,
add_titel_bild_weiss, add_titel_rahmen,
)
# Mit Hintergrundbild (Logo Schwarz) — der häufigste Fall
add_titel_bild_schwarz(
prs,
titel="Cloud Migration",
untertitel="Migration der O2C-Systeme auf CNP",
bild=background_image_path("datenstroeme"),
kategorie="Architektur",
footer=FOOTER,
)
# Mit Hintergrundbild (Logo Weiß) — für dunkle Bilder
add_titel_bild_weiss(
prs,
titel="Digitale Transformation",
untertitel="Unsere Roadmap 2026",
bild=background_image_path("weltkugel"),
kategorie="Strategie",
footer=FOOTER,
)
```
## Inhaltsverzeichnis (Agenda)
```python
from db_infrago_pptx import add_inhaltsverzeichnis_weiss, add_inhaltsverzeichnis_bild_schwarz
add_inhaltsverzeichnis_weiss(
prs,
titel="Agenda",
eintraege=[
"Ausgangslage",
"Lösungsansatz",
"Beispiel anhand O2C",
"Risiken & Maßnahmen",
"Ausblick",
],
footer=FOOTER,
)
# Mit Bild
add_inhaltsverzeichnis_bild_schwarz(
prs,
titel="Agenda",
eintraege=["Punkt 1", "Punkt 2", "Punkt 3"],
bild=background_image_path("ice_line"),
kategorie="Q2 Update",
footer=FOOTER,
)
```
## Kapiteltrenner
```python
from db_infrago_pptx import add_kapiteltrenner_weiss, add_kapiteltrenner_bild_weiss
add_kapiteltrenner_weiss(
prs,
titel="2. Lösungsansatz",
untertitel="Wie wir das Problem angehen",
footer=FOOTER,
)
add_kapiteltrenner_bild_weiss(
prs,
titel="3. Roadmap",
untertitel="Meilensteine bis Ende 2026",
bild=background_image_path("ice_bahnsteig"),
kategorie="Plan",
footer=FOOTER,
)
```
## Standard-Inhaltsfolie
```python
from db_infrago_pptx import add_titel_und_inhalt, add_notes
slide = add_titel_und_inhalt(
prs,
titel="Ausgangslage",
bullets=[
"Bestehende O2C-Systeme sind verteilt auf 4 Plattformen",
"Datenredundanz erschwert Konsolidierung",
"Migration auf CNP läuft seit Q4 2025",
"Erste Komponenten produktiv",
],
footer=FOOTER,
)
add_notes(slide, """
Hier den Kontext erklären: Wo kommen wir her, was war der Auslöser.
Bei Punkt 4 das Beispiel CRM-Modul nennen, das seit März läuft.
Überleitung: 'Daraus ergibt sich folgender Lösungsansatz…'
""")
```
### Mehrstufige Bullets
```python
add_titel_und_inhalt(
prs,
titel="Architektur-Komponenten",
bullets=[
"Frontend",
"React 18",
"Tailwind",
"Backend",
"Java 21 / Spring Boot",
"PostgreSQL",
],
levels=[0, 1, 1, 0, 1, 1],
footer=FOOTER,
)
```
## Zwei-Spalten-Inhalt
```python
from db_infrago_pptx import add_titel_und_2_inhalte
add_titel_und_2_inhalte(
prs,
titel="Pro & Contra Cloud-Migration",
bullets_links=[
"Pro:",
"Skalierung on-demand",
"Geringere Wartung",
"Standardisierte Tools",
],
bullets_rechts=[
"Contra:",
"Initial-Investition",
"Lernkurve im Team",
"Datenschutz-Anforderungen",
],
footer=FOOTER,
)
```
## Text + Bild
```python
from db_infrago_pptx import add_text_und_bild_links, add_text_und_bild_rechts
add_text_und_bild_links(
prs,
titel="Beispiel: Order-to-Cash Pipeline",
bullets=[
"Order kommt vom EVU",
"Validierung und Routing automatisch",
"Abrechnung über Billing-Service",
"Reporting in Power BI",
],
bild=r"C:\diagramme\o2c-flow.png",
footer=FOOTER,
)
add_text_und_bild_rechts(
prs,
titel="Vergleich alt vs. neu",
bullets=["Alt: 4 manuelle Schritte", "Neu: vollautomatisch", "70% schneller"],
bild=r"C:\screenshots\dashboard.png",
footer=FOOTER,
)
```
## Vollbild mit Titel
```python
from db_infrago_pptx import add_bild_mit_titel_schwarz
add_bild_mit_titel_schwarz(
prs,
titel="Live-Demo Architektur",
bild=r"C:\diagramme\architektur-uebersicht.png",
kategorie="Demo",
footer=FOOTER,
)
```
## Statement / Aussage
```python
from db_infrago_pptx import add_statement_rot, add_statement_weiss
add_statement_rot(
prs,
titel="Kernaussage",
statement="Der gemeinsame Datenraum ist der Schlüssel für integrierte O2C-Prozesse.",
bild=background_image_path("weltkugel"),
kategorie="Vision",
footer=FOOTER,
)
```
## Zitat
```python
from db_infrago_pptx import add_zitat_rot
add_zitat_rot(
prs,
zitat="Erst kürzlich haben wir festgestellt, dass die Migration unsere Reaktionszeit halbiert hat.",
autor="— Eva Köster, Trassenmanagement",
kategorie="Stimme aus dem Fachbereich",
footer=FOOTER,
)
```
## Nur Titel / Leer (für eigenes Layout)
```python
from db_infrago_pptx import add_nur_titel, add_leer
# Nur Titel — du fügst Inhalt manuell hinzu
slide = add_nur_titel(prs, titel="Eigenes Diagramm", footer=FOOTER)
# Dann z.B.:
from pptx.util import Cm
from pptx.enum.shapes import MSO_SHAPE
shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(2), Cm(5), Cm(10), Cm(3))
shape.text_frame.text = "Eigene Box"
# Komplett leer (auch kein Titel)
add_leer(prs, footer=FOOTER)
```
## Schluss-Folien
Hinweis: Schlussfolien (`add_ende_bild`, `add_ende_rot`, `add_ende_logo`) haben
bewusst KEINEN Footer- und Foliennummer-Slot — das ist Layout-Default. Deshalb
nehmen sie auch keinen `footer`-Parameter.
```python
from db_infrago_pptx import add_ende_bild, add_ende_rot, add_ende_logo
# Mit Bild
add_ende_bild(
prs,
titel="Vielen Dank.\nFragen?",
bild=background_image_path("ice_bahnsteig"),
)
# Auf Rot
add_ende_rot(prs, titel="Vielen Dank.")
# Mit Logo zentriert
add_ende_logo(prs, text="Kontakt: max.mustermann@deutschebahn.com")
```
## Beispielfolien-Patterns aus dem Master
Vier zusätzliche Helper bauen die häufigsten Patterns aus den Beispielfolien des
DB InfraGO Masters automatisch nach: Tabelle, Daten und Fakten, Zeitstrahl,
Prozessablauf. Sie nutzen Layout 14 (Titel und Inhalt) als Basis und befüllen den
Inhaltsbereich mit Shapes/Tabellen statt Bullets.
### Tabelle mit Türkis-Header
```python
from db_infrago_pptx import add_tabelle
add_tabelle(
prs, titel="Quartalszahlen",
header=["Quartal", "Umsatz", "Wachstum", "Status"],
zeilen=[
["Q1 2026", "12,4 Mio", "+8 %", ""],
["Q2 2026", "13,1 Mio", "+5 %", ""],
["Q3 2026", "13,8 Mio", "+5 %", ""],
],
footer=FOOTER,
)
```
Header-Zeile bekommt automatisch DB-Türkis als Hintergrund mit weißer fetter Schrift,
Datenzeilen sind weiß. Spalten werden gleichmäßig verteilt. Empfehlung: max 56
Datenzeilen, sonst auf mehrere Folien aufteilen.
### Daten und Fakten (Kennzahl groß)
```python
from db_infrago_pptx import add_daten_und_fakten
add_daten_und_fakten(
prs, titel="Migration in Zahlen",
kennzahl="128",
kennzahl_label="Komponenten migriert",
beschreibung="Bis Ende Q2 2026 wurden 128 von 145 Komponenten erfolgreich "
"auf die neue Plattform migriert. Die übrigen 17 folgen in Q3.",
footer=FOOTER,
)
```
Links steht die große Kennzahl in DB-Türkis (96pt) mit kleinem Label darunter,
rechts der Erklärungstext. Gut für Management-Slides mit einer Hauptzahl.
### Zeitstrahl mit n Stationen
```python
from db_infrago_pptx import add_zeitstrahl
add_zeitstrahl(
prs, titel="Roadmap 2026",
stationen=[
("Q1", "Konzept und Architektur"),
("Q2", "Pilotbetrieb mit 3 Teams"),
("Q3", "Rollout DB-weit"),
("Q4", "Optimierung und Skalierung"),
],
footer=FOOTER,
)
```
Horizontale Linie mit Türkis-Kreisen für jede Station. Beschreibungstext alterniert
oben/unten, damit Texte sich nicht überlappen. Empfohlen: 35 Stationen.
### Prozessablauf
```python
from db_infrago_pptx import add_prozessablauf
add_prozessablauf(
prs, titel="Onboarding-Prozess",
schritte=[
("Antrag", "Self-Service-Antrag stellen"),
("Prüfung", "Fachbereich prüft binnen 2 AT"),
("Setup", "IT richtet Zugänge ein"),
("Go-Live", "Onboarding und Start"),
],
footer=FOOTER,
)
```
Durchnummerierte Boxen (Türkis-Light, dunkler Türkis-Rand) mit Pfeilen dazwischen.
Die große Nummer steht oben in der Box, dann Überschrift, dann Beschreibung.
Empfohlen: 35 Schritte.
## Piktogramme
86 monochrome SVG-Icons aus der DB-Master-Vorlage (Slide 24). Nutze sie auf
freien Folien (`add_nur_titel`, `add_leer`) oder als Akzent neben Bullets.
```python
from db_infrago_pptx import (
add_pictogram, list_pictograms, pictogram_path,
DB_TURQUOISE_500, DB_RED, DB_BLACK,
)
from pptx.util import Cm
# Vier Icons nebeneinander mit Beschriftung
slide = add_nur_titel(prs, "Vier Vorteile", footer=FOOTER)
icons = [("haekchen", "Geprüft"), ("uhr", "Schneller"),
("datenbank", "Daten"), ("puzzleteile", "Integriert")]
for i, (key, label) in enumerate(icons):
add_pictogram(slide, key, Cm(2 + i * 7.5), Cm(7), Cm(4),
color=DB_TURQUOISE_500)
# Label darunter via add_textbox …
```
### Piktogramm-Keys finden
```python
# Alle Keys mit Beschreibung
for key, descr in list_pictograms():
print(f" {key:30s} {descr}")
# Direkten Pfad zur SVG bekommen (für add_titel_bild_*-Funktionen)
svg = pictogram_path("haekchen") # Path-Objekt
```
### Farben
`color`-Parameter ist optional. Empfohlene Werte:
- `DB_TURQUOISE_500` — Standard für Akzent-Icons
- `DB_TURQUOISE_700` — dezenter
- `DB_RED` — für Warnungen, „nicht zulässig"
- `DB_BLACK` / `DB_DARK` — neutraler Look
- `DB_WHITE` — für Icons auf farbigem Hintergrund
Ohne `color` bleibt das Icon in der SVG-Default-Farbe (meist Schwarz).
### Wichtige Keys nach Anwendung
- **Bestätigung:** `haekchen`, `volltreffer`, `pruefliste`, `klemmbrett`, `klemmbrett_marke`
- **Negation:** `schliessen`, `verbotsschild`, `nicht_zulaessig`, `kommentar_gefaellt_nicht`
- **Daten/Charts:** `datenbank`, `cloud`, `cloudcomputing`, `balkendiagramm`,
`flussdiagramm`, `verzweigungsdiagramm`, `abwaertstrend-diagramm`,
`balkendiagramm_mit_abwaertstrend`, `blockchain`
- **Kommunikation:** `chat`, `chatblase`, `e-mail`, `kommentar_like`,
`kommentar_herz`, `kommentar_wichtig`, `posteingang`, `informationen`
- **Zeit:** `uhr`, `tageskalender`, `flip-kalender`, `geschichte` (Reload),
`aktualisieren`, `zurueckspulen`, `schneller_vorlauf`
- **Aktionen:** `wiedergabe`, `herunterladen`, `aus_der_cloud_herunterladen`,
`uebertragen`, `einchecken`, `sortieren`, `shuffle`, `umschaltflaeche`
- **Pfeile:** `pfeil_nach_oben`, `_unten`, `_rechts`, `pfeil_kreis`,
`pfeil_mit_einer_linie_gerade`, `pfeil_mit_einer_linie_kurve_im_uhrzeigersinn`,
`caretzeichen_nach_oben` / `_unten` / `_links` / `_rechts`
- **Sonstiges:** `puzzleteile`, `handschlag`, `aktenkoffer`, `lupe`,
`hilfe`, `fragezeichen`, `ausrufezeichen`, `management`, `vertrag`,
`gehaltsabrechnung`, `papier`, `bueroklammer`, `ordner`, `ordnersuche`,
`liste`, `sperren`, `markierung`, `maximieren`, `folgen`, `prost`,
`fahrrad_mit_personen`, `grinsendes_gesicht`, `lachendes_gesicht`,
`computer`, `browserfenster`
Vollständige Liste: `list_pictograms()` oder `PICTOGRAMS.keys()`.
## Weitere Layout-Varianten
Die häufigsten Layouts haben oben eigene Beispiele. Die folgenden Varianten sind
strukturell identisch zu ihren Pendants — Aufruf nur zum Überblick:
```python
from db_infrago_pptx import (
add_titel_rahmen, add_inhaltsverzeichnis_rot,
add_kapiteltrenner_bild_schwarz, add_bild_mit_titel_weiss,
add_zitat_weiss, add_nur_titel_grau, add_bild_agenda,
)
# Titel im Rahmen über Bild — visueller Hingucker
add_titel_rahmen(prs, "Quartals-Highlight", "Q2 2026",
bild=background_image_path("gluehbirne"),
kategorie="Highlight", footer=FOOTER)
# Agenda auf Rot — markant für offizielle Themen
add_inhaltsverzeichnis_rot(prs, "Agenda",
["Eins", "Zwei", "Drei"], footer=FOOTER)
# Kapiteltrenner mit Bild und schwarzem Logo
add_kapiteltrenner_bild_schwarz(prs, "4. Risiken",
untertitel="Was uns Sorgen macht",
bild=background_image_path("gleisarbeiter"),
footer=FOOTER)
# Vollbild-Bild mit Titelzeile und weißem Logo
add_bild_mit_titel_weiss(prs, "Architektur-Übersicht",
bild=r"C:\diagramme\overview.png",
kategorie="Demo", footer=FOOTER)
# Zitat auf hellem Hintergrund (Logo Weiß)
add_zitat_weiss(prs, zitat="Kein Plan überlebt den ersten Kundenkontakt.",
autor="— Helmuth von Moltke", footer=FOOTER)
# Nur Titel auf grauem Hintergrund — visuelle Abgrenzung im Foliensatz
add_nur_titel_grau(prs, "Backup-Slides", footer=FOOTER)
# Bild-Agenda — Spezial-Layout für bildgeprägte Agenden
add_bild_agenda(prs, "Übersicht", kategorie="Agenda", footer=FOOTER)
```
## Kreative Folien — wenn die Templates nicht reichen
Die fertigen Layouts (Titel-und-Inhalt, Zwei-Spalten, Statement, Zitat usw.) sind
für die häufigen Fälle. Für Architektur-Diagramme, BPMN-Skizzen, Roadmaps,
selbstgezeichnete Visualisierungen oder freie Bildkompositionen gibt es drei Layouts,
die als Leinwand gedacht sind:
- `add_nur_titel(prs, titel, footer)` — Titelzeile oben, Rest frei
- `add_nur_titel_grau(prs, titel, footer)` — Variante mit grauem Hintergrund
- `add_leer(prs, footer)` — komplett frei, nur Footer-Slot
Logo und Foliennummer kommen weiter vom Master — du verzichtest nur auf die
vorgefertigten Bullet-Listen und kannst stattdessen mit Shapes, Connectoren, Bildern
und Textfeldern arbeiten.
### Eigenes Architektur-Diagramm
```python
from pptx.util import Cm, Pt
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.dml.color import RGBColor
from db_infrago_pptx import (
add_nur_titel,
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_RED, DB_SAND, DB_GRAY_LIGHT, DB_WHITE,
)
slide = add_nur_titel(prs, "O2C Architektur-Skizze", footer=FOOTER)
def box(slide, x_cm, y_cm, w_cm, h_cm, text, fill=DB_TURQUOISE_500, fg=DB_WHITE):
s = slide.shapes.add_shape(
MSO_SHAPE.ROUNDED_RECTANGLE,
Cm(x_cm), Cm(y_cm), Cm(w_cm), Cm(h_cm),
)
s.fill.solid(); s.fill.fore_color.rgb = fill
s.line.fill.background()
tf = s.text_frame
tf.text = text
tf.vertical_anchor = MSO_ANCHOR.MIDDLE
p = tf.paragraphs[0]
p.alignment = PP_ALIGN.CENTER
p.runs[0].font.color.rgb = fg
p.runs[0].font.size = Pt(14)
p.runs[0].font.bold = True
return s
frontend = box(slide, 2, 5, 7, 2.5, "Frontend")
backend = box(slide, 13, 5, 7, 2.5, "Backend", fill=DB_TURQUOISE_700)
db = box(slide, 24, 5, 7, 2.5, "Datenbank", fill=DB_RED)
def arrow(slide, x1, y1, x2, y2):
c = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT,
Cm(x1), Cm(y1), Cm(x2), Cm(y2))
c.line.color.rgb = RGBColor(0x00, 0x00, 0x00)
c.line.width = Pt(1.5)
return c
arrow(slide, 9, 6.25, 13, 6.25)
arrow(slide, 20, 6.25, 24, 6.25)
```
### Eigenes Bild platzieren mit Caption
```python
from db_infrago_pptx import add_nur_titel
from pptx.util import Cm, Pt
slide = add_nur_titel(prs, "Screenshot Dashboard", footer=FOOTER)
# Bild zentriert, max-Breite
slide.shapes.add_picture(
r"C:\screenshots\dashboard.png",
left=Cm(4), top=Cm(4), width=Cm(26),
)
# Caption darunter
caption = slide.shapes.add_textbox(Cm(4), Cm(16.5), Cm(26), Cm(1))
caption.text_frame.text = "Quelle: Power BI Demo, Stand Mai 2026"
caption.text_frame.paragraphs[0].runs[0].font.size = Pt(10)
caption.text_frame.paragraphs[0].runs[0].font.italic = True
```
### Drei-Säulen-Visualisierung
```python
from db_infrago_pptx import (
add_nur_titel,
DB_TURQUOISE_500, DB_TURQUOISE_700, DB_RED, DB_WHITE, DB_GRAY_LIGHT,
)
from pptx.util import Cm, Pt
from pptx.enum.shapes import MSO_SHAPE
from pptx.enum.text import PP_ALIGN
slide = add_nur_titel(prs, "Drei Erfolgsfaktoren", footer=FOOTER)
saeulen = [
("Daten", "Einheitliche Stammdaten als Grundlage", DB_TURQUOISE_500),
("Prozesse", "Standardisierte Workflows", DB_TURQUOISE_700),
("Plattform", "CNP als technisches Fundament", DB_RED),
]
for i, (titel, text, color) in enumerate(saeulen):
x = 2 + i * 10.5
# Header
h = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(x), Cm(5), Cm(9.5), Cm(2))
h.fill.solid(); h.fill.fore_color.rgb = color; h.line.fill.background()
h.text_frame.text = titel
h.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
h.text_frame.paragraphs[0].runs[0].font.color.rgb = DB_WHITE
h.text_frame.paragraphs[0].runs[0].font.bold = True
h.text_frame.paragraphs[0].runs[0].font.size = Pt(20)
# Body
b = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Cm(x), Cm(7), Cm(9.5), Cm(8))
b.fill.solid(); b.fill.fore_color.rgb = DB_GRAY_LIGHT
b.line.fill.background()
b.text_frame.text = text
b.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
b.text_frame.paragraphs[0].runs[0].font.size = Pt(14)
```
### Hinweise
- Alle Maße in `Cm(...)`, `Pt(...)` oder `Emu(...)` — niemals Pixel
- Folie ist 33.87 × 19.05 cm — Logo oben rechts, Footer unten links nicht überdecken
- DB-Farbkonstanten aus dem Helper importieren statt RGB selbst zu tippen
- Für komplexe Diagramme (Mermaid, Draw.io, Lucidchart) lieber als Bild exportieren und
via `slide.shapes.add_picture(...)` einfügen — saubereres Ergebnis
## Speichern und öffnen
```python
out = save(prs, r"C:\BA\projekt\2026-05-10_o2c-update.pptx")
print(f"Erzeugt: {out}")
```
Im PowerShell danach:
```powershell
Invoke-Item "C:\BA\projekt\2026-05-10_o2c-update.pptx"
```
## Speaker Notes
Für jede Inhaltsfolie:
```python
slide = add_titel_und_inhalt(prs, titel="", bullets=[], footer=FOOTER)
add_notes(slide, """
- Hier den Kontext erklären
- Auf Punkt 2 besonders eingehen
- Übergang zur nächsten Folie: 'Daraus ergibt sich…'
""")
```
## Komplettes Mini-Beispiel
```python
import sys
from pathlib import Path
SKILL_DIR = Path.home() / ".kiro" / "skills" / "pptx-infrago" / "assets"
sys.path.insert(0, str(SKILL_DIR))
from db_infrago_pptx import (
open_deck, save, add_notes, background_image_path,
add_titel_bild_schwarz, add_inhaltsverzeichnis_weiss,
add_titel_und_inhalt, add_statement_rot, add_ende_bild,
)
FOOTER = "DB InfraGO AG | Max Mustermann | V.IVE 11 | 2026"
prs = open_deck()
# Titel
add_titel_bild_schwarz(
prs, "O2C Cloud-Migration", "Status Q2 2026",
bild=background_image_path("datenstroeme"),
kategorie="Architektur", footer=FOOTER,
)
# Agenda
add_inhaltsverzeichnis_weiss(
prs, "Agenda",
["Ausgangslage", "Status", "Nächste Schritte"],
footer=FOOTER,
)
# Inhalt
slide = add_titel_und_inhalt(
prs, "Status",
["Frontend migriert", "Backend in Migration", "DB-Migration startet Q3"],
footer=FOOTER,
)
add_notes(slide, "Frontend ist seit März live. Backend hat 60% geschafft.")
# Statement
add_statement_rot(
prs, "Aussage",
"Wir liegen im Plan und haben das Risiko reduziert.",
bild=background_image_path("laptop_checkmark"),
kategorie="Bottom Line", footer=FOOTER,
)
# Ende
add_ende_bild(prs, "Vielen Dank.", bild=background_image_path("ice_bahnsteig"))
save(prs, r"C:\BA\projekt\2026-05-10_o2c-status.pptx")
```