# jens-duttke/video-stereo-converter architecture

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

- Interactive diagram: https://gitdiagram.com/jens-duttke/video-stereo-converter
- Repository: https://github.com/jens-duttke/video-stereo-converter

## Overview

This is a command-line 2D-to-stereoscopic-video converter. A user initializes a workflow for a video, then extracts frames, estimates depth, generates side-by-side images, encodes chunks, and concatenates them with audio. The orchestrator coordinates batch workflows, parallelizes eligible steps, tracks resumable state, and manages disk space. The README documents the pipeline and its capabilities; sampled source and the source index support the internal links shown. Several processing modules were not sampled, so their internal behavior is not inferred.

Main entry points: [`workflow_orchestrator.py`](https://github.com/jens-duttke/video-stereo-converter/blob/main/workflow_orchestrator.py) (Batch orchestrator), [`helper/config_manager.py`](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/config_manager.py) (Workflow config), [`depth_map_generator.py`](https://github.com/jens-duttke/video-stereo-converter/blob/main/depth_map_generator.py) (Depth estimation), [`sbs_generator.py`](https://github.com/jens-duttke/video-stereo-converter/blob/main/sbs_generator.py) (SBS generation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Workflow control"]
  node_init["Workflow initializer<br/>[workflow_init.py]"]
  node_config["Workflow config<br/>[config_manager.py]"]
  node_orchestrator["Batch orchestrator"]
  node_state["Workflow state<br/>[workflow_state.py]"]
  node_metrics["Progress metrics"]
end

subgraph group_processing["Video processing"]
  node_extract["Frame extraction<br/>[frame_extractor.py]"]
  node_depth["Depth estimation"]
  node_sbs["SBS generation<br/>[sbs_generator.py]"]
  node_chunks["Chunk encoding<br/>[chunk_generator.py]"]
  node_concat["Video concatenation"]
end

subgraph group_stereo["Stereo tools"]
  node_tester["SBS settings tester<br/>[sbs_tester.py]"]
  node_stereo_core["Stereo core<br/>[stereo_core.py]"]
end

subgraph group_support["Shared support"]
  node_ffmpeg["FFmpeg helpers<br/>[ffmpeg_utils.py]"]
  node_utilities["Frame and console utilities"]
end

node_user(("Video operator"))
node_source["Input video"]
node_output["Stereo video"]

node_user -->|"initializes"| node_init
node_source -->|"selects video"| node_init
node_init -->|"creates settings"| node_config
node_user -->|"starts batch"| node_orchestrator
node_orchestrator -->|"persists status"| node_state
node_orchestrator -->|"checks progress"| node_metrics
node_orchestrator -->|"dispatches"| node_extract
node_orchestrator -->|"dispatches"| node_depth
node_orchestrator -->|"dispatches"| node_sbs
node_orchestrator -->|"dispatches"| node_chunks
node_orchestrator -->|"dispatches"| node_concat
node_source -->|"provides frames"| node_extract
node_extract -->|"supplies frames"| node_depth
node_depth -->|"supplies depth maps"| node_sbs
node_sbs -->|"supplies images"| node_chunks
node_chunks -->|"supplies segments"| node_concat
node_concat -->|"produces video"| node_output
node_sbs -->|"uses stereo processing"| node_stereo_core
node_tester -->|"previews stereo"| node_stereo_core
node_tester -->|"loads and saves settings"| node_config
node_extract -->|"loads workflow settings"| node_config
node_depth -->|"loads workflow settings"| node_config
node_chunks -->|"loads workflow settings"| node_config
node_concat -->|"loads workflow settings"| node_config
node_concat -->|"uses metadata helpers"| node_ffmpeg
node_chunks -->|"uses metadata helpers"| node_ffmpeg
node_metrics -->|"resolves workflow paths"| node_config
node_state -->|"checks chunk completion"| node_metrics
node_depth -->|"uses frame helpers"| node_utilities
node_sbs -->|"uses frame helpers"| node_utilities

click node_init "https://github.com/jens-duttke/video-stereo-converter/blob/main/workflow_init.py"
click node_config "https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/config_manager.py"
click node_orchestrator "https://github.com/jens-duttke/video-stereo-converter/blob/main/workflow_orchestrator.py"
click node_state "https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/workflow_state.py"
click node_metrics "https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/workflow_metrics.py"
click node_extract "https://github.com/jens-duttke/video-stereo-converter/blob/main/frame_extractor.py"
click node_depth "https://github.com/jens-duttke/video-stereo-converter/blob/main/depth_map_generator.py"
click node_sbs "https://github.com/jens-duttke/video-stereo-converter/blob/main/sbs_generator.py"
click node_chunks "https://github.com/jens-duttke/video-stereo-converter/blob/main/chunk_generator.py"
click node_concat "https://github.com/jens-duttke/video-stereo-converter/blob/main/video_concatenator.py"
click node_tester "https://github.com/jens-duttke/video-stereo-converter/blob/main/sbs_tester.py"
click node_stereo_core "https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/stereo_core.py"
click node_ffmpeg "https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/ffmpeg_utils.py"
click node_utilities "https://github.com/jens-duttke/video-stereo-converter/tree/main/helper"

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_init,node_config,node_orchestrator,node_state,node_metrics toneBlue
class node_extract,node_depth,node_sbs,node_chunks,node_concat toneAmber
class node_tester,node_stereo_core toneMint
class node_ffmpeg,node_utilities toneRose
class node_user,node_source,node_output toneIndigo
```

## Components

### Workflow control

- [Workflow initializer](https://github.com/jens-duttke/video-stereo-converter/blob/main/workflow_init.py): `workflow_init.py`
- [Workflow config](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/config_manager.py): `helper/config_manager.py`
- [Batch orchestrator](https://github.com/jens-duttke/video-stereo-converter/blob/main/workflow_orchestrator.py): `workflow_orchestrator.py`
- [Workflow state](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/workflow_state.py): `helper/workflow_state.py`
- [Progress metrics](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/workflow_metrics.py): `helper/workflow_metrics.py`

### Video processing

- [Frame extraction](https://github.com/jens-duttke/video-stereo-converter/blob/main/frame_extractor.py): `frame_extractor.py`
- [Depth estimation](https://github.com/jens-duttke/video-stereo-converter/blob/main/depth_map_generator.py): `depth_map_generator.py`
- [SBS generation](https://github.com/jens-duttke/video-stereo-converter/blob/main/sbs_generator.py): `sbs_generator.py`
- [Chunk encoding](https://github.com/jens-duttke/video-stereo-converter/blob/main/chunk_generator.py): `chunk_generator.py`
- [Video concatenation](https://github.com/jens-duttke/video-stereo-converter/blob/main/video_concatenator.py): `video_concatenator.py`

### Stereo tools

- [SBS settings tester](https://github.com/jens-duttke/video-stereo-converter/blob/main/sbs_tester.py): `sbs_tester.py`
- [Stereo core](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/stereo_core.py): `helper/stereo_core.py`

### Shared support

- [FFmpeg helpers](https://github.com/jens-duttke/video-stereo-converter/blob/main/helper/ffmpeg_utils.py): `helper/ffmpeg_utils.py`
- [Frame and console utilities](https://github.com/jens-duttke/video-stereo-converter/tree/main/helper): `helper`

### Other components

- **Video operator**
- **Input video**
- **Stereo video**

## Connections

- Video operator → Workflow initializer: initializes (evidence: `README.md`)
- Input video → Workflow initializer: selects video (evidence: `README.md`)
- Workflow initializer → Workflow config: creates settings (evidence: `workflow_init.py`)
- Video operator → Batch orchestrator: starts batch (evidence: `README.md`)
- Batch orchestrator → Workflow state: persists status (evidence: `workflow_orchestrator.py`)
- Batch orchestrator → Progress metrics: checks progress (evidence: `workflow_orchestrator.py`)
- Batch orchestrator → Frame extraction: dispatches (evidence: `README.md`)
- Batch orchestrator → Depth estimation: dispatches (evidence: `README.md`)
- Batch orchestrator → SBS generation: dispatches (evidence: `README.md`)
- Batch orchestrator → Chunk encoding: dispatches (evidence: `README.md`)
- Batch orchestrator → Video concatenation: dispatches (evidence: `README.md`)
- Input video → Frame extraction: provides frames (evidence: `README.md`)
- Frame extraction → Depth estimation: supplies frames (evidence: `README.md`)
- Depth estimation → SBS generation: supplies depth maps (evidence: `README.md`)
- SBS generation → Chunk encoding: supplies images (evidence: `README.md`)
- Chunk encoding → Video concatenation: supplies segments (evidence: `README.md`)
- Video concatenation → Stereo video: produces video (evidence: `README.md`)
- SBS generation → Stereo core: uses stereo processing (evidence: `sbs_generator.py`)
- SBS settings tester → Stereo core: previews stereo (evidence: `sbs_tester.py`)
- SBS settings tester → Workflow config: loads and saves settings (evidence: `sbs_tester.py`)
- Frame extraction → Workflow config: loads workflow settings (evidence: `frame_extractor.py`)
- Depth estimation → Workflow config: loads workflow settings (evidence: `depth_map_generator.py`)
- Chunk encoding → Workflow config: loads workflow settings (evidence: `chunk_generator.py`)
- Video concatenation → Workflow config: loads workflow settings (evidence: `video_concatenator.py`)
- Video concatenation → FFmpeg helpers: uses metadata helpers (evidence: `video_concatenator.py`)
- Chunk encoding → FFmpeg helpers: uses metadata helpers (evidence: `chunk_generator.py`)
- Progress metrics → Workflow config: resolves workflow paths (evidence: `helper/workflow_metrics.py`)
- Workflow state → Progress metrics: checks chunk completion (evidence: `helper/workflow_state.py`)
- Depth estimation → Frame and console utilities: uses frame helpers (evidence: `depth_map_generator.py`)
- SBS generation → Frame and console utilities: uses frame helpers (evidence: `sbs_generator.py`)
