Peace Memorial Park, Hiroshima

Infinisomnia.Writing

Die Technik hinter Infinisomnia

Ein gedrucktes Testexemplar von Infinisomnia Lust auf einen Blick in den Maschinenraum von Infinisomnia? OK, diesmal wird's etwas technisch. Wir schauen uns an, wie aus den rohen Markdown-Dateien bei Codeberg eine statische Website, eBooks und sogar Druckvorlagen für Print-on-Demand generiert werden.

Da ich mehr Lust auf das Schreiben der Geschichten als auf immer wiederkehrende Arbeiten habe, habe ich kleine Programme entwickelt, die diese Prozesse vollständig automatisieren. Das heißt, es spielt keine Rolle, ob ich eine völlig neue Geschichte online stelle oder nur einen kleinen Rechtschreibfehler korrigiere. Sobald ich die Änderung zu Codeberg übermittele, starten Prozesse, die vollautomatisch die Website und die eBooks neu generieren.

Ausgangsmaterial

Das Ausgangsmaterial ist im Wesentlichen nur das, was im Repository bei Codeberg öffentlich verfügbar ist. Das sind alle Geschichten im Markdown-Dateiformat in Deutsch und jeder übersetzten Sprache, sowie ein Coverbild pro Episode.

Die Dateien mit den Geschichten haben außerdem eine Front Matter. Das ist ein Abschnitt am Anfang der Datei, die weitere Informationen zur Geschichte bereithält. Beispielsweise ist das der Titel, die Version, das Datum der Erstveröffentlichung, aber auch eine Kurzzusammenfassung (für Linkvorschauen) und eine Beschreibung des Coverbilds für Blinde.

Ein Beispiel für so eine Markdown-Datei findest du hier.

Die Website

Aus diesem Material generiert Hugo zusammen mit einem kleinen, selbst gemachten Python-Script die komplette Infinisomnia-Website. Das Script hat dabei gleich mehrere Aufgaben:

  • Die originale Markdown-Datei wird in das von Hugo vorgesehene Verzeichnis kopiert.
  • Die Front Matter wird geprüft und um weitere Angaben ergänzt. Beispielsweise werden alle früheren Änderungen ermittelt und in ein Änderungsprotokoll übertragen, das später als "Versionsgeschichte" auf der Website zu sehen ist.
  • Ein QR-Code mit dem Link auf die Geschichte wird generiert.

Die generierte Website ist statisch, das heißt, sie besteht nur aus unveränderlichen Dateien, die sofort an den Browser geschickt werden können. Es gibt kein kompliziertes Content-Management-System, keine Datenbank. Das ist auch der Grund, warum die einzelnen Seiten blitzschnell geladen sind – und warum keine Cookies benötigt werden.

Dieser Prozess hat außerdem den Vorteil, dass er vollständig versioniert ist. Das heißt, wenn mir ein Fehler unterläuft, kann ich jederzeit einen beliebigen früheren Stand der Website wiederherstellen.

Die eBooks

Ein weiteres Python-Script generiert aus den Markdown-Dateien die eBooks. Dieser Teil war schon etwas kniffliger, weil es dafür keine fertigen Programme gibt.

Das Script erfüllt gleich mehrere Aufgaben, manche davon sind nicht so offensichtlich:

  • Silbentrennung. Da nicht alle eReader von sich aus Silbentrennung unterstützen, gebe ich Hilfestellung. Jedes einzelne Wort der Geschichte wird nach Silben getrennt. Die Trennstriche sind unsichtbar, sie erscheinen erst, wenn sie an einer Trennstelle benötigt werden.
  • Erzeugen eines Buchtitels. Dafür wird das Coverbild verwendet und der Titel als Text darübergelegt.
  • Hinzufügen eines Inhaltsverzeichnisses, einer Versionsliste und einer Seite mit Danksagungen. Das erfolgt vollautomatisch und berücksichtigt, ob das eBook eine einzelne Geschichte oder die Gesamtausgabe enthalten soll. Nur im letzteren Fall ist beispielsweise ein Inhaltsverzeichnis notwendig.
  • Erzeugen der QR-Codes für Links auf die einzelne Geschichte, den Webauftritt und die Lizenzbedingungen.

Aus all diesen Komponenten werden schließlich die ePUB-Dateien erzeugt, welche von der Website heruntergeladen werden können. Und zwar in jeder Sprache und für jede Episode sowie für die Gesamtausgabe. Dieser Prozess dauert nur wenige Sekunden und wird deshalb jedes Mal neu gemacht, auch wenn sich nur eine Kleinigkeit änderte.

