# zengbohan0217/fadm architecture

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

- Interactive diagram: https://gitdiagram.com/zengbohan0217/fadm
- Repository: https://github.com/zengbohan0217/fadm

## Overview

This repository implements face reenactment: a user runs the documented demo to produce a reenacted result. The tree contains DECA face analysis and geometry, two motion-transfer model families (FOMM and Facevid), and a diffusion subsystem, plus training data support. Sampled code confirms selected internal model relationships, but the demo and training entrypoints were not sampled, so their wiring to these subsystems is not asserted. The README documents pretrained checkpoints and demo/training commands, not a detailed runtime sequence.

Main entry points: [`demo.py`](https://github.com/zengbohan0217/fadm/blob/main/demo.py) (Reenactment demo), [`modules/deca/decalib/models/FLAME.py`](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/models/FLAME.py) (FLAME geometry), [`modules/deca/decalib/datasets/datasets.py`](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/datasets/datasets.py) (Face input prep), [`modules/deca/decalib/deca.py`](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/deca.py) (DECA model)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Product entrypoints"]
  node_demo["Reenactment demo<br/>[demo.py]"]
  node_result["Reenacted output"]
  node_training["Training entrypoint<br/>[train.py]"]
  node_clipdata["Clip datasets<br/>[datasets.py]"]
  node_framedata["Frame datasets<br/>[frames_dataset.py]"]
end

subgraph group_analysis["Face analysis"]
  node_deca_data["Face input prep<br/>[datasets.py]"]
  node_deca_detect["Face detection<br/>[detectors.py]"]
  node_deca_model["DECA model<br/>[deca.py]"]
  node_flame["FLAME geometry<br/>[FLAME.py]"]
  node_lbs["Mesh skinning<br/>[lbs.py]"]
end

subgraph group_motion["Motion transfer"]
  node_fomm_kp["FOMM keypoints"]
  node_fomm_motion["FOMM motion field<br/>[dense_motion.py]"]
  node_fomm_gen["FOMM generator<br/>[generator.py]"]
  node_facevid_kp["Facevid keypoints"]
  node_facevid_transform["Keypoint transform"]
  node_facevid_motion["Facevid motion field<br/>[dense_motion.py]"]
  node_facevid_gen["Facevid generator"]
end

subgraph group_diffusion["Diffusion generation"]
  node_diffusion_gen["Diffusion generator"]
  node_conditioning["Condition processing<br/>[condition_deal.py]"]
  node_denoiser["Denoising network<br/>[core_net.py]"]
  node_diffusion["Gaussian diffusion<br/>[diffusion.py]"]
end

node_user(("Demo user"))

node_user -->|"runs demo"| node_demo
node_demo -->|"produces reenactment"| node_result
node_facevid_gen -->|"calls motion network"| node_facevid_motion
node_deca_model -->|"uses geometry model"| node_flame
node_flame -->|"uses skinning"| node_lbs
node_deca_data -->|"runs face detector"| node_deca_detect
node_diffusion -->|"calls denoiser"| node_denoiser

click node_demo "https://github.com/zengbohan0217/fadm/blob/main/demo.py"
click node_training "https://github.com/zengbohan0217/fadm/blob/main/train.py"
click node_clipdata "https://github.com/zengbohan0217/fadm/blob/main/datasets.py"
click node_framedata "https://github.com/zengbohan0217/fadm/blob/main/frames_dataset.py"
click node_deca_data "https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/datasets/datasets.py"
click node_deca_detect "https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/datasets/detectors.py"
click node_deca_model "https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/deca.py"
click node_flame "https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/models/FLAME.py"
click node_lbs "https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/models/lbs.py"
click node_fomm_kp "https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/keypoint_detector.py"
click node_fomm_motion "https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/dense_motion.py"
click node_fomm_gen "https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/generator.py"
click node_facevid_kp "https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/keypoint_detector.py"
click node_facevid_transform "https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/keypoint_transform.py"
click node_facevid_motion "https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/dense_motion.py"
click node_facevid_gen "https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/generator_facevid.py"
click node_diffusion_gen "https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/diffusion_generator.py"
click node_conditioning "https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/condition_deal.py"
click node_denoiser "https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/core_net.py"
click node_diffusion "https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/diffusion.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_demo,node_result,node_training,node_clipdata,node_framedata,node_user toneBlue
class node_deca_data,node_deca_detect,node_deca_model,node_flame,node_lbs toneAmber
class node_fomm_kp,node_fomm_motion,node_fomm_gen,node_facevid_kp,node_facevid_transform,node_facevid_motion,node_facevid_gen toneMint
class node_diffusion_gen,node_conditioning,node_denoiser,node_diffusion toneRose
```

## Components

### Product entrypoints

- [Reenactment demo](https://github.com/zengbohan0217/fadm/blob/main/demo.py): `demo.py`
- **Reenacted output**
- [Training entrypoint](https://github.com/zengbohan0217/fadm/blob/main/train.py): `train.py`
- [Clip datasets](https://github.com/zengbohan0217/fadm/blob/main/datasets.py): `datasets.py`
- [Frame datasets](https://github.com/zengbohan0217/fadm/blob/main/frames_dataset.py): `frames_dataset.py`

### Face analysis

- [Face input prep](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/datasets/datasets.py): `modules/deca/decalib/datasets/datasets.py`
- [Face detection](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/datasets/detectors.py): `modules/deca/decalib/datasets/detectors.py`
- [DECA model](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/deca.py): `modules/deca/decalib/deca.py`
- [FLAME geometry](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/models/FLAME.py): `modules/deca/decalib/models/FLAME.py`
- [Mesh skinning](https://github.com/zengbohan0217/fadm/blob/main/modules/deca/decalib/models/lbs.py): `modules/deca/decalib/models/lbs.py`

### Motion transfer

- [FOMM keypoints](https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/keypoint_detector.py): `modules/FOMM/keypoint_detector.py`
- [FOMM motion field](https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/dense_motion.py): `modules/FOMM/dense_motion.py`
- [FOMM generator](https://github.com/zengbohan0217/fadm/blob/main/modules/FOMM/generator.py): `modules/FOMM/generator.py`
- [Facevid keypoints](https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/keypoint_detector.py): `modules/Facevid/keypoint_detector.py`
- [Keypoint transform](https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/keypoint_transform.py): `modules/Facevid/keypoint_transform.py`
- [Facevid motion field](https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/dense_motion.py): `modules/Facevid/dense_motion.py`
- [Facevid generator](https://github.com/zengbohan0217/fadm/blob/main/modules/Facevid/generator_facevid.py): `modules/Facevid/generator_facevid.py`

### Diffusion generation

- [Diffusion generator](https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/diffusion_generator.py): `modules/diffusion/diffusion_generator.py`
- [Condition processing](https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/condition_deal.py): `modules/diffusion/condition_deal.py`
- [Denoising network](https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/core_net.py): `modules/diffusion/core_net.py`
- [Gaussian diffusion](https://github.com/zengbohan0217/fadm/blob/main/modules/diffusion/diffusion.py): `modules/diffusion/diffusion.py`

### Other components

- **Demo user**

## Connections

- Demo user → Reenactment demo: runs demo
- Reenactment demo → Reenacted output: produces reenactment
- Facevid generator → Facevid motion field: calls motion network
- DECA model → FLAME geometry: uses geometry model
- FLAME geometry → Mesh skinning: uses skinning
- Face input prep → Face detection: runs face detector
- Gaussian diffusion → Denoising network: calls denoiser
