# eanugan/moneyprinterturbo architecture

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

- Interactive diagram: https://gitdiagram.com/eanugan/moneyprinterturbo
- Repository: https://github.com/eanugan/moneyprinterturbo

## Overview

MoneyPrinterTurbo turns a topic or keywords into a short video, with WebUI and API entry points and a task-oriented generation workflow. Script and search-term generation lead into material selection, voice, subtitles, background music, and video composition; generated videos and task progress are then available to users. The README also documents social publishing metadata, optional upload-post integration, configurable LLM providers, and video-generation integrations. The tree and sampled excerpts support the entry points, task management, provider registry, and several services; some internal service wiring is inferred only at the documented capability level.

Main entry points: [`app/services/task.py`](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/task.py) (Task Pipeline), [`webui/Main.py`](https://github.com/eanugan/moneyprinterturbo/blob/main/webui/Main.py) (Web UI), [`app/controllers/manager/base_manager.py`](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/base_manager.py) (Task Scheduler), [`app/services/llm.py`](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/llm.py) (Script and Terms)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Interfaces"]
  node_webui["Web UI<br/>[Main.py]"]
  node_api["HTTP API<br/>[asgi.py]"]
  node_router["API Router<br/>[router.py]"]
  node_video_api["Video Endpoints<br/>[video.py]"]
  node_llm_api["LLM Endpoints<br/>[llm.py]"]
end

subgraph group_workflow["Generation Workflow"]
  node_script["Script and Terms<br/>[llm.py]"]
  node_materials["Material Search<br/>[material.py]"]
  node_voice["Voice Generation<br/>[voice.py]"]
  node_subtitles["Subtitle Generation<br/>[subtitle.py]"]
  node_music["Background Music<br/>[bgm.py]"]
  node_video["Video Composition<br/>[video.py]"]
  node_effects["Video Effects<br/>[video_effects.py]"]
end

subgraph group_runtime["Task Runtime"]
  node_task["Task Pipeline<br/>[task.py]"]
  node_manager["Task Scheduler<br/>[base_manager.py]"]
  node_memory["Memory Queue<br/>[memory_manager.py]"]
  node_redis["Redis Queue<br/>[redis_manager.py]"]
end

subgraph group_integrations["AI Integrations"]
  node_provider_registry["LLM Providers<br/>[llm_provider.py]"]
  node_video_generation["Video Model Adapters"]
end

subgraph group_output["Outputs and State"]
  node_artifact["Task Artifacts<br/>[task_artifacts.py]"]
  node_state[("Task State<br/>[state.py]")]
  node_upload["Social Upload<br/>[upload_post.py]"]
end

node_user(("Creator"))
node_provider_service{{"External AI Services"}}
node_media_sources{{"Media Sources"}}
node_publish_service{{"Upload-Post Service"}}
node_filesystem[("Local Files")]

node_user -->|"provides topic"| node_webui
node_user -->|"submits request"| node_api
node_api -->|"dispatches"| node_router
node_router -->|"routes video calls"| node_video_api
node_router -->|"routes LLM calls"| node_llm_api
node_video_api -->|"schedules task"| node_manager
node_manager -->|"queues tasks"| node_memory
node_manager -.->|"queues tasks"| node_redis
node_manager -->|"runs task"| node_task
node_webui -->|"starts generation"| node_task
node_llm_api -->|"generates text"| node_script
node_task -->|"requests script and terms"| node_script
node_script -->|"resolves provider"| node_provider_registry
node_script -->|"requests generation"| node_provider_service
node_task -->|"finds footage"| node_materials
node_materials -->|"searches and retrieves"| node_media_sources
node_task -->|"generates narration"| node_voice
node_voice -.->|"requests speech"| node_provider_service
node_task -->|"creates subtitles"| node_subtitles
node_task -->|"selects music"| node_music
node_task -->|"composes video"| node_video
node_video -->|"applies effects"| node_effects
node_task -.->|"requests generated footage"| node_video_generation
node_video_generation -->|"submits model task"| node_provider_service
node_task -->|"records outputs"| node_artifact
node_artifact -->|"stores files"| node_filesystem
node_task -->|"updates progress"| node_state
node_webui -->|"reads task status"| node_state
node_video_api -->|"reads task status"| node_state
node_webui -->|"configures publishing"| node_upload
node_upload -.->|"publishes video"| node_publish_service
node_task -.->|"optional auto-upload"| node_upload

click node_webui "https://github.com/eanugan/moneyprinterturbo/blob/main/webui/Main.py"
click node_api "https://github.com/eanugan/moneyprinterturbo/blob/main/app/asgi.py"
click node_router "https://github.com/eanugan/moneyprinterturbo/blob/main/app/router.py"
click node_video_api "https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/v1/video.py"
click node_llm_api "https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/v1/llm.py"
click node_task "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/task.py"
click node_manager "https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/base_manager.py"
click node_memory "https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/memory_manager.py"
click node_redis "https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/redis_manager.py"
click node_script "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/llm.py"
click node_materials "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/material.py"
click node_voice "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/voice.py"
click node_subtitles "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/subtitle.py"
click node_music "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/bgm.py"
click node_video "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/video.py"
click node_effects "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/utils/video_effects.py"
click node_provider_registry "https://github.com/eanugan/moneyprinterturbo/blob/main/app/models/llm_provider.py"
click node_video_generation "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/volcengine_seedance.py"
click node_artifact "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/task_artifacts.py"
click node_state "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/state.py"
click node_upload "https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/upload_post.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_webui,node_api,node_router,node_video_api,node_llm_api toneBlue
class node_script,node_materials,node_voice,node_subtitles,node_music,node_video,node_effects,node_filesystem toneAmber
class node_task,node_manager,node_memory,node_redis toneMint
class node_provider_registry,node_video_generation toneRose
class node_artifact,node_state,node_upload,node_user,node_provider_service,node_media_sources,node_publish_service toneIndigo
```

## Components

### User Interfaces

- [Web UI](https://github.com/eanugan/moneyprinterturbo/blob/main/webui/Main.py): `webui/Main.py`
- [HTTP API](https://github.com/eanugan/moneyprinterturbo/blob/main/app/asgi.py): `app/asgi.py`
- [API Router](https://github.com/eanugan/moneyprinterturbo/blob/main/app/router.py): `app/router.py`
- [Video Endpoints](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/v1/video.py): `app/controllers/v1/video.py`
- [LLM Endpoints](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/v1/llm.py): `app/controllers/v1/llm.py`

### Generation Workflow

- [Script and Terms](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/llm.py): `app/services/llm.py`
- [Material Search](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/material.py): `app/services/material.py`
- [Voice Generation](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/voice.py): `app/services/voice.py`
- [Subtitle Generation](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/subtitle.py): `app/services/subtitle.py`
- [Background Music](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/bgm.py): `app/services/bgm.py`
- [Video Composition](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/video.py): `app/services/video.py`
- [Video Effects](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/utils/video_effects.py): `app/services/utils/video_effects.py`

### Task Runtime

- [Task Pipeline](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/task.py): `app/services/task.py`
- [Task Scheduler](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/base_manager.py): `app/controllers/manager/base_manager.py`
- [Memory Queue](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/memory_manager.py): `app/controllers/manager/memory_manager.py`
- [Redis Queue](https://github.com/eanugan/moneyprinterturbo/blob/main/app/controllers/manager/redis_manager.py): `app/controllers/manager/redis_manager.py`

### AI Integrations

- [LLM Providers](https://github.com/eanugan/moneyprinterturbo/blob/main/app/models/llm_provider.py): `app/models/llm_provider.py`
- [Video Model Adapters](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/volcengine_seedance.py): `app/services/volcengine_seedance.py`

### Outputs and State

- [Task Artifacts](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/task_artifacts.py): `app/services/task_artifacts.py`
- [Task State](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/state.py): `app/services/state.py`
- [Social Upload](https://github.com/eanugan/moneyprinterturbo/blob/main/app/services/upload_post.py): `app/services/upload_post.py`

### Other components

- **Creator**
- **External AI Services**
- **Media Sources**
- **Upload-Post Service**
- **Local Files**

## Connections

- Creator → Web UI: provides topic
- Creator → HTTP API: submits request
- HTTP API → API Router: dispatches
- API Router → Video Endpoints: routes video calls
- API Router → LLM Endpoints: routes LLM calls
- Video Endpoints → Task Scheduler: schedules task
- Task Scheduler → Memory Queue: queues tasks
- Task Scheduler → Redis Queue: queues tasks
- Task Scheduler → Task Pipeline: runs task
- Web UI → Task Pipeline: starts generation
- LLM Endpoints → Script and Terms: generates text
- Task Pipeline → Script and Terms: requests script and terms
- Script and Terms → LLM Providers: resolves provider
- Script and Terms → External AI Services: requests generation
- Task Pipeline → Material Search: finds footage
- Material Search → Media Sources: searches and retrieves
- Task Pipeline → Voice Generation: generates narration
- Voice Generation → External AI Services: requests speech
- Task Pipeline → Subtitle Generation: creates subtitles
- Task Pipeline → Background Music: selects music
- Task Pipeline → Video Composition: composes video
- Video Composition → Video Effects: applies effects
- Task Pipeline → Video Model Adapters: requests generated footage
- Video Model Adapters → External AI Services: submits model task
- Task Pipeline → Task Artifacts: records outputs
- Task Artifacts → Local Files: stores files
- Task Pipeline → Task State: updates progress
- Web UI → Task State: reads task status
- Video Endpoints → Task State: reads task status
- Web UI → Social Upload: configures publishing
- Social Upload → Upload-Post Service: publishes video
- Task Pipeline → Social Upload: optional auto-upload
