# abraham-ny/file-studio architecture

> Architecture diagram of the GitHub repository abraham-ny/file-studio, 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/abraham-ny/file-studio
- Repository: https://github.com/abraham-ny/file-studio

## Overview

File Studio is a JavaFX desktop file-management application. Users choose or drop a folder at startup, then open tools from the main interface to rename, organize, find duplicates, archive or extract files, and inspect disk or directory information. Settings and folder history support that workflow; the Metro interface adds another presentation mode. The README also advertises media upscaling, disk utilities, and update notifications. Those latter capabilities are represented at their documented source area where implementation wiring is not established by the sampled excerpts.

Main entry points: [`src/filestudio/MetroPanelController.java`](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/MetroPanelController.java) (Metro interface), [`src/filestudio/FXMLDocumentController.java`](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/FXMLDocumentController.java) (Main interface), [`src/filestudio/StartupDialogController.java`](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/StartupDialogController.java) (Startup dialog), [`src/filestudio/modules/DuplicateFinderController.java`](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/DuplicateFinderController.java) (Duplicate finder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application flow"]
  node_startup["Startup dialog"]
  node_classic["Main interface"]
  node_metro["Metro interface"]
end

subgraph group_files["File operations"]
  node_renamer["Bulk renamer"]
  node_organizer["Folder organizer"]
  node_organizer_logic["Organization logic<br/>[Organizer.java]"]
  node_duplicates["Duplicate finder"]
  node_finder["Duplicate search<br/>[Finder.java]"]
  node_archiver["Archive creation"]
  node_extractor["Archive extraction"]
  node_extract_ui["Extraction interface"]
  node_media["Media upscaling"]
end

subgraph group_inspection["Disk and directory tools"]
  node_disk["Disk information<br/>[DiskInfo.java]"]
  node_snapshot["Directory snapshots"]
  node_tree_fs["Tree filesystem"]
  node_repo["Repository finder"]
  node_disk_util["Disk utilities"]
end

subgraph group_preferences["Settings and history"]
  node_settings_ui["Preferences UI"]
  node_settings["User settings<br/>[UserSettings.java]"]
  node_history["Folder history<br/>[JsonHandler.java]"]
  node_lists["Folder lists"]
end

node_user(("Desktop user"))
node_filesystem["Local files and folders"]

node_user -->|"chooses folder"| node_startup
node_startup -->|"loads and saves"| node_history
node_startup -->|"opens interface"| node_metro
node_user -->|"opens application"| node_classic
node_classic -->|"loads disk info"| node_disk
node_classic -->|"archives files"| node_archiver
node_classic -->|"creates archives"| node_extractor
node_metro -->|"opens tool"| node_renamer
node_metro -->|"opens tool"| node_organizer
node_metro -->|"opens tool"| node_duplicates
node_metro -->|"opens tool"| node_snapshot
node_metro -->|"opens tool"| node_repo
node_organizer -->|"filters and moves"| node_organizer_logic
node_duplicates -->|"searches files"| node_finder
node_extract_ui -->|"extracts archive"| node_extractor
node_snapshot -->|"builds directory tree"| node_tree_fs
node_settings_ui -->|"reads and saves"| node_settings
node_metro -->|"opens preferences"| node_settings_ui
node_metro -->|"opens folder lists"| node_lists
node_lists -->|"persists JSON lists"| node_filesystem
node_history -->|"persists history"| node_filesystem
node_renamer -->|"renames files"| node_filesystem
node_organizer_logic -->|"moves files"| node_filesystem
node_duplicates -->|"deletes duplicates"| node_filesystem
node_archiver -->|"writes archives"| node_filesystem
node_extractor -->|"extracts files"| node_filesystem
node_snapshot -->|"reads and writes snapshot"| node_filesystem
node_disk -->|"reads disk space"| node_filesystem

click node_startup "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/StartupDialogController.java"
click node_classic "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/FXMLDocumentController.java"
click node_metro "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/MetroPanelController.java"
click node_renamer "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/BulkRenamerController.java"
click node_organizer "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/OrganizerController.java"
click node_organizer_logic "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/Organizer.java"
click node_duplicates "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/DuplicateFinderController.java"
click node_finder "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/Finder.java"
click node_archiver "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/ArchiverController.java"
click node_extractor "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/ArchiveExtractor.java"
click node_extract_ui "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/UnarchiveController.java"
click node_disk "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/DiskInfo.java"
click node_snapshot "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/DirTreesController.java"
click node_tree_fs "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/TreeFileSystem.java"
click node_repo "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/RepoFinderController.java"
click node_media "https://github.com/abraham-ny/file-studio/tree/dev/src/filestudio"
click node_disk_util "https://github.com/abraham-ny/file-studio/tree/dev/src/filestudio"
click node_settings_ui "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/SettingsUIController.java"
click node_settings "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/UserSettings.java"
click node_history "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/JsonHandler.java"
click node_lists "https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/AddListController.java"

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_startup,node_classic,node_metro,node_user toneBlue
class node_renamer,node_organizer,node_organizer_logic,node_duplicates,node_finder,node_archiver,node_extractor,node_extract_ui,node_media toneAmber
class node_disk,node_snapshot,node_tree_fs,node_repo,node_disk_util toneMint
class node_settings_ui,node_settings,node_history,node_lists toneRose
class node_filesystem toneIndigo
```

## Components

### Application flow

- [Startup dialog](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/StartupDialogController.java): `src/filestudio/StartupDialogController.java`
- [Main interface](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/FXMLDocumentController.java): `src/filestudio/FXMLDocumentController.java`
- [Metro interface](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/MetroPanelController.java): `src/filestudio/MetroPanelController.java`

### File operations

- [Bulk renamer](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/BulkRenamerController.java): `src/filestudio/BulkRenamerController.java`
- [Folder organizer](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/OrganizerController.java): `src/filestudio/modules/OrganizerController.java`
- [Organization logic](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/Organizer.java): `src/filestudio/Organizer.java`
- [Duplicate finder](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/DuplicateFinderController.java): `src/filestudio/modules/DuplicateFinderController.java`
- [Duplicate search](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/Finder.java): `src/filestudio/Finder.java`
- [Archive creation](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/ArchiverController.java): `src/filestudio/ArchiverController.java`
- [Archive extraction](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/ArchiveExtractor.java): `src/filestudio/ArchiveExtractor.java`
- [Extraction interface](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/UnarchiveController.java): `src/filestudio/modules/UnarchiveController.java`
- [Media upscaling](https://github.com/abraham-ny/file-studio/tree/dev/src/filestudio): `src/filestudio`

### Disk and directory tools

- [Disk information](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/DiskInfo.java): `src/filestudio/DiskInfo.java`
- [Directory snapshots](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/DirTreesController.java): `src/filestudio/modules/DirTreesController.java`
- [Tree filesystem](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/TreeFileSystem.java): `src/filestudio/modules/TreeFileSystem.java`
- [Repository finder](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/RepoFinderController.java): `src/filestudio/modules/RepoFinderController.java`
- [Disk utilities](https://github.com/abraham-ny/file-studio/tree/dev/src/filestudio): `src/filestudio`

### Settings and history

- [Preferences UI](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/SettingsUIController.java): `src/filestudio/SettingsUIController.java`
- [User settings](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/UserSettings.java): `src/filestudio/UserSettings.java`
- [Folder history](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/JsonHandler.java): `src/filestudio/JsonHandler.java`
- [Folder lists](https://github.com/abraham-ny/file-studio/blob/dev/src/filestudio/modules/AddListController.java): `src/filestudio/modules/AddListController.java`

### Other components

- **Desktop user**
- **Local files and folders**

## Connections

- Desktop user → Startup dialog: chooses folder
- Startup dialog → Folder history: loads and saves
- Startup dialog → Metro interface: opens interface
- Desktop user → Main interface: opens application
- Main interface → Disk information: loads disk info
- Main interface → Archive creation: archives files
- Main interface → Archive extraction: creates archives
- Metro interface → Bulk renamer: opens tool
- Metro interface → Folder organizer: opens tool
- Metro interface → Duplicate finder: opens tool
- Metro interface → Directory snapshots: opens tool
- Metro interface → Repository finder: opens tool
- Folder organizer → Organization logic: filters and moves
- Duplicate finder → Duplicate search: searches files
- Extraction interface → Archive extraction: extracts archive
- Directory snapshots → Tree filesystem: builds directory tree
- Preferences UI → User settings: reads and saves
- Metro interface → Preferences UI: opens preferences
- Metro interface → Folder lists: opens folder lists
- Folder lists → Local files and folders: persists JSON lists
- Folder history → Local files and folders: persists history
- Bulk renamer → Local files and folders: renames files
- Organization logic → Local files and folders: moves files
- Duplicate finder → Local files and folders: deletes duplicates
- Archive creation → Local files and folders: writes archives
- Archive extraction → Local files and folders: extracts files
- Directory snapshots → Local files and folders: reads and writes snapshot
- Disk information → Local files and folders: reads disk space
