# simpnick6703/video-compression architecture

> Architecture diagram of the GitHub repository simpnick6703/video-compression, 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/simpnick6703/video-compression
- Repository: https://github.com/simpnick6703/video-compression

## Overview

Video-Compression is a local CLI tool that targets a requested output size while minimizing quality loss. The main workflow parses a source path and options, probes the video and plans bitrate/quality settings, selects an available encoder, then runs hardware split encoding or CPU encoding and reports progress and results. The README also documents HEVC/H.264 support and platform-specific hardware encoder fallback. Core and encoder behavior is represented at module level; the excerpts do not show every internal call, so the graph avoids inferring finer-grained links.

Main entry points: [`videocompress/encode.py`](https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py) (Compression orchestrator), [`videocompress/core.py`](https://github.com/simpnick6703/video-compression/blob/main/videocompress/core.py) (Probe and encode planning), [`videocompress/cli.py`](https://github.com/simpnick6703/video-compression/blob/main/videocompress/cli.py) (Argument parser), [`videocompress/__main__.py`](https://github.com/simpnick6703/video-compression/blob/main/videocompress/__main__.py) (Module entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI entry"]
  node_module_entry["Module entry<br/>[__main__.py]"]
  node_cli["Argument parser<br/>[cli.py]"]
  node_package_entry["Package entry<br/>[__init__.py]"]
end

subgraph group_planning["Media planning"]
  node_media_core["Probe and encode planning<br/>[core.py]"]
end

subgraph group_encoding["Encoding runtime"]
  node_compress["Compression orchestrator<br/>[encode.py]"]
  node_hardware_path["Hardware split encoding<br/>[encode.py]"]
  node_cpu_path["CPU encoding<br/>[encode.py]"]
end

subgraph group_feedback["Progress and results"]
  node_progress_ui["Progress and result UI<br/>[progress.py]"]
end

node_user(("Video user"))
node_ffmpeg["FFmpeg"]
node_ffprobe["FFprobe"]

node_user -->|"invokes"| node_module_entry
node_user -->|"invokes"| node_package_entry
node_module_entry -->|"calls"| node_cli
node_package_entry -->|"exports"| node_cli
node_cli -->|"calls"| node_compress
node_compress -->|"uses planning"| node_media_core
node_compress -->|"dispatches"| node_hardware_path
node_compress -->|"dispatches"| node_cpu_path
node_compress -->|"updates UI"| node_progress_ui
node_media_core -->|"probes media"| node_ffprobe
node_media_core -->|"runs checks"| node_ffmpeg
node_hardware_path -->|"encodes and stitches"| node_ffmpeg
node_cpu_path -->|"encodes"| node_ffmpeg
node_progress_ui -.->|"monitors processes"| node_ffmpeg

click node_module_entry "https://github.com/simpnick6703/video-compression/blob/main/videocompress/__main__.py"
click node_cli "https://github.com/simpnick6703/video-compression/blob/main/videocompress/cli.py"
click node_package_entry "https://github.com/simpnick6703/video-compression/blob/main/videocompress/__init__.py"
click node_compress "https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py"
click node_media_core "https://github.com/simpnick6703/video-compression/blob/main/videocompress/core.py"
click node_hardware_path "https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py"
click node_cpu_path "https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py"
click node_progress_ui "https://github.com/simpnick6703/video-compression/blob/main/videocompress/progress.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_module_entry,node_cli,node_package_entry,node_user toneBlue
class node_media_core toneAmber
class node_compress,node_hardware_path,node_cpu_path toneMint
class node_progress_ui toneRose
class node_ffmpeg,node_ffprobe toneIndigo
```

## Components

### CLI entry

- [Module entry](https://github.com/simpnick6703/video-compression/blob/main/videocompress/__main__.py): `videocompress/__main__.py`
- [Argument parser](https://github.com/simpnick6703/video-compression/blob/main/videocompress/cli.py): `videocompress/cli.py`
- [Package entry](https://github.com/simpnick6703/video-compression/blob/main/videocompress/__init__.py): `videocompress/__init__.py`

### Media planning

- [Probe and encode planning](https://github.com/simpnick6703/video-compression/blob/main/videocompress/core.py): `videocompress/core.py`

### Encoding runtime

- [Compression orchestrator](https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py): `videocompress/encode.py`
- [Hardware split encoding](https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py): `videocompress/encode.py`
- [CPU encoding](https://github.com/simpnick6703/video-compression/blob/main/videocompress/encode.py): `videocompress/encode.py`

### Progress and results

- [Progress and result UI](https://github.com/simpnick6703/video-compression/blob/main/videocompress/progress.py): `videocompress/progress.py`

### Other components

- **Video user**
- **FFmpeg**
- **FFprobe**

## Connections

- Video user → Module entry: invokes (evidence: `README.md`)
- Video user → Package entry: invokes (evidence: `README.md`)
- Module entry → Argument parser: calls (evidence: `videocompress/__main__.py`)
- Package entry → Argument parser: exports (evidence: `videocompress/__init__.py`)
- Argument parser → Compression orchestrator: calls (evidence: `videocompress/cli.py`)
- Compression orchestrator → Probe and encode planning: uses planning (evidence: `videocompress/encode.py`)
- Compression orchestrator → Hardware split encoding: dispatches (evidence: `videocompress/encode.py`)
- Compression orchestrator → CPU encoding: dispatches (evidence: `videocompress/encode.py`)
- Compression orchestrator → Progress and result UI: updates UI (evidence: `videocompress/encode.py`)
- Probe and encode planning → FFprobe: probes media (evidence: `videocompress/core.py`)
- Probe and encode planning → FFmpeg: runs checks (evidence: `videocompress/core.py`)
- Hardware split encoding → FFmpeg: encodes and stitches (evidence: `videocompress/encode.py`)
- CPU encoding → FFmpeg: encodes (evidence: `videocompress/encode.py`)
- Progress and result UI → FFmpeg: monitors processes
