Bria veröffentlichte Fibo 2.0 Dev für Bildgenerierung und -bearbeitung sowie Fibo 2.0 Edit Turbo für destilliertes Editing in vier Schritten. Hugging Face mergte die produktive Diffusers-Integration am 20. Oktober 2026. Dieser Artikel prüft die gemergte Implementierung am Commit de988b7ee77c393a63865d265d19e267ef9c7bf5; er leitet die Architektur nicht aus Produktversprechen ab.123
Der interessante Mechanismus ist eine Konditionierung über zwei Pfade. Qwen3-VL-Features werden zu 256–512 Gist-Tokens komprimiert, die an jedem Haupt-DiT-Block teilnehmen. Fünf ausgewählte Blöcke führen zusätzlich Cross-Attention auf die vollständige Qwen-Feature-Sequenz aus. Beim Editing gelangt jedes Quellbild ein zweites Mal als saubere VAE-Latents in denselben Self-Attention-Strom wie das verrauschte Ziel. Die Kompression begrenzt damit einen teuren Pfad, ohne die vollständige Textsequenz unerreichbar zu machen.45
KI-Hinweis: Dieser Artikel wurde mit Unterstützung generativer KI erstellt. Redaktionell verantwortlich: Florian Zimmermeister (flozi00). Impressum und Kontakt.
Die veröffentlichte Pipeline, nicht nur das 8,1B-Label
Die Diffusers-Dokumentation bezeichnet den Denoiser als Flow-Matching-Transformer mit 8,1 Milliarden Parametern. Diese Zahl beschreibt nicht die vollständig residente Pipeline: Für die Inferenz werden außerdem Qwen3-VL-4B-Instruct als multimodaler Encoder und eine FLUX.2-VAE geladen. Die Checkpoint-Repositories sind zugriffsbeschränkt. Modellseiten und gemergte Implementierung waren prüfbar, die Gewichts-Payloads und gelernten Gate-Werte wurden in dieser Analyse jedoch nicht heruntergeladen.16
| Komponente | Veröffentlichte Implementierung |
|---|---|
| Eingabe der Ziel-Latents | [B, 32, H/8, W/8]; 2×2-Latent-Patches |
| DiT-Tokenbreite | 3.584 |
| Haupt- / Noise-Refiner-Blöcke | 44 / 2 |
| Self-Attention | 28 Heads × 128 Dimensionen |
| Feed-Forward-Zwischenbreite | 9.536, SiLU-Gating |
| Qwen-Feature-Bundle | drei RMS-normalisierte Layer, konkateniert auf Breite 7.680 |
| Direkte Injektionsblöcke | nullbasierte IDs 6, 14, 22, 30 und 38 |
| Perceiver | zwei Layer; 256–512 gelernte Queries |
| RoPE-Achsen | 32 Plane + 48 Zeile + 48 Spalte |
| Editing-Eingaben | bis zu fünf Quellbilder; eine optionale Maske |
Ein 2×2-Patch der 32-kanaligen Latents enthält 128 Skalare und wird auf Breite 3.584 projiziert. Weil das VAE-Latentgitter ein Achtel der Pixelauflösung besitzt, deckt ein DiT-Token eine Region von 16×16 Pixeln ab. Ein Ziel mit 1.024×1.024 Pixeln erzeugt daher Ziel-Tokens. Das ist eine Ableitung aus Tensorformen, keine Messung von Bildqualität oder Durchsatz.45
Die 128 Dimensionen jedes Attention-Heads verteilen sich auf drei RoPE-Achsen. Gist-Tokens laufen auf der ersten Achse fort. Das verrauschte Ziel belegt immer Plane 513, weil der Code die maximalen 512 Gist-Positionen reserviert und nicht die tatsächliche Gist-Anzahl des Prompts verwendet. Quellbild liegt auf Plane und besitzt ein eigenes Zeilen-/Spaltengitter. So bleibt die Bildgeometrie getrennt, obwohl alle Tokens gewöhnliche nichtkausale Self-Attention teilen.4
Qwen3-VL wird in sechs unterschiedlichen Bundles gelesen
Die Pipeline führt Qwen3-VL mit aktivierter Hidden-State-Ausgabe aus. Sie verwendet tokenweise RMS-Normalisierung in FP32 mit Epsilon und castet zurück in den Encoder-Datentyp. Je drei ausgewählte Zustände werden zu einem 7.680 Werte breiten Bundle pro Token konkateniert. Die folgenden Zahlen sind Indizes des zurückgegebenen hidden_states-Tupels; Index 0 enthält die Embedding-Ausgabe. Sie sind keine nullbasierten Decoder-Blocknummern. Tupelindex 9 folgt beispielsweise auf Decoder-Block 8.57
| Verbraucher | Qwen3-VL-Hidden-State-Tupelindizes |
|---|---|
| Perceiver | 9, 20, 31 |
| Injektion an DiT-Block 6 | 5, 16, 27 |
| Injektion an DiT-Block 14 | 7, 18, 29 |
| Injektion an DiT-Block 22 | 9, 20, 31 |
| Injektion an DiT-Block 30 | 11, 22, 33 |
| Injektion an DiT-Block 38 | 13, 24, 35 |
Qwen3-VL wird dafür nicht sechsmal ausgeführt. Ein Encoder-Durchlauf stellt mehrere Hidden Layer bereit; die Pipeline ordnet sie zu einem Tensor der Form [B, 6, L, 7680] an. Das erste Bundle speist den Perceiver. Jedes der übrigen fünf wird einmal von seinem zugeordneten DiT-Block verbraucht.5
In einem Injektionsblock stammen die Queries aus dem 3.584 Werte breiten DiT-Strom, während Keys und Values aus dem 7.680 Werte breiten Qwen-Bundle projiziert werden. Das Residuum wird mit multipliziert. ist ein gelernter Skalar, der in der Implementierungsklasse mit null initialisiert wird. Diese Initialisierung beschreibt den Codepfad, nicht den gelernten Skalarwert des veröffentlichten Checkpoints; dieser wurde nicht auditiert.4
Dynamische Gist-Kompression und ihre Mathematik
Sei die Anzahl realer Qwen-Tokens nach einer Kürzung auf höchstens 4.096. Fibo bildet Textlängen von 256 bis 2.048 linear auf 256 bis 512 Gist-Queries ab, rundet in 64er-Schritten auf und begrenzt Werte außerhalb dieses Intervalls. Die exakte Implementierung lautet:4
| Reale Qwen-Tokens | Gist-Tokens | Kompression |
|---|---|---|
| 256 | 256 | 1,00× |
| 512 | 320 | 1,60× |
| 1.024 | 384 | 2,67× |
| 1.536 | 448 | 3,43× |
| 2.048 | 512 | 4,00× |
| 4.096 | 512 | 8,00× |
Jeder der zwei Perceiver-Layer führt zuerst Cross-Attention von gelernten Queries [B, G, 3584] auf das Qwen-Bundle [B, L, 7680] aus, danach Self-Attention zwischen den Queries und schließlich einen Feed-Forward-Block. Der führende Attention-Aufwand skaliert damit wie und nicht wie . Die resultierenden Gist-Vektoren gelangen in den gemeinsamen DiT-Strom.4
Die Kompression ist verlustbehaftet: 512 Vektoren können im Allgemeinen nicht jeden Freiheitsgrad von 4.096 Quellvektoren erhalten. Sie ist jedoch nicht der einzige Textpfad. Fünf Hauptblöcke führen weiterhin Cross-Attention auf alle Qwen-Positionen aus. Die Architektur tauscht einen kontinuierlichen Vollsequenz-Zugriff in allen 44 Self-Attention-Blöcken gegen eine überall verfügbare begrenzte Zusammenfassung plus fünf Refresh-Punkte mit voller Auflösung. Ob das die Bildqualität verbessert, ist eine empirische Frage; der Quellcode belegt den Datenfluss, nicht die Effektgröße.
Warum der begrenzte Strom zählt
Für ein Ziel mit Tokens, Kontextbilder mit jeweils Tokens und Gist-Tokens führt jeder Hauptblock Self-Attention über folgende Länge aus:
Bei einem langen Prompt () und Bildern mit 1.024×1.024 Pixeln () wachsen Sequenz und quadratische Anzahl der Score-Paare wie folgt. IO-effiziente Kernel können die Materialisierung der vollständigen Score-Matrix vermeiden, entfernen aber nicht die paarweisen Skalarprodukte.4
| Quellbilder | Länge des Hauptstroms | je Head | Relativ ohne Quellbild |
|---|---|---|---|
| 0 | 4.608 | 21.233.664 | 1,00× |
| 1 | 8.704 | 75.759.616 | 3,57× |
| 5 | 25.088 | 629.407.744 | 29,64× |
Würden anstelle von 512 Gist-Tokens alle 2.048 Qwen-Positionen dem Strom beitreten, hätte die Sequenz ohne Quellbild eine Länge von 6.144; der Score-Paar-Term wäre 1,78× größer. Dieser Vergleich isoliert nur den Textbeitrag des Hauptstroms. Qwen-Encoding verursacht weiterhin Arbeit, beide Perceiver-Layer führen weiterhin Cross-Attention über aus und fünf Injektionsblöcke behalten Volltext-Cross-Attention. Die Gist-Kompression macht die vollständige Pipeline nicht unabhängig von der Promptlänge.
Die Tabelle zeigt zugleich die Editing-Grenze: Fünf Quellbilder zu unterstützen ist ein funktionales Maximum, keine Aussage über günstige Ausführung. Bei gleicher Größe von ungefähr einem Megapixel erhöhen fünf saubere Kontexte den Self-Attention-Paarterm des Hauptstroms um fast den Faktor 30 – noch ohne die zwei Noise-Refiner-Blöcke. Der reale Speicherverbrauch hängt stark von Attention-Backend, Präzision und Aktivierungsstrategie ab.
Editing schickt jedes Quellbild durch zwei Pfade
Ein Quellbild wird zunächst für Qwen3-VL skaliert, wobei jede Seite auf höchstens 768 Pixel begrenzt wird. Der Encoder kann diese visuellen Tokens zur Interpretation von Objekten, Text und Editing-Anweisung nutzen. Separat codiert die FLUX.2-VAE das zugeschnittene Bild in einen 32-kanaligen Latent-Tensor. Das DiT zerlegt diesen Tensor mit derselben Projektion wie das verrauschte Ziel in Patches und hängt ihn als saubere Kontext-Tokens an.58
Die Zielpositionen erhalten den aktuellen Flow-Zeitpunkt. Gist- und Kontextpositionen erhalten das Embedding für . Per-Token-AdaLN-Skalen und Residual-Gates wählen zwischen den verrauschten und sauberen Timestep-Embeddings. Alle Positionen interagieren per Self-Attention, doch der abschließende Layer schneidet ausschließlich die Zielpositionen aus und sagt nur diese voraus; saubere Kontextpositionen werden nie als Ausgabe decodiert.4
Diese doppelte Repräsentation hat eine konkrete Arbeitsteilung:
- Der Qwen-Pfad liefert semantische, anweisungsbezogene Features in Text-Token-Auflösung.
- Der VAE-Pfad liefert räumlich angeordnete Bild-Latents an jeden Self-Attention-Block.
- Ein Quellbild kann die Generierung damit sowohl über semantische Features als auch über direkten Latent-Kontext beeinflussen.
Dieser Datenfluss kann Informationen bewahren, die ein einzelner Pfad auslässt; der Code beweist jedoch keinen Qualitätsvorteil. Er verdoppelt außerdem Arbeit: Quellbilder werden sowohl von Qwen3-VL als auch von der VAE verarbeitet, anschließend vergrößern ihre Latent-Tokens jeden DiT-Attention-Layer.
Eine Maske ist Vorverarbeitung und keine harte Ausgabebedingung. Die Implementierung setzt bei 128 einen Schwellwert und ersetzt ausgewählte Quellpixel vor Skalierung und VAE-/Qwen-Encoding durch flaches RGB . Es gibt keinen abschließenden Pixel-Compositor, der unmaskierte Quellpixel zurückkopiert. „Masked Edit“ bedeutet daher konditionierte Regenerierung aus einer ausgegrauten Quelle und keine mathematisch garantierte Unveränderlichkeit außerhalb der Maske.86
Dev gegenüber Edit Turbo: exakte Aufrufzahl, kein Speed-Benchmark
Die Dev-Standards sind 30 Denoising-Schritte mit Guidance-Skala 5. Jeder Guidance-Wert über eins aktiviert Classifier-Free Guidance: Pro Schritt läuft der Transformer einmal für die positive und einmal für die negative Konditionierung. Der Standardpfad von Dev führt damit 60 Transformer-Aufrufe aus.56
Edit Turbo ist für vier Editing-Schritte mit Guidance-Skala 1 dokumentiert; damit entfällt der negative Durchlauf. Dieser Pfad führt vier Transformer-Aufrufe aus, also 15× weniger Denoiser-Aufrufe. Das ergibt nicht automatisch 15× weniger Latenz oder Kosten: Qwen3-VL- und VAE-Arbeit, Modellladen, Attention-Sequenzlänge, Kernel-Effizienz, Offloading und Scheduling bleiben bestehen. Die Turbo-Model-Card begrenzt den Checkpoint außerdem auf Editing; Text-to-Image bleibt der unterstützte Pfad von Dev.26
Produktionsgrenzen
- Batches mit variabler Länge brauchen ein maskenfähiges Backend. Aufgefüllte Gist-Tokens werden ans Ende verschoben, weil Varlen-FlashAttention-Backends die ersten gültigen Keys behalten. Ein Backend ohne Masken wie
_flash_3_hubeignet sich nur für einen einzelnen Prompt oder gleiche Längen. Diffusers weist darauf hin, dass sich gepaddete und ungepaddete BF16-Kernel in feinen Details unterscheiden können.63 - Full-Graph-Kompilierung bricht an dynamischen Gist-Anzahlen. Die Implementierung wandelt Längen je Prompt mit
.tolist()um. Die Integration dokumentiert dies als Graph Break fürtorch.compile(transformer); regionale Kompilierung wiederholter Blöcke bleibt möglich.3 - Textbild-Konditionierung ändert sich während der Generierung. Fordert eine Caption gerenderten Text an, lässt die Generierung die zusätzlichen Textbilder zunächst weg und aktiviert sie ab einem Noise-Level von . Editing verwendet sie in jedem Schritt. Das ist ein bewusster Konditionierungszeitplan und kein invariantes Prompt-Embedding.5
- Die Modellseiten sind zugriffsbeschränkt. Der Zugriff erfordert die Annahme der Repository-Bedingungen. Die Hub-Metadaten nennen die Lizenz
bria-fibo; die Cards beschreiben nichtkommerzielle Modellnutzung und eine separate kommerzielle Vereinbarung. Dieser Artikel trifft keine Aussage zur rechtlichen Kompatibilität.12 - Es wird kein lokales Performance-Ergebnis behauptet. Der Diffusers-PR berichtet Referenz-Paritätstests auf A100 und H100. Diese Analyse prüfte nur Quellcode und Rechnungen; sie führte die Gewichte nicht aus und maß weder VRAM, Durchsatz, Latenz noch Ausgabequalität.3
Was tatsächlich neu ist
Fibo 2.0 ersetzt Attention nicht durch ein neues Grundelement. Der Architekturbeitrag liegt in der Kombination bekannter Mechanismen: multimodaler Encoder, längenadaptive Perceiver-Queries, Single-Stream-Flow-Transformer, wenige Volltext-Refresh-Punkte und saubere Bild-Latents, die durch Timestep und 3D-RoPE-Koordinaten unterschieden werden.
Der entscheidende Produktionstradeoff wird in den Gleichungen sichtbar. Gist-Tokens begrenzen den Textbeitrag zur quadratischen Self-Attention aller Blöcke, während fünf Vollsequenz-Injektionen einen hochauflösenden Pfad erhalten. Saubere Kontexte vermeiden ein separates Image-Cross-Attention-Subsystem, lassen die Editing-Kosten aber quadratisch mit der kombinierten Anzahl aus Ziel- und Quell-Tokens wachsen. Zum Vergleich nutzt der Guide zu Qwen-Image 2.1 blockkausale Attention und einen wiederverwendbaren Prefix-Cache; Fibo 2.0 hält Ziel- und Quell-Latents stattdessen in jedem Schritt in einem gemeinsamen bidirektionalen Strom.
Footnotes
-
Bria AI, Fibo 2.0 Dev model card (checked 21 October 2026). ↩ ↩2 ↩3
-
Bria AI, Fibo 2.0 Edit Turbo model card (checked 21 October 2026). ↩ ↩2 ↩3
-
Hugging Face Diffusers PR #14991 and merge commit, merged 20 October 2026. ↩ ↩2 ↩3 ↩4
-
Diffusers
BriaFibo2Transformer2DModelat merge commit. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 -
Diffusers
BriaFibo2Pipelineat merge commit. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 -
Diffusers Fibo 2.0 pipeline documentation at merge commit. ↩ ↩2 ↩3 ↩4 ↩5