# satiricalguru/rvc-voicechanger architecture

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

- Interactive diagram: https://gitdiagram.com/satiricalguru/rvc-voicechanger
- Repository: https://github.com/satiricalguru/rvc-voicechanger

## Overview

RVC Voicechanger is a desktop voice-conversion application: users select or import a voice, configure audio and effects, and process microphone audio through a local backend for playback. The documented Electron, Next.js, and FastAPI architecture connects the interface to model management and the real-time audio engine; the RVC pipeline supplies AI inference. The README also describes image scraping, soundboard, themes, and localization. A separate Swift native app is represented as a device-selection prototype; its audio engine explicitly does not yet process live audio. Backend links follow excerpts or README documentation; unsampled feature links are omitted where wiring is not shown.

Main entry points: [`main.py`](https://github.com/satiricalguru/rvc-voicechanger/blob/main/main.py) (FastAPI server), [`ui/lib/voice-changer/backend-api.ts`](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/lib/voice-changer/backend-api.ts) (Backend API client), [`ui/app/page.tsx`](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/app/page.tsx) (Voice changer UI), [`app/backend/engine.py`](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/engine.py) (Audio engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop and UI"]
  node_electron["Electron shell<br/>[main.js]"]
  node_renderer["Voice changer UI<br/>[page.tsx]"]
  node_api_client["Backend API client<br/>[backend-api.ts]"]
  node_voice_controls["Voice and settings<br/>[settings-view.tsx]"]
  node_voice_grid["Voice grid<br/>[voice-grid.tsx]"]
  node_model_import["Model import<br/>[upload-dialog.tsx]"]
  node_soundboard["Soundboard UI"]
  node_localization["Translations<br/>[translations.ts]"]
end

subgraph group_api["Backend services"]
  node_server["FastAPI server<br/>[main.py]"]
  node_config[("Configuration<br/>[config_manager.py]")]
  node_models["Model manager<br/>[models_manager.py]"]
  node_image_services["Image search services"]
  node_soundboard_store[("Soundboard storage<br/>[main.py]")]
end

subgraph group_audio["Audio conversion"]
  node_engine["Audio engine<br/>[engine.py]"]
  node_effects["DSP effects<br/>[engine.py]"]
  node_pipeline["RVC pipeline<br/>[rvc_pipeline.py]"]
  node_inference["Inference pipeline<br/>[pipeline.py]"]
end

subgraph group_rvc["RVC model architecture"]
  node_synthesizer["Synthesizer models<br/>[synthesizers.py]"]
  node_generators["Vocoder generators"]
end

subgraph group_native["Native prototype"]
  node_native_app["Native app model"]
  node_device_service["Audio device service"]
  node_device_descriptor["Device descriptor"]
  node_native_engine["Native engine shell"]
end

node_user(("User"))

node_user -->|"uses"| node_renderer
node_electron -->|"hosts"| node_renderer
node_electron -->|"launches"| node_server
node_renderer -.->|"uses"| node_api_client
node_api_client -->|"REST and WebSocket"| node_server
node_voice_controls -.->|"configures"| node_api_client
node_voice_grid -.->|"requests voices"| node_api_client
node_model_import -.->|"imports models"| node_api_client
node_soundboard -.->|"requests sounds"| node_api_client
node_renderer -.->|"supports languages"| node_localization
node_server -->|"reads and updates"| node_config
node_server -->|"lists and imports"| node_models
node_models -->|"searches images"| node_image_services
node_server -->|"controls audio"| node_engine
node_server -.->|"writes sounds"| node_soundboard_store
node_engine -->|"infers chunks"| node_pipeline
node_engine -.->|"applies DSP"| node_effects
node_pipeline -->|"uses model"| node_synthesizer
node_synthesizer -->|"selects vocoder"| node_generators
node_native_app -->|"enumerates devices"| node_device_service
node_native_app -->|"starts and stops"| node_native_engine
node_device_service -->|"creates descriptors"| node_device_descriptor
node_native_engine -->|"uses device IDs"| node_device_descriptor

click node_electron "https://github.com/satiricalguru/rvc-voicechanger/blob/main/electron/main.js"
click node_renderer "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/app/page.tsx"
click node_api_client "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/lib/voice-changer/backend-api.ts"
click node_voice_controls "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/settings-view.tsx"
click node_voice_grid "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/voice-grid.tsx"
click node_model_import "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/upload-dialog.tsx"
click node_soundboard "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/soundboard-view.tsx"
click node_localization "https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/lib/voice-changer/translations.ts"
click node_server "https://github.com/satiricalguru/rvc-voicechanger/blob/main/main.py"
click node_config "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/config_manager.py"
click node_models "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/models_manager.py"
click node_soundboard_store "https://github.com/satiricalguru/rvc-voicechanger/blob/main/main.py"
click node_engine "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/engine.py"
click node_effects "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/engine.py"
click node_pipeline "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc_pipeline.py"
click node_inference "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc/infer/pipeline.py"
click node_synthesizer "https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc/lib/algorithm/synthesizers.py"
click node_generators "https://github.com/satiricalguru/rvc-voicechanger/tree/main/app/backend/rvc/lib/algorithm/generators"
click node_native_app "https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/App/VoiceChangerAppModel.swift"
click node_device_service "https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioDeviceService.swift"
click node_device_descriptor "https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Models/AudioDeviceDescriptor.swift"
click node_native_engine "https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioEngineController.swift"

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_electron,node_renderer,node_api_client,node_voice_controls,node_voice_grid,node_model_import,node_soundboard,node_localization,node_user toneBlue
class node_server,node_config,node_models,node_image_services,node_soundboard_store toneAmber
class node_engine,node_effects,node_pipeline,node_inference toneMint
class node_synthesizer,node_generators toneRose
class node_native_app,node_device_service,node_device_descriptor,node_native_engine toneIndigo
```

## Components

### Desktop and UI

- [Electron shell](https://github.com/satiricalguru/rvc-voicechanger/blob/main/electron/main.js): `electron/main.js`
- [Voice changer UI](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/app/page.tsx): `ui/app/page.tsx`
- [Backend API client](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/lib/voice-changer/backend-api.ts): `ui/lib/voice-changer/backend-api.ts`
- [Voice and settings](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/settings-view.tsx): `ui/components/voice-changer/settings-view.tsx`
- [Voice grid](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/voice-grid.tsx): `ui/components/voice-changer/voice-grid.tsx`
- [Model import](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/upload-dialog.tsx): `ui/components/voice-changer/upload-dialog.tsx`
- [Soundboard UI](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/components/voice-changer/soundboard-view.tsx): `ui/components/voice-changer/soundboard-view.tsx`
- [Translations](https://github.com/satiricalguru/rvc-voicechanger/blob/main/ui/lib/voice-changer/translations.ts): `ui/lib/voice-changer/translations.ts`

### Backend services

- [FastAPI server](https://github.com/satiricalguru/rvc-voicechanger/blob/main/main.py): `main.py`
- [Configuration](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/config_manager.py): `app/backend/config_manager.py`
- [Model manager](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/models_manager.py): `app/backend/models_manager.py`
- **Image search services**
- [Soundboard storage](https://github.com/satiricalguru/rvc-voicechanger/blob/main/main.py): `main.py`

### Audio conversion

- [Audio engine](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/engine.py): `app/backend/engine.py`
- [DSP effects](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/engine.py): `app/backend/engine.py`
- [RVC pipeline](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc_pipeline.py): `app/backend/rvc_pipeline.py`
- [Inference pipeline](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc/infer/pipeline.py): `app/backend/rvc/infer/pipeline.py`

### RVC model architecture

- [Synthesizer models](https://github.com/satiricalguru/rvc-voicechanger/blob/main/app/backend/rvc/lib/algorithm/synthesizers.py): `app/backend/rvc/lib/algorithm/synthesizers.py`
- [Vocoder generators](https://github.com/satiricalguru/rvc-voicechanger/tree/main/app/backend/rvc/lib/algorithm/generators): `app/backend/rvc/lib/algorithm/generators`

### Native prototype

- [Native app model](https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/App/VoiceChangerAppModel.swift): `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/App/VoiceChangerAppModel.swift`
- [Audio device service](https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioDeviceService.swift): `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioDeviceService.swift`
- [Device descriptor](https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Models/AudioDeviceDescriptor.swift): `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Models/AudioDeviceDescriptor.swift`
- [Native engine shell](https://github.com/satiricalguru/rvc-voicechanger/blob/main/native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioEngineController.swift): `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioEngineController.swift`

### Other components

- **User**

## Connections

- User → Voice changer UI: uses
- Electron shell → Voice changer UI: hosts
- Electron shell → FastAPI server: launches
- Voice changer UI → Backend API client: uses
- Backend API client → FastAPI server: REST and WebSocket
- Voice and settings → Backend API client: configures
- Voice grid → Backend API client: requests voices
- Model import → Backend API client: imports models
- Soundboard UI → Backend API client: requests sounds
- Voice changer UI → Translations: supports languages
- FastAPI server → Configuration: reads and updates (evidence: `main.py`)
- FastAPI server → Model manager: lists and imports (evidence: `main.py`)
- Model manager → Image search services: searches images (evidence: `app/backend/models_manager.py`)
- FastAPI server → Audio engine: controls audio (evidence: `main.py`)
- FastAPI server → Soundboard storage: writes sounds (evidence: `main.py`)
- Audio engine → RVC pipeline: infers chunks (evidence: `app/backend/engine.py`)
- Audio engine → DSP effects: applies DSP (evidence: `app/backend/engine.py`)
- RVC pipeline → Synthesizer models: uses model (evidence: `app/backend/rvc_pipeline.py`)
- Synthesizer models → Vocoder generators: selects vocoder (evidence: `app/backend/rvc/lib/algorithm/synthesizers.py`)
- Native app model → Audio device service: enumerates devices (evidence: `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/App/VoiceChangerAppModel.swift`)
- Native app model → Native engine shell: starts and stops (evidence: `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/App/VoiceChangerAppModel.swift`)
- Audio device service → Device descriptor: creates descriptors (evidence: `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioDeviceService.swift`)
- Native engine shell → Device descriptor: uses device IDs (evidence: `native/AiVoiceChangerNative/Sources/AiVoiceChangerNative/Audio/AudioEngineController.swift`)
