# mrkev312/justdanceeditor architecture

> Architecture diagram of the GitHub repository mrkev312/justdanceeditor, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mrkev312/justdanceeditor
- Repository: https://github.com/mrkev312/justdanceeditor

## Overview

Just Dance Editor is a desktop and CLI tool for converting song packages across JDI, UbiArt, JDNext PC, and JD2023+ Unity formats, plus a JDI timeline editor. The main workflow is to provide a source, select a target and options, convert through a format-specific path, and write the requested output layout. The graph also preserves the editor’s timeline workflow and CLI media/IPK utilities. README statements support the broad conversion links; unsampled format implementations are represented by their existing directories, and their internal calls are not inferred.

Main entry points: [`JustDanceEditor.Conversion.Abstractions/IConverterPlugin.cs`](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Conversion.Abstractions/IConverterPlugin.cs) (Conversion Contracts), [`JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs`](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs) (Timeline Editing), [`JustDanceEditor.Formats.JDI/IntermediateSongPackage.cs`](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.JDI/IntermediateSongPackage.cs) (JDI Package), [`JustDanceEditor.Cli/CliApp.cs`](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/CliApp.cs) (CLI Converter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["Applications"]
  node_gui["Guided Converter<br/>[Program.cs]"]
  node_cli["CLI Converter<br/>[CliApp.cs]"]
  node_cli_utils["Media and IPK"]
  node_editor["Timeline Editor<br/>[Program.cs]"]
end

subgraph group_conversion["Conversion"]
  node_target_select["Target Selection"]
  node_plugin_loader["Plugin Loading"]
  node_conversion_contracts["Conversion Contracts"]
  node_cli_runner["Conversion Runner"]
end

subgraph group_formats["Format Support"]
  node_jdi["JDI Package"]
  node_jdi_serialization["JDI Serialization"]
  node_ubi_import["UbiArt Import<br/>[Import]"]
  node_ubi_export["UbiArt Export"]
  node_jdnext["JDNext PC"]
  node_unity["Unity Layouts"]
end

subgraph group_editing["JDI Editing"]
  node_editor_timeline["Timeline Editing"]
  node_clip_models["Clip Models<br/>[ClipViewModel.cs]"]
  node_drag_interaction["Clip Interaction<br/>[ClipDragHandler.cs]"]
  node_recording_tools["Recording Analysis"]
  node_editor_playback["Audio Playback"]
end

node_user(("User"))

node_user -->|"starts conversion"| node_gui
node_user -->|"runs commands"| node_cli
node_user -->|"edits songs"| node_editor
node_gui -.->|"selects target"| node_target_select
node_cli -.->|"runs conversion"| node_cli_runner
node_cli -->|"processes dropped paths"| node_cli_utils
node_target_select -.->|"resolves converter"| node_plugin_loader
node_plugin_loader -.->|"loads plugins"| node_conversion_contracts
node_cli_runner -.->|"invokes conversion"| node_conversion_contracts
node_conversion_contracts -.->|"converts packages"| node_jdi
node_jdi -.->|"serializes package"| node_jdi_serialization
node_conversion_contracts -->|"imports UbiArt"| node_ubi_import
node_conversion_contracts -->|"exports UbiArt"| node_ubi_export
node_conversion_contracts -->|"converts JDNext"| node_jdnext
node_conversion_contracts -->|"converts Unity"| node_unity
node_ubi_import -.->|"imports to JDI"| node_jdi
node_jdi -.->|"exports from JDI"| node_ubi_export
node_editor -.->|"opens timeline"| node_editor_timeline
node_editor_timeline -.->|"edits package data"| node_jdi
node_editor_timeline -.->|"builds clip models"| node_clip_models
node_drag_interaction -->|"updates clip positions"| node_clip_models
node_editor_timeline -.->|"supports recording analysis"| node_recording_tools
node_editor_timeline -.->|"controls playback"| node_editor_playback

click node_gui "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.GUI/Program.cs"
click node_cli "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/CliApp.cs"
click node_cli_utils "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/DroppedPathProcessor.cs"
click node_editor "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Program.cs"
click node_target_select "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.AppHost/ConversionTargetSelector.cs"
click node_plugin_loader "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.AppHost/ConverterPluginLoader.cs"
click node_conversion_contracts "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Conversion.Abstractions/IConverterPlugin.cs"
click node_cli_runner "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/CliConversionRunner.cs"
click node_jdi "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.JDI/IntermediateSongPackage.cs"
click node_jdi_serialization "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.JDI/Serialization/IntermediatePackageSerializer.cs"
click node_ubi_import "https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.UbiArt/Import"
click node_ubi_export "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.UbiArt/Export/UbiArtEngineContentWriter.cs"
click node_jdnext "https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.JDNextPC"
click node_unity "https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.Unity"
click node_editor_timeline "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs"
click node_clip_models "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Timeline/ClipViewModel.cs"
click node_drag_interaction "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Views/Timeline/Interactions/ClipDragHandler.cs"
click node_recording_tools "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Tools/RecordingAttemptController.cs"
click node_editor_playback "https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Services/FfplayPcmPlaybackEngine.cs"

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_gui,node_cli,node_cli_utils,node_editor,node_user toneBlue
class node_target_select,node_plugin_loader,node_conversion_contracts,node_cli_runner toneAmber
class node_jdi,node_jdi_serialization,node_ubi_import,node_ubi_export,node_jdnext,node_unity toneMint
class node_editor_timeline,node_clip_models,node_drag_interaction,node_recording_tools,node_editor_playback toneRose
```

## Components

### Applications

- [Guided Converter](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.GUI/Program.cs): `JustDanceEditor.GUI/Program.cs`
- [CLI Converter](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/CliApp.cs): `JustDanceEditor.Cli/CliApp.cs`
- [Media and IPK](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/DroppedPathProcessor.cs): `JustDanceEditor.Cli/DroppedPathProcessor.cs`
- [Timeline Editor](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Program.cs): `JustDanceEditor.Editor/Program.cs`

### Conversion

- [Target Selection](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.AppHost/ConversionTargetSelector.cs): `JustDanceEditor.AppHost/ConversionTargetSelector.cs`
- [Plugin Loading](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.AppHost/ConverterPluginLoader.cs): `JustDanceEditor.AppHost/ConverterPluginLoader.cs`
- [Conversion Contracts](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Conversion.Abstractions/IConverterPlugin.cs): `JustDanceEditor.Conversion.Abstractions/IConverterPlugin.cs`
- [Conversion Runner](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Cli/CliConversionRunner.cs): `JustDanceEditor.Cli/CliConversionRunner.cs`

### Format Support

- [JDI Package](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.JDI/IntermediateSongPackage.cs): `JustDanceEditor.Formats.JDI/IntermediateSongPackage.cs`
- [JDI Serialization](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.JDI/Serialization/IntermediatePackageSerializer.cs): `JustDanceEditor.Formats.JDI/Serialization/IntermediatePackageSerializer.cs`
- [UbiArt Import](https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.UbiArt/Import): `JustDanceEditor.Formats.UbiArt/Import`
- [UbiArt Export](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Formats.UbiArt/Export/UbiArtEngineContentWriter.cs): `JustDanceEditor.Formats.UbiArt/Export/UbiArtEngineContentWriter.cs`
- [JDNext PC](https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.JDNextPC): `JustDanceEditor.Formats.JDNextPC`
- [Unity Layouts](https://github.com/mrkev312/justdanceeditor/tree/release/JustDanceEditor.Formats.Unity): `JustDanceEditor.Formats.Unity`

### JDI Editing

- [Timeline Editing](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs): `JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs`
- [Clip Models](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Timeline/ClipViewModel.cs): `JustDanceEditor.Editor/ViewModels/Timeline/ClipViewModel.cs`
- [Clip Interaction](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Views/Timeline/Interactions/ClipDragHandler.cs): `JustDanceEditor.Editor/Views/Timeline/Interactions/ClipDragHandler.cs`
- [Recording Analysis](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/ViewModels/Tools/RecordingAttemptController.cs): `JustDanceEditor.Editor/ViewModels/Tools/RecordingAttemptController.cs`
- [Audio Playback](https://github.com/mrkev312/justdanceeditor/blob/release/JustDanceEditor.Editor/Services/FfplayPcmPlaybackEngine.cs): `JustDanceEditor.Editor/Services/FfplayPcmPlaybackEngine.cs`

### Other components

- **User**

## Connections

- User → Guided Converter: starts conversion
- User → CLI Converter: runs commands
- User → Timeline Editor: edits songs
- Guided Converter → Target Selection: selects target
- CLI Converter → Conversion Runner: runs conversion
- CLI Converter → Media and IPK: processes dropped paths
- Target Selection → Plugin Loading: resolves converter
- Plugin Loading → Conversion Contracts: loads plugins
- Conversion Runner → Conversion Contracts: invokes conversion
- Conversion Contracts → JDI Package: converts packages
- JDI Package → JDI Serialization: serializes package
- Conversion Contracts → UbiArt Import: imports UbiArt
- Conversion Contracts → UbiArt Export: exports UbiArt
- Conversion Contracts → JDNext PC: converts JDNext
- Conversion Contracts → Unity Layouts: converts Unity
- UbiArt Import → JDI Package: imports to JDI
- JDI Package → UbiArt Export: exports from JDI (evidence: `JustDanceEditor.Formats.UbiArt/Export/UbiArtEngineContentWriter.cs`)
- Timeline Editor → Timeline Editing: opens timeline
- Timeline Editing → JDI Package: edits package data (evidence: `JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs`)
- Timeline Editing → Clip Models: builds clip models (evidence: `JustDanceEditor.Editor/ViewModels/Timeline/TimelineEditorViewModel.cs`)
- Clip Interaction → Clip Models: updates clip positions (evidence: `JustDanceEditor.Editor/Views/Timeline/Interactions/ClipDragHandler.cs`)
- Timeline Editing → Recording Analysis: supports recording analysis (evidence: `JustDanceEditor.Editor/ViewModels/Tools/RecordingAttemptController.cs`)
- Timeline Editing → Audio Playback: controls playback
