# vadlapatikarthik/autoclipper architecture

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

- Interactive diagram: https://gitdiagram.com/vadlapatikarthik/autoclipper
- Repository: https://github.com/vadlapatikarthik/autoclipper

## Overview

Auto-Clipper is a dashboard and backend for configuring source channels, finding YouTube or live-stream highlights, clipping them, generating subtitles, and uploading clips to YouTube. The evidenced configuration path runs from the dashboard through FastAPI to a platform-specific listener or scanner; the processing services then perform the media stages. The README also names Kick support, though the sampled backend does not show a Kick handler. Some excerpts contain unresolved names, so the graph reflects visible calls rather than assuming those paths work end to end.

Main entry points: [`backend/app/services/youtube.py`](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/youtube.py) (YouTube scanner), [`backend/app/services/twitch.py`](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/twitch.py) (Twitch listener), [`backend/app/main.py`](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/main.py) (Configuration API), [`backend/app/services/clipper.py`](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/clipper.py) (Clip extraction)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Configuration"]
  node_dashboard["Setup dashboard<br/>[App.jsx]"]
  node_api["Configuration API<br/>[main.py]"]
end

subgraph group_discovery["Highlight discovery"]
  node_celery["Celery scheduler<br/>[celery_app.py]"]
  node_youtube_scan["YouTube scanner<br/>[youtube.py]"]
  node_twitch_listener["Twitch listener<br/>[twitch.py]"]
end

subgraph group_processing["Media processing"]
  node_clipper["Clip extraction<br/>[clipper.py]"]
  node_subtitles["Subtitle generation<br/>[subtitle.py]"]
end

subgraph group_delivery["Clip delivery"]
  node_uploader["YouTube uploader<br/>[uploader.py]"]
end

node_operator(("Channel operator"))
node_youtube["YouTube APIs"]
node_twitch["Twitch chat and stream"]
node_redis[("Redis broker")]

node_operator -->|"configures channels"| node_dashboard
node_dashboard -->|"submits config"| node_api
node_api -->|"schedules scan"| node_youtube_scan
node_api -->|"starts listener"| node_twitch_listener
node_celery -->|"uses broker"| node_redis
node_celery -->|"dispatches scan"| node_youtube_scan
node_youtube_scan -->|"queries videos and analytics"| node_youtube
node_youtube_scan -->|"requests clips"| node_clipper
node_youtube_scan -->|"requests subtitles"| node_subtitles
node_youtube_scan -->|"uploads clips"| node_uploader
node_twitch -.->|"provides chat events"| node_twitch_listener
node_twitch_listener -->|"downloads segments"| node_clipper
node_twitch_listener -->|"generates subtitles"| node_subtitles
node_twitch_listener -->|"uploads highlights"| node_uploader
node_clipper -.->|"downloads source media"| node_youtube
node_uploader -->|"publishes clips"| node_youtube

click node_dashboard "https://github.com/vadlapatikarthik/autoclipper/blob/main/frontend/src/src/App.jsx"
click node_api "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/main.py"
click node_celery "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/celery_app.py"
click node_youtube_scan "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/youtube.py"
click node_twitch_listener "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/twitch.py"
click node_clipper "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/clipper.py"
click node_subtitles "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/subtitle.py"
click node_uploader "https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/uploader.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_dashboard,node_api toneBlue
class node_celery,node_youtube_scan,node_twitch_listener,node_redis toneAmber
class node_clipper,node_subtitles,node_youtube toneMint
class node_uploader toneRose
class node_operator,node_twitch toneIndigo
```

## Components

### Configuration

- [Setup dashboard](https://github.com/vadlapatikarthik/autoclipper/blob/main/frontend/src/src/App.jsx): `frontend/src/src/App.jsx`
- [Configuration API](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/main.py): `backend/app/main.py`

### Highlight discovery

- [Celery scheduler](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/celery_app.py): `backend/app/celery_app.py`
- [YouTube scanner](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/youtube.py): `backend/app/services/youtube.py`
- [Twitch listener](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/twitch.py): `backend/app/services/twitch.py`

### Media processing

- [Clip extraction](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/clipper.py): `backend/app/services/clipper.py`
- [Subtitle generation](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/subtitle.py): `backend/app/services/subtitle.py`

### Clip delivery

- [YouTube uploader](https://github.com/vadlapatikarthik/autoclipper/blob/main/backend/app/services/uploader.py): `backend/app/services/uploader.py`

### Other components

- **Channel operator**
- **YouTube APIs**
- **Twitch chat and stream**
- **Redis broker**

## Connections

- Channel operator → Setup dashboard: configures channels (evidence: `README.md`)
- Setup dashboard → Configuration API: submits config (evidence: `frontend/src/src/App.jsx`)
- Configuration API → YouTube scanner: schedules scan (evidence: `backend/app/main.py`)
- Configuration API → Twitch listener: starts listener (evidence: `backend/app/main.py`)
- Celery scheduler → Redis broker: uses broker (evidence: `backend/app/celery_app.py`)
- Celery scheduler → YouTube scanner: dispatches scan (evidence: `backend/app/celery_app.py`)
- YouTube scanner → YouTube APIs: queries videos and analytics (evidence: `backend/app/services/youtube.py`)
- YouTube scanner → Clip extraction: requests clips (evidence: `backend/app/services/youtube.py`)
- YouTube scanner → Subtitle generation: requests subtitles (evidence: `backend/app/services/youtube.py`)
- YouTube scanner → YouTube uploader: uploads clips (evidence: `backend/app/services/youtube.py`)
- Twitch chat and stream → Twitch listener: provides chat events
- Twitch listener → Clip extraction: downloads segments (evidence: `backend/app/services/twitch.py`)
- Twitch listener → Subtitle generation: generates subtitles (evidence: `backend/app/services/twitch.py`)
- Twitch listener → YouTube uploader: uploads highlights (evidence: `backend/app/services/twitch.py`)
- Clip extraction → YouTube APIs: downloads source media
- YouTube uploader → YouTube APIs: publishes clips (evidence: `backend/app/services/uploader.py`)
