Die Open-Source-Software Stable Diffusion generiert detaillierte Bilder auf der Grundlage von Textbeschreibungen. Der offene Ansatz unterscheidet sich grundlegend von proprietären Text-zu-Bild-Modellen wie DALL-E und Midjourney, die nur über Clouddienste zugänglich sind. Stable Diffusion lässt sich lokal auf dem eigenen Rechner installieren und läuft auch auf schwächerer Hardware wie dem Raspberry Pi. Normalerweise benötigen solche KI-Modelle ordentlich Rechenleistung, aber Onnxstream bringt diese dank ausgefeilter Optimierungen sogar mit den kümmerlichen 512 MB Arbeitsspeicher eines Raspberry Pi Zero 2 zum Laufen. Allerdings dauert es dann eine Stunde, ein Bild zu generieren. Es empfiehlt sich ein aktueller Raspberry Pi 5 mit aktiver Kühlung. Hier verkürzt sich die Rechenzeit auf rund drei Minuten. Zudem benötigen Sie etwa 20 GB Speicherplatz auf dem Datenträger.
Vorbereitungen treffen
Zunächst erledigen Sie ein paar Vorarbeiten. Sie benötigen den Compiler GCC in der Version 12. Raspberry-Pi-OS 13 („Trixie“) enthält den jüngeren GCC 14, damit funktioniert es derzeit nicht. Nutzen Sie deshalb am besten das ältere Raspberry-Pi-OS 12 („Bookworm“). Oder Sie deinstallieren die vorhandene GCC-Version und installieren manuell Version 12. Welche Version installiert ist, verrät dieser Befehl:
gcc --version
Um nicht den Überblick zu verlieren, legen Sie zunächst einen neuen Ordner an und nennen ihn etwa „genki“ für generative KI. Da der Pfad zu diesem Ordner an mehr Stellen anzugeben ist, empfiehlt es sich, ihn in einer Variablen abzulegen:
export base=/home/genki
Ändern Sie die Zugriffsrechte mit
sudo chmod 777 genki/
und wechseln Sie anschließend dorthin. Um den Code zu kompilieren und große KI-Modelle verarbeiten zu können, sind zwei Werkzeuge notwendig, die nicht standardmäßig im Raspberry-Pi-OS vorhanden sind. Mit dem Kommando
sudo apt install cmake git-lfs
installieren sie diese nach.
XNNPack kompilieren
Zunächst installieren Sie XNNPack. Dabei handelt es sich um eine Bibliothek von Google, die hocheffiziente Fließkomma-Operatoren für neuronale Netzwerke bereitstellt. Wer sich für die Details interessiert, wird unter https://github.com/google/XNNPACK fündig. Onnxstream wiederum ist abhängig von XNNPack. Sie kümmern sich deshalb zunächst um XNNPack, um anschließend Onnxstream kompilieren zu können. Danach lässt sich Onnxstream mit dem heruntergeladenen KI-Modell starten. Onnxstream kann XNNPack auch selbst herunterladen, aber das Kompilieren klappt derzeit nicht.
Sie benötigen aus Kompatibilitätsgründen eine bestimmte Version von XNNPack. Um diese zu erstellen, führen Sie im Terminal folgende Befehle aus:
git clone https://github.com/google/XNNPACK.git
cd XNNPACK
git checkout f64bbdddff56cca640ade7 a9770e70b471eb5630
mkdir build
cd build
cmake -DXNNPACK_BUILD_TESTS=OFF -DXNNPACK_BUILD_BENCHMARKS=OFF ..
cmake --build . --config Release
Der Kompiliervorgang für XNNPack dauert etliche Minuten.
Onnxstream kompilieren
Onnxstream ist ein Open-Source-Projekt, das Vito Plantamura mit der ursprünglichen Absicht ins Leben gerufen hat, Stable Diffusion 1.5 auf einem Raspberry Pi Zero 2 auszuführen (siehe https://github.com/vitoplantamura/OnnxStream). Das gelingt mit Hilfe von XNNPACK, indem es etwa durch Quantisierung und Aufmerksamkeits-Slicing den Speicherbedarf so weit wie möglich minimiert. Um Onnxstream zu kompilieren, führen Sie im Terminal aus:
cd $base
git clone https://github.com/vitoplantamura/OnnxStream.git
cd OnnxStream/src
mkdir build
cd build
cmake -DMAX_SPEED=ON -DXNNPACK_DIR=$base/XNNPACK ..
cmake --build . --config Release
Modelle herunterladen
Nun fehlt nur noch die KI-Komponente. Wechseln Sie zurück in das Basisverzeichnis und laden Sie das Modell herunter. SDXL Turbo 1.0 liefert die notwendige Datenbasis, um Bilder zu generieren. Hier müssen Sie nichts kompilieren, jedoch sind etliche Gigabyte aus dem Internet zu laden. Onnxstream unterstützt auch Stable Diffusion 1.5 und Stable Diffusion XL 1.0. So geht’s:
cd $base
git lfs install
git clone --depth=1 https://huggingface.co/vitoplantamura/stable-diffusion-xl-turbo-1.0-anyshape-onnxstream
Dies Aktion dauert noch deutlich länger als die vorherigen Schritte.
Bilder generieren
Nun haben Sie alles beisammen und können beginnen, Bilder zu generieren – dank quelloffener Software kostenlos und ohne jede Einschränkung. Dafür übergeben Sie der Datei „sd“ den Pfad zum Modell. Der Prompt gibt dann an, was auf dem generierten Bild zu sehen sein soll. Weitere Parameter stehen abhängig vom Modell zur Verfügung, etwa „–steps“ für die Anzahl der generativen Schritte, „–seed“ zum Festlegen eines zufälligen Startwerts und „–neg-prompt“, um nachfolgende Begriffe explizit auszuschließen. Diese Möglichkeit besitzt das Modell SDXL Turbo nicht, aber Sie können es mit den anderen beiden Modellen verwenden.
Ersetzen Sie im nachfolgenden Beispielprompt unseren Beispielauftrag „snow owl sitting on a branch“ durch das Motiv, das Sie erreichen wollen. Die Schritte („steps“) sind hier auf „1“ festgelegt, da SDXL Turbo nicht zwingend mehrere Schritte benötigt, um ein ansprechendes Ergebnis zu generieren. Zusammen sieht das dann so aus:
cd $base/OnnxStream/src/build/
./sd --turbo --models-path $base/stable-diffusion-xl-turbo-1.0-anyshape-onnxstream --prompt "a snow owl sitting on a branch" --steps 1 --output owl.png
Jeder Diffusionsschritt erfordert auf dem Raspberry Pi 5 etwa eine Minute. Insgesamt dauert es mit Pre-Processing und Decodierung etwa drei Minuten, um ein einzelnes Bild zu generieren. Sie sehen zudem, in welche Tokens das Modell Ihren Inhaltsprompt zerlegt.
Ohne nähere Angabe beträgt die Standardgröße der generierten Bild 512 x 512 Pixel. Für größere Auflösungen verwenden Sie diesen Parameter (Beispiel):
--res 1024x1024
Bereits mit einem Schritt generiert Onnxstream ansehnliche Ergebnisse, bei drei bis fünf Schritten erhöhen sich Qualität und Detailtiefe deutlich, es dauert dann aber wesentlich länger. Zur Veranschaulichung können Sie den Prompt nacheinander mit einer steigenden Zahl von Schritten verwenden. Mit zusätzlicher Definition eines festen „Seed“ bleibt das Motiv weitgehend gleich und lediglich die Details verändern sich. Ohne „Seed“-Angabe kommt ein zufälliger Wert zum Einsatz.

Arbeitsschritten (Steps) und einer höheren Auflösung steigen Sie die Bildqualität und den Detailreichtum.
Je nach Promptanweisung erzielen Sie sehr unterschiedliche Bildergebnisse. Für ein fotorealistisches Bild verwenden Sie das Wort „photography“ im Prompt, für eine filmische Aufnahme „cinematic shot“. Mit „pencil drawing“ lässt sich eine Bleistiftzeichnung und mit „oil painting“ ein Ölgemälde generieren.
Sie können auch einen bestimmten Stil oder einen Künstler angeben, etwa „post-impressionistic art in the style of Vincent van Gogh“. Mitunter führt „high quality“ zu einer besseren Qualität. Generell sollten Sie möglichst präzise beschreiben, was Sie auf dem Bild sehen wollen. Hier ist etwas Experimentierfreude gefragt.
Alle genannten Optionen und Parameter zusammengenommen, ergibt sich dann etwa folgende Anweisung:
./sd --turbo --models-path $base/stable-diffusion-xl-turbo-1.0-anyshape-onnxstream –-prompt "starry night, oil painting, post-impressionistic art in the style of Vincent van Gogh, high quality" --seed 12345 –-res 1024x1024 --steps 3 --output vincent.png
Das Ergebnis ist das hübsche Bild auf dieser Heftseite oben, das sich an den postimpressionistischen Gemälden von Vincent van Gogh orientiert.

