How jonathanlotan/swivel works
Swivel is an offline macOS file-conversion and file-action app, with a command-line entry point sharing its conversion engine. The main gesture flow is drag files, choose a ring and target, then run a queued conversion or file action; the app also offers menu-bar, Shortcuts, Finder Services, and Quick Action entry points. Conversion work is staged beside the original and published without overwriting it. The README documents crop, metadata, sharing, archive, media, and document capabilities; several are represented at their source directories because their implementations were not sampled.
Main entry points: JobRunner.swift Job runner · ConverterRegistry.swift Converter registry · ShiftDragController.swift Drag wheel · JobQueue.swift Job queue
Components 23
App experience
- Drag wheel
Converter/App/ShiftDrag/ShiftDragController.swift - Wheel model
Converter/App/ShiftDrag/RadialMenuModel.swift - Drag watcher
Converter/App/ShiftDrag/DragWatcher.swift - Job queue
Converter/App/JobQueue.swift - File actions
Converter/App/Actions/FileActions.swift - Menu bar
Converter/App/StatusItemController.swift - Settings
Converter/App/Settings/AppSettings.swift - Crop editor
Converter/App/Crop/CropEditorView.swift - Metadata view
Converter/App/Info/MetadataWindow.swift
Other entry points
- Shortcuts action
Converter/App/Intents/ConvertFileIntent.swift - Finder Services
Converter/App/ServicesProvider.swift - Quick Action
Converter/QuickAction/ActionRequestHandler.swift - CLI
Packages/ConverterCore/Sources/swivel/CLI.swift
Conversion engine
- Converter registry
Packages/ConverterCore/Sources/ConverterCore/ConverterRegistry.swift - Input file
Packages/ConverterCore/Sources/ConverterCore/InputFile.swift - Conversion options
Packages/ConverterCore/Sources/ConverterCore/ConversionOptions.swift - Job runner
Packages/ConverterCore/Sources/ConverterCore/JobRunner.swift
Conversion domains
- Image converters
Packages/ConverterCore/Sources/ConverterCore/Image - Audio/video converters
Packages/ConverterCore/Sources/ConverterCore/Media - Document converters
Packages/ConverterCore/Sources/ConverterCore/Documents - Archive converters
Packages/ConverterCore/Sources/ConverterCore/Archives - File metadata
Packages/ConverterCore/Sources/ConverterCore/Metadata/FileMetadata.swift
Other components
- Mac user
Connections 29
- Mac user → Drag wheel: drags files
README.md - Drag wheel → Drag watcher: observes drag
Converter/App/ShiftDrag/ShiftDragController.swift - Drag wheel → Wheel model: builds menu
Converter/App/ShiftDrag/ShiftDragController.swift - Drag wheel → Job queue: queues conversion
Converter/App/ShiftDrag/ShiftDragController.swift - Drag wheel → File actions: performs action
Converter/App/ShiftDrag/ShiftDragController.swift - Wheel model → Converter registry: queries formats
Converter/App/ShiftDrag/RadialMenuModel.swift - Wheel model → Input file: creates inputs
Converter/App/ShiftDrag/RadialMenuModel.swift - Job queue → Job runner: runs jobs
Converter/App/JobQueue.swift - Job queue → Conversion options: passes options
Converter/App/JobQueue.swift - Menu bar → Job queue: queues conversions
Converter/App/StatusItemController.swift - Menu bar → File actions: offers actions
Converter/App/StatusItemController.swift - Settings → Conversion options: stores settings
Converter/App/Settings/AppSettings.swift - Shortcuts action → Converter registry: finds converters
Converter/App/Intents/ConvertFileIntent.swift - Shortcuts action → Job runner: runs conversion
Converter/App/Intents/ConvertFileIntent.swift - Finder Services → Converter registry: offers conversions
- Quick Action → Finder Services: uses support
Converter/QuickAction/ActionRequestHandler.swift - CLI → Converter registry: selects converter
Packages/ConverterCore/Sources/swivel/CLI.swift - CLI → Job runner: runs conversion
Packages/ConverterCore/Sources/swivel/CLI.swift - Converter registry → Image converters: registers converters
Packages/ConverterCore/Sources/ConverterCore/ConverterRegistry.swift - Converter registry → Audio/video converters: registers converters
Packages/ConverterCore/Sources/ConverterCore/ConverterRegistry.swift - Converter registry → Document converters: registers converters
Packages/ConverterCore/Sources/ConverterCore/ConverterRegistry.swift - Converter registry → Archive converters: registers converters
Packages/ConverterCore/Sources/ConverterCore/ConverterRegistry.swift - Job runner → Input file: reads input
Packages/ConverterCore/Sources/ConverterCore/JobRunner.swift - Job runner → Image converters: invokes converter
- Job runner → Audio/video converters: invokes converter
- Job runner → Document converters: invokes converter
- Job runner → Archive converters: invokes converter
- Crop editor → Job queue: edits queued crop
Converter/App/Crop/CropEditorView.swift - Metadata view → File metadata: displays metadata