ai-image-generator
Live · nur mit ZugangEigene Oberfläche und API für Bildgenerierung über BFL FLUX und GPT Image. Das einzige Projekt hier, in das man hineinsehen kann.
Wer Bilder über zwei Anbieter erzeugt, hat zwei Konsolen, zwei Ablagen und keine gemeinsame Suche darüber. Was vor einem halben Jahr entstanden ist, findet man nur wieder, wenn man noch weiß, bei welchem Anbieter es entstand — und die Anweisung, die zu dem Bild geführt hat, liegt dann irgendwo dazwischen.
Der ai-image-generator legt beide hinter dieselbe Oberfläche und dieselbe Schnittstelle. Modell wählen, Seitenverhältnis und Qualitätsstufe setzen, wahlweise Vorlagen mitgeben, an denen sich das Ergebnis orientieren soll; der Bestand ist danach über die Anweisungen durchsuchbar und nach Modell, Verhältnis und Favorit filterbar. Was ein Bild gekostet hat, liefern beide Anbieter selbst mit — das wird aufgehoben statt weggeworfen, und die Kosten lassen sich hinterher nach Monat und Modell aufschlüsseln.
Bemerkenswert ist, wie viel an diesem Projekt aus dem Betrieb kommt und nicht aus dem Entwurf. Dass ein Auftrag eine eigene Kennung braucht, weil das Handy die Verbindung abschneidet, sobald die Seite in den Hintergrund gerät. Dass eine Kachel erst nach der Antwort des Servers verschwinden darf, weil ein fehlgeschlagenes Löschen sonst nach dem Neuladen wieder auftaucht. Dass eine einzelne Datei als Bestand nur trägt, wenn sie atomar geschrieben wird. Jede dieser Änderungen hat ein Fehlerbild als Ursache, das erst im Gebrauch auftrat; im Entwurf stand keine davon.
Entscheidungen
Eine Auftragskennung statt einer offenen Verbindung
Legt man die installierte Web-App auf dem Handy in den Hintergrund, friert das Betriebssystem die laufende Anfrage ein und bricht sie ab. Der Server rechnete unbeirrt weiter und legte das fertige Bild ab, die Oberfläche meldete trotzdem einen Fehler. Jeder Auftrag bekommt deshalb eine selbst vergebene Kennung, unter der die Seite nachfragt, sobald sie wieder sichtbar wird.
Kein Feld für den Startwert
Derselbe Startwert und derselbe Text ergeben nur ungefähr dasselbe Bild: zwei Läufe lagen bei 0,2 Prozent mittlerer Pixelabweichung — sichtbar gleich, aber nicht identisch. Ein Eingabefeld hätte damit eine Wiederholbarkeit versprochen, die es nicht gibt. Der Wert steht in den Metadaten und in der Detailansicht; wer einen Lauf wirklich wiederholen will, nimmt die Schnittstelle.
Eine einzige Datei als Bestand, aber atomar geschrieben
Der gesamte Bestand samt aller Bildbeschreibungen liegt in einer JSON-Datei. Wurde der Container mitten im Schreiben gestoppt — also bei jeder Auslieferung während einer laufenden Generierung —, blieb eine halbe Datei zurück, und damit war alles weg. Geschrieben wird deshalb erst daneben und dann umbenannt; eine unlesbare Datei wird beim Start beiseitegelegt statt überschrieben, damit die Anwendung nicht in einer Neustartschleife endet.
Guthaben und Dollar bleiben getrennt
Der eine Anbieter rechnet in eigenen Guthabenpunkten ab, der andere in Dollar. Beides zu einer Summe zusammenzuziehen hieße, einen Umrechnungskurs zu erfinden und eine Zahl zu zeigen, der man nicht trauen kann. Die Kosten stehen deshalb je Anbieter getrennt, und was vor dieser Änderung entstanden ist, wird als „unbekannt“ ausgewiesen statt geschätzt.