# antonino3g/video-maker architecture

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

- Interactive diagram: https://gitdiagram.com/antonino3g/video-maker
- Repository: https://github.com/antonino3g/video-maker

## Overview

This repository is a proof-of-concept video maker. The main workflow takes a search topic and title prefix, retrieves and summarizes Wikipedia content, extracts sentence keywords, finds and downloads images, renders a video, then authorizes with YouTube and uploads the video and thumbnail. The robots share persisted content through `robots/state.js`. The README documents optional use of these stages separately; sampled source confirms the main runner’s sequential flow. Some service and rendering links are documented rather than visible in the runner’s implementation details.

Main entry points: [`robots/state.js`](https://github.com/antonino3g/video-maker/blob/master/robots/state.js) (Content state), [`robots/text.js`](https://github.com/antonino3g/video-maker/blob/master/robots/text.js) (Text and keywords), [`robots/video.js`](https://github.com/antonino3g/video-maker/blob/master/robots/video.js) (Video rendering), [`robots/input.js`](https://github.com/antonino3g/video-maker/blob/master/robots/input.js) (Topic and style)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_research["Research and text"]
  node_input["Topic and style<br/>[input.js]"]
  node_wiki["Wikipedia retrieval<br/>[text.js]"]
  node_keywords["Text and keywords<br/>[text.js]"]
end

subgraph group_media["Image and video production"]
  node_image_search["Image search<br/>[image.js]"]
  node_image_download["Image downloads<br/>[image.js]"]
  node_video_render["Video rendering<br/>[video.js]"]
  node_audio_template["Audio template<br/>[newsroom.mp3]"]
end

subgraph group_publishing["YouTube publishing"]
  node_youtube_auth["YouTube authorization<br/>[youtube.js]"]
  node_youtube_upload["Video and thumbnail upload<br/>[youtube.js]"]
end

subgraph group_shared["Shared state"]
  node_state[("Content state<br/>[state.js]")]
end

node_user(("Video creator"))
node_algorithmia["Algorithmia"]
node_watson["Watson NLU"]
node_google_images["Google Image Search"]
node_youtube["YouTube"]

node_user -->|"provides topic"| node_input
node_input -->|"saves input"| node_state
node_input -->|"starts workflow"| node_wiki
node_wiki -->|"retrieves content"| node_algorithmia
node_wiki -->|"sanitizes text"| node_keywords
node_keywords -->|"extracts keywords"| node_watson
node_keywords -->|"saves enriched content"| node_state
node_keywords -->|"starts next stage"| node_image_search
node_image_search -->|"searches images"| node_google_images
node_image_search -->|"downloads results"| node_image_download
node_image_download -->|"saves image metadata"| node_state
node_image_download -->|"provides images"| node_video_render
node_video_render -->|"uses audio"| node_audio_template
node_video_render -->|"loads content"| node_state
node_video_render -->|"starts publishing"| node_youtube_auth
node_youtube_auth -->|"authorizes upload"| node_youtube_upload
node_youtube_upload -->|"uploads video and thumbnail"| node_youtube
node_youtube_auth -->|"requests consent"| node_youtube
node_youtube_upload -->|"loads metadata"| node_state

click node_input "https://github.com/antonino3g/video-maker/blob/master/robots/input.js"
click node_wiki "https://github.com/antonino3g/video-maker/blob/master/robots/text.js"
click node_keywords "https://github.com/antonino3g/video-maker/blob/master/robots/text.js"
click node_image_search "https://github.com/antonino3g/video-maker/blob/master/robots/image.js"
click node_image_download "https://github.com/antonino3g/video-maker/blob/master/robots/image.js"
click node_video_render "https://github.com/antonino3g/video-maker/blob/master/robots/video.js"
click node_audio_template "https://github.com/antonino3g/video-maker/blob/master/templates/1/newsroom.mp3"
click node_youtube_auth "https://github.com/antonino3g/video-maker/blob/master/robots/youtube.js"
click node_youtube_upload "https://github.com/antonino3g/video-maker/blob/master/robots/youtube.js"
click node_state "https://github.com/antonino3g/video-maker/blob/master/robots/state.js"

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_input,node_wiki,node_keywords toneBlue
class node_image_search,node_image_download,node_video_render,node_audio_template toneAmber
class node_youtube_auth,node_youtube_upload toneMint
class node_state toneRose
class node_user,node_algorithmia,node_watson,node_google_images,node_youtube toneIndigo
```

## Components

### Research and text

- [Topic and style](https://github.com/antonino3g/video-maker/blob/master/robots/input.js): `robots/input.js`
- [Wikipedia retrieval](https://github.com/antonino3g/video-maker/blob/master/robots/text.js): `robots/text.js`
- [Text and keywords](https://github.com/antonino3g/video-maker/blob/master/robots/text.js): `robots/text.js`

### Image and video production

- [Image search](https://github.com/antonino3g/video-maker/blob/master/robots/image.js): `robots/image.js`
- [Image downloads](https://github.com/antonino3g/video-maker/blob/master/robots/image.js): `robots/image.js`
- [Video rendering](https://github.com/antonino3g/video-maker/blob/master/robots/video.js): `robots/video.js`
- [Audio template](https://github.com/antonino3g/video-maker/blob/master/templates/1/newsroom.mp3): `templates/1/newsroom.mp3`

### YouTube publishing

- [YouTube authorization](https://github.com/antonino3g/video-maker/blob/master/robots/youtube.js): `robots/youtube.js`
- [Video and thumbnail upload](https://github.com/antonino3g/video-maker/blob/master/robots/youtube.js): `robots/youtube.js`

### Shared state

- [Content state](https://github.com/antonino3g/video-maker/blob/master/robots/state.js): `robots/state.js`

### Other components

- **Video creator**
- **Algorithmia**
- **Watson NLU**
- **Google Image Search**
- **YouTube**

## Connections

- Video creator → Topic and style: provides topic (evidence: `README.md`)
- Topic and style → Content state: saves input (evidence: `robots/input.js`)
- Topic and style → Wikipedia retrieval: starts workflow (evidence: `index.js`)
- Wikipedia retrieval → Algorithmia: retrieves content (evidence: `robots/text.js`)
- Wikipedia retrieval → Text and keywords: sanitizes text (evidence: `robots/text.js`)
- Text and keywords → Watson NLU: extracts keywords (evidence: `robots/text.js`)
- Text and keywords → Content state: saves enriched content (evidence: `robots/text.js`)
- Text and keywords → Image search: starts next stage (evidence: `index.js`)
- Image search → Google Image Search: searches images (evidence: `robots/image.js`)
- Image search → Image downloads: downloads results (evidence: `robots/image.js`)
- Image downloads → Content state: saves image metadata (evidence: `robots/image.js`)
- Image downloads → Video rendering: provides images (evidence: `README.md`)
- Video rendering → Audio template: uses audio (evidence: `robots/video.js`)
- Video rendering → Content state: loads content (evidence: `robots/video.js`)
- Video rendering → YouTube authorization: starts publishing (evidence: `index.js`)
- YouTube authorization → Video and thumbnail upload: authorizes upload (evidence: `robots/youtube.js`)
- Video and thumbnail upload → YouTube: uploads video and thumbnail (evidence: `robots/youtube.js`)
- YouTube authorization → YouTube: requests consent (evidence: `robots/youtube.js`)
- Video and thumbnail upload → Content state: loads metadata (evidence: `robots/youtube.js`)
