The conversion path
Normalise first.
A source may be a folder, ZIP, 7Z, RAR, Nintendo U8 archive, FSGIMG, FSAR, Xbox STFS package, ISO9660/UDF image, PSARC, Neversoft PAK, or Harmonix ARK/HDR pair. UniversalArchiveExtractor routes formats to bounded parsers, and the scanner collects chart, audio, metadata, artwork, and video hints into SongModel. Detection classifies Guitar Hero, Rock Band, YARG, or unknown material; validation returns structured failures rather than letting an exporter discover corruption halfway through a batch.
One chart model, several encodings
The chart layer parses text .chart, MIDI, SNG, and Guitar Hero QB data. SNG can be read as a legacy stream or package, emitted from chart or MIDI, and converted back to chart or RB3-compatible MIDI. Notes retain tick position, lane, duration, instrument and difficulty; tempo and time signatures remain first-class events. Exporters then materialise canonical names such as notes.sng, notes.chart, or notes.mid with the required song metadata and audio.
The chart editor operates on the same model for note, BPM, and time-signature changes, undo/redo, beat lines, waveform cache, and audio preview. Auto-charting uses FFT analysis, spectral-flux onset detection, and BPM estimation to create an editable starting point. Audio analysis can find likely events. It cannot know whether the chart is fun.
Workflow code belongs below the UI
RockHero.Ripper.Core owns scanning, extraction, parsing, conversion, validation, exporters, config, and logging. The Avalonia application adds MVVM navigation, pickers, progress, queueing, preview, library search, and diagnostics. The CLI is intentionally thin and reuses Core for detection and export-profile listing. Long operations accept cancellation and report progress through validation, export, and completion stages.
Hostile filesystems count
A central temp manager creates a session root, tracks work folders across extractors and converters, recreates the root if needed, and owns disposal. Cleanup chooses a simple delete for shallow trees or a depth-limited walk for hostile nesting. Parsers validate bounds, large disc-image files stream in chunks, and path-length and IO failures become controlled results.