# jermsmit/mirotalk-sfu-autopilot architecture

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

- Interactive diagram: https://gitdiagram.com/jermsmit/mirotalk-sfu-autopilot
- Repository: https://github.com/jermsmit/mirotalk-sfu-autopilot
- Video tour (about a minute): https://gitdiagram.com/jermsmit/mirotalk-sfu-autopilot/video

## Overview

MiroTalk SFU Autopilot is an operational wrapper for deploying and maintaining the upstream Docker application, not the meeting application itself. The main workflow is an administrator running the interactive installer, which prepares the host and launches the service; optional timers later handle changed public IPs and image updates. The graph also preserves the documented access-control toggle and uninstall path. Source excerpts were unavailable, so relationships reflect README documentation and the repository tree only.

Main entry points: [`install.sh`](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh) (Interactive installer), [`uninstall.sh`](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/uninstall.sh) (Uninstaller), [`scripts/update-mirotalksfu.sh`](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-mirotalksfu.sh) (Image updater), [`scripts/update-announced-ip.sh`](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-announced-ip.sh) (Announced IP updater)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_setup["Deployment setup"]
  node_installer["Interactive installer<br/>[install.sh]"]
  node_docker["Docker runtime"]
  node_mirotalk["MiroTalk SFU image"]
  node_secrets["Generated credentials<br/>[install.sh]"]
end

subgraph group_security["Access and security"]
  node_firewall["Firewall and fail2ban<br/>[install.sh]"]
  node_hosttoggle["Host protection toggle"]
end

subgraph group_maintenance["Scheduled maintenance"]
  node_ip_timer["IP watcher timer"]
  node_ip_service["IP watcher service"]
  node_ip_script["Announced IP updater"]
  node_update_timer["Update timer"]
  node_update_service["Update service"]
  node_updater["Image updater"]
  node_backups[("Configuration backups")]
end

subgraph group_lifecycle["Service lifecycle"]
  node_uninstaller["Uninstaller<br/>[uninstall.sh]"]
end

node_admin(("Administrator"))
node_public_ip["Public IP lookup"]
node_dockerhub["Docker Hub"]
node_reverse_proxy["Reverse proxy"]

node_admin -->|"runs"| node_installer
node_installer -->|"installs and starts"| node_docker
node_installer -->|"clones and deploys"| node_mirotalk
node_installer -->|"generates"| node_secrets
node_installer -->|"configures"| node_firewall
node_installer -.->|"optionally installs"| node_ip_timer
node_installer -.->|"optionally installs"| node_update_timer
node_ip_timer -->|"triggers"| node_ip_service
node_ip_service -->|"runs"| node_ip_script
node_ip_script -->|"checks"| node_public_ip
node_ip_script -->|"updates config and restarts"| node_docker
node_update_timer -->|"triggers"| node_update_service
node_update_service -->|"runs"| node_updater
node_updater -->|"checks image"| node_dockerhub
node_updater -->|"backs up config"| node_backups
node_updater -->|"applies update"| node_docker
node_admin -->|"runs"| node_hosttoggle
node_hosttoggle -->|"changes access setting"| node_docker
node_admin -->|"runs"| node_uninstaller
node_uninstaller -->|"removes deployment"| node_docker
node_uninstaller -->|"removes rules"| node_firewall
node_uninstaller -->|"removes timers"| node_ip_timer
node_uninstaller -->|"removes timers"| node_update_timer
node_reverse_proxy -.->|"forwards web traffic"| node_docker

click node_installer "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh"
click node_secrets "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh"
click node_firewall "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh"
click node_hosttoggle "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/toggle-host-protection.sh"
click node_ip_timer "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-ip-watch.timer"
click node_ip_service "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-ip-watch.service"
click node_ip_script "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-announced-ip.sh"
click node_update_timer "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-update.timer"
click node_update_service "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-update.service"
click node_updater "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-mirotalksfu.sh"
click node_backups "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-mirotalksfu.sh"
click node_uninstaller "https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/uninstall.sh"

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_installer,node_docker,node_mirotalk,node_secrets toneBlue
class node_firewall,node_hosttoggle toneAmber
class node_ip_timer,node_ip_service,node_ip_script,node_update_timer,node_update_service,node_updater,node_backups toneMint
class node_uninstaller toneRose
class node_admin,node_public_ip,node_dockerhub,node_reverse_proxy toneIndigo
```

## Components

### Deployment setup

- [Interactive installer](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh): `install.sh`
- **Docker runtime**
- **MiroTalk SFU image**
- [Generated credentials](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh): `install.sh`

### Access and security

- [Firewall and fail2ban](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/install.sh): `install.sh`
- [Host protection toggle](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/toggle-host-protection.sh): `scripts/toggle-host-protection.sh`

### Scheduled maintenance

- [IP watcher timer](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-ip-watch.timer): `systemd/mirotalk-ip-watch.timer`
- [IP watcher service](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-ip-watch.service): `systemd/mirotalk-ip-watch.service`
- [Announced IP updater](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-announced-ip.sh): `scripts/update-announced-ip.sh`
- [Update timer](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-update.timer): `systemd/mirotalk-update.timer`
- [Update service](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/systemd/mirotalk-update.service): `systemd/mirotalk-update.service`
- [Image updater](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-mirotalksfu.sh): `scripts/update-mirotalksfu.sh`
- [Configuration backups](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/scripts/update-mirotalksfu.sh): `scripts/update-mirotalksfu.sh`

### Service lifecycle

- [Uninstaller](https://github.com/jermsmit/mirotalk-sfu-autopilot/blob/main/uninstall.sh): `uninstall.sh`

### Other components

- **Administrator**
- **Public IP lookup**
- **Docker Hub**
- **Reverse proxy**

## Connections

- Administrator → Interactive installer: runs
- Interactive installer → Docker runtime: installs and starts
- Interactive installer → MiroTalk SFU image: clones and deploys
- Interactive installer → Generated credentials: generates
- Interactive installer → Firewall and fail2ban: configures
- Interactive installer → IP watcher timer: optionally installs
- Interactive installer → Update timer: optionally installs
- IP watcher timer → IP watcher service: triggers
- IP watcher service → Announced IP updater: runs
- Announced IP updater → Public IP lookup: checks
- Announced IP updater → Docker runtime: updates config and restarts
- Update timer → Update service: triggers
- Update service → Image updater: runs
- Image updater → Docker Hub: checks image
- Image updater → Configuration backups: backs up config
- Image updater → Docker runtime: applies update
- Administrator → Host protection toggle: runs
- Host protection toggle → Docker runtime: changes access setting
- Administrator → Uninstaller: runs
- Uninstaller → Docker runtime: removes deployment
- Uninstaller → Firewall and fail2ban: removes rules
- Uninstaller → IP watcher timer: removes timers
- Uninstaller → Update timer: removes timers
- Reverse proxy → Docker runtime: forwards web traffic
