Skip to content

pantulis/KronosScreenRemoteSwift

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Kronos ScreenRemote — native macOS (SwiftUI)

A native macOS app for remotely viewing and controlling a Korg Kronos synthesizer over Ethernet. It streams the Kronos LCD in real time, forwards touch / button / wheel / keyboard input back to the instrument, and adds an FTP file manager, touch calibration, an audio VU meter, a performance monitor, and a MIDI piano.

This is a native SwiftUI/AppKit port of the PySide6 app KronosScreenRemotePy — no Python/Qt runtime required. It talks to the same companion daemon running on the Kronos hardware.

Kronos ScreenRemote — main window with the MIDI keyboard drawer

Features

  • Live screen streaming — 800×600 8-bit palette-indexed LCD over TCP, full-frame and PackBits change-only (dirty-rect) modes, rendered via CoreGraphics.
  • Selectable scaling quality — status-bar picker: CoreGraphics Nearest/Low/Medium/High (CPU), Core Image Lanczos/Bicubic (GPU), and EPX pixel-art 2× (CPU).
  • Touch injection — click / drag the LCD (with inverse-calibration mapping).
  • Control surface — mode buttons, number pad, data wheel, EXIT/ENTER, bank select.
  • Value slider — INC/DEC and a 0–127 slider mirroring the front-panel VALUE control.
  • Keyboard capture — forwards your Mac keystrokes to the Kronos (Linux keycode mapping), including numpad, modifiers, and shifted remaps.
  • Zoom loupe — magnifier over the LCD (Ctrl-scroll to change zoom).
  • Screenshots — save / quick-save / copy-to-clipboard / open folder.
  • Touch calibration — 3×3–5×5 warp-mesh editor with bias dots, undo/redo, persisted to cal_data.json.
  • FTP file manager — dual-pane browser (local ⇄ Kronos SD): list/upload/download/rename/ delete/mkdir.
  • Audio VU meter — real-time L/R metering via AVAudioEngine, with a device picker.
  • Performance monitor — SYSINFO dashboard: CPU graph, memory, storage, temperatures, fan.
  • MIDI keyboard — dockable 88-key piano drawer (⌘⌥K): send notes to the Kronos (MIDI OUT) and mirror notes played on the Kronos (MIDI IN, highlighted in green), with port pickers, channel/velocity controls, and a panic button.
  • Layout & window — Full / Focused presets, hide panels, window-size presets, aspect-locked (no letterbox), always-on-top.

Requirements

macOS 14+
Xcode 16+
Tooling XcodeGen (brew install xcodegen)
Network Ethernet to a Korg Kronos running the companion daemon (stream TCP 7373, control 7374, FTP 21)

Build & run

The .xcodeproj is generated from project.yml (and is git-ignored).

xcodegen generate
xcodebuild -project KronosScreenRemote.xcodeproj -scheme KronosScreenRemote \
  -configuration Debug -derivedDataPath ./DerivedData build
open "DerivedData/Build/Products/Debug/KronosScreenRemote.app"

Tests (offline unit tests always run; live hardware tests are opt-in via KRONOS_HOST):

xcodebuild -project KronosScreenRemote.xcodeproj -scheme KronosScreenRemote test
KRONOS_HOST=192.168.100.15 xcodebuild ... test   # also exercises real hardware

Settings are stored at ~/Library/Application Support/KronosScreenRemote/settings.json (JSON, schema-compatible with the Python app).

Architecture

Sources/
  App/       @main App, AppState (+Input/UI/Cal/Capture), menus, Telemetry, CalEditor,
             FrameInterpolation, Resources
  Protocol/  StreamClient, ControlClient, PackBits, KeyMap, KeyboardCapture, FTPClient
  Models/    AppSettings (Codable), CalMesh
  Store/     SettingsStore, CalStore
  Views/     FrameView/Renderer/Scalers, ControlSurface, ValueSlider, StatusBar, Settings,
             FileManager, Perf, VuMeter, Piano, MainView
  Audio/     AudioMeter (AVAudioEngine + CoreAudio)
  MIDI/      MIDIManager (CoreMIDI)
Resources/   button art, boot/mode refs, cal_data.json, app icon
Tests/       protocol, calibration, render, perf-parse, VU, piano, MIDI (+ live hardware)

Networking uses Network.framework (NWConnection). MIDI uses CoreMIDI (independent of the KSCR daemon). The LCD renders through an AppKit NSView.draw path so overlays (zoom loupe, calibration mesh) compose cleanly.

Credits

Port of the PySide6 KronosScreenRemote by Enigmahack. Requires the KronosScreenRemoteDaemon on the Kronos.

License

Licensed under the GNU General Public License v3.0 — the same license as the original Python app. See LICENSE.

About

Native macOS (SwiftUI/AppKit) client for the Korg Kronos — live LCD streaming, touch/keyboard/control-surface injection, FTP file manager, calibration, VU meter, perf monitor, and a MIDI piano. Port of the PySide6 KronosScreenRemote.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages