# rizkyfy/esp32-oled-animations architecture

> Architecture diagram of the GitHub repository rizkyfy/esp32-oled-animations, 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/rizkyfy/esp32-oled-animations
- Repository: https://github.com/rizkyfy/esp32-oled-animations

## Overview

This is a small video-to-flipbook system: a computer-side converter turns a video into monochrome frame arrays, which the ESP32 firmware plays on an I2C OLED. The README also describes aspect-ratio handling, high-speed I2C playback, and portable battery use. Firmware and hardware details are represented from README descriptions; their source files were not excerpted, so the graph does not infer internal calls beyond documented relationships.

Main entry points: [`convert.py`](https://github.com/rizkyfy/esp32-oled-animations/blob/main/convert.py) (Frame converter), [`frames.h`](https://github.com/rizkyfy/esp32-oled-animations/blob/main/frames.h) (Frame arrays), [`oled.ino`](https://github.com/rizkyfy/esp32-oled-animations/blob/main/oled.ino) (OLED player)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_conversion["Video conversion"]
  node_converter["Frame converter<br/>[convert.py]"]
  node_frames["Frame arrays<br/>[frames.h]"]
end

subgraph group_playback["Device playback"]
  node_firmware["OLED player<br/>[oled.ino]"]
  node_esp32{{"ESP32-C3"}}
end

subgraph group_hardware["Display hardware"]
  node_oled["SSD1306 OLED"]
end

node_video["Source video"]

node_video -->|"reads video"| node_converter
node_converter -->|"generates arrays"| node_frames
node_frames -->|"supplies frames"| node_firmware
node_firmware -->|"renders frames"| node_oled
node_esp32 -->|"drives over I2C"| node_oled

click node_converter "https://github.com/rizkyfy/esp32-oled-animations/blob/main/convert.py"
click node_frames "https://github.com/rizkyfy/esp32-oled-animations/blob/main/frames.h"
click node_firmware "https://github.com/rizkyfy/esp32-oled-animations/blob/main/oled.ino"

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_converter,node_frames toneBlue
class node_firmware,node_esp32 toneAmber
class node_oled toneMint
class node_video toneIndigo
```

## Components

### Video conversion

- [Frame converter](https://github.com/rizkyfy/esp32-oled-animations/blob/main/convert.py): `convert.py`
- [Frame arrays](https://github.com/rizkyfy/esp32-oled-animations/blob/main/frames.h): `frames.h`

### Device playback

- [OLED player](https://github.com/rizkyfy/esp32-oled-animations/blob/main/oled.ino): `oled.ino`
- **ESP32-C3**

### Display hardware

- **SSD1306 OLED**

### Other components

- **Source video**

## Connections

- Source video → Frame converter: reads video (evidence: `README.md`)
- Frame converter → Frame arrays: generates arrays (evidence: `convert.py`)
- Frame arrays → OLED player: supplies frames (evidence: `README.md`)
- OLED player → SSD1306 OLED: renders frames (evidence: `README.md`)
- ESP32-C3 → SSD1306 OLED: drives over I2C (evidence: `README.md`)
