Was macht Comic Master — Werkzeuge (Tooling)?
Begleiter zu comic-master. Diese Skill beschreibt, wie gute Seiten aussehen; diese hier behandelt die Werkzeuge, die sie ermöglichen. Die meisten schlechten Letterings entstehen durch schlechte Werkzeuge: handgezeichnete Rasterellipsen, Systemschriften und flach über die Kunst geklebter Text.
1. Panel-Kunst mit ComfyUI
Wie man ComfyUI selbst ausführt (Modelle installieren, starten, Vorlagen und Workflows ausführen) gehört zu den generischen ComfyUI-Skills unter vendor/comfy-cli-skills/ im Stammverzeichnis dieses Repos. Dieser Abschnitt behandelt, wie man sie für Comics einsetzt.
1.1 Generierungseinrichtung eines Comic-Projekts
- Zwei Workflows pro Projekt: Text-zu-Bild für neue Panels, Bildbearbeitung für Kontinuitätskorrekturen, passende Aufnahmen und Prop-Text. Einmal auswählen, mit einem Modell und festen Einstellungen, und im Projektbibel festhalten.
- Ein Panel = ein Job = ein gespeichertes Bild. Dadurch ist jedes Panel auf seinen Prompt, Seed und seine Einstellungen zurückverfolgbar.
- Jedes Rendering aus dem Layout dimensionieren, nicht umgekehrt. Die Box des Panels aus der Miniaturansicht nehmen und mit etwa 1 Megapixel in diesem Seitenverhältnis rendern (z. B. 1408×704 breit, 768×1024 hoch, 1536×640 Streifen). Dann in die Box skalieren oder zuschneiden, wobei geschichtskritische Details von den Schnittkanten ferngehalten werden.
- Nach Szene stapeln, nicht nach Seite, damit Licht, Palette und Hintergründe innerhalb einer Szene konsistent bleiben.
1.2 Konsistenz
- Zuerst Modellblatt. Eine Umdrehungs- und Ausdrucksübersicht für jede Figur generieren, die besten auswählen und als Referenzbild wiederverwenden (IP-Adapter, Bildbearbeitungseingabe oder ein Charakter-LoRA, falls eines trainiert werden kann).
- Feste Anker (comic-master
comic-characters.md§4.5) wortwörtlich in jedem Prompt, von links nach rechts aufgelistet; ein Stilanker für das gesamte Projekt. - Seeds: Den Seed jedes akzeptierten Panels notieren, damit es neu generiert oder variiert werden kann.
- Positionskontrolle: Ein OpenPose- oder Tiefen-ControlNet verwenden, wenn die Blockierung wichtig ist (Sprecherreihenfolge, Blickrichtungen, die 180°-Linie).
1.3 Prompting-Regeln, die Bestand haben
- Wissen, ob Negative funktionieren. Destillierte Modelle mit CFG 1 (FLUX.2 klein, Z-Image-Turbo) ignorieren den negativen Prompt in der Regel. Bei ihnen positiv formulieren, was gewünscht wird („exakt vier Personen", „entspannte glatte Stirn"). Negative nur bei Modellen mit echtem CFG verwenden oder einen Negativ-Guidance-Knoten (z. B. NAG) hinzufügen.
- In der Sprache des Modells prompten. FLUX und Qwen/Z-Image lesen natürliche Sätze; SDXL liest Komma-Tags. Bei Satzmodellen eine feste Reihenfolge verwenden: Einstellung und Winkel → jede Figur mit Position, links nach rechts → die eine Aktion → Ausdruck als Anatomie → Umgebung → Licht → Stil.
- Ausdrücke als Anatomie, niemals als Namen. „Gelangweilt" neigt zu einem finsteren Blick. Stattdessen beschreiben: „obere Augenlider halb gesenkt, Augenbrauen hoch und flach, Mund eine geschlossene flache Linie". Wo Negative funktionieren, zusätzlich den Fehler negativ prompten („zusammengezogene Augenbrauen, finsterer Blick").
- Kostümfarben innerhalb des Satzteils, der das Körperteil nennt („marineblauer Body über den Schultern"). Nahaufnahmen driften zu generischen Farben; die driftende Farbe negativ prompten.
- Keine Duplikate: ein Anker pro Figur, explizite Anzahl und Reihenfolge („exakt drei Personen: von links, …"), und, wo Negative funktionieren, „doppelte Charaktere, Klone, zusätzliche Personen" im negativen Prompt.
- Textbereich freihalten im Prompt („oberes Drittel ist leere flache Wand"). Nach einem sauberen, textlosen Bild fragen („kein Text, keine Buchstaben, keine Sprechblasen", im negativen Prompt, wo es funktioniert, sonst positiv als „sauberes Bild ohne Beschriftung"), außer bei einem bewussten Prop-Text-Durchlauf.
- Von der Miniaturansicht aus inszenieren. Die Miniaturansicht in eine grobe Blockdarstellung (Strichmännchen, Kästchen für Möbel) verwandeln und als Pose-, Linienkunst- oder Tiefensteuerbild einspeisen, sodass Figurenplatzierung, Maßstab und wer-im-Raum-ist dem Plan folgen.
- Mehrere generieren, eines auswählen. 3–4 Seeds pro Panel rendern und vor jeder Lettering-Arbeit gegen das ZIEL des Panels und die Anker prüfen.
1.4 Bearbeiten statt neu würfeln
Den Bildbearbeitungs-Workflow mit dem vorhandenen Panel als Eingabe verwenden:
- Passende Panels (gleicher Raum, Wiederholungsgags, Reaktionsaufnahmen): Das frühere Panel in das neue einarbeiten, statt von Grund auf neu zu generieren.
- Entfernen schlägt Neuanordnen. „Die zweite Person am Tisch entfernen" funktioniert; „ihn hinter den Stuhl verschieben" scheitert meist.
- Kontinuitätskorrekturen: versehentliche Extras, falsche Kostümfarben, ein Requisit in der falschen Hand. Nur diesen Bereich inpaintieren oder bearbeiten.
- Prop-Text (§4): Ein kurzes Wort, das auf ein Abzeichen oder Schild geschrieben wird, bei 1:1 überprüft.
1.5 Prüfung vor der Lettering-Arbeit
- Jedes Rendering mit seinen Ankern und dem ZIEL des Panels vergleichen: Gesicht, Kostümfarben, Requisiten und Hände, Lichtrichtung, zusätzliche Personen, versehentliche Glyphen, leere Textzone.
- Pro Panel ein Protokoll führen (Prompt, Seed, Einstellungen, akzeptiert oder abgelehnt und warum), damit Korrekturen reproduzierbar sind.
1.6 Empfohlene Modelleinrichtungen
8 GB VRAM (der funktionierende Standard):
| Aufgabe | Modell und Dateien | Anmerkungen |
|---|---|---|
| Panels und Bearbeitungen | FLUX.2 [klein] 4B fp8 (flux-2-klein-4b-fp8) + qwen_3_4b Text-Encoder + flux2-vae | ~4 Schritte, CFG 1. Der Bearbeitungsmodus verwendet Referenzbilder (Modellblätter) für modellgetreue Charaktere. Apache-2.0. |
| Höherwertige Einzelpanels, Prop-Text | Z-Image-Turbo int8 (z_image_turbo_int8_convrot) + qwen_3_4b_fp8_mixed + ae.safetensors | Vorlage image_z_image_turbo_int8; ~8 Schritte. Bessere Text- und Anweisungsbefolgung; keine Referenzbildbearbeitung. Pose-/Tiefenkontrolle über die Z-Image-Turbo Fun Union ControlNet-Vorlage. Apache-2.0. |
| Inszenierungskontrolle | SDXL + OpenPose ControlNet + IP-Adapter | Die ausgereifteste Pose- und Layoutsteuerung bei 8 GB; das Ergebnis mit Klein verfeinern. |
| Charakter-Ausschnitte | comfyui-rmbg mit BiRefNet toonout (für Cartoons und Illustrationen gemacht) oder RMBG-2.0 | Für den untenstehenden Ebenen-Workflow. |
| Hochskalierung | 4x-UltraSharp, gekachelt | ~1 MP rendern, dann auf Druckgröße hochskalieren. |
Bei 8 GB: fp8/int8/GGUF-Gewichte verwenden; den Text-Encoder bei Bedarf auf die CPU oder eine zweite GPU verschieben; gekachelte VAE-Dekodierung für große Bilder; jeweils nur ein Modell laden; jede lokale LLM auf einer anderen GPU halten.
Ebenen-Charaktere: Jeden Charakter auf flachem, einfarbigem Hintergrund generieren, ausschneiden (BiRefNet toonout) und über einen gemeinsamen Hintergrund pro Szene zusammensetzen. Dies löst Inszenierungs-, Maßstabs- und Wer-ist-im-Raum-Probleme, die das reine Prompten nicht kann, und ermöglicht es, Requisiten über Panels hinweg gleich groß zu halten.
Mit mehr VRAM: FLUX.2 [klein] 9B (~20 GB; nicht-kommerziell), Qwen-Image-2.1 (~24 GB; 10 Referenzbilder, transparenter RGBA-Output, maskierte Bearbeitungen; Forschungslizenz), FLUX.2 [dev] (24 GB+ in fp8; höchste Qualität und Multi-Referenz; nicht-kommerziell). Vor kommerzieller Nutzung die Lizenz jeder Modellkarte prüfen; der 8-GB-Stack oben ist vollständig Apache-2.0.
2. Lettering-Engine: Vektoren zeichnen, keine Pixel
2.0 Das Letterer-Tool verwenden (Standard)
Schreiben Sie keinen Lettering-Code. Verwenden Sie scripts/letterer.py, das innerhalb dieses Skill-Ordners (neben dieser SKILL.md) ausgeliefert wird, zusammen mit scripts/README.md, scripts/styles.json und den genehmigten Schriftarten in scripts/fonts/. Lösen Sie den Pfad relativ zu dieser SKILL.md auf, wo auch immer das Repository geklont wurde; kopieren Sie das Skript niemals in ein Projekt. Es befolgt bereits jede Regel in diesem Abschnitt und führt die QA-Prüfungen aus §5 selbst durch. Voraussetzungen: Python 3.9+ mit Pillow und numpy (pip install -r scripts/requirements.txt); empfohlen mediapipe, das die automatische Gesichtsprüfung aktiviert (Sprechblasen müssen von Gesichtern fernbleiben) und "tail_to": "auto".
Workflow:
python scripts/letterer.py grid --image panel_oder_seite.png --out grid.pngund die Überlagerung betrachten. Die Panel-Rechtecke, jede Sprecherkopfbox und den Mund sowie die freien Bereiche ablesen. Dann die Position jeder Sprechblase und den Zielpunkt des Schwanzes gemäß den Platzierungsregeln in comic-mastercomic-lettering.md§12.2 und dem schrittweisen Verfahren in §12.7 wählen: Sprechblase im freien Raum nahe am Kopf, Schwanz auf den Mund gerichtet, aber außerhalb des Kopfes endend. Alle Koordinaten sind relativ: 0.0–1.0 von oben links.- Eine Seiten-Spezifikation (JSON) mit den Elementen in Lesereihenfolge schreiben:
{
"image": "streifen.png", "out": "streifen_lettered.png",
"panels": [[0.0125,0.03,0.329,0.97], [0.342,0.03,0.658,0.97], [0.671,0.03,0.988,0.97]],
"avoid": "gesichter_maske.png",
"items": [
{"style": "declaration", "text": "Die Stadt ruft. Ich antworte.", "zone": [0.03,0.06,0.31,0.24]},
{"style": "speech", "text": "Hat das noch jemand|gehört?", "at": [0.46,0.30], "tail_to": [0.52,0.52]},
{"style": "sfx-micro", "text": "bzzt bzzt", "at": [0.39,0.62]},
{"style": "sfx", "text": "KA-CHUNK", "at": [0.80,0.88], "size": 2.4, "rotate": -8}
]
}
python scripts/letterer.py page spec.json. Exit-Code0bedeutet, dass jede QA-Prüfung bestanden wurde;1bedeutet, dass gerendert wurde, aber die QA fehlgeschlagen ist, also die gedruckten Fehler lesen, die Spezifikation korrigieren (die Sprechblase näher an den Sprecher rücken, die Zone vergrößern, Wörter kürzen, mit|neu umbrechen) und erneut ausführen;2bedeutet einen Fehler (unbekannter Stil, fehlende Schriftart, fehlerhafte Spezifikation).- Das PNG in voller Größe und als Miniaturansicht betrachten. Das SVG (bearbeitbar) und die
_qa.json(gemessene Zahlen) mit der Seite aufbewahren.
Elementfelder: style; text (| erzwingt einen Zeilenumbruch, sonst wird automatisch in eine Raute umbrochen; _wort_ unterstreicht zur Betonung); at [x,y] Zentrum oder zone [x0,y0,x1,y1] zum Einpassen; tail_to [x,y] Zielpunkt: nicht der Mund selbst, sondern ein Punkt im freien Raum knapp außerhalb des Kopfes, auf der Linie von der Sprechblase zum Mund, etwa 1 Buchstabenbreite vom Gesicht entfernt (das Tool stoppt die Spitze etwas davor, sodass der Schwanz auf den Sprecher zielt, ohne ihn zu berühren); weglassen mit "no_tail": true. "auto" nicht verwenden: es gibt die Lippen selbst zurück; optional panel Index, size Multiplikator, rotate (Grad, im Uhrzeigersinn), fill (Hintergrund), ink (Umriss), text_color, font, tail_bend, link (Index einer früheren Sprechblase desselben Sprechers: verbindet die beiden), bleed (true, um die Panelgrenze absichtlich zu durchbrechen), seed.
Seitenfelder über die Grundlagen hinaus: defaults setzt Farben und Schriftart für jedes Element ({"fill": "#FDF6E3", "ink": "#2B2B2B", "text_color": "#1F3A7A"}); styles überschreibt einen Stil für diese Seite ({"speech": {"fill": "#FFF7D6"}}); avoid Standard ist "auto" (erkannte Gesichter werden geschützt), oder ein Maskenbild, oder false.
Die zusammengesetzte Seite oder den Streifen in einem einzigen page-Durchlauf beschriften, niemals Panel für Panel. Ein Durchlauf hält die Lettering-Größe über Panels hinweg identisch und ermöglicht es der QA, Lesereihenfolge und Überlappungen über die gesamte Seite zu prüfen.
Seitenfelder: image, out/svg/qa-Pfade, panels (stark empfohlen: wird für Randabstände, Lesereihenfolge und Lettering-Größe verwendet), ch (Versalhöhe in px; Standard ist die kurze Seite des mittleren Panels ÷ 30, überall gleich), avoid (weiß = Gesichter, Hände oder Schlüsselaktionen, die frei bleiben müssen; aus einem Segmentierungsdurchlauf erstellen), direction (ltr, oder rtl für Manga).
Stile (python scripts/letterer.py styles für die aktuelle Liste mit einzeiligen Verwendungen):
- Dialog:
speech,speech-hand(handgezeichnet, kursiv, geschwungener Schwanz),emphasis(die große Linie; mit_wort_unterstreichen),whisper(gestrichelt),strain(zitternder Umriss, blassgelb: Worte durch zusammengebissene Zähne),electronic(Zickzack-Schwanz). - Gedanken:
thought-1(=thought, flockige Wolke),thought-2(feine Muscheln),thought-3(glattes Oval mit Blasen). Im Zweifelsfallthought-1verwenden: es ist der Standard, wenn eine Gedankenblase ohne weitere Details angefordert wird. Eine Gedankenspur benötigt mindestens 2,5 ch freien Raum zwischen der Blase und ihrem Zielpunkt, sonst schlägt die QA fehl. Siehe comic-mastercomic-lettering.md§12.8. - Laut:
shout,shout-2(handgezeichneter Ausbruch),burst(kein Schwanz). - Kästchen:
caption,caption-hand,declarationunddeclaration-hand(zitierte Stimme aus dem Off; mehrere auf einer Seite stapeln für einen Monolog),locator,narrator. - Soundeffekte:
sfx(an der Quelle, mit dünner weißer Außenkontur),sfx-micro(kleine Geräusche),sfx-stack(ein sich wiederholendes Geräusch, das neben seiner Quelle gestapelt wird:"wub|wub|wub").
Halten Sie ein einheitliches Dialog-Aussehen pro Buch bei: entweder die einfachen Stile oder die -hand-Stile, keine Mischung innerhalb einer Szene. Siehe examples/styles/sheet_lettered.png im Stammverzeichnis des Repos für alle Stile nebeneinander. Fügen Sie einen Stil hinzu, indem Sie einen Eintrag in styles.json hinzufügen, niemals indem Sie neuen Zeichencode schreiben.
Schnelles Einzelelement: python scripts/letterer.py bubble --image in.png --out out.png --text "RUNTER!" --style shout --at 0.17,0.25 --tail-to 0.155,0.47 --panel 0.0125,0.03,0.329,0.97
Falls das Tool fehlt, befolgen Sie die folgenden Regeln, um ein Äquivalent zu bauen, und produzieren Sie dennoch dieselben QA-Zahlen.
- Lettering als SVG aufbauen und mit resvg, cairosvg oder headless Chromium (Playwright) rendern. Vektoren liefern glatte Kurven, echte Unterschneidung, saubere Striche und eine bearbeitbare Ebene. Zeichnen Sie Sprechblasen nicht mit Raster-Ellipsen-Aufrufen.
- Eine echte Comic-Schriftart verwenden.
- Dialog: Comic Neue, Patrick Hand, Anime Ace oder eine andere handgeletterte Schrift, alles Großbuchstaben, eine Schriftart für das gesamte Werk.
- Soundeffekte und Titel: eine fette Display-Schrift wie Bangers.
- Niemals eine System-Sans (Arial, Helvetica, DejaVu). Laut scheitern, wenn die Schriftartdatei fehlt, anstatt stillschweigend zurückzufallen.
- Dialog und Beschriftungen verwenden nur eine einfache, aufrechte, handgeletterte Schrift. Keine Display-, Techno-, futuristische, Schablonen-, Horror- oder Neuigkeitsschriften für Wörter, die Leute lesen müssen: Buchstaben mit fehlenden Querbalken oder stilisierten E/A/M-Formen verlangsamen das Lesen und ändern den Ton. Dekorative Schriften nur für Soundeffekte, Titel und Logos.
- Eine genehmigte Liste im Projekthandbuch führen (z. B. Dialog: Comic Neue Bold oder Anime Ace; SFX: Bangers) und jede nicht genehmigte Schrift ablehnen.
- Sprechblasen werden an den Text angepasst:
- Den Text in eine Raute umbrechen: kurze obere Zeile, breiteste Mitte, kurze untere Zeile, keine Ein-Wort-Zeile am Ende.
- Den Textblock messen und ein abgerundetes Oval oder eine Superellipse darum zeichnen.
- Die Wand vergrößern, bis jede Ecke des Textes mindestens eine Versalhöhe davon entfernt ist.
- Niemals Text in eine feste Ellipse quetschen.
- Schwänze sind gekrümmte, verjüngte Pfade, keine Dreiecke:
- Basis etwa ⅛ der Sprechblasenbreite (niemals unter ~0,8 Versalhöhe), auf der dem Sprecher nächsten Seite.
- Länge bis zu etwa der Hälfte der Sprechblasenhöhe (oder 2,5 ch für kleine Blasen), zum Mund hin geschwungen und
...
[abgeschnitten für die Übersetzung]