| name | fwu-design |
| description | Erstelle PowerPoint-Folien im Corporate Design des FWU (Institut für Film und Bild, Medieninstitut der Länder). Triggert IMMER, wenn der User Folien, Decks, Präsentationen oder Statusberichte mit FWU-Bezug, FWU-Design oder FWU-Branding möchte — auch wenn er den Begriff 'FWU-Design' nicht explizit nennt. Triggert ebenso bei Begriffen wie 'Statusbericht AIS', 'AIS Programm', 'telli', 'eduCheck', 'VIDIS', 'HubbS', 'SODIX', 'MEM' oder anderen FWU-Produktnamen. Triggert auch bei jedem Bezug zur Datei 'Statusbericht_Template.pptx' oder ähnlichen FWU-Templates. Nutzt das mitgelieferte FWU-Master-Template mit allen 20 Layouts (Titelfolien, Kapiteltrenner, Inhaltsfolien, Zweispalter, Galerie, Abschluss, Produkt-Layouts) und erzeugt Folien, die optisch identisch zum Original-FWU-Statusbericht sind — Logo, Schriftart Rethink Sans, Farbpalette, Footer und Foliennummern werden automatisch vom Master vererbt. |
FWU Design — PowerPoint im FWU Corporate Design
Dieser Skill erzeugt PowerPoint-Decks im offiziellen FWU-Design (Institut für Film und Bild, Medieninstitut der Länder). Er nutzt ein mitgeliefertes Master-Template, dessen Layouts das gesamte FWU-Branding (Logo, "75 Jahre FWU"-Badge, Schrift, Farben, Footer) automatisch vererben. Du musst die Marke nicht nachbauen — nur die Layouts korrekt befüllen.
Wann diesen Skill nutzen
Immer, wenn ein FWU-Deck entstehen soll. Typische Auslöser:
- "Mach mir einen Statusbericht für AIS / telli / Februar 2026 …"
- "Bau mir 3 Folien zum Thema X im FWU-Design"
- "Erstelle eine Präsentation für die didacta zum AIS Programm"
- "Aus diesem Reporting bitte ein Slidedeck im FWU-Stil"
- Jede Anfrage, die FWU-Produkte (AIS, telli, eduCheck, VIDIS, HubbS, SODIX, MEM) erwähnt und ein Deck/Folien als Output verlangt
Workflow
- Template ist Pflicht-Ausgangspunkt. Niemals von null in
pptxgenjs o.ä. nachbauen — die Schrift Rethink Sans, das Logo, die "75 Jahre FWU"-Marke und die exakte Farb-Tonalität sind nur über das Template korrekt.
- Mit dem Helper-Script starten:
python scripts/new_deck.py <output.pptx> legt eine leere Datei mit allen Mastern/Layouts an.
- Folien per python-pptx hinzufügen über die Layout-Indizes (siehe unten).
- Visuell prüfen mit dem QA-Workflow aus dem
pptx-Skill (PDF-Konvertierung + Subagent-Inspektion). Mindestens einmal vor Auslieferung.
Schnellreferenz: Layouts und Platzhalter
Ausführliche Beschreibung mit Maßen und Hinweisen: siehe references/layouts.md. Hier die wichtigsten Layouts in der Reihenfolge, wie sie typischerweise in einem Statusbericht-Deck vorkommen:
slide_layouts[i] | Layout-Name | Wozu |
|---|
[0] | Titelfolie orange | Cover des Decks (vollflächig orange, weißer Titel, Datum unten rechts) |
[1] | Titelfolie nude | Alternative Cover-/Trennseite mit Peach-Hintergrund — wird im Original auch als Sub-Brand-Trenner ("telli", "Programmpläne") genutzt |
[2] | Kapiteltrennseite | Vollorange Trenner zwischen Hauptkapiteln, mit großer Kapitelnummer |
[6] | Text Headline und Quellenangabe | Standard-Inhaltsfolie mit drei Quellen-Boxen rechts (Quellen müssen befüllt oder gelöscht werden, sonst sichtbarer Lorem-ipsum-Rest) |
[7] | Headline und Text oder Medien 2 | Standard-Inhaltsfolie ohne Quellenboxen — Default für die meisten Folien |
[8] | Textseite mit plakativem Fließtext | Inhalt mit großem, prominenten Fließtext |
[9] | Textseite Zweispaltig | Zwei nebeneinander liegende Textspalten |
[10] | Text und Galerie | Text plus bis zu 6 Bildkacheln |
[12] | Abschlussfolie | "Vielen Dank"-Schluss mit Kontaktdaten rechts |
Produktspezifische Master 1–7 enthalten je ein Layout für Bildseite mit Textbox, eduCheck, VIDIS, AIS, HubbS, SODIX, MEM. Diese werden über prs.slide_masters[N].slide_layouts[0] adressiert.
Platzhalter-Indizes (idx)
PowerPoint adressiert Platzhalter über placeholder_format.idx — diese Werte sind nicht mit der Reihenfolge in .placeholders identisch. Zugriff immer über die Helper-Funktion set_ph(slide, idx, text) aus dem Helper-Script oder direkt:
for ph in slide.placeholders:
if ph.placeholder_format.idx == 12:
ph.text = "..."
Konventionen über alle Inhaltslayouts hinweg:
idx=0 → Folientitel (TITLE)
idx=10 → Foliennummer (auto)
idx=11 → Footer-Text (z.B. Stg AIS, 20.2) — wird beim Erstellen einer neuen Folie meist automatisch leer sein, kann gefüllt werden
idx=12, idx=13 → Body / Spalten (je nach Layout)
idx=20 → Kapitelnummer oben links (z.B. "01")
idx=21 → Kapiteltext oben links unter der Nummer (z.B. "Statusbericht AIS\nFebruar 2026"). Max. ~15 Zeichen pro Zeile — bei längeren Texten bricht das Layout mitten im Wort um (Breite nur ~1" bei 11pt). Lieber kurz halten: "telli Q1 2026" statt "Quartalsreport telli\nQ1 2026".
idx=22–27 → Inhalts-Container in mehrspaltigen Layouts (Galerie, Inhaltsverzeichnis)
Sonderfälle:
- Layout 0 (Titelfolie orange) / 1 (Titelfolie nude):
idx=11 ist die optionale Overhead-Zeile über dem Titel; idx=12 ist der eigentliche Titel (max. 3 Zeilen). Datum unten rechts wird automatisch über ein Datumsfeld gesetzt.
- Layout 2 (Kapiteltrennseite):
idx=20 = Nummer ("01"), idx=12 = Kapiteltitel, idx=11 = Beschreibungstext darunter.
- Layout 6 (mit Quellen): Die drei Quellen-Boxen rechts (Position ≈ 11.6"/3.1", 4.2", 5.3") sind keine echten Platzhalter, sondern Layout-eigene Textboxen mit Lorem-ipsum-Inhalt. Sie erscheinen sichtbar, wenn die Folie nicht überschrieben wird. Wenn keine Quellen benötigt werden: Layout 7 nutzen. Wenn Quellen rein sollen: per
add_textbox an gleicher Position überlagern oder per XML-Manipulation überschreiben.
- Layout 12 (Abschluss):
idx=12 = Schlusstitel ("Vielen Dank"), idx=13 = Untertitel ("Fragen?").
Code-Pattern: Folie hinzufügen
Tipp: Für die üblichen Bausteine (set_ph, add_card, stat_callout, add_textbox, FWU-Farb-Konstanten) gibt es ein Helper-Modul unter scripts/helpers.py:
import sys
sys.path.insert(0, "/mnt/skills/user/fwu-design/scripts")
from helpers import set_ph, stat_callout, add_card, ORANGE, MAGENTA, PEACH
from pptx import Presentation
from pathlib import Path
import subprocess
out = "mein_deck.pptx"
subprocess.run(["python", "scripts/new_deck.py", out], check=True)
prs = Presentation(out)
def set_ph(slide, idx, text):
"""Setze Text in Platzhalter über idx. Liefert den Platzhalter zurück oder None."""
for ph in slide.placeholders:
if ph.placeholder_format.idx == idx:
ph.text = text
return ph
return None
s = prs.slides.add_slide(prs.slide_layouts[0])
set_ph(s, 11, "Statusbericht")
set_ph(s, 12, "AIS / telli\nApril 2026")
s = prs.slides.add_slide(prs.slide_layouts[2])
set_ph(s, 20, "01")
set_ph(s, 12, "Programm Status")
set_ph(s, 11, "Aktueller Stand AIS / telli")
s = prs.slides.add_slide(prs.slide_layouts[7])
set_ph(s, 0, "AIS Programm Status")
set_ph(s, 20, "01")
set_ph(s, 21, "Statusbericht AIS\nApril 2026")
s = prs.slides.add_slide(prs.slide_layouts[9])
set_ph(s, 0, "Erreichte vs. anstehende Meilensteine")
set_ph(s, 20, "06")
set_ph(s, 21, "Statusbericht AIS\nApril 2026")
set_ph(s, 12, "Erreicht\n• Sprint 3 abgeschlossen\n• PoC läuft")
set_ph(s, 13, "Anstehend\n• Pilotschulen-Auswahl\n• DSFA-Entwurf")
s = prs.slides.add_slide(prs.slide_layouts[12])
set_ph(s, 12, "Vielen Dank")
set_ph(s, 13, "Fragen?")
prs.save(out)
Tabellen, Diagramme, Bilder
Standard python-pptx-Methoden auf dem Slide funktionieren uneingeschränkt:
- Tabelle:
slide.shapes.add_table(rows, cols, left, top, width, height) — als Standardposition für eine Inhaltsfolie passen Inches(2.24), Inches(1.91), Inches(10.5), Inches(4.5) (rechts vom Kapitel-Block, unter dem Titel).
- Diagramm:
slide.shapes.add_chart(...) — die Theme-Farben (#FE7235 als Akzent 1) werden korrekt angewendet, weil das Theme mitgeliefert wird.
- Bild:
slide.shapes.add_picture(path, left, top, width, height).
Wenn du eine Folie mit Inhalt-Platzhalter (idx=22, OBJECT-Typ in Layout 7) befüllst, kannst du placeholder.insert_table() / insert_picture() verwenden — dann wird der Platzhalter durch den Inhalt ersetzt, ohne dass du Koordinaten brauchst.
Farben (für eigene Shapes/Highlights)
| Verwendung | Hex | Beispiel |
|---|
| Primär Orange | #FE7235 | Akzente, Highlights, Status-OK |
| Sekundär Peach | #FEF3E9 | Hintergrund-Boxen, Karten |
| Alternative Peach (kräftiger) | #FFDCBD | Card-Header, Badges |
| Magenta-Akzent | #96375C | Sub-Akzent, kontrastierende Highlights |
| Magenta hell | #ECB9CE | Magenta-Backgrounds |
| Gelb | #F7B335 / #FBD022 | Status-Warnung, Highlights |
Die Schrift Rethink Sans ist im Theme als major + minor Font hinterlegt — neu hinzugefügte Textboxen erben sie automatisch über den Theme-Standard.
Stat-Callouts — Schriftgrößen-Daumenregel
Für große Kennzahlen in Cards gilt bei Rethink Sans Bold und Card-Breite ~3.45":
| Zahlen-Länge | Max. Font-Size | Beispiel |
|---|
| 1–2 Zeichen | 52pt+ | "60" |
| 3–4 Zeichen | 48pt | "2.4M" |
| 5 Zeichen | 42pt | "36.831" |
| 6 Zeichen | 40pt | "123.456" |
| 7 Zeichen | 38pt | "918.328" |
| 8+ Zeichen | 32pt oder umbrechen | "1.234.567" |
Grund: Bei schmaleren Cards (<3.5") bricht Rethink Sans Bold ab 40pt bei 7-stelligen Zahlen um — das zerstört das Layout, weil die Card-Höhe fix ist und das Label aus der Card herausfließt. Im Zweifel kleiner wählen und die Card weiter/höher ziehen statt eng schneiden.
Wenn breitere Cards gebraucht werden (z.B. bei 2 statt 3 Cards pro Reihe), geht bei 4.8"-Cards problemlos 42pt auch für 7-stellige Zahlen. Die Funktion stat_callout() in scripts/helpers.py wendet diese Regel automatisch an.
Footer / Fußnote / Header
Der globale Footer (orange Pille unten rechts mit "Statusbericht AIS / Februar 2026"), die FWU-Logo-Marke oben rechts und die Foliennummer kommen vom Master und werden auf jeder Folie automatisch gerendert. Manuelles Hinzufügen ist nicht nötig und führt zu Doppelungen.
Wenn der Header-Text dynamisch sein soll (z.B. Monat ändern), nutze die Footer-Felder via set_ph(s, 11, "Stg AIS, 20.2") und set_ph(s, 21, "Statusbericht AIS\nApril 2026") pro Folie.
QA — Pflicht vor Auslieferung
python /mnt/skills/public/pptx/scripts/office/soffice.py --headless --convert-to pdf output.pptx
rm -f slide-*.jpg
pdftoppm -jpeg -r 150 output.pdf slide
extract-text output.pptx | grep -iE "lorem|ipsum|placeholder|TODO|\[insert"
Visuelle Inspektion gegen die Originaldatei assets/template.pptx als Referenz.
Bekannte Stolperfallen
- Folien aus dem Template löschen verlangt das Entfernen der Relationship, sonst gibt es beim nächsten
prs.save() Duplicate-Name-Errors. Das Helper-Script new_deck.py macht das richtig — niemals manuell mit del prs.slides._sldIdLst[i] arbeiten.
- Layout 6 zeigt sichtbares Lorem-ipsum aus den Layout-eigenen Quellenboxen, wenn die Folie nicht überschrieben wird. Default für Inhaltsfolien ist deshalb Layout 7.
- Die Datums-Felder auf der Titelfolie aktualisieren sich beim Öffnen automatisch auf das aktuelle Datum (LibreOffice) bzw. das letzte Speicherdatum (PowerPoint). Wenn ein fixes Datum gewünscht ist, muss das Datumsfeld via XML durch statischen Text ersetzt werden.
- Sub-Brand-Pillen (das kleine
🔻 telli-Etikett oben links auf telli-Folien) sind im Original manuell platzierte Shapes, kein Layout-Element. Wenn sie gebraucht werden, einmal als Shape-Gruppe nachbauen und kopieren.
- Typografische Anführungszeichen (
„" / "") im Python-Quellcode vermeiden, wenn der äußere String doppelte " nutzt. Typografische Zeichen wie „, ", — innerhalb eines f"..."-Strings können bei bestimmten Dateicodierungen einen SyntaxError: invalid character auslösen. Entweder: äußere Strings als '...' setzen, oder typografische Zeichen als \u201e / \u2014 escapen, oder durch ASCII-Äquivalente ersetzen ("...", -).