Produktszenengrafik-Generator · v2 / v3
Gib einen «Titel» ein, erzeuge eine Szenengrafik von 1760×1120. Der Stil ist festgelegt, kein Neudesign, nur Layout auswählen + Inhalt füllen.
Zwei Ausrichtungen, zuerst eine auswählen:
| v2 · Karten | v3 · Grafisch | |
|---|---|---|
| Hauptelement | Abgerundete rechteckige Knoten + kurze Beschriftung | Großes Symbol / runder Knoten / grafische Vorrichtung |
| Inhaltsbereich | Mit ganzer weißer Content-Karte | Ohne, Grafiken schweben direkt auf hellblauem Panel |
| Textmenge | 5–7 Stellen mit je 2–4 Zeichen | 3–4 Stellen mit je 2–3 Zeichen |
| Geeignet für | Schrittweise并列 Darstellung von 5–6 Konzepten | Wenige Punkte, Grafik soll für sich selbst sprechen |
| Vorlage | template-b/c-* | template-d/e-* |
Standardmäßig v3 – diese Grafiken werden oft auf 240px Breite skaliert; Grafiken widerstehen der Skalierung besser als Text. Nur wenn die Information selbst «5并列 Punkte, jeder muss gelesen werden» ist, auf v2 zurückgreifen.
Warum HTML/CSS-Rendering statt KI-Bildgenerierung: Diese Grafiken haben präzisen Text und 1px-Striche. Diffusionsmodelle verwischen Text und Striche und liefern bei gleichem Prompt jedes Mal andere Ergebnisse. HTML-Rendering → Screenshot: Text immer klar, jederzeit änderbar, batch-fähig, reproduzierbar.
Warum die Struktur einfach sein muss: Die endgültige Betrachtungsgröße dieser Grafiken ist oft 240px Breite (Webkarte), nicht 1760. Bei 1/7-Skalierung wird «sechs Knoten + Mini-Diagramm + dünnes Skelettband» zu grauem Rauschen. Die harte Anforderung von v2: Auf 240px skaliert, müssen Titel und jede Beschriftung sinngemäß lesbar sein.
Skalierungsmaßstab (zuerst diese Tabelle merken)
| Betrachtungsbreite | Skalierung | Tatsächliche Anzeige von 48px Text | Fazit |
|---|---|---|---|
| 1760 (PPT Vollbild) | 1:1 | 48px | Etwas groß, aber akzeptabel |
| 480 (Web groß) | 1/3.7 | 13px | Angenehm |
| 240 (Webkarte) | 1/7.3 | 6.6px | Design-Abnahmegröße |
| 190 (Listenminiatur) | 1/9.3 | 5.2px | Bereits am Limit |
Also: Kein Text unter 40px sollte auftauchen, kein Element unter 300px Breite hält Details aus.
Eiserne Regeln (Bei Verstoß sieht das Ergebnis nicht richtig aus)
- Leinwand 1760×1120 (11:7), reines Weiß, kein Farbverlauf, keine Vignette, kein Rahmen.
- Die Koordinaten von Außenschale + Panel sind fest codiert und dürfen nicht geändert werden – dies ist die einzige «Tiefe»-Quelle. Die dritte Schicht, die Content-Karte, gehört nur zu v2; v3 legt sie nicht aus, Grafiken liegen direkt auf dem Panel.
- Das gesamte Bild hat genau 1 Farbverlauf-Symbol-Kachel, 170–200px im Quadrat, sie ist das visuelle Hauptelement.
- Gesamtzahl der Elemente im Inhaltsbereich ≤ 7 (Verbindungen, Griffe nicht eingerechnet). Bei mehr als 7 werden sie im Miniaturformat zu Rauschen.
- Text: Titel 76px, Beschriftungen 48–50px, Badge 44px. Es gibt keinen 20px-Text.
- Farbton festgelegt auf 200°–250°. Die einzige warme Farbe
#F58A8Adarf nur für «Warnung» verwendet werden. - Keine Personen, keine Perspektive, kein 3D, keine Fotos, kein Umgebungshintergrund. Alle Rechtecke streng achsenausgerichtet.
- Nur eine Größe ausgeben: 1760×1120, keine abgeleiteten Miniaturformate wie 660×420 exportieren.
- Der gesamte Text muss echter Text (HTML-Text) sein, kein Bild oder Pfad.
- Jede Verbindungslinie muss an beiden Enden auf einer Elementkante oder einer anderen Linie enden. Vor der Auslieferung muss der Verbindungsprüfer von
render.pybestanden werden (Exit-Code 0).
Feste Geometrie (Abschreiben, nicht ändern)
| Schicht | Element | left | top | w | h | r |
|---|---|---|---|---|---|---|
| L0 | canvas | 0 | 0 | 1760 | 1120 | – |
| L1 | shell Außenhülle weiß | 110 | 66 | 1520 | 968 | 62 |
| L2 | panel hellblau | 140 | 96 | 1460 | 908 | 50 |
| L3 | content Karte weiß | 180 | 240 | 1310 | 644 | 40 |
| L4 | badge Schwimmmarke | 1312 | selbst | 320 | 128 | 32 |
| – | title Titel | 190 | 132 | – | – | 76px / 600 |
Abgeleitete Grenzen (zum Ausrichten von Inhalten):
- Rechter Rand des Panels 1600, unterer Rand 1004; rechter Rand der Content-Karte 1490, unterer Rand 884.
- Vom unteren Rand der Content-Karte zum unteren Rand des Panels bleiben 120px blaues Band (
1004 − 884). - Rechter Rand des Badges 1632, über das Panel hinaus 32px – das ist der «Rahmenbruch», nicht zurückschieben.
- Verfügbare Breite des Inhaltsbereichs = 180→1490, minus je 60 Innenabstand links und rechts = 1190, Elemente müssen zwischen 240–1430 platziert werden.
- Das Badge belegt den Bereich ab 1312, der rechte Rand der Inhaltselemente darf 1230 nicht überschreiten, sonst wird es überdeckt.
Panel-Farbverlauf (muss bei #F5FAFF enden, nicht heller):
background:linear-gradient(180deg,#E4F1FF 0%,#E9F4FF 34%,#F2F9FF 74%,#F5FAFF 100%);
Untere Elementgrößen (v2)
| Element | Größe | Beschreibung |
|---|---|---|
| Farbverlauf-Kachel | 170–200 im Quadrat | Breite 10–11 %, größter Farbblock im gesamten Bild |
| Breites Schichtband | 910×152 | Eine ganze Schicht mit einem Band, platziert «Symbol + Schichtname» |
| Normaler Knoten | 330×132 | Drei in einer Reihe, Abstand 35 |
| Kleine Ausgabekarte | 360×120 | Drei in einer Reihe, Abstand 40 |
| Badge | 320×128 | Symbol 46 + 44px Text |
| Symbole | 50–54 | stroke-width 2.2, zu dünn wird beim Skalieren unsichtbar |
| Verbindungslinie | 4px | dasharray 12 10, Pfeile mit gleichschenkligem Dreieck |
| Auswahlgriff | 20×20 | border 3px, Mitte an den Eckpunkt des Knotens ausgerichtet |
Arbeitsablauf
Schritt 1 · Langer Titel → Kurzer Titel + Badge
- Funktionsname nehmen, auf 4–6 chinesische Zeichen reduzieren: «Technische Dokumentation und Wissensdatenbank-Visualisierung-…» → «Dokumentationsgrafik-Generierung».
- Badge-Text 4 Zeichen (320px bietet nur Platz für 4 Zeichen mit 44px), eine «Zusage» schreiben: «Ein-Klick-Einfügen» «Nur diesen Block ändern» «Layout unverändert» «Lokal änderbar».
- Beispielsatz einen echten Satz schreiben, nicht «Beispieltext».
Schritt 2 · Layout auswählen
| Titelmerkmal | Layout | Vorlage |
|---|---|---|
| Ein Kern → mehrere Ausgaben, Fähigkeitsausstrahlung, ein Zentrum N Szenarien | D Kernverzweigung (v3) | assets/template-d-orbit.html |
| A→B→C Dreischritt, Hochladen→Analysieren→Erfassen, Bauen→Testen→Veröffentlichen | E Kreispipeline (v3) | assets/template-e-pipeline.html |
| Eingabe→Generieren→Mehrere Ausgaben, Konvertieren, Organisieren (benötigt Textbeschriftungen, um verständlich zu sein) | B Oben→Unten Verzweigung (v2) | assets/template-b-flow.html |
| Sowohl «Ein-Satz-Generierung» als auch «Nach der Generierung änderbar» (benötigt UI-Gefühl) | C-1 Leinwand-Bearbeitungsmodus (v2) | assets/template-c-ui.html |
| Geschichtete Architektur (Zugang / Dienst / Daten) Schicht für Schicht erklärt | C-2 Geschichteter Auswahlmodus (v2) | assets/template-c-arch.html |
Details siehe references/layouts.md. Unsicher: Punkte ≤ 4 → D oder E; Informationen müssen einzeln aufgereiht werden → C-2 (es ist im Miniaturformat am klarsten).
Schritt 3 · Vorlage anpassen
Kopie der Vorlage erstellen, nur diese Stellen ändern, keine Zeile des Schalen-CSS anfassen:
.titleText;- Kurze Beschriftung (2–4 Zeichen) in jedem Pfad/jedem Knoten/jeder Karte;
- Text des Badges
.badge(4 Zeichen) +top(vertikaler Abstand zwischen zwei Badges ≥40px); - Beispielsatz im Eingabeband / in der Sprechblase;
- Beim Löschen eines Elements gleichzeitig seine Verbindungslinien und Pfeile löschen, sonst bleiben freie Linienenden;
- Beim Ändern von Verbindungen muss die Schreibweise «Knotenpunkt + unabhängige Segmente» aus dem Abschnitt «Wie zeichnet man Verbindungen, damit sie nicht brechen» verwendet werden, keine spontanen Kurven hinzufügen.
Schritt 4 · Rendern
python <SKILL_DIR>/scripts/render.py <input.html> <output.png>
<SKILL_DIR> ist das Installationsverzeichnis dieses Skills (wo SKILL.md liegt), nicht das aktuelle Arbeitsverzeichnis – dein cwd ist normalerweise das Benutzerprojekt; scripts/render.py direkt zu schreiben, findet die Datei nicht.
Das Skript kopiert das HTML in ein ASCII-temporäres Verzeichnis und ruft dann den Headless-Browser auf – chinesische Pfade lassen Headless stillschweigend fehlschlagen und geben ein leeres oder altes Bild aus. Es validiert auch, ob die Ausgabe 1760×1120 ist, und prüft automatisch, ob die Endpunkte jeder Verbindungslinie frei hängen – Exit-Code 3 bedeutet unterbrochene Linien, nicht ausliefern.
Schritt 5 · Miniatur-Selbstprüfung (wichtigster Schritt)
python <SKILL_DIR>/scripts/preview.py <output.png> --width 240
Muss das Miniaturbild tatsächlich ansehen und mit references/checklist.md abgleichen. Das Bewertungskriterium ist nur ein Satz:
Kann man bei Skalierung auf 240px noch Titel, den Sinn jeder Beschriftung und «Welcher Teil ist der Schwerpunkt?» erkennen?
Wenn nicht, Elemente reduzieren, Schriftgröße erhöhen, nicht durch Hinzufügen von Details lösen.
v3 · Grafisch (Symbol- und Grafikelement-getrieben)
Ein Satz: Was gezeichnet werden kann, nicht schreiben.
Jedes Element von v2 ist ein «abgerundetes Rechteck + Symbol + Text», alle isomorph, daher liest sich das gesamte Bild wie ein Haufen Flussblöcke. v3 ändert nur drei Dinge: die Content-Karte entfernen, Symbole dreimal vergrößern, Grafik selbst die Semantik tragen lassen.
Drei harte Regeln
- Keine Content-Karte auslegen. Grafiken schweben direkt auf dem hellblauen Panel; weißer Hintergrund nur für kleine Teile wie Badges. Begrenzung durch Schatten, nicht durch Striche.
- Symbole ≥ 84px. Visuelle Strichbreite =
stroke × Anzeigegröße / 24, Ziel 7–9px (bei Skalierung auf 240px etwa 1px). - Beschriftungen ≤ 4 Stellen, jede 2–3 Zeichen. Bei mehr als 4 Stellen erklärst du noch mit Text – geh zurück und zeichne diese Information als Grafik.
Symbolbibliothek (50 Stück)
assets/icons.svg ist ein Sprite. Die gesamte Inline einfügen in die Seite, um sie nutzen zu können:
<body>
<!-- Den gesamten Inhalt von assets/icons.svg hier einfügen -->
<svg><use href="#i-database"/></svg>
</body>
Externe Referenzen (<use href="icons.svg#i-database"/>) werden unter file:// vom Browser aus Cross-Domain-Gründen geblockt, und die Symbole verschwinden im Headless-Screenshot vollständig, ohne Fehlermeldung.
python <SKILL_DIR>/scripts/iconlib.py --list # Alle IDs nach Gruppe auflisten
python <SKILL_DIR>/scripts/iconlib.py --preview p.png # Symbolwand generieren, Symbole auswählen
Gruppen: Diagramme / Darstellungen 12 Stück · Technische Elemente 15 Stück · KI und Inhalt 18 Stück · Interaktion 5 Stück.
Symbol-Innen kein stroke-width schreiben, nach Anzeigegröße anpassen:
| Anzeigegröße | stroke |
|---|---|
| 84–108 | 1.9–2.0 |
| 130–140 | 1.5 |
| 170–190 | 1.3 |
Wenn kein passendes gefunden wird, ein ähnliches austauschen, nicht spontan neue Formen zeichnen – sobald der Linienstil nicht einheitlich ist, fällt das Bild sofort auf.
Grafische Bauteile (15 Stück)
assets/parts.html ist eine Seite mit Bauteilwand, jedes Teil mit echtem Objekt + Klassenname + Größe, einfach HTML + CSS kopieren:
Farbverlauf-Kachel · Weißer runder Badge · Rahmenbrechender Badge · Beschriftungs-Kapsel · Fensterrahmen · Schichtstapel · Farbverlauf-Pfeil · Gestrichelte Verbindung · Auswahlgriff · Befehlsblase · Ringfortschritt · Mini-Balkendiagramm · Punktmatrix-Hintergrund · Sternstrahl · Auswahl-Kachel.
Zwei Layouts
- D Kernverzweigung → Ein Kern → Mehrere Ausgaben. Zentrum ist «drei versetzt gestapelte Seiten + Sternstrahl», nicht ein einzelnes Symbol.
- E Kreispipeline → A→B→C Dreischritt. Der mittlere Teil ist der einzige Farbverlaufskörper und der erste Anziehungspunkt des Lesers.
Beide werden aus den obigen Bauteilen zusammengesetzt; zum Ändern der Grafik nur Symbole und 2–3-Zeichen-Beschriftungen austauschen.
Grundgerüst der v2-Layouts
B Oben→Unten Verzweigung (template-b-flow.html)
Eingabe-Kapsel 690×136 zentriert → vertikale Linie → Farbverlauf-Kachel 200 → vertikale Linie zur Hauptlinie → horizontale Hauptlinie teilt sich in drei Pfade → drei Ausgabekarten 360×120. Badge oben rechts.
C-1 Leinwand-Bearbeitungsmodus (template-c-ui.html)
Kachel oben links 170 + Eingabezeile 850×118 → hellblaue Leinwand-Platine 1160×352, enthält drei Knoten 330×132, mittlerer Knoten ausgewählt → darunter Befehlsblase 430×112, mit 4px gestrichelter Linie mit ausgewähltem Knoten verbunden. Badge oben rechts.
C-2 Geschichteter Auswahlmodus (template-c-arch.html)
Drei 910×152 Schichtbänder vertikal gestapelt (Abstand 40, gesamte Gruppe vertikal zentriert), mittleres Band ausgewählt und mit einer 104px kleinen Farbverlauf-Kachel → rechts zwei Badges. Geringster Informationsgehalt, beste Lesbarkeit im Miniaturformat.
v2-Bauteile (6 Stück, ausreichend)
- Farbverlauf-Symbol-Kachel —
170–200 / r44–52 / linear-gradient(135deg,#4A9DFC,#5E92F9 45%,#7C6BF5)+ weißes lineares Symbol (84–100px, stroke-width 1.6) + unterer Rand sanfter Schein0 18 40 rgba(74,157,252,.42), 0 0 40 8 rgba(124,107,245,.14). - Badge — Weißer Hintergrund
320×128 / r32+0 20 48 rgba(31,71,141,.16)+ 46px blaues Symbol + 44px Text. - Schichtband / Knoten — Weißer Hintergrund +
3px #C9DCF2Strich + 90px hellblaues abgerundetes Symbol-Feld +50px/500Beschriftung. Kein Skelettband, echten Text schreiben. - Auswahlzustand —
5px #4A9DFC+0 0 0 12px rgba(74,157,252,.11)+ 20px Griffe an den vier Ecken (Mitte an den Eckpunkt ausgerichtet) + optionale eingebettete kleine Farbverlauf-Kachel. Keinen gestrichelten Auswahlrahmen zeichnen (würde von Verbindungen durchkreuzt). - Verbindungslinie —
4px / #A9C7EC / dasharray 12 10, Pfeile sind gleichschenklige DreieckeM827 716 h16 l-8 14 z. Kein rechtwinkliges Dreieck verwenden. - Leinwand-Platine —
#F8FBFF / 2px #DDEBFB / r36, fasst «Knoten + Blasen» zu einer Gruppe zusammen, verhindert Streuung des Bildes.
Wie zeichnet man Verbindungen, damit sie nicht brechen
Verbindungen sind der einzige Teil, der absolute Koordinaten von Hand geschrieben erfordert, und die anfälligste Stelle. Wenn eine Linie um einige hundert Pixel zu kurz ist, sieht das gesamte Bild immer noch «so aus» – bei 1760 Originalgröße ohne Vergrößerung unsichtbar, bei Skalierung auf 240px vollständig unsichtbar, bis die Grafik ausgeliefert wurde und jemand darauf hinweist.
Verzweigungen müssen in «Knotenpunkt + unabhängige Segmente» aufgeteilt werden
Falsch – Ein Pfad, der unterwegs abbiegt und sich verzweigt, die Hauptlinie deckt nur den äußersten linken Zweig ab:
<path d="M835 652 V690 H435 V716"/> <!-- vertikal → links horizontal → vertikal, bricht hier ab -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/> <!-- Startpunkt schwebt im Leeren -->
Richtig – Alle Schnittpunkte treffen sich auf Endpunkt-Ebene:
<path d="M835 652 V690"/> <!-- vertikale Linie fällt auf Knotenpunkt (835,690) -->
<path d="M835 690 H435"/> <!-- linke Hälfte der Hauptlinie -->
<path d="M835 690 H1235"/> <!-- rechte Hälfte der Hauptlinie -->
<path d="M435 690 V716"/> <!-- drei Zweige, Start-y alle gleich dem Hauptlinien-y -->
<path d="M835 690 V716"/>
<path d="M1235 690 V716"/>
Drei Regeln:
- Ein Pfad macht nur eine Sache: entweder gerade runter oder quer. Nicht unterwegs abbiegen und dann verzweigen.
- Beide Enden der Hauptlinie müssen gleich dem x des äußersten linken und rechten Zweigs sein, diese drei Zahlen müssen im Code wörtlich identisch sein. Ändere eine Seite, die andere entsprechend mit.
- End-y des Zweigs = top der Karte − 14 (14 ist Pfeilhöhe), Start-y des Zweigs = y der Hauptlinie.
Jedes Rendern wird automatisch geprüft
render.py führt nach dem Rendern automatisch linklint.py aus: Lässt den Browser die tatsächlichen Endpunkte jeder Linie berechnen und beurteilt einzeln, ob sie an einer Elementkante anliegt (≤8px) oder eine andere Linie schneidet (≤3px).
Wenn nicht erfüllt, ist es frei schwebend, und die Koordinaten werden sofort gedruckt:
[x] 1 freischwebender Endpunkt gefunden:
Linie 6 Startpunkt bei (1235,690), nächstes Objekt ist 40px entfernt d="M1235 690 V716"
Dann ist der Exit-Code 3, nicht ausliefern. Auch separate Prüfung möglich:
python <SKILL_DIR>/scripts/linklint.py scene.html -v
Pfeildreiecke, Beziehungsrauten etc. – diese gefüllten Grafiken nehmen nicht an der Prüfung teil (ihre Basis liegt ohnehin auf dem Linienendpunkt), aber sie werden als verbindbare Ziele betrachtet – daher ist es gültig, wenn eine Linie an einem Pfeil endet.
Diese Prüfung erkennt nur Geometrie, nicht «sieht ungefähr richtig aus». Sie hat einmal einen echten Fehler gefunden: Einem dritten Zweig einer Dreifachverzweigung fehlte eine gesamte 800px lange horizontale Linie, während das gesamte Bild für das bloße Auge völlig normal aussah.
Häufige Fehler (alle bereits erlebt)
| Phänomen | Ursache | Behebung |
|---|---|---|
| Bei Skalierung auf 240px verschwommenes Grau | Elemente zu klein, zu viele | Elemente auf ≤7 reduzieren, Schriftgröße auf 48px erhöhen, Strich auf 3–5px verdicken |
| Skelettbänder im Miniaturformat wie graues Rauschen | Dekorative Skelettbänder verwendet | Durch echte kurze Beschriftungen (2–4 Zeichen) ersetzen |
| Weißes Band am unteren Rand, Panel sieht nur wie Rahmen aus | Farbverlauf zu hell bis #FBFCFE | Bei #F5FAFF enden |
| Badge überdeckt Inhalt | Inhaltselemente überschreiten 1230 | Rechten Rand des Inhalts auf 1230 begrenzen |
| Griffe schweben außerhalb der Ecke | Handgeschriebenes top nicht halbiert | handle.left = Eckpunkt x − 10, top = Eckpunkt y − 10 |
| Gestrichelte Linie unsichtbar | Vom Leuchten des ausgewählten Knotens überdeckt | Dem SVG der Verbindung z-index:6 hinzufügen |
| Pfeile schief, sehen aus wie rechtwinklige Dreiecke | Pfad falsch geschrieben | Gleichschenkliges Dreieck verwenden, siehe Bauteil 5 |
| Horizontale Hauptlinie drückt auf Karte | Verzweigungspunkt zu niedrig | Unterer Rand der Kachel→Hauptlinie ≥38px, Hauptlinie→Karte ≥40px |
| Ungleicher Abstand zwischen drei Karten | left von Hand geschrieben | Gleichmäßig anordnen und prüfen, ob der Mittelpunkt auf den Pfeil ausgerichtet ist |
| Gerendertes Bild leer/alt | HTML in chinesischem Pfad | scripts/render.py verwenden |
| Ungleiche Dichte bei drei Grafiken | Elementgrößen einzeln geschrieben | Alle nach der Tabelle «Untere Elementgrößen» bemessen |
| Verbindung unterbrochen, Zweig schwebt | Ein Pfad biegt ab und deckt nur einen Teil der Zweige ab | In «Knotenpunkt + unabhängige Segmente» aufteilen, siehe «Wie zeichnet man Verbindungen, damit sie nicht brechen» |
| Gestrichelte Blasenlinie hat einen Spalt zum Knoten | Startpunkt liegt nicht auf Elementkante | Startpunkt y = untere Kante des Elements, von linklint auf 0px prüfen lassen |
Dateiindex
Dieser Skill ist in sich geschlossen: Die folgenden Pfade sind relativ zum Verzeichnis, das SKILL.md enthält, kein Zugriff auf andere Repos oder externe Dokumente erforderlich.
SKILL.md
├── references/
│ ├── style-tokens.md Vollständige Token-Tabelle für Farben, Schriftgrößen, Rundungen, Schatten (einschließlich v3 grafischer Token)
│ ├── layouts.md Skelettdiagramme, Anwendungsszenarien, Elementrezepte der fünf Layouts
│ └── checklist.md Punkt-für-Punkt-Prüfung vor Auslieferung (einschließlich 240px Miniatur-Abnahme, v3-spezifische Punkte)
├── assets/
│ ├── icons.svg 50 lineare Symbole als Sprite (Inline in die Seite eingefügt, dann <use href="#i-xxx"/>)
│ ├── parts.html 15 grafische Bauteile als Wand, ansehbar und kopierbar
│ ├── template-d-orbit.html D Kernverzweigung (v3)
│ ├── template-e-pipeline.html E Kreispipeline (v3)
│ ├── _blank-shell.html Nur die Schale, für Layout von Grund auf
│ ├── template-b-flow.html B Oben→Unten Verzweigung (v2)
│ ├── template-c-ui.html C-1 Leinwand-Bearbeitungsmodus (v2)
│ └── template-c-arch.html C-2 Geschichteter Auswahlmodus (v2)
├── scripts/
│ ├── render.py HTML → 1760×1120 PNG (Pfadverarbeitung + Browsererkennung + Verbindungsprüfung)
│ ├── linklint.py Prüft, ob die Endpunkte jeder Verbindungslinie frei schweben (wird automatisch von render.py aufgerufen)
│ ├── preview.py Generiert 240px Miniaturbild für die «Miniatur-Selbstprüfung»
│ └── iconlib.py Symbol-IDs auflisten / Symbolwand generieren
└── examples/ 5 fertige Grafiken + renderbare Quelldateien, nur als Referenz, nicht an der Generierung beteiligt
Der Text und die Grafiken in den Vorlagen sind ausführbare, echte Beispiele; sie direkt zu ändern ist schneller, als von einer leeren Seite zu schreiben.