# maz1n0-zzz/evose-auto-generate-video architecture

> Architecture diagram of the GitHub repository maz1n0-zzz/evose-auto-generate-video, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/maz1n0-zzz/evose-auto-generate-video
- Repository: https://github.com/maz1n0-zzz/evose-auto-generate-video

## Overview

Evose Auto Generate Video turns a Vietnamese article URL or text file into a narrated, branded short video. The primary workflow is: prepare a scene script, validate it, generate narration, render and fit template clips, mix audio, and apply branding. The README also describes source screenshots and a 12-template library. Source excerpts show the pipeline’s orchestration and several internal calls; screenshot-to-pipeline wiring and some unsampled stages are therefore left unconnected or marked unverified. Remotion is a separate chart-and-pipeline animation demo, not shown as part of the main render path.

Main entry points: [`src/render/template-pipeline.ts`](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-pipeline.ts) (Pipeline orchestrator), [`remotion/src/ChartDemo.tsx`](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/ChartDemo.tsx) (Chart demo composition), [`src/tts/tts-client.ts`](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/tts-client.ts) (TTS provider selection), [`src/cli.ts`](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/cli.ts) (Pipeline CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Script and orchestration"]
  node_script["Scene script"]
  node_cli["Pipeline CLI<br/>[cli.ts]"]
  node_pipeline["Pipeline orchestrator"]
  node_schema["Script validation"]
  node_config["Runtime configuration<br/>[config.ts]"]
  node_screenshot["Article screenshot"]
end

subgraph group_speech["Speech and audio"]
  node_tts_factory["TTS provider selection<br/>[tts-client.ts]"]
  node_single_take["Aligned narration<br/>[single-take.ts]"]
  node_elevenlabs["ElevenLabs speech"]
  node_omnivoice["OmniVoice speech"]
  node_audio_tools["Audio processing<br/>[audio-tools.ts]"]
  node_sfx["Sound effects<br/>[sfx-selector.ts]"]
end

subgraph group_visuals["Templates and rendering"]
  node_templates["Evose templates"]
  node_composer["Template composer"]
  node_video_tools["Clip assembly<br/>[video-tools.ts]"]
end

subgraph group_branding["Brand finish"]
  node_brand["Brand finalizer<br/>[brand-finalize.ts]"]
end

subgraph group_demo["Remotion demo"]
  node_chart_demo["Chart demo composition<br/>[ChartDemo.tsx]"]
  node_background["Animated background"]
  node_pipeline_diagram["Pipeline diagram"]
  node_bar_chart["Bar chart motion<br/>[BarChartMotion.tsx]"]
  node_line_chart["Line chart motion"]
  node_donut_chart["Donut chart motion<br/>[DonutMotion.tsx]"]
  node_counter["Number counter<br/>[NumberCounter.tsx]"]
  node_root["Remotion root<br/>[Root.tsx]"]
end

node_user(("Video creator"))
node_claude(("Claude Code"))
node_article["Article or text"]
node_video["Finished video"]

node_user -->|"provides source"| node_article
node_user -->|"starts workflow"| node_claude
node_article -->|"reads article"| node_claude
node_claude -->|"writes scenes"| node_script
node_script -->|"runs pipeline"| node_cli
node_cli -->|"calls pipeline"| node_pipeline
node_pipeline -->|"validates script"| node_schema
node_pipeline -->|"loads settings"| node_config
node_article -.->|"captures source"| node_screenshot
node_pipeline -->|"creates client"| node_tts_factory
node_tts_factory -->|"selects provider"| node_elevenlabs
node_tts_factory -->|"selects provider"| node_omnivoice
node_pipeline -->|"aligns narration"| node_single_take
node_single_take -.->|"requests speech"| node_tts_factory
node_elevenlabs -.->|"calls cloud API"| node_user
node_omnivoice -.->|"calls local service"| node_user
node_pipeline -->|"cuts and mixes"| node_audio_tools
node_pipeline -->|"selects effects"| node_sfx
node_pipeline -->|"renders scenes"| node_composer
node_composer -->|"loads template"| node_templates
node_pipeline -->|"assembles clips"| node_video_tools
node_pipeline -->|"applies branding"| node_brand
node_brand -.->|"produces final"| node_video
node_root -->|"registers composition"| node_chart_demo
node_chart_demo -->|"renders background"| node_background
node_chart_demo -->|"renders diagram"| node_pipeline_diagram
node_chart_demo -->|"renders chart"| node_bar_chart
node_chart_demo -->|"renders chart"| node_line_chart
node_chart_demo -->|"renders chart"| node_donut_chart
node_chart_demo -->|"renders counter"| node_counter
node_pipeline_diagram -->|"renders background"| node_background

click node_cli "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/cli.ts"
click node_pipeline "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-pipeline.ts"
click node_schema "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-script-schema.ts"
click node_config "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/config.ts"
click node_screenshot "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/scripts/capture-screenshot.js"
click node_tts_factory "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/tts-client.ts"
click node_single_take "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/single-take.ts"
click node_elevenlabs "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/elevenlabs-client.ts"
click node_omnivoice "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/omnivoice-client.ts"
click node_audio_tools "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/assets/audio-tools.ts"
click node_sfx "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/assets/sfx-selector.ts"
click node_templates "https://github.com/maz1n0-zzz/evose-auto-generate-video/tree/main/templates"
click node_composer "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-composer.ts"
click node_video_tools "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/video-tools.ts"
click node_brand "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/brand-finalize.ts"
click node_chart_demo "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/ChartDemo.tsx"
click node_background "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/backgrounds/AnimatedBackground.tsx"
click node_pipeline_diagram "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/scenes/PipelineDiagram.tsx"
click node_bar_chart "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/BarChartMotion.tsx"
click node_line_chart "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/LineChartMotion.tsx"
click node_donut_chart "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/DonutMotion.tsx"
click node_counter "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/NumberCounter.tsx"
click node_root "https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/Root.tsx"

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_script,node_cli,node_pipeline,node_schema,node_config,node_screenshot toneBlue
class node_tts_factory,node_single_take,node_elevenlabs,node_omnivoice,node_audio_tools,node_sfx toneAmber
class node_templates,node_composer,node_video_tools toneMint
class node_brand toneRose
class node_chart_demo,node_background,node_pipeline_diagram,node_bar_chart,node_line_chart,node_donut_chart,node_counter,node_root,node_user,node_claude,node_article,node_video toneIndigo
```

## Components

### Script and orchestration

- **Scene script**
- [Pipeline CLI](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/cli.ts): `src/cli.ts`
- [Pipeline orchestrator](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-pipeline.ts): `src/render/template-pipeline.ts`
- [Script validation](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-script-schema.ts): `src/render/template-script-schema.ts`
- [Runtime configuration](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/config.ts): `src/config.ts`
- [Article screenshot](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/scripts/capture-screenshot.js): `scripts/capture-screenshot.js`

### Speech and audio

- [TTS provider selection](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/tts-client.ts): `src/tts/tts-client.ts`
- [Aligned narration](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/single-take.ts): `src/tts/single-take.ts`
- [ElevenLabs speech](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/elevenlabs-client.ts): `src/tts/elevenlabs-client.ts`
- [OmniVoice speech](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/tts/omnivoice-client.ts): `src/tts/omnivoice-client.ts`
- [Audio processing](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/assets/audio-tools.ts): `src/assets/audio-tools.ts`
- [Sound effects](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/assets/sfx-selector.ts): `src/assets/sfx-selector.ts`

### Templates and rendering

- [Evose templates](https://github.com/maz1n0-zzz/evose-auto-generate-video/tree/main/templates): `templates`
- [Template composer](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/template-composer.ts): `src/render/template-composer.ts`
- [Clip assembly](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/video-tools.ts): `src/render/video-tools.ts`

### Brand finish

- [Brand finalizer](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/src/render/brand-finalize.ts): `src/render/brand-finalize.ts`

### Remotion demo

- [Chart demo composition](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/ChartDemo.tsx): `remotion/src/ChartDemo.tsx`
- [Animated background](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/backgrounds/AnimatedBackground.tsx): `remotion/src/backgrounds/AnimatedBackground.tsx`
- [Pipeline diagram](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/scenes/PipelineDiagram.tsx): `remotion/src/scenes/PipelineDiagram.tsx`
- [Bar chart motion](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/BarChartMotion.tsx): `remotion/src/charts/BarChartMotion.tsx`
- [Line chart motion](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/LineChartMotion.tsx): `remotion/src/charts/LineChartMotion.tsx`
- [Donut chart motion](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/DonutMotion.tsx): `remotion/src/charts/DonutMotion.tsx`
- [Number counter](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/charts/NumberCounter.tsx): `remotion/src/charts/NumberCounter.tsx`
- [Remotion root](https://github.com/maz1n0-zzz/evose-auto-generate-video/blob/main/remotion/src/Root.tsx): `remotion/src/Root.tsx`

### Other components

- **Video creator**
- **Claude Code**
- **Article or text**
- **Finished video**

## Connections

- Video creator → Article or text: provides source (evidence: `README.md`)
- Video creator → Claude Code: starts workflow (evidence: `README.md`)
- Article or text → Claude Code: reads article (evidence: `README.md`)
- Claude Code → Scene script: writes scenes (evidence: `README.md`)
- Scene script → Pipeline CLI: runs pipeline (evidence: `README.md`)
- Pipeline CLI → Pipeline orchestrator: calls pipeline (evidence: `src/cli.ts`)
- Pipeline orchestrator → Script validation: validates script (evidence: `src/render/template-pipeline.ts`)
- Pipeline orchestrator → Runtime configuration: loads settings (evidence: `src/render/template-pipeline.ts`)
- Article or text → Article screenshot: captures source (evidence: `README.md`)
- Pipeline orchestrator → TTS provider selection: creates client (evidence: `src/render/template-pipeline.ts`)
- TTS provider selection → ElevenLabs speech: selects provider (evidence: `src/tts/tts-client.ts`)
- TTS provider selection → OmniVoice speech: selects provider (evidence: `src/tts/tts-client.ts`)
- Pipeline orchestrator → Aligned narration: aligns narration (evidence: `src/render/template-pipeline.ts`)
- Aligned narration → TTS provider selection: requests speech
- ElevenLabs speech → Video creator: calls cloud API
- OmniVoice speech → Video creator: calls local service
- Pipeline orchestrator → Audio processing: cuts and mixes (evidence: `src/render/template-pipeline.ts`)
- Pipeline orchestrator → Sound effects: selects effects (evidence: `src/render/template-pipeline.ts`)
- Pipeline orchestrator → Template composer: renders scenes (evidence: `src/render/template-pipeline.ts`)
- Template composer → Evose templates: loads template (evidence: `src/render/template-composer.ts`)
- Pipeline orchestrator → Clip assembly: assembles clips (evidence: `src/render/template-pipeline.ts`)
- Pipeline orchestrator → Brand finalizer: applies branding (evidence: `src/render/template-pipeline.ts`)
- Brand finalizer → Finished video: produces final
- Remotion root → Chart demo composition: registers composition (evidence: `remotion/src/Root.tsx`)
- Chart demo composition → Animated background: renders background (evidence: `remotion/src/ChartDemo.tsx`)
- Chart demo composition → Pipeline diagram: renders diagram (evidence: `remotion/src/ChartDemo.tsx`)
- Chart demo composition → Bar chart motion: renders chart (evidence: `remotion/src/ChartDemo.tsx`)
- Chart demo composition → Line chart motion: renders chart (evidence: `remotion/src/ChartDemo.tsx`)
- Chart demo composition → Donut chart motion: renders chart (evidence: `remotion/src/ChartDemo.tsx`)
- Chart demo composition → Number counter: renders counter (evidence: `remotion/src/ChartDemo.tsx`)
- Pipeline diagram → Animated background: renders background (evidence: `remotion/src/scenes/PipelineDiagram.tsx`)
