Skip to content

Desktop UI Architecture

tonythethompson edited this page Jul 28, 2026 · 3 revisions

Desktop UI Architecture

Section: Desktop App · Mixing-and-Export · Home · Timeline-and-Waveform-Editor

The desktop UI is a cross-platform Avalonia / .NET 10 shell for the Trackdub workstation: media ingest, transcript editing, translation review, voice synthesis, and export. It depends on Application, Composition, Domain, Licensing, Media.Playback, and Sdk, and stays isolated from direct inference and persistence implementation.

The UI uses ReactiveUI for live async flows (pipeline progress, playback) and CommunityToolkit.Mvvm for ordinary UI state and commands.

Core architectural framework

MVVM with strict state ownership rules. Trackdub.App.Avalonia multi-targets net10.0 (Linux/macOS) and net10.0-windows10.0.19041.0 (Windows). It must not contain pipeline orchestration, inference code, or SQL.

graph TD
    App[Trackdub.App.Avalonia] --> AppLayer[Trackdub.Application]
    App --> Comp[Trackdub.Composition]
    App --> Domain[Trackdub.Domain]
    App --> Playback[Trackdub.Media.Playback]
    App --> Sdk[Trackdub.Sdk]
    App --> Licensing[Trackdub.Licensing]

    subgraph UI_Layer_Responsibilities
        Views[Views / .axaml]
        VMs[ViewModels]
        Conv[Converters]
    end
Loading

Reactive vs. standard UI state

Toolkit Usage Examples
ReactiveUI Live/reactive data flows and async events. Pipeline stage status, operation progress, playback state.
CommunityToolkit.Mvvm Standard UI state, toggles, and simple commands. Shell toggles, settings fields, form inputs.

Do not mix patterns on the same property.

Primary components and navigation

Shell chrome hosts transport, timeline, side panels, and stage controls. Pipeline stages are user-triggered (per-stage Run and global run). Media load alone does not start the speech pipeline.

Waveform right-click is for diarization edit (split/merge/delete). Segment retranscribe/translate/redub lives on the segment context menu or expanded row.

Related

Clone this wiki locally