# abhinavkumar-07/youtube-instagram-auto-uploader architecture

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

- Interactive diagram: https://gitdiagram.com/abhinavkumar-07/youtube-instagram-auto-uploader
- Repository: https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader

## Overview

The product automates scheduled publishing of Google Drive videos to YouTube and Instagram Reels. The workflow selects an unprocessed clip, generates platform metadata, uploads it to YouTube as unlisted, and records a scheduled queue entry. At publish time, a separate runner makes YouTube public, publishes the Reel, and revokes Drive link access. The README also documents GitHub Actions as the scheduled execution mechanism; workflow internals were not sampled, so that integration is shown only at the documented level.

Main entry points: [`upload_unlisted.py`](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/upload_unlisted.py) (Queue video), [`publish_scheduled.py`](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/publish_scheduled.py) (Publish due items), [`utils.py`](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/utils.py) (JSON state I/O), [`metadata_generator.py`](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/metadata_generator.py) (Metadata generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prepare["Prepare and queue"]
  node_upload["Queue video<br/>[upload_unlisted.py]"]
  node_metadata["Metadata generation"]
  node_queue_state["Publish queue<br/>[publish_queue.json]"]
  node_processed_state["Processed log<br/>[processed_log.json]"]
end

subgraph group_publish["Scheduled publishing"]
  node_publisher["Publish due items"]
  node_reel["Reel publishing"]
end

subgraph group_support["Shared support"]
  node_credentials["Google credentials<br/>[auth.py]"]
  node_oauth["OAuth setup<br/>[oauth_setup.py]"]
  node_json_utils["JSON state I/O<br/>[utils.py]"]
end

node_operator(("Operator"))
node_drive["Google Drive"]
node_groq["Groq API"]
node_youtube["YouTube"]
node_instagram["Instagram Graph API"]
node_actions["GitHub Actions"]

node_operator -->|"runs for slot"| node_upload
node_operator -->|"runs scheduler"| node_publisher
node_actions -.->|"scheduled invocation"| node_upload
node_actions -.->|"scheduled invocation"| node_publisher
node_upload -->|"gets credentials"| node_credentials
node_publisher -->|"gets credentials"| node_credentials
node_oauth -->|"uses scopes"| node_credentials
node_upload -->|"lists and downloads"| node_drive
node_upload -->|"requests metadata"| node_metadata
node_metadata -->|"generates metadata"| node_groq
node_upload -->|"uploads unlisted"| node_youtube
node_upload -->|"shares file link"| node_drive
node_upload -->|"appends entry"| node_queue_state
node_upload -->|"records file"| node_processed_state
node_upload -->|"loads and saves"| node_json_utils
node_publisher -->|"loads and saves"| node_queue_state
node_publisher -->|"sets public"| node_youtube
node_publisher -->|"publishes due Reel"| node_reel
node_reel -->|"creates and publishes"| node_instagram
node_publisher -->|"revokes link access"| node_drive
node_publisher -->|"loads and saves"| node_json_utils
node_metadata -->|"uses retry helper"| node_json_utils
node_reel -->|"uses retry helper"| node_json_utils

click node_upload "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/upload_unlisted.py"
click node_metadata "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/metadata_generator.py"
click node_queue_state "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/publish_queue.json"
click node_processed_state "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/processed_log.json"
click node_publisher "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/publish_scheduled.py"
click node_reel "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/instagram_uploader.py"
click node_credentials "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/auth.py"
click node_oauth "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/oauth_setup.py"
click node_json_utils "https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/utils.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_upload,node_metadata,node_queue_state,node_processed_state toneBlue
class node_publisher,node_reel toneAmber
class node_credentials,node_oauth,node_json_utils,node_groq,node_instagram toneMint
class node_operator,node_drive,node_youtube,node_actions toneIndigo
```

## Components

### Prepare and queue

- [Queue video](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/upload_unlisted.py): `upload_unlisted.py`
- [Metadata generation](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/metadata_generator.py): `metadata_generator.py`
- [Publish queue](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/publish_queue.json): `publish_queue.json`
- [Processed log](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/processed_log.json): `processed_log.json`

### Scheduled publishing

- [Publish due items](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/publish_scheduled.py): `publish_scheduled.py`
- [Reel publishing](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/instagram_uploader.py): `instagram_uploader.py`

### Shared support

- [Google credentials](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/auth.py): `auth.py`
- [OAuth setup](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/oauth_setup.py): `oauth_setup.py`
- [JSON state I/O](https://github.com/abhinavkumar-07/youtube-instagram-auto-uploader/blob/main/utils.py): `utils.py`

### Other components

- **Operator**
- **Google Drive**
- **Groq API**
- **YouTube**
- **Instagram Graph API**
- **GitHub Actions**

## Connections

- Operator → Queue video: runs for slot
- Operator → Publish due items: runs scheduler
- GitHub Actions → Queue video: scheduled invocation
- GitHub Actions → Publish due items: scheduled invocation
- Queue video → Google credentials: gets credentials
- Publish due items → Google credentials: gets credentials
- OAuth setup → Google credentials: uses scopes
- Queue video → Google Drive: lists and downloads
- Queue video → Metadata generation: requests metadata
- Metadata generation → Groq API: generates metadata
- Queue video → YouTube: uploads unlisted
- Queue video → Google Drive: shares file link
- Queue video → Publish queue: appends entry
- Queue video → Processed log: records file
- Queue video → JSON state I/O: loads and saves
- Publish due items → Publish queue: loads and saves
- Publish due items → YouTube: sets public
- Publish due items → Reel publishing: publishes due Reel
- Reel publishing → Instagram Graph API: creates and publishes
- Publish due items → Google Drive: revokes link access
- Publish due items → JSON state I/O: loads and saves
- Metadata generation → JSON state I/O: uses retry helper
- Reel publishing → JSON state I/O: uses retry helper
