# jens-duttke/oku3d-ffmpeg architecture

> Architecture diagram of the GitHub repository jens-duttke/oku3d-ffmpeg, 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/oku3d-ffmpeg
- Repository: https://github.com/jens-duttke/oku3d-ffmpeg

## Overview

This repository builds and packages customized FFmpeg binaries for multiple operating systems, architectures, and licensing variants. The documented user workflow selects a target, variant, and optional addins, builds a Docker image, then builds FFmpeg and obtains a ZIP artifact. Package build definitions and target-specific toolchain images support that workflow; scheduled builds and releases are also documented. The Oku3D directory contains specialized build-surface and GPL checks. Build-script internals and automation wiring were not sampled, so those connections are limited to README evidence.

Main entry points: [`build.sh`](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/build.sh) (FFmpeg builder), [`makeimage.sh`](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/makeimage.sh) (Image builder), [`.github/workflows`](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/.github/workflows) (Scheduled builds), [`oku3d/surface.c`](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/surface.c) (Surface probe)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_build_flow["Build workflow"]
  node_image_command["Image builder<br/>[makeimage.sh]"]
  node_build_command["FFmpeg builder<br/>[build.sh]"]
  node_artifact["ZIP artifact"]
  node_automation["Scheduled builds<br/>[workflows]"]
  node_release["Automated releases<br/>[workflows]"]
end

subgraph group_build_inputs["Build configuration"]
  node_variants["Build variants"]
  node_addins["Build addins"]
  node_packages["Dependency recipes<br/>[scripts.d]"]
end

subgraph group_platforms["Platform toolchains"]
  node_base_image["Base image"]
  node_target_images["Target toolchains"]
end

subgraph group_validation["Oku3D checks"]
  node_surface_probe["Surface probe<br/>[surface.c]"]
  node_surface_compare["Surface comparison<br/>[compare_surface.py]"]
  node_gpl_scan["GPL scanner<br/>[gpl_scan.py]"]
end

node_user(("Builder"))

node_user -->|"selects target"| node_image_command
node_user -->|"selects variant"| node_build_command
node_image_command -->|"prepares image"| node_build_command
node_build_command -->|"produces ZIP"| node_artifact
node_build_command -->|"uses variant"| node_variants
node_build_command -->|"accepts addins"| node_addins
node_build_command -->|"builds packages"| node_packages
node_image_command -.->|"builds image"| node_base_image
node_image_command -.->|"selects toolchain"| node_target_images
node_automation -->|"runs builds"| node_build_command
node_automation -->|"releases on success"| node_release
node_surface_probe -->|"supplies surface"| node_surface_compare

click node_image_command "https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/makeimage.sh"
click node_build_command "https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/build.sh"
click node_automation "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/.github/workflows"
click node_release "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/.github/workflows"
click node_variants "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/variants"
click node_addins "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/addins"
click node_packages "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/scripts.d"
click node_base_image "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/images/base"
click node_target_images "https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/images"
click node_surface_probe "https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/surface.c"
click node_surface_compare "https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/compare_surface.py"
click node_gpl_scan "https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/gpl_scan.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_image_command,node_build_command,node_artifact,node_automation,node_release toneBlue
class node_variants,node_addins,node_packages toneAmber
class node_base_image,node_target_images toneMint
class node_surface_probe,node_surface_compare,node_gpl_scan toneRose
class node_user toneIndigo
```

## Components

### Build workflow

- [Image builder](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/makeimage.sh): `makeimage.sh`
- [FFmpeg builder](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/build.sh): `build.sh`
- **ZIP artifact**
- [Scheduled builds](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/.github/workflows): `.github/workflows`
- [Automated releases](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/.github/workflows): `.github/workflows`

### Build configuration

- [Build variants](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/variants): `variants`
- [Build addins](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/addins): `addins`
- [Dependency recipes](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/scripts.d): `scripts.d`

### Platform toolchains

- [Base image](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/images/base): `images/base`
- [Target toolchains](https://github.com/jens-duttke/oku3d-ffmpeg/tree/oku3d/images): `images`

### Oku3D checks

- [Surface probe](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/surface.c): `oku3d/surface.c`
- [Surface comparison](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/compare_surface.py): `oku3d/compare_surface.py`
- [GPL scanner](https://github.com/jens-duttke/oku3d-ffmpeg/blob/oku3d/oku3d/gpl_scan.py): `oku3d/gpl_scan.py`

### Other components

- **Builder**

## Connections

- Builder → Image builder: selects target (evidence: `README.md`)
- Builder → FFmpeg builder: selects variant (evidence: `README.md`)
- Image builder → FFmpeg builder: prepares image (evidence: `README.md`)
- FFmpeg builder → ZIP artifact: produces ZIP (evidence: `README.md`)
- FFmpeg builder → Build variants: uses variant (evidence: `README.md`)
- FFmpeg builder → Build addins: accepts addins (evidence: `README.md`)
- FFmpeg builder → Dependency recipes: builds packages (evidence: `README.md`)
- Image builder → Base image: builds image
- Image builder → Target toolchains: selects toolchain
- Scheduled builds → FFmpeg builder: runs builds (evidence: `README.md`)
- Scheduled builds → Automated releases: releases on success (evidence: `README.md`)
- Surface probe → Surface comparison: supplies surface (evidence: `oku3d/compare_surface.py`)
