# farid023/light_compressor_v2 architecture

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

- Interactive diagram: https://gitdiagram.com/farid023/light_compressor_v2
- Repository: https://github.com/farid023/light_compressor_v2

## Overview

light_compressor_v2 is a Flutter video-compression and media-toolkit plugin backed by native Android and Apple implementations. The main workflow takes a Dart compression request through the platform bridge, configures native compression, and returns results and progress events. README capabilities include batching, codec fallback, target sizing, audio/video edits, thumbnails, media info, estimates, cancellation, and optional background execution. Sampled excerpts support the bridge and encoder relationships; unsampled feature wiring is represented at its source-file level without asserting internal call paths.

Main entry points: [`lib/src/light_compressor.dart`](https://github.com/farid023/light_compressor_v2/blob/master/lib/src/light_compressor.dart) (Compressor API), [`android/src/main/kotlin/com/gurfdev/light_compressor_v2/LightCompressorPlugin.kt`](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/LightCompressorPlugin.kt) (Android Plugin), [`android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/VideoCompressor.kt`](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/VideoCompressor.kt) (Compression Coordinator), [`ios/light_compressor_v2/Sources/light_compressor_v2/LightCompressor.swift`](https://github.com/farid023/light_compressor_v2/blob/master/ios/light_compressor_v2/Sources/light_compressor_v2/LightCompressor.swift) (Apple Media Engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_flutter["Flutter API"]
  node_api["Compressor API"]
  node_models["Options and Results"]
  node_events["Progress and Results"]
end

subgraph group_android["Android Runtime"]
  node_android_bridge["Android Plugin"]
  node_android_coord["Compression Coordinator<br/>[VideoCompressor.kt]"]
  node_android_engine["Codec Engine<br/>[Compressor.kt]"]
  node_android_service["Foreground Service"]
  node_cancel_receiver["Cancel Receiver"]
end

subgraph group_apple["Apple Runtime"]
  node_apple_bridge["Apple Plugin Bridge"]
  node_mac_bridge["macOS Plugin Bridge"]
  node_apple_engine["Apple Media Engine"]
end

subgraph group_media["Media Operations"]
  node_media_tools["Media Utilities"]
  node_android_media["Android Media APIs"]
  node_avfoundation["AVFoundation"]
  node_storage[("Device Media Storage")]
end

node_user(("Flutter App"))

node_user -->|"requests compression"| node_api
node_api -->|"uses options"| node_models
node_api -->|"dispatches platform call"| node_android_bridge
node_api -->|"dispatches platform call"| node_apple_bridge
node_api -->|"dispatches platform call"| node_mac_bridge
node_android_bridge -->|"starts compression"| node_android_coord
node_android_coord -->|"encodes video"| node_android_engine
node_android_engine -->|"uses codecs"| node_android_media
node_android_coord -->|"reads and saves media"| node_storage
node_android_bridge -.->|"starts background work"| node_android_service
node_android_service -->|"dispatches cancel action"| node_cancel_receiver
node_cancel_receiver -->|"cancels work"| node_android_coord
node_android_bridge -->|"sends progress and results"| node_events
node_apple_bridge -->|"starts compression"| node_apple_engine
node_mac_bridge -->|"starts compression"| node_apple_engine
node_apple_engine -->|"uses media APIs"| node_avfoundation
node_apple_engine -->|"reads and writes media"| node_storage
node_apple_bridge -->|"sends progress and results"| node_events
node_mac_bridge -->|"sends progress and results"| node_events
node_api -->|"requests media utilities"| node_media_tools

click node_api "https://github.com/farid023/light_compressor_v2/blob/master/lib/src/light_compressor.dart"
click node_models "https://github.com/farid023/light_compressor_v2/tree/master/lib/src"
click node_android_bridge "https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/LightCompressorPlugin.kt"
click node_android_coord "https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/VideoCompressor.kt"
click node_android_engine "https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/compressor/Compressor.kt"
click node_android_service "https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionForegroundService.kt"
click node_cancel_receiver "https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionCancelReceiver.kt"
click node_apple_bridge "https://github.com/farid023/light_compressor_v2/blob/master/ios/light_compressor_v2/Sources/light_compressor_v2/SwiftLightCompressorPlugin.swift"
click node_mac_bridge "https://github.com/farid023/light_compressor_v2/blob/master/macos/light_compressor_v2/Sources/light_compressor_v2/LightCompressorPlugin.swift"
click node_apple_engine "https://github.com/farid023/light_compressor_v2/blob/master/ios/light_compressor_v2/Sources/light_compressor_v2/LightCompressor.swift"
click node_media_tools "https://github.com/farid023/light_compressor_v2/tree/master/lib/src"
click node_events "https://github.com/farid023/light_compressor_v2/blob/master/lib/src/compression_progress.dart"

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_api,node_models,node_events toneBlue
class node_android_bridge,node_android_coord,node_android_engine,node_android_service,node_cancel_receiver toneAmber
class node_apple_bridge,node_mac_bridge,node_apple_engine toneMint
class node_media_tools,node_android_media,node_avfoundation,node_storage toneRose
class node_user toneIndigo
```

## Components

### Flutter API

- [Compressor API](https://github.com/farid023/light_compressor_v2/blob/master/lib/src/light_compressor.dart): `lib/src/light_compressor.dart`
- [Options and Results](https://github.com/farid023/light_compressor_v2/tree/master/lib/src): `lib/src`
- [Progress and Results](https://github.com/farid023/light_compressor_v2/blob/master/lib/src/compression_progress.dart): `lib/src/compression_progress.dart`

### Android Runtime

- [Android Plugin](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/LightCompressorPlugin.kt): `android/src/main/kotlin/com/gurfdev/light_compressor_v2/LightCompressorPlugin.kt`
- [Compression Coordinator](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/VideoCompressor.kt): `android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/VideoCompressor.kt`
- [Codec Engine](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/compressor/Compressor.kt): `android/src/main/kotlin/com/gurfdev/light_compressor_v2/lightcompressorlibrary/compressor/Compressor.kt`
- [Foreground Service](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionForegroundService.kt): `android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionForegroundService.kt`
- [Cancel Receiver](https://github.com/farid023/light_compressor_v2/blob/master/android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionCancelReceiver.kt): `android/src/main/kotlin/com/gurfdev/light_compressor_v2/CompressionCancelReceiver.kt`

### Apple Runtime

- [Apple Plugin Bridge](https://github.com/farid023/light_compressor_v2/blob/master/ios/light_compressor_v2/Sources/light_compressor_v2/SwiftLightCompressorPlugin.swift): `ios/light_compressor_v2/Sources/light_compressor_v2/SwiftLightCompressorPlugin.swift`
- [macOS Plugin Bridge](https://github.com/farid023/light_compressor_v2/blob/master/macos/light_compressor_v2/Sources/light_compressor_v2/LightCompressorPlugin.swift): `macos/light_compressor_v2/Sources/light_compressor_v2/LightCompressorPlugin.swift`
- [Apple Media Engine](https://github.com/farid023/light_compressor_v2/blob/master/ios/light_compressor_v2/Sources/light_compressor_v2/LightCompressor.swift): `ios/light_compressor_v2/Sources/light_compressor_v2/LightCompressor.swift`

### Media Operations

- [Media Utilities](https://github.com/farid023/light_compressor_v2/tree/master/lib/src): `lib/src`
- **Android Media APIs**
- **AVFoundation**
- **Device Media Storage**

### Other components

- **Flutter App**

## Connections

- Flutter App → Compressor API: requests compression
- Compressor API → Options and Results: uses options
- Compressor API → Android Plugin: dispatches platform call
- Compressor API → Apple Plugin Bridge: dispatches platform call
- Compressor API → macOS Plugin Bridge: dispatches platform call
- Android Plugin → Compression Coordinator: starts compression
- Compression Coordinator → Codec Engine: encodes video
- Codec Engine → Android Media APIs: uses codecs
- Compression Coordinator → Device Media Storage: reads and saves media
- Android Plugin → Foreground Service: starts background work
- Foreground Service → Cancel Receiver: dispatches cancel action
- Cancel Receiver → Compression Coordinator: cancels work
- Android Plugin → Progress and Results: sends progress and results
- Apple Plugin Bridge → Apple Media Engine: starts compression
- macOS Plugin Bridge → Apple Media Engine: starts compression
- Apple Media Engine → AVFoundation: uses media APIs
- Apple Media Engine → Device Media Storage: reads and writes media
- Apple Plugin Bridge → Progress and Results: sends progress and results
- macOS Plugin Bridge → Progress and Results: sends progress and results
- Compressor API → Media Utilities: requests media utilities
