# bavuong2005/occlusion-aware-viton architecture

> Architecture diagram of the GitHub repository bavuong2005/occlusion-aware-viton, 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/bavuong2005/occlusion-aware-viton
- Repository: https://github.com/bavuong2005/occlusion-aware-viton

## Overview

This is an occlusion-aware virtual try-on application. Its main workflow accepts a person and garment image, detects and segments occluders, prepares person parsing and pose inputs, parses the garment, runs StableVITON, then restores occluders with blending. The local Gradio app and optional Modal deployment expose that workflow; the README also documents garment-category support and a baseline mode. The tree and excerpts support the orchestration and several stage details, but not every stage implementation or all wiring, so uncertain links are omitted.

Main entry points: [`pipeline.py`](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/pipeline.py) (Pipeline runner), [`stages/tryon_inference.py`](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/tryon_inference.py) (StableVITON inference), [`stages/object_segmentation.py`](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/object_segmentation.py) (Object segmentation), [`stages/person_parsing.py`](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/person_parsing.py) (Person parsing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_local_ui["Local Gradio<br/>[app.py]"]
  node_modal_ui["Modal app<br/>[modal_app.py]"]
end

subgraph group_orchestration["Pipeline orchestration"]
  node_pipeline["Pipeline runner<br/>[pipeline.py]"]
  node_memory["GPU memory<br/>[memory.py]"]
end

subgraph group_preparation["Image preparation"]
  node_detection["Object detection"]
  node_segmentation["Object segmentation"]
  node_person_parse["Person parsing<br/>[person_parsing.py]"]
  node_densepose["DensePose<br/>[densepose.py]"]
  node_cloth_parse["Cloth parsing<br/>[cloth_parsing.py]"]
  node_mask_utils["Mask utilities<br/>[mask_utils.py]"]
end

subgraph group_generation["Try-on and compositing"]
  node_stableviton["StableVITON inference<br/>[tryon_inference.py]"]
  node_baseline["StableVITON baseline"]
  node_occluder["Occluder blending<br/>[occluder.py]"]
  node_result["Try-on result"]
end

node_user(("Image user"))
node_gpu(("GPU runtime"))

node_user -->|"uploads images"| node_local_ui
node_local_ui -->|"calls"| node_pipeline
node_user -.->|"uploads images"| node_modal_ui
node_modal_ui -.->|"dispatches"| node_pipeline
node_pipeline -->|"runs"| node_detection
node_pipeline -->|"runs"| node_segmentation
node_detection -->|"passes boxes"| node_segmentation
node_pipeline -->|"runs"| node_person_parse
node_segmentation -->|"passes mask"| node_person_parse
node_pipeline -->|"runs"| node_densepose
node_pipeline -->|"runs"| node_cloth_parse
node_person_parse -->|"builds masks"| node_mask_utils
node_pipeline -->|"supplies prepared inputs"| node_stableviton
node_cloth_parse -->|"provides garment mask"| node_stableviton
node_stableviton -->|"invokes inference"| node_baseline
node_pipeline -->|"restores objects"| node_occluder
node_occluder -->|"blends image"| node_result
node_stableviton -->|"generates image"| node_result
node_pipeline -->|"manages VRAM"| node_memory
node_gpu -->|"executes stages"| node_pipeline

click node_local_ui "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/app.py"
click node_modal_ui "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/modal_app.py"
click node_pipeline "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/pipeline.py"
click node_memory "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/utils/memory.py"
click node_detection "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/object_detection.py"
click node_segmentation "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/object_segmentation.py"
click node_person_parse "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/person_parsing.py"
click node_densepose "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/densepose.py"
click node_cloth_parse "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/cloth_parsing.py"
click node_mask_utils "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/postprocess/mask_utils.py"
click node_stableviton "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/tryon_inference.py"
click node_occluder "https://github.com/bavuong2005/occlusion-aware-viton/blob/main/postprocess/occluder.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_local_ui,node_modal_ui,node_user toneBlue
class node_pipeline,node_memory toneAmber
class node_detection,node_segmentation,node_person_parse,node_densepose,node_cloth_parse,node_mask_utils toneMint
class node_stableviton,node_baseline,node_occluder,node_result toneRose
class node_gpu toneIndigo
```

## Components

### User interfaces

- [Local Gradio](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/app.py): `app.py`
- [Modal app](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/modal_app.py): `modal_app.py`

### Pipeline orchestration

- [Pipeline runner](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/pipeline.py): `pipeline.py`
- [GPU memory](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/utils/memory.py): `utils/memory.py`

### Image preparation

- [Object detection](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/object_detection.py): `stages/object_detection.py`
- [Object segmentation](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/object_segmentation.py): `stages/object_segmentation.py`
- [Person parsing](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/person_parsing.py): `stages/person_parsing.py`
- [DensePose](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/densepose.py): `stages/densepose.py`
- [Cloth parsing](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/cloth_parsing.py): `stages/cloth_parsing.py`
- [Mask utilities](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/postprocess/mask_utils.py): `postprocess/mask_utils.py`

### Try-on and compositing

- [StableVITON inference](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/stages/tryon_inference.py): `stages/tryon_inference.py`
- **StableVITON baseline**
- [Occluder blending](https://github.com/bavuong2005/occlusion-aware-viton/blob/main/postprocess/occluder.py): `postprocess/occluder.py`
- **Try-on result**

### Other components

- **Image user**
- **GPU runtime**

## Connections

- Image user → Local Gradio: uploads images
- Local Gradio → Pipeline runner: calls
- Image user → Modal app: uploads images
- Modal app → Pipeline runner: dispatches
- Pipeline runner → Object detection: runs
- Pipeline runner → Object segmentation: runs
- Object detection → Object segmentation: passes boxes
- Pipeline runner → Person parsing: runs
- Object segmentation → Person parsing: passes mask
- Pipeline runner → DensePose: runs
- Pipeline runner → Cloth parsing: runs
- Person parsing → Mask utilities: builds masks
- Pipeline runner → StableVITON inference: supplies prepared inputs
- Cloth parsing → StableVITON inference: provides garment mask
- StableVITON inference → StableVITON baseline: invokes inference
- Pipeline runner → Occluder blending: restores objects
- Occluder blending → Try-on result: blends image
- StableVITON inference → Try-on result: generates image
- Pipeline runner → GPU memory: manages VRAM
- GPU runtime → Pipeline runner: executes stages
