Infinisomnia

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 war, 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-Nummer 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.

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 vollautomatisch erzeugt, besteht im Wesentlichen aber auch 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 Eckdaten, 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 nur 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.

Willkommen bei Infinisomnia!

Dian erwacht in einer fremden Zeit, an einem unbekannten Ort, in einem Leben, das nicht sein eigenes ist. Einfach zurückkehren? Unmöglich! Erst muss er eine Aufgabe lösen. Und dann ist da noch diese Frau – gefangen in derselben Welt, geheimnisvoll und unberechenbar.

Willkommen zu meinem neuen Projekt: Infinisomnia

Infinisomnia ist eine Reihe zusammenhängender Kurzromane. Die Geschichten sind kostenlos, frei (libre) und quelloffen.

Du schreibst jetzt?

Ja! Vor ein paar Jahren habe ich das Schreiben für mich entdeckt.

Angefangen hat es als kleines Experiment. Ich wollte herausfinden, ob ich Geschichten erzählen kann. Und tatsächlich, es funktionierte! Aber nicht nur das, ich war sogar gefesselt von meiner neuen Leidenschaft. Ich konnte nicht mehr damit aufhören, mir spannende Plots auszudenken und an den Sätzen zu feilen, bis sie glänzten.

Außerdem stellte ich fest, dass es keinen so großen Unterschied macht, ob man nun Programmcode oder Geschichten schreibt. Beides braucht ein gutes Konzept, Struktur, Ausdauer, kreative Lösungen und ein gesundes Maß an Perfektionismus. Und wenn ein Abschnitt nicht so funktioniert, wie er soll, ist sogar ein wenig Debuggig nötig. 😄

Infinisomnia ist das Ergebnis von fast zwei Jahren Schreibübungen und Arbeiten am Gesamtkonzept. Drei Geschichten sind schon fertig, weitere werden folgen. Ich bin schon sehr gespannt, wohin diese Reise mich bringen wird.

Was sind das für Geschichten?

Meine Kurzromane sind eine Mischung aus Krimi, Abenteuer und Zeitreisen.

Sie sollen Lesevergnügen bereiten und uns eine kleine Flucht aus dem Alltag bieten. Deshalb enthalten die Kurzgeschichten bewusst wenig Action und Drama, aber trotzdem Spannung, Plot Twists und auch eine kleine Prise Situationskomik.

Jede Geschichte hat eine Länge von durchschnittlich 8.000 Wörtern, das ergibt eine Lesedauer von ungefähr 40 Minuten. Ich veröffentliche sie unregelmäßig, aber versuche, drei bis vier Geschichten pro Jahr zu schreiben.

Kostenlos und quelloffen?

Natürlich! Du kannst die Geschichten vollständig auf der Website lesen oder als ePUB-Datei für deinen eBook-Reader herunterladen. Es gibt keine Paywall und keinen Kopierschutz.

Den Quelltext der Geschichten gibt es bei Codeberg.

Social Media?

Du kannst dem Projekt auf folgenden Kanälen folgen:

Wenn es eine neue Geschichte gibt, erfährst du es dort auf jeden Fall zuerst.

Und was gibt es hier im Blog?

In meinem Blog werde ich über das Projekt schreiben. Es wird Blicke hinter die Kulissen der Geschichten geben, und ich werde auch über das kreative Schreiben und die Technik hinter der Website berichten.

Welcome to Infinisomnia!

Dian wakes up in a different time, in an unfamiliar place, living a life that isn’t his own. Returning home? Impossible. First, he must complete a task. And then there’s this woman – trapped in the same world, mysterious and unpredictable.

Welcome to my new project: Infinisomnia

Infinisomnia is a series of coherent short novels. The stories are free, libre and open source.

You have Taken Up Writing now?

Yes! A few years ago, I discovered writing for myself.

It started as a little experiment. I wanted to find out if I could tell stories. And sure enough, it worked! But not only that, I was even captivated by my new passion. I couldn't stop coming up with exciting plots and polishing sentences until they shone.

I also realized that there's not that much difference between writing program code and writing stories. Both require a good concept, structure, stamina, creative solutions, and a healthy dose of perfectionism. And if a section doesn't work as it should, there's even a bit of debugging involved. 😄

Infinisomnia is the result of almost two years of writing exercises and work on the overall concept. Three stories are already finished, and more will follow. I'm very excited to see where this journey will take me.

What Kind of Stories are they?

My short novels are a mixture of crime, adventure and time travel.

They are designed to be fun to read and to offer a little escape from everyday life. That's why the novelettes deliberately contain little action and drama, but still offer suspense, plot twists and a little bit of situation comedy.

Each story is about 8,000 words long on average, which makes it take about 40 minutes to read. I publish them irregularly, but try to write three to four stories a year.

Free and Open Source?

Of course! You can read the stories in full on the website or download them as an ePUB file for your eBook reader. There is no paywall and no copy protection.

The source code for the stories is available at Codeberg.

Social Media?

You can follow the project on the following channels:

If there is a new story, you will definitely find out about it there first.