Der Buchdruck

Der digitale Teil ist damit fertig. Aber manche halten lieber ein Buch in den Händen, mögen den Duft des Papiers und das Rascheln beim Umblättern. Also brauche ich auch Buchvorlagen für Print-on-Demand-Anbieter. Selbst diese werden vollautomatisch erzeugt, auch wenn es zugegeben ein ganz schönes Stück Arbeit war.

Die Herausforderung ist, dass ich möglichst gar nicht in den Prozess eingreifen möchte, egal ob es sich um eine einzelne Geschichte oder einen Sammelband, um ein Paperback- oder ein Hardcover-Buch handelt.

Auch hierfür musste ich ein eigenes Python-Programm schreiben, da es nichts fertiges gab.

Die Grundlage bilden (neben den Markdown-Dateien) verschiedene Projekte und Profile. In einem Projekt vermerke ich, welche Geschichten (und welcher Stand) gedruckt werden sollen, welche ISBN das Projekt hat und welches Profil dafür verwendet werden soll. Im Profil wiederum steht, welches Layout und welche Buchart als Ergebnis herauskommen soll.

Das Programm erledigt auf dieser Basis dann den kompletten Satz, sowie die Generierung des Buchcovers und Buchrückens.

Für den Buchkörper sind das:

  • Automatische Erstellung eines professionellen Drucksatzes. Dafür verwende ich LaTeX, ein Satzprogramm aus den 1980er Jahren, welches für seine hervorragenden Ergebnisse bis heute bekannt und beliebt ist.
  • Silbentrennung. Das geht zwar auch in LaTeX, aber das Ergebnis war mir nicht gut genug. Ich verwende stattdessen dieselbe Silbentrennung wie bei den eBooks.
  • Die Titelei (mit Schmutzblatt, Frontispiz, Titel und Impressum) wird aus den Angaben im Projekt generiert, außerdem die Anhänge mit den Versionsnummern und den Danksagungen. Ein Inhaltsverzeichnis erzeugt LaTeX bereits für mich.

Jedes Buch braucht außerdem einen Umschlag. Natürlich möchte ich ihn nicht jedes Mal von Hand neu zusammenstellen. Also habe ich mit Inkscape zwei Vorlagen erstellt, eine für die Vorderseite und eine für die Rückseite. Die Vorlagen enthalten Platzhalter für Elemente, die von dem Programm später hinzugefügt werden.

Auf der Vorderseite sind dies die Coverbilder aller im Buch enthaltenen Geschichten, die als übereinanderliegende Sofortbilder arrangiert werden. Das sieht zufällig aus, ist es aber nicht. Ich möchte jederzeit die Dateien von einem früheren Stand neu generieren können, und zwar exakt identisch. Aus dem Grund arbeite ich mit Pseudozufallszahlen, die zwar zufällig wirken, aber jedes Mal in derselben Folge generiert werden.

Die Rückseite des Buches Auf der Rückseite werden die QR-Codes für den Webauftritt und die Lizenz generiert und eingefügt. Außerdem wird ein Barcode erstellt, entweder ein ISBN-Code (für vermarktete Bücher, wenn es irgendwann soweit ist) oder eine interne Buchnummer (für private Autorenausgaben).

Der Buchrücken ist dynamisch. Dessen Breite hängt von der Anzahl der Buchseiten ab, und die erfahren wir erst, wenn der Buchkörper im vorherigen Schritt generiert ist. Er wird deshalb ohne eine Vorlage erzeugt, aber besteht im Wesentlichen nur aus Text, was die Angelegenheit vereinfacht.

Die Vorder- und Rückseite (mit allen Bildern und Barcodes) sowie der Buchrücken werden anschließend in eine große SVG-Datei zusammengefügt. Diese wird in eine PDF-Datei mit einer Auflösung von 600 DPI umgewandelt, was später beim Druck zu einem knackig scharfen Ergebnis führt.

Am Ende erhalte ich alle PDF-Dateien und alle Parameter, die der Print-on-Demand-Anbieter benötigt, um daraus ein Buch erstellen zu können.

Ein erster Probedruck ist gut geworden. Es ist schon ein besonderes Gefühl, zum ersten Mal ein Buch mit seinem Namen darauf in seinen Händen zu halten. Es ist aber noch ein weiter Weg, bis ein Werk schließlich in den Handel kommt.

