# dalouuu/mutech architecture

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

- Interactive diagram: https://gitdiagram.com/dalouuu/mutech
- Repository: https://github.com/dalouuu/mutech

## Overview

MuTech combines two product workflows: an SLR research pipeline and a choir pitch-tracking studio. The SLR workflow ingests and screens literature, mines text, models topics, analyzes networks and temporal change, and supports manuscript synthesis. The studio accepts choir audio, runs multif0 inference and intonation analysis, and presents results with audio playback and pitch visualization. Source excerpts substantiate key backend and UI calls; SLR phase capabilities and some orchestration links rely on README documentation, so unsampled internals are represented at subsystem level.

Main entry points: [`mvp/backend/app.py`](https://github.com/dalouuu/mutech/blob/main/mvp/backend/app.py) (MIR API), [`mvp/backend/mf0_service.py`](https://github.com/dalouuu/mutech/blob/main/mvp/backend/mf0_service.py) (multif0 Inference), [`slr/src/pipeline_engine.py`](https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py) (PRISMA Screening), [`mvp/frontend/src/main.ts`](https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/main.ts) (Studio Browser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_research["SLR Research"]
  node_raw["Literature Exports"]
  node_screening["PRISMA Screening<br/>[pipeline_engine.py]"]
  node_textmining["Text Mining<br/>[pipeline_engine.py]"]
  node_topics["Topic Modeling<br/>[pipeline_engine.py]"]
  node_network["Network Analysis<br/>[pipeline_engine.py]"]
  node_researchoutputs["Research Outputs"]
  node_manuscript["Manuscript Synthesis"]
  node_slrcli["Pipeline CLI<br/>[run_pipeline.py]"]
  node_slrui["Pipeline Dashboard"]
end

subgraph group_studio["Choir Studio"]
  node_audio["Audio Upload<br/>[audio_processor.py]"]
  node_inference["multif0 Inference<br/>[mf0_service.py]"]
  node_dsp["Pitch DSP<br/>[dsp_utils.py]"]
  node_tracking["Voice Tracking<br/>[contour_tracker.py]"]
  node_analytics["Intonation Analytics<br/>[analytics.py]"]
  node_jobs["Async Jobs<br/>[job_manager.py]"]
  node_api["MIR API<br/>[app.py]"]
  node_exports["MIDI Export<br/>[midi_exporter.py]"]
  node_transcription["Pitch Results"]
end

subgraph group_web["Studio Interface"]
  node_browser["Studio Browser<br/>[main.ts]"]
  node_clientapi["API Client<br/>[api.ts]"]
  node_chart["Pitch Visualization<br/>[plot.ts]"]
  node_music["Music Helpers<br/>[music.ts]"]
end

node_researcher(("Researcher"))
node_singer(("Choir User"))

node_researcher -->|"runs phases"| node_slrcli
node_researcher -->|"runs phases"| node_slrui
node_slrcli -->|"dispatches"| node_screening
node_slrui -->|"runs"| node_screening
node_raw -->|"provides records"| node_screening
node_screening -->|"precedes"| node_textmining
node_textmining -->|"precedes"| node_topics
node_topics -->|"precedes"| node_network
node_network -->|"writes results"| node_researchoutputs
node_network -->|"supports synthesis"| node_manuscript
node_singer -->|"selects audio"| node_browser
node_browser -->|"requests transcription"| node_clientapi
node_clientapi -->|"posts audio"| node_api
node_api -->|"decodes and conditions"| node_audio
node_api -->|"requests inference"| node_inference
node_inference -->|"uses preprocessing"| node_audio
node_inference -->|"refines pitches"| node_dsp
node_inference -->|"links contours"| node_tracking
node_api -->|"analyzes results"| node_analytics
node_analytics -->|"uses pitch utilities"| node_dsp
node_api -->|"manages async work"| node_jobs
node_api -->|"creates MIDI"| node_exports
node_api -->|"returns analysis"| node_transcription
node_clientapi -->|"receives results"| node_transcription
node_browser -->|"renders pitch chart"| node_chart
node_chart -->|"formats notes"| node_music

click node_raw "https://github.com/dalouuu/mutech/tree/main/slr/data/01_raw"
click node_screening "https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py"
click node_textmining "https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py"
click node_topics "https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py"
click node_network "https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py"
click node_researchoutputs "https://github.com/dalouuu/mutech/tree/main/slr/outputs"
click node_manuscript "https://github.com/dalouuu/mutech/tree/main/slr/manuscript"
click node_slrcli "https://github.com/dalouuu/mutech/blob/main/slr/run_pipeline.py"
click node_slrui "https://github.com/dalouuu/mutech/blob/main/slr/pipeline_ui_server.py"
click node_audio "https://github.com/dalouuu/mutech/blob/main/mvp/backend/audio_processor.py"
click node_inference "https://github.com/dalouuu/mutech/blob/main/mvp/backend/mf0_service.py"
click node_dsp "https://github.com/dalouuu/mutech/blob/main/mvp/backend/dsp_utils.py"
click node_tracking "https://github.com/dalouuu/mutech/blob/main/mvp/backend/contour_tracker.py"
click node_analytics "https://github.com/dalouuu/mutech/blob/main/mvp/backend/analytics.py"
click node_jobs "https://github.com/dalouuu/mutech/blob/main/mvp/backend/job_manager.py"
click node_api "https://github.com/dalouuu/mutech/blob/main/mvp/backend/app.py"
click node_exports "https://github.com/dalouuu/mutech/blob/main/mvp/backend/midi_exporter.py"
click node_browser "https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/main.ts"
click node_clientapi "https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/api.ts"
click node_chart "https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/plot.ts"
click node_music "https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/music.ts"

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_raw,node_screening,node_textmining,node_topics,node_network,node_researchoutputs,node_manuscript,node_slrcli,node_slrui,node_singer toneBlue
class node_audio,node_inference,node_dsp,node_tracking,node_analytics,node_jobs,node_api,node_exports,node_transcription toneAmber
class node_browser,node_clientapi,node_chart,node_music toneMint
class node_researcher toneIndigo
```

## Components

### SLR Research

- [Literature Exports](https://github.com/dalouuu/mutech/tree/main/slr/data/01_raw): `slr/data/01_raw`
- [PRISMA Screening](https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py): `slr/src/pipeline_engine.py`
- [Text Mining](https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py): `slr/src/pipeline_engine.py`
- [Topic Modeling](https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py): `slr/src/pipeline_engine.py`
- [Network Analysis](https://github.com/dalouuu/mutech/blob/main/slr/src/pipeline_engine.py): `slr/src/pipeline_engine.py`
- [Research Outputs](https://github.com/dalouuu/mutech/tree/main/slr/outputs): `slr/outputs`
- [Manuscript Synthesis](https://github.com/dalouuu/mutech/tree/main/slr/manuscript): `slr/manuscript`
- [Pipeline CLI](https://github.com/dalouuu/mutech/blob/main/slr/run_pipeline.py): `slr/run_pipeline.py`
- [Pipeline Dashboard](https://github.com/dalouuu/mutech/blob/main/slr/pipeline_ui_server.py): `slr/pipeline_ui_server.py`

### Choir Studio

- [Audio Upload](https://github.com/dalouuu/mutech/blob/main/mvp/backend/audio_processor.py): `mvp/backend/audio_processor.py`
- [multif0 Inference](https://github.com/dalouuu/mutech/blob/main/mvp/backend/mf0_service.py): `mvp/backend/mf0_service.py`
- [Pitch DSP](https://github.com/dalouuu/mutech/blob/main/mvp/backend/dsp_utils.py): `mvp/backend/dsp_utils.py`
- [Voice Tracking](https://github.com/dalouuu/mutech/blob/main/mvp/backend/contour_tracker.py): `mvp/backend/contour_tracker.py`
- [Intonation Analytics](https://github.com/dalouuu/mutech/blob/main/mvp/backend/analytics.py): `mvp/backend/analytics.py`
- [Async Jobs](https://github.com/dalouuu/mutech/blob/main/mvp/backend/job_manager.py): `mvp/backend/job_manager.py`
- [MIR API](https://github.com/dalouuu/mutech/blob/main/mvp/backend/app.py): `mvp/backend/app.py`
- [MIDI Export](https://github.com/dalouuu/mutech/blob/main/mvp/backend/midi_exporter.py): `mvp/backend/midi_exporter.py`
- **Pitch Results**

### Studio Interface

- [Studio Browser](https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/main.ts): `mvp/frontend/src/main.ts`
- [API Client](https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/api.ts): `mvp/frontend/src/api.ts`
- [Pitch Visualization](https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/plot.ts): `mvp/frontend/src/plot.ts`
- [Music Helpers](https://github.com/dalouuu/mutech/blob/main/mvp/frontend/src/music.ts): `mvp/frontend/src/music.ts`

### Other components

- **Researcher**
- **Choir User**

## Connections

- Researcher → Pipeline CLI: runs phases (evidence: `README.md`)
- Researcher → Pipeline Dashboard: runs phases (evidence: `README.md`)
- Pipeline CLI → PRISMA Screening: dispatches (evidence: `README.md`)
- Pipeline Dashboard → PRISMA Screening: runs (evidence: `slr/pipeline_ui_server.py`)
- Literature Exports → PRISMA Screening: provides records (evidence: `slr/src/pipeline_engine.py`)
- PRISMA Screening → Text Mining: precedes (evidence: `README.md`)
- Text Mining → Topic Modeling: precedes (evidence: `README.md`)
- Topic Modeling → Network Analysis: precedes (evidence: `README.md`)
- Network Analysis → Research Outputs: writes results (evidence: `slr/src/pipeline_engine.py`)
- Network Analysis → Manuscript Synthesis: supports synthesis (evidence: `README.md`)
- Choir User → Studio Browser: selects audio (evidence: `README.md`)
- Studio Browser → API Client: requests transcription (evidence: `mvp/frontend/src/main.ts`)
- API Client → MIR API: posts audio (evidence: `README.md`)
- MIR API → Audio Upload: decodes and conditions (evidence: `mvp/backend/app.py`)
- MIR API → multif0 Inference: requests inference (evidence: `mvp/backend/app.py`)
- multif0 Inference → Audio Upload: uses preprocessing (evidence: `mvp/backend/mf0_service.py`)
- multif0 Inference → Pitch DSP: refines pitches (evidence: `mvp/backend/mf0_service.py`)
- multif0 Inference → Voice Tracking: links contours (evidence: `mvp/backend/mf0_service.py`)
- MIR API → Intonation Analytics: analyzes results (evidence: `mvp/backend/app.py`)
- Intonation Analytics → Pitch DSP: uses pitch utilities (evidence: `mvp/backend/analytics.py`)
- MIR API → Async Jobs: manages async work (evidence: `mvp/backend/app.py`)
- MIR API → MIDI Export: creates MIDI (evidence: `mvp/backend/app.py`)
- MIR API → Pitch Results: returns analysis (evidence: `mvp/backend/app.py`)
- API Client → Pitch Results: receives results (evidence: `mvp/frontend/src/api.ts`)
- Studio Browser → Pitch Visualization: renders pitch chart (evidence: `mvp/frontend/src/main.ts`)
- Pitch Visualization → Music Helpers: formats notes (evidence: `mvp/frontend/src/plot.ts`)
