# mraliraza142/finance-video-bot architecture

> Architecture diagram of the GitHub repository mraliraza142/finance-video-bot, 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/mraliraza142/finance-video-bot
- Repository: https://github.com/mraliraza142/finance-video-bot

## Overview

finance-video-bot creates and publishes daily personal-finance videos in two parallel formats: long-form YouTube videos and vertical Shorts. Each entry point checks YouTube authorization, generates a script, creates scene voiceovers and stock footage, assembles the finished video, then uploads it. Script generation can use business headlines or evergreen topics, with a wallet-relevance check on news-based scripts. The sampled code shows the generation and media steps; the long-form TTS implementation was not sampled, so its internal behavior is not detailed here.

Main entry points: [`main_short.py`](https://github.com/mraliraza142/finance-video-bot/blob/main/main_short.py) (Short pipeline), [`main_long.py`](https://github.com/mraliraza142/finance-video-bot/blob/main/main_long.py) (Long pipeline), [`assemble_video_short.py`](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_short.py) (Short assembly), [`assemble_video_long.py`](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_long.py) (Long assembly)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orchestration["Pipeline orchestration"]
  node_main_short["Short pipeline<br/>[main_short.py]"]
  node_main_long["Long pipeline<br/>[main_long.py]"]
end

subgraph group_content["Script generation"]
  node_script_short["Short script"]
  node_script_long["Long script"]
  node_short_script_file["Short script JSON"]
  node_long_script_file["Long script JSON"]
end

subgraph group_media["Media production"]
  node_tts_short["Short voiceover<br/>[tts_gen_short.py]"]
  node_tts_long["Long voiceover<br/>[tts_gen_long.py]"]
  node_audio_short["Short audio files<br/>[tts_gen_short.py]"]
  node_audio_long["Long audio files<br/>[tts_gen_long.py]"]
  node_footage_short["Short footage"]
  node_footage_long["Long footage"]
  node_short_clips["Short clips"]
  node_long_clips["Long clips"]
  node_assemble_short["Short assembly"]
  node_assemble_long["Long assembly"]
  node_short_video["Short video"]
  node_long_video["Long video"]
end

subgraph group_publishing["YouTube publishing"]
  node_upload_short["Short uploader"]
  node_upload_long["Long uploader"]
end

node_creator(("Workflow trigger"))
node_gemini{{"Gemini"}}
node_news{{"NewsAPI"}}
node_edge_tts{{"Edge TTS"}}
node_pexels{{"Pexels"}}
node_youtube{{"YouTube"}}

node_creator -->|"starts"| node_main_short
node_creator -->|"starts"| node_main_long
node_main_short -->|"checks auth"| node_upload_short
node_main_short -->|"calls"| node_script_short
node_main_short -->|"calls"| node_tts_short
node_main_short -->|"calls"| node_footage_short
node_main_short -->|"calls"| node_assemble_short
node_main_short -->|"calls"| node_upload_short
node_main_long -->|"checks auth"| node_upload_long
node_main_long -->|"calls"| node_script_long
node_main_long -->|"calls"| node_tts_long
node_main_long -->|"calls"| node_footage_long
node_main_long -->|"calls"| node_assemble_long
node_main_long -->|"calls"| node_upload_long
node_script_short -.->|"fetches headlines"| node_news
node_script_short -->|"generates script"| node_gemini
node_script_short -->|"writes"| node_short_script_file
node_script_long -.->|"fetches headlines"| node_news
node_script_long -->|"generates script"| node_gemini
node_script_long -->|"writes"| node_long_script_file
node_short_script_file -->|"reads"| node_tts_short
node_tts_short -->|"synthesizes speech"| node_edge_tts
node_tts_short -->|"writes"| node_audio_short
node_long_script_file -->|"reads"| node_tts_long
node_tts_long -->|"writes"| node_audio_long
node_short_script_file -->|"reads keywords"| node_footage_short
node_footage_short -->|"searches and downloads"| node_pexels
node_footage_short -->|"writes"| node_short_clips
node_long_script_file -->|"reads keywords"| node_footage_long
node_footage_long -->|"searches and downloads"| node_pexels
node_footage_long -->|"writes"| node_long_clips
node_short_script_file -->|"reads"| node_assemble_short
node_audio_short -->|"reads"| node_assemble_short
node_short_clips -->|"reads"| node_assemble_short
node_assemble_short -->|"writes"| node_short_video
node_long_script_file -->|"reads"| node_assemble_long
node_audio_long -->|"reads"| node_assemble_long
node_long_clips -->|"reads"| node_assemble_long
node_assemble_long -->|"writes"| node_long_video
node_short_video -->|"uploads"| node_upload_short
node_upload_short -->|"publishes"| node_youtube
node_long_video -->|"uploads"| node_upload_long
node_upload_long -->|"publishes"| node_youtube

click node_main_short "https://github.com/mraliraza142/finance-video-bot/blob/main/main_short.py"
click node_main_long "https://github.com/mraliraza142/finance-video-bot/blob/main/main_long.py"
click node_script_short "https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_short.py"
click node_script_long "https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_long.py"
click node_short_script_file "https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_short.py"
click node_long_script_file "https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_long.py"
click node_tts_short "https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_short.py"
click node_tts_long "https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_long.py"
click node_audio_short "https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_short.py"
click node_audio_long "https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_long.py"
click node_footage_short "https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_short.py"
click node_footage_long "https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_long.py"
click node_short_clips "https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_short.py"
click node_long_clips "https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_long.py"
click node_assemble_short "https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_short.py"
click node_assemble_long "https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_long.py"
click node_short_video "https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_short.py"
click node_long_video "https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_long.py"
click node_upload_short "https://github.com/mraliraza142/finance-video-bot/blob/main/upload_youtube_short.py"
click node_upload_long "https://github.com/mraliraza142/finance-video-bot/blob/main/upload_youtube_long.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_main_short,node_main_long toneBlue
class node_script_short,node_script_long,node_short_script_file,node_long_script_file toneAmber
class node_tts_short,node_tts_long,node_audio_short,node_audio_long,node_footage_short,node_footage_long,node_short_clips,node_long_clips,node_assemble_short,node_assemble_long,node_short_video,node_long_video,node_news toneMint
class node_upload_short,node_upload_long toneRose
class node_creator,node_gemini,node_edge_tts,node_pexels,node_youtube toneIndigo
```

## Components

### Pipeline orchestration

- [Short pipeline](https://github.com/mraliraza142/finance-video-bot/blob/main/main_short.py): `main_short.py`
- [Long pipeline](https://github.com/mraliraza142/finance-video-bot/blob/main/main_long.py): `main_long.py`

### Script generation

- [Short script](https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_short.py): `generate_script_short.py`
- [Long script](https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_long.py): `generate_script_long.py`
- [Short script JSON](https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_short.py): `generate_script_short.py`
- [Long script JSON](https://github.com/mraliraza142/finance-video-bot/blob/main/generate_script_long.py): `generate_script_long.py`

### Media production

- [Short voiceover](https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_short.py): `tts_gen_short.py`
- [Long voiceover](https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_long.py): `tts_gen_long.py`
- [Short audio files](https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_short.py): `tts_gen_short.py`
- [Long audio files](https://github.com/mraliraza142/finance-video-bot/blob/main/tts_gen_long.py): `tts_gen_long.py`
- [Short footage](https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_short.py): `fetch_footage_short.py`
- [Long footage](https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_long.py): `fetch_footage_long.py`
- [Short clips](https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_short.py): `fetch_footage_short.py`
- [Long clips](https://github.com/mraliraza142/finance-video-bot/blob/main/fetch_footage_long.py): `fetch_footage_long.py`
- [Short assembly](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_short.py): `assemble_video_short.py`
- [Long assembly](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_long.py): `assemble_video_long.py`
- [Short video](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_short.py): `assemble_video_short.py`
- [Long video](https://github.com/mraliraza142/finance-video-bot/blob/main/assemble_video_long.py): `assemble_video_long.py`

### YouTube publishing

- [Short uploader](https://github.com/mraliraza142/finance-video-bot/blob/main/upload_youtube_short.py): `upload_youtube_short.py`
- [Long uploader](https://github.com/mraliraza142/finance-video-bot/blob/main/upload_youtube_long.py): `upload_youtube_long.py`

### Other components

- **Workflow trigger**
- **Gemini**
- **NewsAPI**
- **Edge TTS**
- **Pexels**
- **YouTube**

## Connections

- Workflow trigger → Short pipeline: starts
- Workflow trigger → Long pipeline: starts
- Short pipeline → Short uploader: checks auth
- Short pipeline → Short script: calls
- Short pipeline → Short voiceover: calls
- Short pipeline → Short footage: calls
- Short pipeline → Short assembly: calls
- Short pipeline → Short uploader: calls
- Long pipeline → Long uploader: checks auth
- Long pipeline → Long script: calls
- Long pipeline → Long voiceover: calls
- Long pipeline → Long footage: calls
- Long pipeline → Long assembly: calls
- Long pipeline → Long uploader: calls
- Short script → NewsAPI: fetches headlines
- Short script → Gemini: generates script
- Short script → Short script JSON: writes
- Long script → NewsAPI: fetches headlines
- Long script → Gemini: generates script
- Long script → Long script JSON: writes
- Short script JSON → Short voiceover: reads
- Short voiceover → Edge TTS: synthesizes speech
- Short voiceover → Short audio files: writes
- Long script JSON → Long voiceover: reads
- Long voiceover → Long audio files: writes
- Short script JSON → Short footage: reads keywords
- Short footage → Pexels: searches and downloads
- Short footage → Short clips: writes
- Long script JSON → Long footage: reads keywords
- Long footage → Pexels: searches and downloads
- Long footage → Long clips: writes
- Short script JSON → Short assembly: reads
- Short audio files → Short assembly: reads
- Short clips → Short assembly: reads
- Short assembly → Short video: writes
- Long script JSON → Long assembly: reads
- Long audio files → Long assembly: reads
- Long clips → Long assembly: reads
- Long assembly → Long video: writes
- Short video → Short uploader: uploads
- Short uploader → YouTube: publishes
- Long video → Long uploader: uploads
- Long uploader → YouTube: publishes