Vor allem kostet es Geld für Probedrucke oder die Pflichtexemplare für die Deutsche Nationalbibliothek. Also warte ich erst einmal ab, ob überhaupt ein Interesse besteht, wenn die Geschichten bereits als kostenlose eBooks zur Verfügung stehen. Wenn du mir bei dem Vorhaben unter die Arme greifen möchtest, kannst du das gerne tun.

Open Source?

Ich mag Open Source und habe mir überlegt, ob ich den Quelltext der Tools freigeben soll. Allerdings sind sie so speziell auf dieses Projekt abgestimmt, dass sie wenig Wert für andere hätten.

Im Wesentlichen sind es Hugo, Inkscape sowie Python-Bibliotheken wie ebooklib, Jinja2, Pillow oder pyphen, welche die ganze Magie erledigen. Meine Programme orchestrieren nur ihre Arbeit.

Geschichten schreiben

Wie ich zum Geschichten schreiben kam – und warum ich glaube, dass du das auch kannst…

Ich bin Autor von Beruf, hatte immer Bestnoten im Deutschunterricht, später Germanistik studiert, im Arbeitszimmer steht eine überquellende Bücherwand und ich gebe Kurse für kreatives Schreiben?

Wenn du das glaubst, könntest du von der Realität kaum weiter entfernt sein! 😄

Mein Beruf ist Softwareentwickler. Ich bin introvertiert und Autodidakt. Ich bin nicht einmal besonders belesen, mir war das Kreativ-sein schon immer wichtiger als das bloße Konsumieren. Ach ja: Und Deutsch als viertes Prüfungsfach hätte mir fast mein Abitur vermasselt. Eigentlich sind das denkbar schlechte Voraussetzungen für dieses Hobby, sollte man meinen.

Mit dem Schreiben habe ich angefangen, weil ich etwas Neues ausprobieren wollte. Durch meinen Beruf habe ich bereits Erfahrung mit dem Verfassen von Konzepten und Anleitungen. Ich wurde neugierig, ob es auch für Belletristik reicht.

Also schrieb ich eine Kurzgeschichte. Ganz geheim, nur für mich. Sie war nicht besonders originell, hatte keinen spannenden Plot Twist, die Protagonisten waren blass und die Handlung vorhersehbar. Aber das machte nichts, es war ja nur ein Versuch.

Das Ergebnis überraschte mich, denn es machte mir nicht nur Spaß, sondern ich fand auch viele Parallelen zur Programmierung von Computern. Ich brauche ein Konzept, muss mit der Sprache umgehen können, und ich muss die Ausdauer haben, zu Ende zu bringen, was ich angefangen habe.

Mein neues Hobby hat mich im Sturm erobert und nicht mehr losgelassen.

Ich begann, mir mehr Gedanken zu machen. Was will ich überhaupt erzählen? Welches Genre und welche Richtung? Wer sind die Protagonisten? Was sind ihre Stärken – und was ihre Schwächen?

Dieser Teil ist schwierig, denn es gibt keine Geheimformel, die gute Einfälle wie am Fließband generiert. Mir half es, viel zu experimentieren. Zu probieren, wie es sich liest. Ich änderte Ideen, verwarf sie wieder. Mit der Zeit kristallisiert sich eigentlich immer etwas heraus, was funktioniert.

Ich las außerdem Bücher über das Schreiben von Romanen, um mehr über die Konzeption, aber auch über den richtigen Aufbau der Szenen, knackige Dialoge und flüssige Sätze zu erfahren. Am hilfreichsten für mich erwiesen sich dabei die Schreibratgeber von James N. Frey, die es auch als deutsche Übersetzung gibt.

Trotzdem sollte es noch gut zwei Jahre dauern, bis ich meinen ersten Infinisomnia-Kurzroman fertig hatte.

Ich will nicht sagen, dass mein Weg der einzig richtige ist. Ganz im Gegenteil! Ich war schon immer Autodidakt, also ist der Weg für mich richtig. Aber ich kann mir vorstellen, dass es für andere ganz schön frustrierend sein kann, im stillen Kämmerlein vor sich hinzubasteln, statt zum Beispiel Schreibkurse zu besuchen.

Meine Meinung: Das einzige, was man haben muss, ist Geduld. Und sehr viel davon. Den Rest kann man lernen.

In diesem Teil meines Blogs werde ich meine Erfahrung mit euch teilen und euch ein Stück auf mein Schreibabenteuer mitnehmen. Ich bin selbst gespannt, wohin die Reise gehen wird!

Also, was hält dich ab, es auch zu versuchen? Wenn ich das schaffe, schaffst du das sicher auch.