# bria-ai/fibo architecture

> Architecture diagram of the GitHub repository bria-ai/fibo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bria-ai/fibo
- Repository: https://github.com/bria-ai/fibo

## Overview

FIBO turns short text, an existing structured JSON prompt, or an image into a controllable image-generation request. The CLI resolves prompts through local or Gemini VLM support, normalizes structured captions, and invokes the diffusion pipeline to return an image; refine and inspire are documented modes of the prompt workflow. The repository also includes LoRA fine-tuning and inference support. The README documents hosted/API and ComfyUI options, but those integrations are not implemented in this tree. Some subsystem wiring is inferred only from documented capabilities and module boundaries.

Main entry points: [`src/fibo_inference/prompt_to_json.py`](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/prompt_to_json.py) (Prompt engine), [`generate.py`](https://github.com/bria-ai/fibo/blob/main/generate.py) (Generation CLI), [`src/fibo_inference/fibo_pipeline.py`](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/fibo_pipeline.py) (FIBO pipeline), [`src/fine_tuning/fine_tune_fibo.py`](https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/fine_tune_fibo.py) (Fine-tuning)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prompting["Prompt workflows"]
  node_cli["Generation CLI<br/>[generate.py]"]
  node_inference["Inference orchestration<br/>[inference.py]"]
  node_prompt_engine["Prompt engine<br/>[prompt_to_json.py]"]
  node_caption["Caption cleanup<br/>[parse_caption.py]"]
  node_local_vlm["Local VLM<br/>[local_vlm.py]"]
  node_gemini["Gemini VLM<br/>[gemini_api.py]"]
  node_sampling["Sampling config<br/>[common.py]"]
end

subgraph group_generation["Image generation"]
  node_pipeline["FIBO pipeline<br/>[fibo_pipeline.py]"]
  node_transformer["FIBO transformer"]
  node_cache["TeaCache<br/>[teacache.py]"]
  node_output["Pipeline output<br/>[pipeline_output.py]"]
end

subgraph group_tuning["Model adaptation"]
  node_trainer["Fine-tuning<br/>[fine_tune_fibo.py]"]
  node_training_utils["Training utilities<br/>[fine_tune_utils.py]"]
  node_lora_inference["LoRA inference"]
end

node_user(("User"))
node_gemini_service(("Gemini API"))
node_image_input(("Input image"))
node_image_result(("Generated image"))
node_training_data["Training data"]
node_model_weights[("Pretrained weights")]

node_user -->|"provides request"| node_cli
node_image_input -->|"provides image"| node_cli
node_cli -->|"resolves prompt"| node_inference
node_inference -->|"requests JSON prompt"| node_prompt_engine
node_prompt_engine -->|"uses local model"| node_local_vlm
node_prompt_engine -.->|"uses Gemini"| node_gemini
node_prompt_engine -->|"uses settings"| node_sampling
node_gemini -->|"sends request"| node_gemini_service
node_prompt_engine -->|"cleans prompt"| node_caption
node_cli -->|"normalizes JSON"| node_caption
node_cli -->|"runs generation"| node_inference
node_inference -->|"invokes pipeline"| node_pipeline
node_pipeline -->|"denoises latents"| node_transformer
node_pipeline -->|"returns images"| node_output
node_output -->|"contains image"| node_image_result
node_user -->|"starts training"| node_trainer
node_training_data -->|"supplies examples"| node_trainer
node_trainer -->|"uses helpers"| node_training_utils
node_trainer -->|"loads base model"| node_model_weights
node_trainer -->|"saves LoRA weights"| node_model_weights
node_user -->|"requests generation"| node_lora_inference
node_lora_inference -->|"loads weights"| node_model_weights
node_lora_inference -->|"invokes pipeline"| node_pipeline
node_pipeline -.->|"enables cache"| node_cache

click node_cli "https://github.com/bria-ai/fibo/blob/main/generate.py"
click node_inference "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/inference.py"
click node_prompt_engine "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/prompt_to_json.py"
click node_caption "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/parse_caption.py"
click node_local_vlm "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/local_vlm.py"
click node_gemini "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/gemini_api.py"
click node_sampling "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/common.py"
click node_pipeline "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/fibo_pipeline.py"
click node_transformer "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/transformer_fibo.py"
click node_cache "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/teacache.py"
click node_output "https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/pipeline_output.py"
click node_trainer "https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/fine_tune_fibo.py"
click node_training_utils "https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/fine_tune_utils.py"
click node_lora_inference "https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/generate_with_lora.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_inference,node_prompt_engine,node_caption,node_local_vlm,node_gemini,node_sampling,node_user toneBlue
class node_pipeline,node_transformer,node_cache,node_output,node_model_weights toneAmber
class node_trainer,node_training_utils,node_lora_inference,node_gemini_service toneMint
class node_image_input,node_image_result,node_training_data toneIndigo
```

## Components

### Prompt workflows

- [Generation CLI](https://github.com/bria-ai/fibo/blob/main/generate.py): `generate.py`
- [Inference orchestration](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/inference.py): `src/fibo_inference/inference.py`
- [Prompt engine](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/prompt_to_json.py): `src/fibo_inference/prompt_to_json.py`
- [Caption cleanup](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/parse_caption.py): `src/fibo_inference/parse_caption.py`
- [Local VLM](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/local_vlm.py): `src/fibo_inference/vlm/local_vlm.py`
- [Gemini VLM](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/gemini_api.py): `src/fibo_inference/vlm/gemini_api.py`
- [Sampling config](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/vlm/common.py): `src/fibo_inference/vlm/common.py`

### Image generation

- [FIBO pipeline](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/fibo_pipeline.py): `src/fibo_inference/fibo_pipeline.py`
- [FIBO transformer](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/transformer_fibo.py): `src/fibo_inference/transformer_fibo.py`
- [TeaCache](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/teacache.py): `src/fibo_inference/teacache.py`
- [Pipeline output](https://github.com/bria-ai/fibo/blob/main/src/fibo_inference/pipeline_output.py): `src/fibo_inference/pipeline_output.py`

### Model adaptation

- [Fine-tuning](https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/fine_tune_fibo.py): `src/fine_tuning/fine_tune_fibo.py`
- [Training utilities](https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/fine_tune_utils.py): `src/fine_tuning/fine_tune_utils.py`
- [LoRA inference](https://github.com/bria-ai/fibo/blob/main/src/fine_tuning/generate_with_lora.py): `src/fine_tuning/generate_with_lora.py`

### Other components

- **User**
- **Gemini API**
- **Input image**
- **Generated image**
- **Training data**
- **Pretrained weights**

## Connections

- User → Generation CLI: provides request
- Input image → Generation CLI: provides image
- Generation CLI → Inference orchestration: resolves prompt
- Inference orchestration → Prompt engine: requests JSON prompt
- Prompt engine → Local VLM: uses local model
- Prompt engine → Gemini VLM: uses Gemini
- Prompt engine → Sampling config: uses settings
- Gemini VLM → Gemini API: sends request
- Prompt engine → Caption cleanup: cleans prompt
- Generation CLI → Caption cleanup: normalizes JSON
- Generation CLI → Inference orchestration: runs generation
- Inference orchestration → FIBO pipeline: invokes pipeline
- FIBO pipeline → FIBO transformer: denoises latents
- FIBO pipeline → Pipeline output: returns images
- Pipeline output → Generated image: contains image
- User → Fine-tuning: starts training
- Training data → Fine-tuning: supplies examples
- Fine-tuning → Training utilities: uses helpers
- Fine-tuning → Pretrained weights: loads base model
- Fine-tuning → Pretrained weights: saves LoRA weights
- User → LoRA inference: requests generation
- LoRA inference → Pretrained weights: loads weights
- LoRA inference → FIBO pipeline: invokes pipeline
- FIBO pipeline → TeaCache: enables cache
