# jakob-ui/videogen_pipeline architecture

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

- Interactive diagram: https://gitdiagram.com/jakob-ui/videogen_pipeline
- Repository: https://github.com/jakob-ui/videogen_pipeline

## Overview

This repository is a Python prototype for producing a product video: the main script records a locally served webpage, generates a cloned German voice-over, then combines audio and video into an MP4. The documented web application, HTTP trigger API, and dynamic product-value updates are not implemented in the shown files; the current script uses fixed page and narration content. The graph reflects the sampled runtime code, not those planned capabilities.

Main entry points: [`Pipeline/pipeline.py`](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py) (Pipeline orchestration), [`Pipeline/Audio/voiceOver.py`](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/voiceOver.py) (Voice cloning), [`Pipeline/Audio/trainVoice/footage/Airspace_text_Ai.wav`](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/trainVoice/footage/Airspace_text_Ai.wav) (Clone reference audio)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_rendering["Webpage recording"]
  node_pipeline["Pipeline orchestration<br/>[pipeline.py]"]
  node_web_capture["Webpage capture<br/>[pipeline.py]"]
  node_recorded_video["Recorded video"]
end

subgraph group_audio["Voice-over generation"]
  node_voiceover["Voice cloning<br/>[voiceOver.py]"]
  node_reference_audio["Clone reference audio"]
  node_tts_model["Qwen TTS model"]
  node_generated_audio["Generated narration"]
end

subgraph group_assembly["Video assembly"]
  node_mux["Audio-video muxing<br/>[pipeline.py]"]
  node_mp4["Product video MP4"]
end

node_operator(("Script operator"))

node_operator -->|"runs"| node_pipeline
node_pipeline -->|"records page"| node_web_capture
node_web_capture -->|"produces"| node_recorded_video
node_pipeline -->|"generates narration"| node_voiceover
node_voiceover -->|"clones from"| node_reference_audio
node_voiceover -->|"loads and uses"| node_tts_model
node_voiceover -->|"writes"| node_generated_audio
node_pipeline -->|"combines media"| node_mux
node_recorded_video -->|"video input"| node_mux
node_generated_audio -->|"audio input"| node_mux
node_mux -->|"writes MP4"| node_mp4

click node_pipeline "https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py"
click node_web_capture "https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py"
click node_voiceover "https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/voiceOver.py"
click node_reference_audio "https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/trainVoice/footage/Airspace_text_Ai.wav"
click node_mux "https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.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_pipeline,node_web_capture,node_recorded_video toneBlue
class node_voiceover,node_reference_audio,node_tts_model,node_generated_audio toneAmber
class node_mux,node_mp4 toneMint
class node_operator toneIndigo
```

## Components

### Webpage recording

- [Pipeline orchestration](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py): `Pipeline/pipeline.py`
- [Webpage capture](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py): `Pipeline/pipeline.py`
- **Recorded video**

### Voice-over generation

- [Voice cloning](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/voiceOver.py): `Pipeline/Audio/voiceOver.py`
- [Clone reference audio](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/Audio/trainVoice/footage/Airspace_text_Ai.wav): `Pipeline/Audio/trainVoice/footage/Airspace_text_Ai.wav`
- **Qwen TTS model**
- **Generated narration**

### Video assembly

- [Audio-video muxing](https://github.com/jakob-ui/videogen_pipeline/blob/main/Pipeline/pipeline.py): `Pipeline/pipeline.py`
- **Product video MP4**

### Other components

- **Script operator**

## Connections

- Script operator → Pipeline orchestration: runs (evidence: `Pipeline/pipeline.py`)
- Pipeline orchestration → Webpage capture: records page (evidence: `Pipeline/pipeline.py`)
- Webpage capture → Recorded video: produces (evidence: `Pipeline/pipeline.py`)
- Pipeline orchestration → Voice cloning: generates narration (evidence: `Pipeline/pipeline.py`)
- Voice cloning → Clone reference audio: clones from (evidence: `Pipeline/Audio/voiceOver.py`)
- Voice cloning → Qwen TTS model: loads and uses (evidence: `Pipeline/Audio/voiceOver.py`)
- Voice cloning → Generated narration: writes (evidence: `Pipeline/Audio/voiceOver.py`)
- Pipeline orchestration → Audio-video muxing: combines media (evidence: `Pipeline/pipeline.py`)
- Recorded video → Audio-video muxing: video input (evidence: `Pipeline/pipeline.py`)
- Generated narration → Audio-video muxing: audio input (evidence: `Pipeline/pipeline.py`)
- Audio-video muxing → Product video MP4: writes MP4 (evidence: `Pipeline/pipeline.py`)
