# infoprojectstone/compressor architecture

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

## Overview

Compressor is a native macOS app for locally compressing images, videos, and PDFs. Users add files through the app or Finder, choose quality or target-size options, process a queue, and save or reveal results without replacing originals. The sampled source shows the UI, queue orchestration, image and PDF engines, and settings; the README documents Finder intake and the video capability, but the video implementation is only partially sampled.

Main entry points: [`Sources/CompresorUnificado/CompresorApp.swift`](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift) (Queue and jobs), [`Sources/CompresorUnificado/ContentView.swift`](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/ContentView.swift) (Main window), [`Sources/CompresorUnificado/SafeImageCompressor.swift`](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafeImageCompressor.swift) (Image engine), [`Sources/CompresorUnificado/SafePDFCompressor.swift`](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafePDFCompressor.swift) (PDF engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["App interface"]
  node_app["App lifecycle<br/>[CompresorApp.swift]"]
  node_view["Main window<br/>[ContentView.swift]"]
end

subgraph group_workflow["Compression workflow"]
  node_model["Queue and jobs<br/>[CompresorApp.swift]"]
  node_control["Pause control"]
  node_dispatch["Compression dispatch<br/>[CompresorApp.swift]"]
  node_output["Output and results<br/>[CompresorApp.swift]"]
end

subgraph group_engines["Format engines"]
  node_images["Image engine"]
  node_video["Video engine<br/>[CompresorApp.swift]"]
  node_pdf["PDF engine"]
end

subgraph group_preferences["Preferences and Finder"]
  node_settings["Settings UI<br/>[Localization.swift]"]
  node_quickaction["Quick Action"]
end

node_user(("Mac user"))
node_finder(("Finder"))
node_filesystem[("Local files")]

node_user -->|"adds files"| node_view
node_finder -.->|"invokes action"| node_quickaction
node_quickaction -.->|"opens with files"| node_app
node_app -->|"presents"| node_view
node_view -->|"updates queue"| node_model
node_view -->|"opens preferences"| node_settings
node_model -->|"processes jobs"| node_dispatch
node_dispatch -->|"compresses images"| node_images
node_dispatch -->|"compresses video"| node_video
node_dispatch -->|"compresses PDFs"| node_pdf
node_model -->|"pauses work"| node_control
node_model -->|"saves and reports"| node_output
node_images -->|"reads source"| node_filesystem
node_pdf -->|"reads source"| node_filesystem
node_output -->|"writes results"| node_filesystem

click node_app "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift"
click node_view "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/ContentView.swift"
click node_settings "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/Localization.swift"
click node_quickaction "https://github.com/infoprojectstone/compressor/tree/main/Resources/QuickAction/Comprimir%20con%20Compresor.workflow"
click node_model "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift"
click node_control "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompressionControl.swift"
click node_dispatch "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift"
click node_images "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafeImageCompressor.swift"
click node_video "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift"
click node_pdf "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafePDFCompressor.swift"
click node_output "https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift"

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_app,node_view,node_user toneBlue
class node_model,node_control,node_dispatch,node_output,node_filesystem toneAmber
class node_images,node_video,node_pdf toneMint
class node_settings,node_quickaction toneRose
class node_finder toneIndigo
```

## Components

### App interface

- [App lifecycle](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift): `Sources/CompresorUnificado/CompresorApp.swift`
- [Main window](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/ContentView.swift): `Sources/CompresorUnificado/ContentView.swift`

### Compression workflow

- [Queue and jobs](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift): `Sources/CompresorUnificado/CompresorApp.swift`
- [Pause control](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompressionControl.swift): `Sources/CompresorUnificado/CompressionControl.swift`
- [Compression dispatch](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift): `Sources/CompresorUnificado/CompresorApp.swift`
- [Output and results](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift): `Sources/CompresorUnificado/CompresorApp.swift`

### Format engines

- [Image engine](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafeImageCompressor.swift): `Sources/CompresorUnificado/SafeImageCompressor.swift`
- [Video engine](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/CompresorApp.swift): `Sources/CompresorUnificado/CompresorApp.swift`
- [PDF engine](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/SafePDFCompressor.swift): `Sources/CompresorUnificado/SafePDFCompressor.swift`

### Preferences and Finder

- [Settings UI](https://github.com/infoprojectstone/compressor/blob/main/Sources/CompresorUnificado/Localization.swift): `Sources/CompresorUnificado/Localization.swift`
- [Quick Action](https://github.com/infoprojectstone/compressor/tree/main/Resources/QuickAction/Comprimir%20con%20Compresor.workflow): `Resources/QuickAction/Comprimir con Compresor.workflow`

### Other components

- **Mac user**
- **Finder**
- **Local files**

## Connections

- Mac user → Main window: adds files
- Finder → Quick Action: invokes action
- Quick Action → App lifecycle: opens with files
- App lifecycle → Main window: presents
- Main window → Queue and jobs: updates queue
- Main window → Settings UI: opens preferences
- Queue and jobs → Compression dispatch: processes jobs
- Compression dispatch → Image engine: compresses images
- Compression dispatch → Video engine: compresses video
- Compression dispatch → PDF engine: compresses PDFs
- Queue and jobs → Pause control: pauses work
- Queue and jobs → Output and results: saves and reports
- Image engine → Local files: reads source
- PDF engine → Local files: reads source
- Output and results → Local files: writes results
